Command palette listbox and combobox ARIA is invalid when open
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 3/5
- 見積もり時間
- 1〜2日
- 初心者へのやさしさ
- 70/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- javascript
調査の方向性
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.
索引モデルが issue の本文から書いたものです。
説明
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.
- 主要言語
- PHP
- スター
- 4.9k
- フォーク
- 647
- 平均マージ
- 1日 7時間
- マージ済み PR(30日)
- 103
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
statamic/cms のほかの issue
-
preferences
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
メンテナーはふだん 1 日以内に返信
-
assets
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
statamic/cms#15567 · コメント 1 件 · 担当者 1 名 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
accessibility
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
メンテナーはふだん 1 日以内に返信
-
antlers
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
メンテナーはふだん 1 日以内に返信
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
メンテナーはふだん 1 日以内に返信
-
Do not throw `WordPress.Security.EscapeOutput.OutputNotEscaped` on `apply_shortcodes()`対応中かも @tbradsha が今日担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
fe: spell out "Auto increment" in the table editor, "AI" reads as artificial intelligence todayオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
landsman/adminer-desktop#120 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
components-web-app/docs#227 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 85/100