From 1375e8dcbc8f2ed18ed56292a08ea8b9b62fad72 Mon Sep 17 00:00:00 2001 From: Rex Lorenzo Date: Thu, 2 Apr 2026 18:12:44 -0700 Subject: [PATCH 1/3] VPR-104 fix(a11y): ClinicalScheduler, CMS, Computing, CAHFS accessibility (PR 6 of 6) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fix C7: remove invalid aria-controls from SchedulerNavigation route tabs - Fix S10: add keyboard handlers to WeekCell clickable card (tabindex, role, aria-label, @keyup.enter/space) - Fix C4: add useRouteFocus to CMS, ClinicalScheduler, Computing, CAHFS routers - Fix M6: replace color="green"→"positive", color="red-5"→"negative" in CMS - Fix S8: text-grey-7→text-grey-8 on ClinicalSchedulerHome card descriptions - Axe-core verified: zero code-fixable violations on all 4 areas --- VueApp/src/CAHFS/router/index.ts | 3 +++ VueApp/src/CMS/pages/ManageLinkCollections.vue | 12 ++++++------ VueApp/src/CMS/router/index.ts | 3 +++ .../components/SchedulerNavigation.vue | 3 --- VueApp/src/ClinicalScheduler/components/WeekCell.vue | 6 ++++++ .../pages/ClinicalSchedulerHome.vue | 4 ++-- VueApp/src/ClinicalScheduler/router/index.ts | 3 +++ VueApp/src/Computing/router/index.ts | 3 +++ 8 files changed, 26 insertions(+), 11 deletions(-) diff --git a/VueApp/src/CAHFS/router/index.ts b/VueApp/src/CAHFS/router/index.ts index 7a90ba20..8fd42f05 100644 --- a/VueApp/src/CAHFS/router/index.ts +++ b/VueApp/src/CAHFS/router/index.ts @@ -2,6 +2,7 @@ import { createRouter, createWebHistory } from "vue-router" import { routes } from "./routes" import { useRequireLogin } from "@/composables/RequireLogin" import { checkHasOnePermission } from "@/composables/CheckPagePermission" +import { useRouteFocus } from "@/composables/use-route-focus" const baseUrl = import.meta.env.VITE_VIPER_HOME const router = createRouter({ @@ -24,4 +25,6 @@ router.beforeEach(async (to) => { } }) +useRouteFocus(router) + export { router as CAHFSRouter } diff --git a/VueApp/src/CMS/pages/ManageLinkCollections.vue b/VueApp/src/CMS/pages/ManageLinkCollections.vue index 8e05377a..b32863d7 100644 --- a/VueApp/src/CMS/pages/ManageLinkCollections.vue +++ b/VueApp/src/CMS/pages/ManageLinkCollections.vue @@ -21,7 +21,7 @@
@@ -161,7 +161,7 @@

Links in {{ collection?.linkCollection }}

diff --git a/VueApp/src/CMS/router/index.ts b/VueApp/src/CMS/router/index.ts index 7e7068ad..8bbd44b9 100644 --- a/VueApp/src/CMS/router/index.ts +++ b/VueApp/src/CMS/router/index.ts @@ -2,6 +2,7 @@ import { createRouter, createWebHistory } from "vue-router" import { routes } from "./routes" import { useRequireLogin } from "@/composables/RequireLogin" import { checkHasOnePermission } from "@/composables/CheckPagePermission" +import { useRouteFocus } from "@/composables/use-route-focus" const baseUrl = import.meta.env.VITE_VIPER_HOME const router = createRouter({ @@ -24,4 +25,6 @@ router.beforeEach(async (to) => { } }) +useRouteFocus(router) + export { router as cmsRouter } diff --git a/VueApp/src/ClinicalScheduler/components/SchedulerNavigation.vue b/VueApp/src/ClinicalScheduler/components/SchedulerNavigation.vue index f5d7f85a..4564215f 100644 --- a/VueApp/src/ClinicalScheduler/components/SchedulerNavigation.vue +++ b/VueApp/src/ClinicalScheduler/components/SchedulerNavigation.vue @@ -14,7 +14,6 @@ label="Home" to="/ClinicalScheduler/" :exact="true" - :aria-controls="`home-panel`" :id="`home-tab`" role="tab" /> @@ -24,7 +23,6 @@ label="Schedule by Rotation" :to="{ name: 'RotationSchedule' }" :class="rotationTabClass" - :aria-controls="`rotation-panel`" :id="`rotation-tab`" role="tab" /> @@ -34,7 +32,6 @@ :label="permissionsStore.clinicianViewLabel" :to="{ name: 'ClinicianSchedule' }" :class="clinicianTabClass" - :aria-controls="`clinician-panel`" :id="`clinician-tab`" role="tab" /> diff --git a/VueApp/src/ClinicalScheduler/components/WeekCell.vue b/VueApp/src/ClinicalScheduler/components/WeekCell.vue index 989666c3..f49427d5 100644 --- a/VueApp/src/ClinicalScheduler/components/WeekCell.vue +++ b/VueApp/src/ClinicalScheduler/components/WeekCell.vue @@ -2,7 +2,12 @@ import { computed, ref, watch } from "vue" import { useTimeoutFn } from "@vueuse/core" +import { inflect } from "inflection" import { useDateFunctions } from "@/composables/DateFunctions" import { ANIMATIONS } from "../constants/app-constants" diff --git a/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue b/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue index 081e661a..15960282 100644 --- a/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue +++ b/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue @@ -66,7 +66,7 @@ class="opacity-70" />
-

Schedule clinicians for a specific rotation

+

Schedule clinicians for a specific rotation

@@ -107,7 +107,7 @@ class="opacity-70" /> -

Schedule rotations for a specific clinician

+

Schedule rotations for a specific clinician

{ return requireLogin(true, "SVMSecure.ClnSched") }) +useRouteFocus(router) + export { router as clinicalSchedulerRouter } diff --git a/VueApp/src/Computing/router/index.ts b/VueApp/src/Computing/router/index.ts index 342c133b..ff93d5eb 100644 --- a/VueApp/src/Computing/router/index.ts +++ b/VueApp/src/Computing/router/index.ts @@ -1,6 +1,7 @@ import { createRouter, createWebHistory } from "vue-router" import { routes } from "./routes" import { useRequireLogin } from "@/composables/RequireLogin" +import { useRouteFocus } from "@/composables/use-route-focus" const baseUrl = import.meta.env.VITE_VIPER_HOME const router = createRouter({ @@ -14,4 +15,6 @@ router.beforeEach((to) => { return requireLogin() }) +useRouteFocus(router) + export { router } From 836be4ebcbeef7e92bad853fb9ac961b845bd257 Mon Sep 17 00:00:00 2001 From: Rex Lorenzo Date: Tue, 7 Apr 2026 11:51:59 -0700 Subject: [PATCH 2/3] VPR-104 fix(a11y): ClinicalScheduler chip contrast and banner roles - Use grey-4 background for unselected chips in RecentSelections to provide visual distinction from card background - Add role and aria-hidden to ScheduleBanner and ClinicalSchedulerHome banner for screen reader accessibility --- .../src/ClinicalScheduler/components/RecentSelections.vue | 3 +-- VueApp/src/ClinicalScheduler/components/ScheduleBanner.vue | 6 +++++- .../src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/VueApp/src/ClinicalScheduler/components/RecentSelections.vue b/VueApp/src/ClinicalScheduler/components/RecentSelections.vue index 355201ad..634958b5 100644 --- a/VueApp/src/ClinicalScheduler/components/RecentSelections.vue +++ b/VueApp/src/ClinicalScheduler/components/RecentSelections.vue @@ -37,9 +37,8 @@
{{ title }} diff --git a/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue b/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue index 15960282..af4bea8b 100644 --- a/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue +++ b/VueApp/src/ClinicalScheduler/pages/ClinicalSchedulerHome.vue @@ -113,11 +113,13 @@ dense inline-actions class="text-primary bg-primary-1 rounded-borders" + role="status" > Your schedule only From bd470b4dad09184cdcc6b0497ee1ceda5e0a209f Mon Sep 17 00:00:00 2001 From: Rex Lorenzo Date: Thu, 9 Apr 2026 19:49:26 -0700 Subject: [PATCH 3/3] VPR-104 fix(a11y): ClinicalScheduler, CMS, Computing contrast and titles - Fix ScheduleLegend and WeekCell contrast colors - Add tab fade prevention to schedule views - Fix CMS Link color, add Computing page title --- VueApp/src/CMS/components/Link.vue | 2 +- .../components/ScheduleLegend.vue | 14 +++++++++---- .../components/SchedulerNavigation.vue | 2 +- .../ClinicalScheduler/components/WeekCell.vue | 21 +++++++++++++------ .../components/WeekScheduleCard.vue | 2 +- .../pages/ClinicianScheduleView.vue | 8 ++++--- .../pages/RotationScheduleView.vue | 19 ++++++++++------- web/Areas/Computing/Views/Index.cshtml | 5 ++++- 8 files changed, 49 insertions(+), 24 deletions(-) diff --git a/VueApp/src/CMS/components/Link.vue b/VueApp/src/CMS/components/Link.vue index b981b6fd..7803401a 100644 --- a/VueApp/src/CMS/components/Link.vue +++ b/VueApp/src/CMS/components/Link.vue @@ -51,7 +51,7 @@ const props = defineProps<{ }>() function getLinkCollectionTagColor(order: number) { - const colors = ["orange", "grey", "purple", "green", "blue"] + const colors = ["warning", "secondary", "negative", "positive", "info"] return colors.length >= order ? colors[order - 1] : colors[colors.length - 1] } diff --git a/VueApp/src/ClinicalScheduler/components/ScheduleLegend.vue b/VueApp/src/ClinicalScheduler/components/ScheduleLegend.vue index 425d1220..7428969b 100644 --- a/VueApp/src/ClinicalScheduler/components/ScheduleLegend.vue +++ b/VueApp/src/ClinicalScheduler/components/ScheduleLegend.vue @@ -39,7 +39,7 @@
Tip: When selecting weeks that already contain your selected {{ itemType }}(s), the button changes to "Delete Selected" for bulk removal @@ -77,8 +77,8 @@