fix: add accessible outcome semantics beyond color - #933
Merged
Conversation
|
@Calebstack is attempting to deploy a commit to the Jagadeesh B's projects Team on Vercel. A member of the Team first needs to authorize it. |
|
@Calebstack Great news! 🎉 Based on an automated assessment of this PR, the linked Wave issue(s) no longer count against your application limits. You can now already apply to more issues while waiting for a review of this PR. Keep up the great work! 🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR adds accessible outcome semantics beyond color to every outcome and status surface in the app. Color is no longer the sole carrier of meaning: each state now resolves to a deterministic text label, a shape-differentiated icon, and the appropriate ARIA role/description, so keyboard, screen-reader, focus, contrast, and semantic behavior hold consistently across events, markets, claims, moderation, and active bets.
Related Issue
Changes
♿ Accessible Outcome Semantics
[ADD]
src/lib/outcomeSemantics.ts{ label, iconVariant, tone, description }; deterministic for valid, invalid, duplicate, and boundary-case inputs.unknownsemantic with a visible text label and a sanitized warn-level log (no user data).[ADD]
src/lib/__tests__/outcomeSemantics.test.ts+src/components/__tests__/accessibleOutcomes.test.tsxjest-axeand@testing-library/user-eventcovering screen-reader labels, focus order, visible focus indicators, and contrast assertions for every status variant.[MODIFY]
components/icons/OutcomeIcons.tsxaria-hidden; stateful icon wrappers require a visible text label oraria-label.[MODIFY]
components/market/StatusBadge.tsx,components/moderation/MarketStatusBadge.tsx,components/claims/ClaimEligibilityStatus.tsxrole="status"added where state changes are announced.[MODIFY]
components/events/events-table.tsx[MODIFY]
components/active-bets/ActiveBetCard.tsxaria-live="polite"for non-intrusive update announcements; win/loss/pending states show text + icon, not only color.Verification Results
Closes #905