feat(app-switcher): add keyboard navigation (#DS-4246)#1770
Conversation
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
Visit the preview URL for this PR (updated for commit ede7118): https://koobiq-next--prs-1770-1yix5kei.web.app (expires Sun, 26 Jul 2026 12:07:43 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: c9e37e518febda70d0317d07e8ceb35ac43c534c |
🚨 E2E tests failedReview the report for details. 💡 Comment |
🚨 E2E tests failedReview the report for details. 💡 Comment |
|
/approve-snapshots |
|
🔄 Updating snapshots. |
|
🚨 Failed to update snapshots. |
There was a problem hiding this comment.
Pull request overview
This PR adds comprehensive keyboard navigation and ARIA semantics to the KbqAppSwitcherComponent, making the switcher usable as a roving-focus menu (including grouped apps and platform flyouts) with both unit and Playwright coverage.
Changes:
- Introduced a
FocusKeyManager-based navigation model with Home/End, typeahead, group expand/collapse, and input-to-list focus handoff. - Added ARIA roles/attributes (
role="menu",role="menuitem",aria-expanded,aria-haspopup) and updated focus-ring rendering for keyboard focus. - Added Jest and Playwright tests covering keyboard navigation, focus behavior, and ARIA exposure; updated docs (EN/RU) accordingly.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tools/public_api_guard/components/app-switcher.api.md | Public API snapshot updated for new lifecycle + key manager members. |
| tools/cspell-locales/ru.json | Adds RU dictionary entry used by new docs/text. |
| packages/components/app-switcher/app-switcher.ts | Implements roving-focus keyboard navigation, focus tracking, RTL handling, and cleanup. |
| packages/components/app-switcher/app-switcher.html | Adds role="menu" container, nested-alias class binding, and flyout ARIA/focus syncing. |
| packages/components/app-switcher/kbq-app-switcher-list-item.ts | Marks list rows as menuitem, adds tabindex and group aria-expanded. |
| packages/components/app-switcher/kbq-app-switcher-list-item.scss | Ensures a visible keyboard focus ring via inset box-shadow. |
| packages/components/app-switcher/app-switcher-dropdown-site.ts | Marks site rows as menuitem, adds tabindex and aria-haspopup when nested. |
| packages/components/app-switcher/app-switcher-dropdown-app.ts | Marks flyout app rows as menuitem, adds tabindex and aria-haspopup when nested. |
| packages/components/app-switcher/app-switcher.spec.ts | Adds unit tests for keyboard navigation, grouping, RTL inversion, and ARIA roles. |
| packages/components/app-switcher/e2e.playwright-spec.ts | Adds Playwright keyboard navigation coverage and focus ring assertion. |
| packages/components/app-switcher/app-switcher.en.md | Documents keyboard navigation behavior in English. |
| packages/components/app-switcher/app-switcher.ru.md | Documents keyboard navigation behavior in Russian. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
No description provided.