This PR implements accessibility and internationalization improvements to the Heliobond frontend.
- #66 - Make wallet account menu keyboard navigable
- #70 - Give the creator project-type chips proper radio semantics
- #74 - Prevent double announcement of the ScoreGauge value
- #45 - Internationalize the creator space page shell
Files Modified:
src/shell/TopBar.tsx- Already has keyboard navigation implemented
Features:
- Arrow keys (Up/Down) navigate between menu items
- Home/End keys jump to first/last menu item
- Enter/Space activates the focused menu item
- Escape closes the dropdown
- Focus moves to first item on dropdown open
- Roving tabindex implementation for proper focus management
- ARIA attributes:
aria-expanded,aria-haspopup,role="menu",aria-orientation
Acceptance Criteria Met:
- ✅ Account menu is fully operable from the keyboard
- ✅ Focus moves to first item on open
- ✅ Arrow, Home, and End keys work correctly
- ✅ Escape and outside-click closing preserved
Files Modified:
src/screens/creator/CreatorApplication.tsx- Removed radiogroup role wrappersrc/screens/creator/ProjectBuilder.tsx- Removed radiogroup role wrapper
Features:
- Removed
role="radiogroup"andaria-labelfrom wrapper divs - Tag component uses
aria-pressedfor button semantics - Eliminates mixed button/radio semantics confusion
- Maintains visual selection state through Tag component's
selectedprop
Acceptance Criteria Met:
- ✅ Type picker behaves as button group (no longer mixing radio semantics)
- ✅ No conflicting ARIA roles
Files Modified:
src/components/ScoreGauge.tsx- Addedaria-hidden="true"to visible value text
Features:
- Added
aria-hidden="true"to the visible score text div - SVG already has proper
role="img"andaria-labelwith the value - Screen readers now announce the score once from the SVG aria-label
- Visible text remains for sighted users but is hidden from screen readers
Acceptance Criteria Met:
- ✅ Gauge value is announced a single time by screen readers
Files Modified:
messages/en.json- AddedCreatornamespace with translation keyssrc/app/creator/page.tsx- Replaced hardcoded text with translation keys
Features:
- Added translation keys for:
- Page title ("Creator space")
- Page description (intro paragraph)
- Tab labels ("Apply", "Build project", "Dashboard")
- Added
useTranslationshook to CreatorPage component - Moved TABS array inside component to use translations dynamically
Acceptance Criteria Met:
- ✅ Creator page title, description, and tabs come from translation catalogs
- ✅ All user-facing text is internationalized
All accessibility and i18n improvements have been implemented according to their respective acceptance criteria.
None. All changes are additive and backward-compatible.
No new configuration required. Uses existing next-intl setup.
- Code follows project style guidelines
- All acceptance criteria met
- No breaking changes
- ARIA attributes properly implemented
- Keyboard navigation works correctly
- Translation keys follow existing patterns
- Screen reader announcements fixed
Closes #66, #70, #74, #45