rfc: accessible mode
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Tranquilla
- Stack tecnologico
- typescript
- Ambito
- accessibility, cli
Direzione di ricerca
Inizia con l’utility isAccessible() completata e i relativi test sull’ordine di risoluzione in @clack/core, poi leggi core/src/types.ts e il livello di rendering condiviso. Usa la checklist organizzata per fasi per delimitare un gruppo di prompt, risolvendo al contempo le domande aperte elencate con i maintainer. Il lavoro è completato quando i prompt rilevanti hanno un percorso di rendering accessibile isolato e la validazione copre il comportamento proposto.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
coming out of the discord convo about spinners and screen readers. tldr of the problem: spinners and live-redrawn prompts get re-announced on every repaint by voiceover/nvda/orca, which makes clack prompts effectively unusable with assistive tech. github hit the same wall with their cli and shipped static text + numbered inputs instead: https://github.blog/engineering/user-experience/building-a-more-accessible-github-cli/
detecting screen readers isn't viable (the reader runs client-side, so over ssh/containers there's zero signal, and local platform APIs are inconsistent + amount to sniffing disability status). so the proposal is an explicit opt-in following the emerging ACCESSIBLE env var convention (charmbracelet/huh already honors it in go land). nothing in the js prompt ecosystem does this yet, so clack adopting it likely sets the convention.
this issue is the coordination doc: design + checklist live here, chatter can stay on discord.
activation semantics
accessible mode is enabled when any of these resolve true, in priority order:
- explicit
accessible: trueoption on a prompt (or global setting) ACCESSIBLEenv var set to any non-empty value (0andfalseexplicitly disable)- open question: should
!isTTYimply it, or stay a separate degradation path?
behavior per prompt
| prompt | accessible behavior |
|---|---|
spinner |
print message once, plain still working: <msg> line every 30-60s (configurable), final done/error line. zero redraws |
progress-bar |
log at milestones (25/50/75/100) instead of continuous repaint |
task / task-log / stream |
audit for line rewrites, route through same static path |
select / select-key |
numbered list, read a number from stdin, re-prompt on invalid |
multi-select / group-multi-select |
numbered list, comma-separated numbers in, echo back parsed selection |
limit-options |
no pagination, print full list |
autocomplete |
degrade to plain "type your answer" + printed options (may split to follow-up) |
text / confirm / password / path / multi-line / date |
strip cursor-repositioning decorations, plain question in / plain input out, confirm becomes (y/n) |
note / box / log / messages |
plain text with clear begin/end delimiters, no box-drawing repaints |
implementation approach
intent is for accessible mode to be a distinct render path rather than if (accessible) conditionals scattered through every prompt. all prompts already flow through the shared render layer in core, so the accessible output should hang off that seam. keeping it isolated there also means future renderer work inherits it for free.
proposed plan
-
isAccessible()util in@clack/core+ resolution order tests - thread
accessibleoption through shared prompt options incore/src/types.ts - baseline screen reader recording against current spinner + select (before/after material)
- pr 1: spinner, progress-bar, task/task-log/stream (static output path)
- pr 2: select, select-key, multi-select, group-multi-select, limit-options
- follow-up: autocomplete
- pr 3: cleanup pass on text/confirm/password/path/multi-line/date + note/box/log/messages
- validation session with a screen reader user on a build
- docs page + accessible example in examples dir
open questions
!isTTYimplies accessible mode, or keep as separate degradation?- global setting api shape (per-prompt option only vs
updateSettings-style global) - interval default for spinner status lines (30s? 60s?)
- how custom renderers compose with accessible mode
- Lingua principale
- TypeScript
- Stelle
- 8.1k
- Fork
- 217
- Merge medio
- 1g 11h
- PR unite (30g)
- 5
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di bombshell-dev/clack
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
bombshell-dev/clack#597 ·
-
bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
bombshell-dev/clack#573 · 1 commento · 2 reazioni ·
-
enhancement
Difficoltà 3/5 1-2 giorni Idoneità per principianti 62/100
bombshell-dev/clack#565 · 1 commento · 1 reazione ·
-
enhancement
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
bombshell-dev/clack#564 · 1 reazione ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
bombshell-dev/clack#557 · 1 reazione ·
Tutte le issue di bombshell-dev/clack
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
mksglu/context-mode#1200 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
jaegertracing/jaeger-ui#4506 ·
-
area:desktop area:ui bug platform:macos
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
anthropics/claude-code#96687 ·
-
good first issue
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
AOSSIE-Org/DebateAI#582 · 2 commenti ·