From fac20ab967fa529b8fda60847c1ed3b996f1ecfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Thu, 8 Oct 2026 08:04:16 -0400 Subject: [PATCH] =?UTF-8?q?Banner=20=C2=B7=20an=20alert=20or=20status=20ro?= =?UTF-8?q?le=20named=20by=20its=20message,=20so=20screen=20readers=20hear?= =?UTF-8?q?=20it?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/feedback/messages.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/feedback/messages.rs b/src/feedback/messages.rs index b0200e5..cb655ac 100644 --- a/src/feedback/messages.rs +++ b/src/feedback/messages.rs @@ -2,7 +2,7 @@ use std::rc::Rc; use gpui::{ Animation, AnimationExt, AnyElement, App, Div, ElementId, FontWeight, IntoElement, - ParentElement, RenderOnce, SharedString, Styled, Window, div, prelude::*, + ParentElement, RenderOnce, Role, SharedString, Styled, Window, div, prelude::*, }; use smallvec::SmallVec; @@ -159,8 +159,15 @@ impl RenderOnce for Banner { let theme = cx.theme(); let colors = &theme.colors; let (link, close) = ((self.id.clone(), "action"), (self.id.clone(), "dismiss")); + // Assistive tech reads the message; danger interrupts. + let role = match self.severity { + Severity::Danger | Severity::Warning => Role::Alert, + Severity::Info | Severity::Success => Role::Status, + }; div() .id(self.id) + .role(role) + .aria_label(self.message.clone()) .relative() .flex() .items_center()