fix(a11y): announce auth errors, th scope, <time>, calendar type #475

Merged
nrupard merged 1 commit from fix/MAPPS-409-a11y-wiring into main 2026-08-05 17:48:08 +02:00
Owner

Implements MAPPS-409 (2026-08-04 mokosh-apps UI audit, F23-F26): a11y wiring. 8 files.

F24 - announce app-side auth errors

The login and onboarding error banners (text-red-600 <p>) now carry role="alert", so screen readers announce a failed sign-in / onboarding submit. The portal siblings already had it and are untouched.

F26 - table header column scope

th cells gained scope="col". Because MAPPS-407 migrated the portal-invoice and reports tables to the shared Table kit, the single fix on the shared TableHeader (components/table.rs) covers every shared-Table header app-wide; the shared SelectAllHeader checkbox-column th (components/bulk_actions.rs) got it too. The bespoke weekly-timesheet grid in time.rs (still raw, tracked as MAPPS-415) had all 9 of its raw header cells fixed directly. No other raw th remains in the pages.

F25 - machine-readable relative timestamps

Relative/absolute "updated"/"created" timestamps are now wrapped in <time datetime="<rfc3339>">, the visible text unchanged. In the ticket list the source instant lives at the call site behind the row-component boundary, so it is threaded down as two optional props (updated_iso/updated_title, defaulting to None); the demo/fallback rows pass nothing and stay bare text (not fabricated). The ticket-comment timestamp token was unified from text-subtle to text-muted to match its sibling created-timestamp.

F23 - calendar event type conveyed without color

Event type was signalled by fill color alone. A small appointment_type_label() helper feeds the type into each of the four event-block title attributes ("Meeting - 9:00: Standup"), so type is available to hover and assistive tech. Every block already shows visible text, so no color-only block needed a new text cue.

Verification

Diff-reviewed (no local cargo on this box); the dioxus-html time element + datetime attribute were checked against the dioxus 0.7 docs. All changes are additive, no imports orphaned, no em-dashes. CI runs fmt/clippy(-D warnings)/wasm-build/tests.

#MAPPS-409

Implements MAPPS-409 (2026-08-04 mokosh-apps UI audit, F23-F26): a11y wiring. 8 files. ## F24 - announce app-side auth errors The login and onboarding error banners (`text-red-600` `<p>`) now carry `role="alert"`, so screen readers announce a failed sign-in / onboarding submit. The portal siblings already had it and are untouched. ## F26 - table header column scope `th` cells gained `scope="col"`. Because MAPPS-407 migrated the portal-invoice and reports tables to the shared `Table` kit, the single fix on the shared `TableHeader` (`components/table.rs`) covers every shared-Table header app-wide; the shared `SelectAllHeader` checkbox-column `th` (`components/bulk_actions.rs`) got it too. The bespoke weekly-timesheet grid in `time.rs` (still raw, tracked as MAPPS-415) had all 9 of its raw header cells fixed directly. No other raw `th` remains in the pages. ## F25 - machine-readable relative timestamps Relative/absolute "updated"/"created" timestamps are now wrapped in `<time datetime="<rfc3339>">`, the visible text unchanged. In the ticket list the source instant lives at the call site behind the row-component boundary, so it is threaded down as two optional props (`updated_iso`/`updated_title`, defaulting to `None`); the demo/fallback rows pass nothing and stay bare text (not fabricated). The ticket-comment timestamp token was unified from `text-subtle` to `text-muted` to match its sibling created-timestamp. ## F23 - calendar event type conveyed without color Event type was signalled by fill color alone. A small `appointment_type_label()` helper feeds the type into each of the four event-block `title` attributes ("Meeting - 9:00: Standup"), so type is available to hover and assistive tech. Every block already shows visible text, so no color-only block needed a new text cue. ## Verification Diff-reviewed (no local cargo on this box); the dioxus-html `time` element + `datetime` attribute were checked against the dioxus 0.7 docs. All changes are additive, no imports orphaned, no em-dashes. CI runs fmt/clippy(-D warnings)/wasm-build/tests. #MAPPS-409
fix(a11y): announce auth errors, th scope, <time>, calendar type
All checks were successful
Check / fmt + clippy + tests (pull_request) Successful in 1m21s
Create release / Create release from merged PR (pull_request) Has been skipped
879ca930d7
Implements MAPPS-409 (2026-08-04 UI audit F23-F26). Adds role="alert" to the app-side login/onboarding error banners; adds scope="col" to the shared TableHeader and SelectAllHeader (covering every shared table post-MAPPS-407) and to the nine raw timesheet-grid header cells; wraps the ticket/portal relative timestamps in <time datetime> (threading the source instant into TicketRow as optional props so demo rows stay bare, not fabricated) and unifies the comment-timestamp token to text-muted; and surfaces the calendar event type in each event block's title via a small appointment_type_label helper so type is discernible without color.

#MAPPS-409
nrupard deleted branch fix/MAPPS-409-a11y-wiring 2026-08-05 17:48:08 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
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!475
No description provided.