Skip to content

[P0] 无障碍硬缺陷修复包:焦点泄漏/焦点环/tablist 半成品(前端审计第二轮) #1823

Description

@DeliciousBuding

背景

前端审计第二轮对无障碍做深度审计,发现焦点管理硬缺陷(违反 ARIA 基本原则)与键盘不可达控件,聚合追踪。focusTrap/Select/Tooltip 等已做好的部分不在范围。

所属部分

  • 前端
  • 后端
  • 客户端

要做什么

  • Sidebar 折叠后焦点泄漏:AgentHubWorkbench.module.css:227 仅 opacity/translateX,无 visibility/inert,不可见控件仍在 Tab 链
  • Inspector 折叠时 aria-hidden=true 但内部仍可聚焦(RightInspector.tsx:159)→ 违反「aria-hidden 不得含可聚焦元素」
  • 登录页焦点环 alpha 4%/8% 等效不可见:web/desktop AuthPage.module.css box-shadow: 0 0 0 3px var(--glass-tint-plum)
  • 终端 tab 关闭按钮 <span role="button" tabIndex={-1}> 键盘永不可达(TerminalPanel.tsx:262-265
  • 14 个模块 cursor:pointer 但零 :focus/:focus-visible:TablePreview/SlideshowPreview/FileChangeGroup/DocxPreview/EmptyState/ErrorBoundary/MessageSearchPanel/MetricGrid/RecoveryPanel/AuxPanel/ContextMenu/MultiSelectBar/BrowserPreview/TerminalPanel
  • ContactsPage .linkInput/.phoneSelect/.phoneInput outline:none 无 focus 替代样式
  • role="tablist" 半成品(仅 aria-selected,无方向键/roving/tabpanel 关联):TaskMainViews/WorkspaceHeader/AuxPanel/DiffReviewPanelParts/TablePreview/TerminalPanel
  • SubagentStreamOverlay aria-live="polite" 包高频流式区 + 嵌套二层 live region,读屏被持续轰炸;AgentStreamingBar role=status 反复播报
  • 360ms 面板折叠动画(grid+clip-path+translateX)无 prefers-reduced-motion 门控(AgentHubWorkbench.module.css)
  • --glass-text-muted light ≈2.9:1 低于非文本 3:1(themes.css:528,desktop 顶栏图标簇)
  • 小触控目标 <32px:terminal tabClose 16×16、topBarNavBtn 22×22、workspaceTab 28px、conversationActionBtn 26×26
  • 框选模式裸 Delete 直接删消息块无确认;Ctrl+A/C/Delete 未收录快捷键登记表

验收标准

  • 折叠面板不再泄漏焦点;aria-hidden 内无可聚焦元素
  • 所有可交互元素有可见键盘焦点环
  • live region 在流式期间不轰炸(节流/aria-live=off 策略)
  • 相关包 typecheck/test 通过;改 CSS 跑 design token 门禁

相关文档

  • docs/component-acceptance.md §4 无障碍必选项

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0Critical priorityjavascriptPull requests that update javascript code前端Web 工作台、IM 交互、前端状态和 UI

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions