Dropdown Menu
Blade:
<div x-data="{
open: false,
toggle() {
if (this.open) {
return this.close()
}
this.$refs.button.focus()
this.open = true
},
close(focusAfter) {
if (!this.open) return
this.open = false
focusAfter && focusAfter.focus()
}
}" x-on:keydown.escape.prevent.stop="close($refs.button)"
x-on:focusin.window="! $refs.panel.contains($event.target) && close()"
x-id="['dropdown-button']" class="relative">
<!-- Button -->
<button x-ref="button" x-on:click="toggle()" :aria-expanded="open"
:aria-controls="$id('dropdown-button')" type="button"
class="flex items-center gap-2 px-5 py-2.5">
<x-icon.ellipsis-horizontal />
</button>
<!-- Panel -->
<div x-ref="panel" x-show="open" x-transition.origin.top.left
x-on:click.outside="close($refs.button)" :id="$id('dropdown-button')"
style="display: none;"
class="absolute -left-20 w-40 rounded-md bg-white shadow-md z-10 border">
<a href="{{ route('products.show', $product->id) }}"
class="flex items-center gap-2 w-full first-of-type:rounded-t-md last-of-type:rounded-b-md px-4 py-2 text-left text-sm hover:bg-gray-50 disabled:text-gray-500">
Details anzeigen
</a>
<a href="{{ route('products.edit', $product->id) }}"
class="flex items-center gap-2 w-full first-of-type:rounded-t-md last-of-type:rounded-b-md px-4 py-2 text-left text-sm hover:bg-gray-50 disabled:text-gray-500">
Produkt bearbeiten
</a>
<a href="#" wire:click="deleteProduct({{ $product->id }})"
wire:confirm="Bist Du sicher, dass Du das Produkt {{ $product->title }} löschen willst?"
class="flex items-center gap-2 w-full first-of-type:rounded-t-md last-of-type:rounded-b-md px-4 py-2 text-left text-sm hover:bg-gray-50 disabled:text-gray-500">
<span class="text-red-600">Produkt löschen</span>
</a>
</div>
</div>