From 4d9a92db0d809290e23cdf64abf975538ec98e2f Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Mon, 10 Aug 2026 05:01:36 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=8E=A8=20Palette:=20Add=20ARIA=20role?= =?UTF-8?q?s=20and=20pressed=20states=20to=20Calendar=20view=20selector?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added semantic `role="group"` and `aria-label` to the Calendar view mode selector, and bound `:aria-pressed` to the toggle buttons to accurately communicate the active view mode state to screen readers. Also cleaned up a boolean attribute shorthand warning. Co-authored-by: endlessblink <37155282+endlessblink@users.noreply.github.com> --- .Jules/palette.md | 3 +++ src/components/calendar/CalendarHeader.vue | 7 +++++-- 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 .Jules/palette.md diff --git a/.Jules/palette.md b/.Jules/palette.md new file mode 100644 index 000000000..fe71c7eee --- /dev/null +++ b/.Jules/palette.md @@ -0,0 +1,3 @@ +## 2026-08-10 - Added ARIA attributes to view selector role +**Learning:** When using custom UI components acting as a segmented control or radio group, apply appropriate semantic ARIA roles like `role="group"` on the container and `:aria-pressed` on the toggle buttons (since it's a group of toggle buttons changing the view mode) to ensure screen readers correctly interpret the state. Note that if `role="radiogroup"` was used, children would need `role="radio"` and `aria-checked`. +**Action:** Always add semantic roles and state attributes (`aria-pressed` or `aria-checked`) dynamically bound to their boolean properties for view mode selectors and segment controls. diff --git a/src/components/calendar/CalendarHeader.vue b/src/components/calendar/CalendarHeader.vue index b4860f6e5..5e470953f 100644 --- a/src/components/calendar/CalendarHeader.vue +++ b/src/components/calendar/CalendarHeader.vue @@ -98,7 +98,7 @@ const toggleViewOptions = () => { :y="popoverY" position="bottom" variant="menu" - :close-on-click-outside="true" + close-on-click-outside @close="showViewOptions = false" >
@@ -187,10 +187,11 @@ const toggleViewOptions = () => {
-
+
-
{{ error }}
+
+ {{ error }} +

Memory Grade

-
{{ report.grade }}
+
+ {{ report.grade }} +

{{ gradeLabel }}

@@ -56,13 +60,17 @@

Sections

-
{{ report.sections.length }}
+
+ {{ report.sections.length }} +

{{ report.mode === 'full' ? 'Full assessment' : 'Quick check' }}

Duration

-
{{ formatDuration(report.durationMs) }}
+
+ {{ formatDuration(report.durationMs) }} +

{{ formatTime(report.timestamp) }}

@@ -70,7 +78,9 @@

No assessment results yet.

-

"Quick Check" runs heuristic tests instantly. "Full Assessment" adds LLM-as-judge context utilization tests (~30s).

+

+ "Quick Check" runs heuristic tests instantly. "Full Assessment" adds LLM-as-judge context utilization tests (~30s). +

@@ -115,7 +125,9 @@ {{ check.name }} {{ check.score }}%
-
{{ check.value }}
+
+ {{ check.value }} +
{{ check.recommendation }}
@@ -160,7 +172,9 @@ {{ formatTime(h.timestamp) }} - + diff --git a/src/components/ai/ChatMessage.vue b/src/components/ai/ChatMessage.vue index a47ce2aaf..79dd723ff 100644 --- a/src/components/ai/ChatMessage.vue +++ b/src/components/ai/ChatMessage.vue @@ -2586,13 +2586,17 @@ async function saveSchedule() { data-testid="ai-clarification" >
-
{{ clarification.progressLabel }}
+
+ {{ clarification.progressLabel }} +

{{ clarification.locale === 'he' ? 'שאלה קצרה לפני התכנון' : 'Quick question before planning' }}

{{ clarification.summary }}

{{ clarification.locale === 'he' ? 'למה אני שואל?' : 'Why ask?' }}
@@ -2781,7 +2785,9 @@ async function saveSchedule() {

{{ weeklyPlan.headline }}

{{ weeklyPlan.weekRead.summary }}

-

{{ weeklyPlan.weekRead.mainTradeoff }}

+

+ {{ weeklyPlan.weekRead.mainTradeoff }} +

{{ weeklyPlan.locale === 'he' ? 'נתיב' : 'Lane' }} -

{{ weeklyLaneTitle(rec) }}

-

{{ weeklyLaneSubtitle(rec) }}

+

+ {{ weeklyLaneTitle(rec) }} +

+

+ {{ weeklyLaneSubtitle(rec) }} +