Accessibility rough edges in custom (non-Base-UI) components
Los mantenedores suelen responder en 2 días
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Tranquilo
- Stack tecnológico
- react, typescript
- Área
- accessibility, frontend
Línea de trabajo
Comienza con command-item.tsx:65-81 para entender por qué las opciones deshabilitadas quedan fuera de la navegación por teclado de Autocomplete. Después inspecciona data-view/components/search.tsx, ordering.tsx, menu/menu-content.tsx, context-menu/context-menu-content.tsx y los módulos CSS de dialog y tooltip. Se considera completado cuando los componentes específicos enumerados proporcionen acceso mediante teclado, anuncios de filtros/resultados, un comportamiento robusto del bridge y estilos focus-visible explícitos.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
Components built directly on Base UI primitives (Dialog, Select, Tabs, Checkbox, Switch, Tooltip) get keyboard nav, focus trap/restore, and roles for free and look solid. The gaps are in components with hand-rolled behavior.
Issues found
-
Command: disabled items are unreachable by keyboard.
command-item.tsx:65-81renders disabled items as a raw<div role='option' aria-disabled>outside the Autocomplete primitive, with an existing TODO acknowledging it's a workaround ("Fix this when Base UI fixes this issue"). This item isn't reachable by the primitive's own roving keyboard navigation. -
Menu/ContextMenu bridge keyboard nav with a synthetic-event hack.
menu/menu-content.tsx:60-96(mirrored incontext-menu/context-menu-content.tsx:61-92) callsdispatchKeyboardEvent(item, KEYCODES.ARROW_RIGHT/ESCAPE)againstquerySelectorAll('[role="option"]')to bridge two primitives. Fragile — depends on synthetic event dispatch working the same as real keyboard input. -
DataView doesn't announce filter/result changes.
data-view/components/search.tsxandordering.tsxhave noaria-live/aria-expandedwhen filter or result counts change. Screen reader users get no feedback when a filter narrows the list. -
Missing
:focus-visiblerules in Dialog and Tooltip CSS. Confirmed zero matches forfocus-visibleindialog/*.module.cssortooltip/*.module.css, vs. 52 matches across 29 other component.module.cssfiles. May look fine today via inherited/default browser focus styling, but isn't explicit.
Suggested approach
Priority order: fix #1 first (keyboard-unreachable content is the most severe — a real WCAG failure), then #3 (DataView live regions), then #2 and #4.
Notes
Found via a components.build practices audit (accessibility dimension). Base-UI-backed primitives were not found to have equivalent issues — this is isolated to bespoke composite components.
- Lenguaje dominante
- TypeScript
- Estrellas
- 69
- Forks
- 13
- Merge medio
- 3 d 15 h
- PR fusionados (30 d)
- 24
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de raystack/apsara
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 86/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 2 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
Los mantenedores suelen responder en 2 días
-
DataView: don't offer select/multiselect filters with empty filterOptionsPosiblemente ocupada @rohanchkrabrty la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
raystack/apsara#849 · 1 asignado ·
Los mantenedores suelen responder en 2 días
Todos los issues de raystack/apsara
Issues similares
-
Bayern feature:Application ready web
Dificultad 2/5 1-3 horas Aptitud para principiantes 67/100
digitalfabrik/entitlementcard#3176 ·
Los mantenedores suelen responder en 7 días
-
[BUG] 运行位置的分支列表不自动刷新,外部新建的分支看不到Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
NanmiCoder/cc-haha#1533 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
🐛 Bug: Calendar work items cannot be opened on mobilePosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 92/100