Name the FAB menu, scroll it, and let its items leave

Its trigger holds two aria-hidden icons and wrote aria-label only when a caller
passed `label`, so an unnamed button was the default; `label` now falls back to
"Toggle menu" and is always written. The list had no ceiling, so six items ran
off a landscape phone — it now scrolls under the FAB, which stays put — and its
items rose into place but vanished on close, because the popover took its
display away before they could move. Plan step 18, actions.md ACT-21, ACT-32,
ACT-33.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Qwx5USif3wFFmxtHg5U1g9
This commit is contained in:
Andreas Reinhold
2026-09-14 06:07:22 +02:00
co-authored by Claude Opus 5
parent deb7ff8ab5
commit eac7f6a1de
4 changed files with 49 additions and 12 deletions
+9 -1
View File
@@ -70,5 +70,13 @@ it('opens a FAB menu of end-aligned actions above it', function () {
->toContain('role="menuitem"')
->toContain('wire:click="upload"')
->toContain('h-14')
->toContain('Upload files');
->toContain('Upload files')
->toContain('max-h-[calc(100dvh-8rem)] overflow-y-auto')
->toContain('data-fab-menu');
});
it('names the FAB menu even when the caller forgets to', function () {
expect((string) $this->blade('<x-fab-menu />'))
->toContain('aria-label="Toggle menu"')
->and(substr_count((string) $this->blade('<x-fab-menu />'), 'aria-label="Toggle menu"'))->toBe(2);
});