Componentes
39. Command Palette ⌘K
seed-componentes.md v2.00 · §39seção 79 de 18439-command-palette-k-estavel-v0-41-cp1-cp6-bloco-5.md · MD5 51c9954bTítulo completo no canon: Command Palette ⌘K — estável (v0.41) · CP1–CP6 · Bloco 5/5E · lote autônomo 1 · fecha o Bloco 5 · resolve a fronteira do §4.11
Em uma frase: A paleta de comandos é busca de AÇÃO e navegação por Ctrl/Cmd+K, sobre diálogo real; ela é a mesma busca da topbar, por outra porta.
(decisão registrada — ver Histórico da seção)
| # | Decisão | Porquê | Descartado |
|---|---|---|---|
| CP1 | Semântica = COMPOSIÇÃO de 2 componentes já normatizados: modal §30 (showModal, trap, Esc, retorno ao gatilho) contendo combobox §11 (foco fica no input; setas movem aria-activedescendant; aria-expanded reflete resultados). Nada novo nasce |
cmdk/shadcn implementam exatamente isto; §11 e §30 já pesquisados com fonte primária | Listbox com foco real nas opções (perde a digitação contínua); role=menu (é busca+seleção, não menu — MN1) |
| CP2 | Abertura: Ctrl/⌘K global (cumpre a promessa do §4.11 — o mesmo atalho que focava a busca passa a abrir a palette; rótulo por plataforma herdado) + gatilho visível no chrome. Toggle: Ctrl+K com a palette aberta fecha. Guarda: dentro de input/textarea só abre com o modificador explícito | §4.11 (decisão de 2026-08-02 sendo executada); techinterview (guarda de inputs) | Atalho novo (joga fora a memória treinada); só atalho sem gatilho visível (indescobrível) |
| CP3 | Conteúdo: grupos rotulados (Ações · Navegação · Recentes) fora da semântica de option; rótulo verbo+substantivo (herda MN4); atalho exibido em mono decorativo; máx ~8 visíveis com scroll; empty = FRASE ("Nenhum resultado. Tente outro termo." — herda o tipo zero-resultados do §25: SEM CTA de criação); live region nomeada anuncia "N resultados" | cmdk (Empty como frase); Fiori/Polaris herdados; 1.13-b | "0 results" seco; CTA de criar no zero-resultados (Z herdado) |
| CP4 | Teclado: ↓↑ movem a seleção virtual (com fim de curso, sem wrap — consistente com o disclosure), Home/End, Enter executa e FECHA devolvendo ao gatilho, Esc fecha. Digitação filtra em tempo real (client-side; fonte assíncrona = produto com CommandLoading/skeleton §19) | Combobox §11 (modelo já decidido); cmdk | Wrap nas setas (numa lista filtrada curta, fim de curso orienta melhor) |
| CP5 | Fronteiras: registry de comandos, índice de busca, recentes persistidos, fuzzy avançado, telemetria = produto/Lovable (ids estáveis como contrato); o DS entrega o componente, a régua editorial e o contrato de acessibilidade | techinterview (registry por id — sobrevive a rename); CN4 como precedente de fronteira | Fuzzy/scoring no DS |
| CP6 | Mobile: <640px a palette abre em largura total (herda DW2); sem tecla ⌘, a entrada é o gatilho visível (o chip do §4 já esconde o atalho onde não existe) | Paridade estrutural; §4 (rótulo por plataforma) | Palette desktop-only |
Tokens: opção ativa = list-hover + anel interno (herdado); kbd chips = §4; grupos text-muted; backdrop = §30. Nenhum par novo. Os 7 testes: 1 herdados ✓ · 2 ativa por fundo+anel (nunca só cor) · 3 grayscale ok · 4 palette × busca §4 a 1s (comandos+navegação × conteúdo) · 5 regra do um: uma live region nomeada, um atalho, uma ativa · 6 gatilho visível com atalho exibido · 7 360px largura total, opções 44px. (Suite 5E: CP-01–10 ✓; Ctrl+K REAL + :modal nativo + activedescendant conferidos em pixels na render R8 ✓.)
Também cita o §39: tela-busca, tela-shell, tela-shell-abas, tela-shell-sem-topbar.