{{-- An M3 Expressive FAB menu: a FAB that opens into a short list of related actions.
Two to six items. The FAB (`icon`, `add` by default, in `color`'s container) turns into a round close button in the colour itself while the list is open above it, end-aligned; the list is a `popover="auto"` menu with the menu keyboard of ``. `label` names the FAB for screen readers. Give the items the same `color`. Like ``'s, the list is keyed for Livewire, so it stays open through a render of the component around it. FabMenuBaselineTokens (androidx Compose Material 3, Apache-2.0): 56px items, 4px apart, 8px above the close button. The FAB's corner and colours morph on the two default springs at once (`state-transition-default`, resources/css/components/actions.css). --}} @props([ 'icon' => 'add', 'label' => null, 'color' => 'primary', 'position' => 'top-end', ]) @php $color = in_array($color, ['primary', 'secondary', 'tertiary'], true) ? $color : 'primary'; $key = \Illuminate\Support\Str::lower(\Illuminate\Support\Str::random(10)); $anchor = "--material-fab-menu-{$key}"; $colours = [ 'primary' => 'bg-primary-container text-on-primary-container aria-expanded:bg-primary aria-expanded:text-on-primary', 'secondary' => 'bg-secondary-container text-on-secondary-container aria-expanded:bg-secondary aria-expanded:text-on-secondary', 'tertiary' => 'bg-tertiary-container text-on-tertiary-container aria-expanded:bg-tertiary aria-expanded:text-on-tertiary', ][$color]; @endphp
class('relative inline-flex') }}>
'material-fab-menu']) }} id="material-fab-menu-{{ $key }}" popover="auto" role="menu" @if ($label) aria-label="{{ $label }}" @endif tabindex="-1" style="position-anchor: {{ $anchor }}" x-on:keydown="navigate($event)" x-on:click="activate($event)" @class([ 'm-0 flex-col gap-1 overflow-visible border-0 bg-transparent p-0 open:flex [inset:auto]', 'mb-2 items-end [position-area:top_span-left]' => $position === 'top-end', 'mb-2 items-start [position-area:top_span-right]' => $position === 'top-start', 'mt-2 items-end [position-area:bottom_span-left]' => $position === 'bottom-end', 'mt-2 items-start [position-area:bottom_span-right]' => $position === 'bottom-start', ]) > {{ $slot }}