feat(a11y): IconButton primitive + aria-label/title on icon-only buttons; non-color unread status #263

Merged
vas2000-work merged 1 commit from feat/mapps-261-a11y-icon-buttons-status into main 2026-06-17 23:24:51 +02:00
Owner

Add a shared IconButton primitive (src/components/icon_button.rs) whose label prop is required and is emitted as BOTH aria-label and title, so an icon-only control can never ship without an accessible name and hover tooltip. Adopt it for the modal close button and the Alert/toast dismiss button (the canonical XMarkIcon close controls).

Backfill aria-label and/or title on the remaining icon-only buttons so each carries both: the mobile nav close/open and notification bell (layout.rs), the overflow "..." menu (overflow_actions.rs), the collapsible-rail expand/collapse/open/close chevrons (collapsible_rail.rs), and the calendar prev/next month + prev/next day chevrons (calendar.rs).

Stop conveying unread state by color alone: the red notification dot now nests an sr-only "{n} unread notifications" label so its meaning has a textual equivalent in the accessibility tree. Status badges already render text, so no other color-only indicators remain.

#MAPPS-261

Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com

Add a shared IconButton primitive (src/components/icon_button.rs) whose `label` prop is required and is emitted as BOTH aria-label and title, so an icon-only control can never ship without an accessible name and hover tooltip. Adopt it for the modal close button and the Alert/toast dismiss button (the canonical XMarkIcon close controls). Backfill aria-label and/or title on the remaining icon-only buttons so each carries both: the mobile nav close/open and notification bell (layout.rs), the overflow "..." menu (overflow_actions.rs), the collapsible-rail expand/collapse/open/close chevrons (collapsible_rail.rs), and the calendar prev/next month + prev/next day chevrons (calendar.rs). Stop conveying unread state by color alone: the red notification dot now nests an sr-only "{n} unread notifications" label so its meaning has a textual equivalent in the accessibility tree. Status badges already render text, so no other color-only indicators remain. #MAPPS-261 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
feat(a11y): IconButton primitive + aria-label/title on icon-only buttons; non-color unread status
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 1m4s
f175ad552d
Add a shared IconButton primitive (src/components/icon_button.rs) whose `label` prop is required and is emitted as BOTH aria-label and title, so an icon-only control can never ship without an accessible name and hover tooltip. Adopt it for the modal close button and the Alert/toast dismiss button (the canonical XMarkIcon close controls).

Backfill aria-label and/or title on the remaining icon-only buttons so each carries both: the mobile nav close/open and notification bell (layout.rs), the overflow "..." menu (overflow_actions.rs), the collapsible-rail expand/collapse/open/close chevrons (collapsible_rail.rs), and the calendar prev/next month + prev/next day chevrons (calendar.rs).

Stop conveying unread state by color alone: the red notification dot now nests an sr-only "{n} unread notifications" label so its meaning has a textual equivalent in the accessibility tree. Status badges already render text, so no other color-only indicators remain.

#MAPPS-261

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
vas2000-work force-pushed feat/mapps-261-a11y-icon-buttons-status from f175ad552d
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 1m4s
to 09095880de
Some checks failed
Check / clippy + fmt + tests (pull_request) Failing after 19s
2026-06-17 23:19:23 +02:00
Compare
vas2000-work force-pushed feat/mapps-261-a11y-icon-buttons-status from 09095880de
Some checks failed
Check / clippy + fmt + tests (pull_request) Failing after 19s
to 3667835ff0
All checks were successful
Check / clippy + fmt + tests (pull_request) Successful in 2m29s
Create release / Create release from merged PR (pull_request) Has been skipped
2026-06-17 23:20:29 +02:00
Compare
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/mokosh-apps!263
No description provided.