Skip to content

Updates AdminTable for keyboard accessibility#18688

Merged
brianjhanson merged 9 commits into6.xfrom
a11y/lupe-random
Apr 13, 2026
Merged

Updates AdminTable for keyboard accessibility#18688
brianjhanson merged 9 commits into6.xfrom
a11y/lupe-random

Conversation

@gcamacho079
Copy link
Copy Markdown
Contributor

Description

Related issues

@gcamacho079 gcamacho079 added the accessibility 👤 features related to accessibility label Apr 10, 2026
@gcamacho079 gcamacho079 requested a review from Copilot April 10, 2026 20:34
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR improves control panel keyboard/screen-reader accessibility by making sortable table headers operable via native buttons (instead of click-only header cells) and by adding missing ARIA labeling to combobox UI.

Changes:

  • Add an accessible table caption + ARIA sort semantics and switch sortable headers to real <button> controls in AdminTable.
  • Introduce ColumnHeaderTitle to wrap sortable header content in a button and provide sort instructions via aria-describedby.
  • Add a required label prop to InputCombobox and wire it to the toggle button’s aria-label; plumb the label through CraftCombobox.

Reviewed changes

Copilot reviewed 10 out of 12 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
resources/js/pages/SettingsSectionsIndexPage.vue Passes a table title into AdminTable for screen-reader caption context.
resources/js/components/form/InputCombobox.vue Adds a label prop and uses it for aria-label on the combobox toggle button.
resources/js/components/form/CraftCombobox.vue Makes label required and forwards it to InputCombobox.
resources/js/components/AdminTable/ColumnHeaderTitle.vue New component: renders sortable column headers as a button.
resources/js/components/AdminTable/AdminTable.vue Adds caption/instructions, aria-sort, and button-based sorting.
resources/build/SettingsSectionsIndexPage.js Built output update reflecting the AdminTable prop changes.
resources/build/SettingsEmailPage.js Built output update reflecting combobox prop changes.
resources/build/InputCombobox.js Built output update reflecting the new required label prop + ARIA wiring.
resources/build/assets/InputCombobox.css Built CSS output (scoped hash changes).
resources/build/assets/cp.css Built CSS output update.
resources/build/assets/AdminTable.css Built CSS output for new header button styling + hover/focus state.
Comments suppressed due to low confidence (1)

resources/js/components/form/InputCombobox.vue:32

  • label was made a required prop, but there are several existing InputCombobox usages in the repo that don't pass it (e.g. resources/js/components/sites/SiteFields.vue:150,202,242,339, resources/js/pages/SettingsSitesIndex.vue:377, and resources/js/composables/useEditableTable.ts:261). As-is, this will cause TypeScript/Vue compile errors. Either update those call sites to pass an appropriate label (preferred for accessibility) or make label optional and provide a safe fallback aria-label for the toggle button when it’s omitted.
  const props = withDefaults(
    defineProps<{
      label: string;
      options?: Array<SelectItem>;
      modelValue?: string;
      requireOptionMatch?: boolean;
      transformModelValue?: (newValue: SelectOption | null) => string;
      class?: HTMLAttributes['class'];
      placeholder?: string;
    }>(),

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread resources/js/components/AdminTable/ColumnHeaderTitle.vue
@brianjhanson brianjhanson merged commit 1eb18d1 into 6.x Apr 13, 2026
16 checks passed
@brianjhanson brianjhanson deleted the a11y/lupe-random branch April 13, 2026 14:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

accessibility 👤 features related to accessibility

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants