Command palette listbox and combobox ARIA is invalid when open
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 3/5
- Geschätzter Aufwand
- 1-2 Tage
- Anfängerfreundlichkeit
- 70/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript
- Bereich
- accessibility, frontend
Rechercherichtung
Start with resources/js/components/command-palette/CommandPalette.vue, referenced at v6.31.0, and inspect the combobox, ComboboxContent, dialog, and results viewport. Open the palette and run axe-core to confirm the reported violations. Done means the listbox has valid children and an accessible name, the dialog is modal, the viewport is keyboard-focusable, and the empty aria-controls issue is resolved.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Bug description
The command palette (Cmd/Ctrl+K) gets the hard parts right — role="dialog", focus moved inside, the rest of the page inert, Escape closes — but the combobox and listbox inside it are not valid ARIA. Four Level A violations fire the moment it opens.
axe-core on the open palette:
| Rule | Impact | Detail |
|---|---|---|
aria-required-children |
critical | role="listbox" contains a <footer> |
aria-required-attr |
critical | role="combobox" has no usable aria-controls |
aria-input-field-name |
serious | the listbox has no accessible name |
scrollable-region-focusable |
serious | the results viewport scrolls but cannot take focus |
Offending elements:
<input role="combobox" aria-expanded="true" aria-controls="" aria-autocomplete="list"
placeholder="Search or jump to...">
<div role="listbox" aria-orientation="vertical" aria-multiselectable="false"
id="reka-combobox-content-…" tabindex="-1">
<div class="max-h-[360px] min-h-[360px] overflow-y-auto" data-reka-combobox-viewport role="presentation">
The dialog also has no aria-modal="true":
Because the palette is the primary keyboard navigation affordance in the CP, this is the one place where broken ARIA hurts keyboard-first users most.
WCAG 2.1 SC 4.1.2 Name, Role, Value (Level A). The scrollable region is SC 2.1.1 Keyboard.
How to reproduce
composer create-project statamic/statamic, log in- Press Cmd+K (or Ctrl+K)
- Run axe-core against the page with the palette open, or inspect the elements above
Suggested fix
- Move the
<footer>outsideComboboxContentso therole="listbox"element only contains option/group children, and give the listbox an accessible name. - The
aria-required-attrfailure is the emptyaria-controlsreported in #15400, not a separate defect. Fixing that fixes this too. - Add
aria-modal="true"to the dialog. - Put
tabindex="0"on the scrollable results viewport so keyboard users can scroll it.
Related: the empty aria-controls here is the same defect reported separately for comboboxes and popovers.
Environment
Environment
Laravel Version: 13.30.1
PHP Version: 8.4.23
Composer Version: 2.10.2
Environment: local
Debug Mode: ENABLED
Maintenance Mode: OFF
Timezone: UTC
Locale: en
Cache
Config: NOT CACHED
Events: NOT CACHED
Routes: NOT CACHED
Views: CACHED
Drivers
Broadcasting: log
Cache: file
Database: sqlite
Logs: stack / single
Mail: log
Queue: sync
Session: file
Storage
public/storage: NOT LINKED
Statamic
Addons: 0
License Key: Not set
Sites: 1
Stache Watcher: Enabled (auto)
Static Caching: Disabled
Version: 6.31.0 PRO
Installation
Fresh statamic/statamic site via CLI
Additional details
Found during a WCAG 2.1 AA audit of a vanilla composer create-project statamic/statamic install with no addons and no custom code. Tested with axe-core 4.x on Chromium 153 at 1440x1000, plus manual keyboard traversal. Source references point at v6.31.0.
Correction (see comment below): I originally described the aria-required-children failure as an empty listbox and aria-required-attr as an unnamed missing attribute. Both were imprecise; the table and suggested fixes above have been updated with axe's actual output.
- Vorherrschende Sprache
- PHP
- Sterne
- 4.9k
- Forks
- 647
- Ø Merge
- 1 T. 31 Min.
- Gemergte PRs (30 T.)
- 137
Entwicklungsumgebung
Dieses Projekt bietet weder Dev-Container noch Dockerfile noch Beitragsleitfaden – die Einrichtung liegt bei Ihnen. Beginnen Sie mit der README; die allgemeinen Schritte stehen in unserem Leitfaden für den ersten Beitrag.
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus statamic/cms
-
Passing `null` to `bool_string` modifier returns nothing instead of `false`Evtl. vergeben @shadetheory hat das vor 3 Tagen übernommen. Offenmodifiers
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
statamic/cms#15748 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
accessibility
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 74/100
Maintainer antworten meist innerhalb von 1 Tag
-
antlers
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 66/100
Maintainer antworten meist innerhalb von 1 Tag
-
`please` cannot run app commands from app/Console/Commands on Laravel 13.36+Evtl. vergeben @lazerg hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 35/100
Maintainer antworten meist innerhalb von 1 Tag
-
Command palette doesn’t index non published itemsEvtl. vergeben @lazerg hat das heute übernommen. Offensearch
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 35/100
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
shukiv/jabali-panel#2423 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 67/100
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 79/100
smarty-php/smarty#1220 ·
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
StarCitizenWiki/mediawiki-extensions-EmbedVideo#224 · 1 Kommentar ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 69/100
opnsense/core#11171 · 1 Reaktion ·
Maintainer antworten meist innerhalb von 1 Tag