Skip to content

feat(header): tira o menu ⋯; copiar caminho no breadcrumb, Arquivos e Alertas no topo e na gaveta - #12

Merged
tbc-joaovitor merged 14 commits into
mainfrom
feat/topo-sem-mais
Oct 8, 2026
Merged

tbc-joaovitor merged 14 commits into
mainfrom
feat/topo-sem-mais

Conversation

@tbc-joaovitor

Copy link
Copy Markdown
Collaborator

O que muda

O menu ⋯ do cabeçalho sai, e o que ele tinha vira controles diretos, conforme o mockup aprovado pelo usuário.

  • Copiar caminho: ícone no fim do breadcrumb (máquina › projeto › pasta). Se o breadcrumb não couber, o ícone passa para o lado do título; um ResizeObserver detecta a quebra. Ao clicar, o ícone vira ✓ por 1,5 s, valendo só para o painel atual. Em origem sem HTTPS, onde não há clipboard API, abre um window.prompt com o caminho.
  • Desktop: os botões Arquivos e Alertas (sino; com ponto quando os alertas estão desligados) entram no topo. Abaixo de 1100 px, Nova aba, Dividir, Desfazer zoom e Arquivos ficam só com ícone.
  • Até 768 px (largura em que existe a gaveta ☰): Arquivos e Alertas saem do topo e vão para o início da gaveta, junto com a Paleta de comandos e o caminho completo (selecionável, quebrando depois de / ou \). O ponto de "alertas desligados" passa para o ☰, e o nome acessível do ☰ diz isso.
  • Celular: os botões do topo voltam ao tamanho de toque do design system (40 px). Com o painel em zoom, Nova aba sai do topo; ela continua no "+" do projeto na gaveta.
  • Documentação: design-system/ (README, Button, Pill, Menu, CommandPalette, bundle.css), DESIGN.md e src/AGENTS.md atualizados. Regra nova no AGENTS.md: toda mudança de UI segue design-system/ e o atualiza no mesmo PR.

Verificação

  • bun run typecheck, bun run build e bun run test:unit (1576 pass, 0 fail).
  • Novo scripts/header-controls-regression.ts, chamado pelo ui-regression. Cobre: copiar no desktop (o clipboard recebe o cwd do painel), título longo em 900 px, celular, toque em 600 px, linhas da gaveta, tamanho de toque e Nova aba saindo com o zoom. Passa.
  • A suíte completa do ui-regression é instável nesta máquina. Num teste A/B, rodando só os testes que falharam (38 vezes no branch, 35 na origin/main), o branch falhou 2 vezes e a main 3, nas mesmas linhas (alert-sound-regression.ts:102/116/146, chat-size-regression.ts:163). É disputa de tempo entre os eventos de status e o auto-dismiss da droplet, não regressão deste PR.
  • Prints conferidos com a transport de demo: 1440, 1024, 900 com título longo, 600 com toque, 390 e 360.
  • Três rodadas de /code-review high em sessão nova e /security-review (sem achados). Os achados foram corrigidos, exceto os listados abaixo.

Ficaram de fora (conhecidos)

  • Em 320 px o título fica com quase 0 px. A suíte já usa titleRoom = 0 nessa largura.
  • A regra do fork pede manter só em design-system/ o que é exclusivo do fork, mas esta mudança de UI precisa mexer em src/App.tsx e src/styles.css, que vêm do upstream. Os próximos merges do upstream podem dar conflito no cabeçalho.
  • Ao cruzar o limite em que o breadcrumb quebra, o ícone de copiar pode sumir por 1 frame (o ResizeObserver não atualiza de forma síncrona).
  • O código do RowMenu que só o menu Mais usava (hint/checked) ficou sem chamadas. Foi mantido para não divergir do upstream.

🤖 Generated with Claude Code

tbc-joaovitor and others added 14 commits October 7, 2026 21:27
…ram botões do topo

O menu (⋯) tinha só New tab (duplicado), Browse files e Alerts, e no celular
paleta e Split. Agora: botão de copiar caminho junto ao título (vira check por
1,5 s), botão Files e sino de alertas (com o ponto quando desligado) no
cabeçalho, Split fica no cabeçalho no celular e a paleta é a primeira linha da
gaveta. Cabeçalho mais justo em <=480px para o título continuar elipsando.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…do título abaixo de 769px

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…no mesmo PR

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…menu More

bundle.css espelha as regras de src/styles.css (.context-copy, .header-bell, .drawer-palette, media 768/480); Menu, CommandPalette, Button, Pill e o README deixam de citar o menu More do cabeçalho.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eta do celular

- o botão de copiar muda do fim do breadcrumb para o título quando o breadcrumb quebra
  para fora da vista (ResizeObserver, .is-crumb-hidden); só um fica visível
- sem API de clipboard (HTTP) abre o prompt do navegador com o caminho
- o check de "copiado" guarda o caminho e o timer é limpo ao trocar e ao desmontar
- até 480px, Arquivos e Alertas saem do cabeçalho e viram linhas da gaveta (.drawer-rows),
  com o ponto de alertas desligados no botão ☰; regras que encolhiam os botões removidas
  e o botão de copiar ganha o alvo de toque em pointer: coarse
- rótulo de Arquivos some até 1100px para o título manter espaço
- design-system, DESIGN.md e CHANGELOG atualizados; testes de cabeçalho em
  scripts/header-controls-regression.ts

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…odo compacto e achados da revisão

- caminho completo como primeira linha da gaveta (touch não tem tooltip)
- botão de copiar limitado à linha do contexto (densidade compacta)
- quebra do breadcrumb medida contra o fim da linha do título
- aba com zoom no celular esconde o New tab do topo
- botão da gaveta diz que os alertas estão desligados
- remove HeaderCrumb.place; docs (DESIGN.md, design-system/, src/AGENTS.md) alinhados

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- caminho do drawer quebra após "/" e "\" e, em último caso, dentro de segmento longo
- linhas do drawer (caminho, Files, Alerts) e o ponto do ☰ passam ao breakpoint do drawer (768px); paleta do header segue até 480px
- check de "copiado" por pane + caminho; remove a classe morta is-drawer-cue
- botão do sino em um helper só (header e drawer)
- teste de header cobre tablet de 600px; DESIGN.md e design-system atualizados

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s no celular

Files e o sino ficam no cabeçalho em qualquer largura (hover mostra o
title); saem as linhas Files/Alerts da gaveta e o ponto no botão ☰. A
gaveta mantém o caminho completo e a paleta. Até 480px a barra não mostra
título, marca nem crumb: só ícones de --touch-target (a troca Chat/Terminal
também), com gap e gutter reduzidos para caber em 360px. Todo botão do
cabeçalho tem title e aria-label. Regressões, DESIGN.md, design-system e
CHANGELOG atualizados.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No celular (até 480px) o cabeçalho não mostra mais o título do painel; a
barra de abas passa a aparecer também com uma única aba, para o nome do
painel estar sempre na tela. Acima de 480px nada muda.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ainel

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…terese, aba aberta no celular nomeia o painel

- ResizeObserver do is-crumb-hidden via ref callback (state), refeito quando o header remonta
- botão de copiar do título sempre ocupa o lugar (visibility), medida estável sem histerese
- celular: aba ativa sempre com o título do painel em frente; renomear compara com o nome do herdr
- TabStrip: phone/panesOf antes de nameOf; rótulo cortado com reticências no celular
- remove drawer-toggle-wrap morto; linha da paleta no drawer só até 480px
- testes e docs (DESIGN, design-system, CHANGELOG) ajustados

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…o design system

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tbc-joaovitor
tbc-joaovitor merged commit 7e86463 into main Oct 8, 2026
tbc-joaovitor added a commit that referenced this pull request Oct 8, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tbc-joaovitor
tbc-joaovitor deleted the feat/topo-sem-mais branch October 8, 2026 22:15
tbc-joaovitor added a commit that referenced this pull request Oct 9, 2026
…o topo

A asserção ainda procurava o título no topo do celular, que saiu no #12.
Mesma correção do #18; falhava no CI desde então.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
tbc-joaovitor added a commit that referenced this pull request Oct 9, 2026
* feat(marca): renomeia o app para DevDA e troca o ícone por <DA/>

Nenhuma string visível diz mais "herdr": marca do cabeçalho, rodapé, título da aba,
manifest, notificações, configurações, erros, demo e tela de bloqueio, em todos os
idiomas. A ferramenta herdr passa a ser "servidor de sessões". Nomes internos
(binário, HERDR_*, chaves de storage, rotas) ficam. Ícones vêm do design system
(?v=da2, cache do service worker v6).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* fix(marca): corrige achados da revisão da marca DevDA

- design-system.json: aspas escapadas na nota (JSON inválido); novo teste scripts/design-system-json.test.ts parseia todos os JSON de design-system/
- split-regression: tooltip da versão agora "server … · build …"
- og:image:alt neutro enquanto o social-preview antigo não é trocado
- demo: aviso do terminal reajustado à largura original
- remote-host: mensagem do instalador sem "herdr"
- design-system: Pill ("session server offline") e README de DevIcons (fonte no repo do portal)
- favicon.png declarado como 32x32 nos sites
- REMOTE_BUNDLE_VERSION 19 -> 20 (strings do bundle remoto mudaram)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* feat(marca): imagem de compartilhamento DevDA; teste do celular confere o nome na faixa de abas

A imagem de compartilhamento (og:image) passa a ser o cartão DevDA (ícone <DA/>, nome,
frase em pt-BR e marca Data Agile no navy do portal), aprovado pelo usuário.

O split-regression ainda conferia o título no topo do celular, que saiu no #12: a
faixa de abas é que nomeia o painel. Já falhava na main.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs(changelog): link do PR #18

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* test: estabiliza duas corridas dos testes de navegador no runner lento do CI

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant