Skip to content

feat(files): árvore de arquivos, filtro por nome e .md/.html formatados - #17

Merged
tbc-joaovitor merged 3 commits into
mainfrom
feat/arquivos-filtro-formatos
Oct 9, 2026
Merged

tbc-joaovitor merged 3 commits into
mainfrom
feat/arquivos-filtro-formatos

Conversation

@tbc-joaovitor

Copy link
Copy Markdown
Collaborator

O que muda

  • Árvore no diálogo Arquivos (nível 1 aprovado no mockup), no lugar da lista de uma pasta por vez:
    • pastas expandem no lugar e carregam sob demanda pela rota que já existe (/api/workspace/directories);
    • pastas primeiro, ícone por tipo e guias de recuo;
    • linha selecionada com o trilho âmbar e foco de teclado com anel;
    • "carregando…" e aviso de pasta grande demais;
    • o estado expandido é lembrado por pasta (até 200 caminhos, os mais recentes).
  • Teclado e acessibilidade: padrão de árvore WAI-ARIA (treeitem com aria-level/expanded/selected/setsize/posinset, group), com ↑↓, →, ←, Home, End, Enter e Esc.
  • Filtro por nome:
    • casa no nome do arquivo, nas pastas já carregadas e nas subpastas pela busca que já existe (/api/pane/files, só arquivos do git, com o aviso na tela);
    • mostra só os resultados e as pastas acima deles, com cadeias de pasta única juntas (src/lib/deep/inner) e o trecho destacado;
    • estado vazio para quando nada casa; Esc limpa o filtro, e o segundo Esc fecha;
    • a busca em subpastas só roda quando a raiz é a pasta do painel.
  • Visualizador por formato:
    • .md: formatado com o renderizador do chat (HTML cru vira texto e links só http/https/mailto) e a troca Visualizar | Código; Editar só no Código.
    • .html: num <iframe sandbox=""> via srcdoc, sem scripts e sem a mesma origem, com CSP no documento (default-src 'none'), então nada externo carrega. O aviso "Scripts desativados nesta visualização" aparece na tela.
    • .pdf: igual a antes. A escolha entre Visualizar e Código é lembrada por formato.
  • data-feedback-private no conteúdo exibido.
  • Documentação: novo componente FileTree no design system, bundle.css (só as seções FileTree e FileViewer; as do portal não foram tocadas), DESIGN.md, i18n pt/ko/ja/zh e CHANGELOG.

Verificação

  • typecheck, build e test:unit (1821 pass, 0 fail).
  • files-tree-regression.ts (novo), changed-files-regression.ts e feedback-regression.ts passam.
  • Testes vistos falhando com o bug introduzido de propósito:
    • renderizador de markdown injetando HTML: o teste novo e o de tabela falham;
    • sem a CSP no srcdoc: a regressão vê requisições para example.com/x.png e s.css e falha.
  • Reviews em sessão nova: /code-review high e /security-review. A segurança não teve achados; os 10 achados de código foram corrigidos.
  • A regressão roda o Chromium com --disable-features=IsolateSandboxedIframes. Sem isso o Playwright não enxerga as requisições do iframe sandboxed, e o teste da CSP passaria mesmo sem a correção.

Limites

  • Pasta grande mostra "mais itens do que o exibido", sem o número, porque o servidor só manda truncated.
  • Sem type-ahead. Imagens e links relativos dentro do .html não carregam (decidido para a v1). Não há busca no conteúdo dos arquivos.

🤖 Generated with Claude Code

tbc-joaovitor and others added 3 commits October 8, 2026 20:59
… e html

Arquivos vira árvore (pastas abrem no lugar, filhos sob demanda, teclado WAI-ARIA,
pastas abertas lembradas), com filtro por nome (pastas abertas + arquivos do git).
O visualizador desenha .md (estilo do chat) e .html (iframe sandbox vazio), com
alternância Visualizar | Código lembrada por formato.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- árvore reinicia ao trocar de pasta ou painel (key); homeRoot só vale para a pasta do painel
- filtro por nome mantém só arquivos cujo nome contém o texto; clique/Enter em pasta dobra e desdobra no resultado
- criar pasta com guarda de ocupado e recarga só da pasta afetada
- ARIA: treeitem focável com level/expanded/selected/setsize/posinset e filhos em role=group
- html no visualizador com CSP no documento (nada é buscado fora)
- CSS só com tokens (--content-w, --palette-w, --icon-size); bundle.css, DESIGN.md e CHANGELOG em sincronia
- pastas abertas lembradas: as 200 mais recentes dentro da raiz; childPath único
- regressão sem sleep fixo

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@tbc-joaovitor
tbc-joaovitor merged commit 2c98ae0 into main Oct 9, 2026
@tbc-joaovitor
tbc-joaovitor deleted the feat/arquivos-filtro-formatos branch October 9, 2026 01:41
tbc-joaovitor added a commit that referenced this pull request Oct 9, 2026
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