Repository navigation
Conversation
…tors (#1067) (#1068) * fix(a11y): expose the selected state of leaderboard and compare selectors (#1067) The category switchers used tab roles without panels, arrow keys or a roving tab stop, and the leaderboard's criterion, persona and price pills showed the selection only by colour. Each selector is now a named button group with aria-pressed, and the customize button gets aria-expanded and aria-controls for its weight panel. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(a11y): name custom leaderboard weights on the customize button (#1067) Custom weights select no persona pill and are shown only by colouring the customize button; its name now says so too, so a screen reader gets the same cue. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: JOY <anh@metados.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The stacked bar was a plain div with an aria-label, which no role supports (axe aria-prohibited-attr). Its percentages are already text in the badges above, so it is aria-hidden like the other score bars, and the unused authenticityProgressAria string is removed. Co-authored-by: JOY <anh@metados.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
* docs: record E2E and gitleaks as required checks (#1073) The dev-main-light ruleset now requires E2E (Playwright) as well as Typecheck & Build Monorepo and Secret scan (gitleaks) on dev and main. Update AGENTS.md, RELEASE.md and the roadmap checkbox to match. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: list every required check for feature PRs (#1073) Review P3: RELEASE.md step 1 still named only Typecheck & Build Monorepo. PRs into dev also need E2E, gitleaks and task-claim. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: JOY <anh@metados.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…1069) (#1070) * fix(a11y): expose the pressed choice of pill groups across the site (#1069) Product price history (store, range), the value calculator's months, compare weight presets, the deals category row, the merchant platform and review-risk filters and the API playground's presets and code language showed the selection only by colour. Each is now a named group with aria-pressed buttons; the merchants Official Mall toggle gets aria-pressed and the compare sliders toggle aria-expanded. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(a11y): name compare custom weights and the deals persona group (#1069) Fresh-context review of #1070: - Compare custom weights were shown only by colouring the sliders toggle; its name now says so (new compare.customWeightsActive), and it points at the slider panel with aria-controls, as on the leaderboard (#1067). - The developers click test retries until hydration handles the click. - The deals persona pills, already aria-pressed, get a named group. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: JOY <anh@metados.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The catalog q and brands inputs, the catalog sidebar keyword input and the /deals quick search were named only by their placeholder. Associate the visible captions with <label htmlFor>, point the sidebar input at its heading and give the deals search an aria-label. Co-authored-by: JOY <anh@metados.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
The navbar renders the locale switcher twice, so the fixed flag-en-s and flag-en-t clipPath ids were duplicated on every English page. Derive them from useId per instance. Co-authored-by: JOY <anh@metados.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
If your organization's extra usage balance is empty, an organization admin can add extra usage credits at claude.ai/admin-settings/usage. If its monthly spend limit was reached, an admin can raise it on the same page. If neither applies, contact Anthropic support.
Once extra usage is available, someone with write access to this repository can comment @claude review on this pull request to trigger a review.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the
|
Promotes
devtomain:No
supabase/changes.🤖 Generated with Claude Code
📌 TL;DR
This PR significantly enhances accessibility (WCAG compliance) by replacing
tablistroles withgroup/aria-pressedpatterns, adding missing labels to form inputs, and fixing duplicate SVG IDs. It also updates CI/CD documentation to reflect new required checks (E2E,Secret scan) and adds comprehensive Playwright E2E tests to enforce these accessibility standards.🎯 Type of Change
🔍 Changes Walkthrough
AGENTS.mdE2E (Playwright)andSecret scan (gitleaks)as required checks for merging.Docs/Resources/RELEASE.mdDocs/Resources/ROADMAP.mdapps/web/e2e/input-labels.spec.tsapps/web/e2e/leaderboard.spec.tsrole="group"andaria-pressedinstead oftablist/tab.apps/web/e2e/pill-group-state.spec.tsapps/web/e2e/review-bars.spec.tsapps/web/e2e/selector-state.spec.tsapps/web/e2e/touch-targets.spec.tsapps/web/e2e/unique-ids.spec.tsapps/web/locales/*.jsonpriceSegmentAria,platformFilterAria, etc.) and removed obsoleteauthenticityProgressAria.apps/web/src/app/[locale]/components/list-sidebar-one.tsxaria-labelledbyto the keyword search input, linking it to the visible heading.apps/web/src/app/[locale]/smartphones/page.tsx<span>captions to<label>elements withhtmlForfor search and brand inputs.apps/web/src/app/style/scss/_custom.scssmin-height: 24pxto the deal-radar link to meet WCAG 2.2 target size requirements.apps/web/src/components/compare/CompareWorkspace.tsxrole="tablist"torole="group"witharia-pressedbuttons.apps/web/src/components/compare/VersusInteractiveScoreboard.tsxrole="group",aria-pressed,aria-expanded, andaria-controlsto persona and slider controls.apps/web/src/components/deals/DealFinderWorkspace.tsxrole="group"andaria-pressedto category and persona filters; addedaria-labelto search input.apps/web/src/components/developers/ApiPlaygroundClient.tsxrole="group"andaria-pressedto preset selectors and code snippet mode toggles.apps/web/src/components/elementary/LocaleSwitcher.tsxFlagENcomponent to useuseId()for SVG clipPath IDs, preventing duplicate ID conflicts.apps/web/src/components/leaderboard/LeaderboardExplorer.tsxrole="group"andaria-pressed.apps/web/src/components/leaderboard/ProductValueCalculator.tsxaria-pressedto month selection buttons.apps/web/src/components/merchants/MerchantDirectoryExplorer.tsxrole="group"and addedaria-pressedto all filter buttons.apps/web/src/components/price-history/PriceHistorySection.tsxrole="group"andaria-pressedto merchant filter buttons.📊 Architectural Flow
flowchart TD subgraph "Accessibility Refactor" A[Components] -->|Replace tablist with group| B[ARIA Patterns] B -->|aria-pressed| C[Single-Select State] B -->|aria-labelledby/label| D[Form Inputs] E[LocaleSwitcher] -->|useId| F[Unique SVG IDs] end subgraph "CI/CD & Docs" G[AGENTS.md / RELEASE.md] -->|Update Required Checks| H[CI Pipeline] H -->|Enforce| I[E2E Playwright] H -->|Enforce| J[Secret Scan] end subgraph "E2E Validation" I -->|Test| K[input-labels.spec.ts] I -->|Test| L[pill-group-state.spec.ts] I -->|Test| M[unique-ids.spec.ts] I -->|Test| N[selector-state.spec.ts] end A -.->|Validated by| I F -.->|Validated by| M