---
fonte: 01-canonicos/seed-componentes.md
versao_da_fonte: v1.43
secao: 39
titulo: "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"
sequencia: 41 de 98
bytes_do_corpo: 4239
md5_do_corpo: bc663542ae48133ee039a19b73889045
gerado_por: 06-validacao/geradores/gen-camada-ia.py
nota: fatia GERADA — o corpo abaixo é byte a byte o trecho do canônico; edite o canônico, nunca esta fatia. Canônico inteiro em https://ds.seed.eng.br/01-canonicos/seed-componentes.md
---
## 39. 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

> **Base (3 rodadas, 2026-08-06):** R1 — precedentes Linear/Vercel/GitHub/Raycast (techinterview: registry por id estável; <100ms; guarda do atalho em inputs). R2 — **cmdk** (a base do shadcn Command — a stack do Lovable): combobox correto out-of-the-box; **CommandDialog = cmdk dentro de dialog real** (trap/Esc/retorno são do dialog, não do cmdk); Command.Empty como FRASE; virtualizar só em milhares de itens; distinção shadcn: palette=Command+Dialog · valor em form=combobox · ações de linha=menu (reforça MN1). R3 — heranças normativas integrais: **combobox ARIA 1.2 do §11** (input mantém o foco; `aria-activedescendant` move a seleção virtual; `aria-expanded`/`aria-controls`) + **modal §30** (showModal, trap nativo, foco devolvido) + **busca §4** (o atalho Ctrl/⌘K JÁ reservado e treinado desde o v0.8 — a memória muscular migra sem custo, exatamente como o §4.11 previu) + live region nomeada (1.13-b).

| # | 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 ✓.)*

---

