diff --git a/docs/changelog/2026-09-24-c221.md b/docs/changelog/2026-09-24-c221.md new file mode 100644 index 00000000..f7d6c99c --- /dev/null +++ b/docs/changelog/2026-09-24-c221.md @@ -0,0 +1 @@ +**C221 — "Limpar" do omnibox não quebra mais linha no mobile (2026-09-24):** débito capturado na crítica de design da C219, agora corrigido no dono do encaixe — no mobile, um chip de busca longo empurrava o "X" de limpar do `CampaignListOmnibox` (o X circular dentro do campo, `md:hidden`) para uma linha própria e órfã à esquerda, inflando a barra para ~74px e abrindo uma faixa vazia antes do seletor de modo (reproduzido na Câmara e nas gravações enviadas; comportamento pré-existente do shell, não regressão da C219). Fix de apresentação, sem schema, access, Consent, URL ou contrato de filtros: abaixo de `md` o campo vira `relative` e reserva a faixa do X com `pr-11` (44px = alvo de 36px + 8px de respiro), o botão sai do fluxo de wrap (`absolute right-0 top-1/2 -translate-y-1/2`, centrado na altura do campo) e o chip de busca ganha cap de 168px com ellipsis, mantendo o input de `8rem` na mesma linha densa — desktop (`md:`) intocado (borda/ring/label/"Limpar" textual), a11y intocada (`aria-label="Limpar"`, `invisible`/fora da árvore quando vazio, anúncios `sr-only`) e a barra de volta à faixa de 44–48px do B196. Design: artefato novo `docs/plans/omnibox-limpar-mobile-ui-design.html` (Impeccable B) com as cenas 390 dos três estados (chip longo, chip curto + digitado, vazio) e a cena 1280 do desktop preservado; port classe-a-classe do contrato aprovado (folga de 44px, X a 0px da direita, cap de 168px, alvo `size-9`/miolo `size-6`). Verificação: e2e novo no describe B184 de `campaignMunicipalities` com **RED provado antes do fix** (campo 74px > teto de 48px) e asserções de geometria em 390 (X ancorado à direita com inset ≤ 16px, centrado no campo, input nunca sob o X — a lane reservada — e campo ≤ 48px), mais o desktop preservado no mesmo teste; `campaignIosInputZoom` entra no `E2E_AFFECTED_MANIFEST` do prefixo do omnibox (o diff toca o dono do campo, então o contrato de font-size no toque passa a rodar no PR), com a regressão local da superfície (`campaignMunicipalities`, `campaignIosInputZoom`, `campaignZoneMap`, `campaignNearestMunicipality`, `campaignSavedFilters`, `campaignColumnPicker`, `campaignUpdatesMobile`, `campaignActivity`) e `pnpm gate:fast`. Crítica final do `designer` (trigger c) **certificada em tier primário** (`Design tier: openai/gpt-5.6-sol`). diff --git a/docs/plans/omnibox-limpar-mobile-impl.md b/docs/plans/omnibox-limpar-mobile-impl.md new file mode 100644 index 00000000..41cf58fe --- /dev/null +++ b/docs/plans/omnibox-limpar-mobile-impl.md @@ -0,0 +1,140 @@ +# Impl: C221 — "Limpar" do omnibox não pode quebrar linha no mobile + +Status: aprovado +Atualizado em: 2026-09-24 +Issue: #1313 +Intenção: docs/plans/omnibox-limpar-mobile.md +Appetite restante: herdado (~2h eng, fill-in) — cabe: gate de design + e2e RED/GREEN + fix de classes no dono + gates; sem schema, sem server +Aprovação: `--auto` (work-issue) — plano auto-aprovado em 2026-09-24; pausa do GATE 3c dispensada pela flag + +## Leitura da intenção + +- **Outcome:** com chip de busca longo no mobile, o "X" de limpar do `CampaignListOmnibox` continua ancorado ao campo/chips — nunca vira linha órfã abaixo do chip, em **todas** as 17 listas que usam o shell — sem tocar desktop, a11y ou contrato de URL/filtros. +- **O que NÃO negociar:** comportamento do X (limpa tudo, refoca o input, não reabre o popover) e a11y (`aria-label="Limpar"`, `invisible`/fora da a11y tree quando vazio, anúncio sr-only); desktop `md:` (borda/ring/altura/label/"Limpar" texto/trailing cluster); barra mobile 44–48px no estado padrão (B196); marcador `campaign-list-omnibox-form` (contrato do `:has()` em `CampaignQuickActionsHost.tsx:17`) e o sticky no `