Skip to content

feat(markdown): colar imagem no editor de markdown - #56

Merged
leo-nardo merged 1 commit into
mainfrom
feat/markdown-image-paste
Jul 30, 2026
Merged

leo-nardo merged 1 commit into
mainfrom
feat/markdown-image-paste

Conversation

@leo-nardo

Copy link
Copy Markdown
Contributor

Resumo

Resposta a pergunta: o editor de markdown ja renderizava ![img](url) no preview (react-markdown padrao), mas o textarea nao tinha handler de colar imagem — por isso colar uma imagem copiada nao fazia nada.

  • onPaste no textarea intercepta imagem do clipboard, converte pra data URL base64 via FileReader, insere ![imagem](data:...) na posicao do cursor.
  • Limite de 2MB no arquivo original (evita inflar demais o campo de texto, que e' text sem limite no banco mas ainda assim vale ter um guarda).
  • CSS .markdown-body img { max-width: 100% } pra imagem nao estourar o layout no preview/exibicao publica.

Uso pretendido: campo de corpo de marco de trilha, pra admin colar exemplo visual (print) de como cumprir a prova.

Test plan

  • npx tsc --noEmit
  • npx eslint src/components/markdown-editor.tsx — limpo
  • Confirmar manualmente: colar um print no editor de marco (admin) e ver aparecer no preview

Co-Authored-By: Claude Sonnet 5 noreply@anthropic.com

O campo de markdown (usado no corpo de marcos de trilha, entre outros)
era um textarea puro sem handler de colar imagem — colar uma imagem
copiada simplesmente nao fazia nada, porque textarea so aceita texto.

- onPaste intercepta imagem do clipboard, converte pra data URL
  (base64) via FileReader e insere ![imagem](data:...) na posicao do
  cursor. Guarda de 2MB no arquivo original pra nao inflar o campo de
  texto demais.
- preview ja renderizava <img> nativamente via ReactMarkdown, so
  faltava a regra CSS pra nao estourar o layout (max-width: 100%)

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

vercel Bot commented Jul 30, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
legado-dev Ready Ready Preview Jul 30, 2026 9:23pm

@sonarqubecloud

Copy link
Copy Markdown

@leo-nardo
leo-nardo merged commit 6615904 into main Jul 30, 2026
5 checks passed
@leo-nardo
leo-nardo deleted the feat/markdown-image-paste branch July 30, 2026 21:27
leo-nardo added a commit that referenced this pull request Jul 31, 2026
- scrollbar padrao do navegador (grosso, cinza, quadrado) trocado por
  um fino e discreto em toda a aplicacao (Firefox + Chrome/Edge/Safari),
  sem precisar caçar cada modal/textarea com scroll individualmente
- editor de markdown ganha botao visivel "Inserir imagem" (input de
  arquivo) alem do paste — mais descobrivel que so colar via Ctrl+V

Nota: o PR anterior que adicionava o paste de imagem (#56) foi
mesclado mas a Vercel nunca disparou o deploy de producao pra esse
commit (confirmado via GitHub Deployments API — nao existe deployment
registrado). Nao e' bug de codigo, e' falha do lado da integracao
Vercel/GitHub. Esse commit deve reacionar o webhook.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
leo-nardo added a commit that referenced this pull request Jul 31, 2026
…#58)

Dois problemas na abordagem anterior (PR #56):
1. react-markdown bloqueia data: URI por padrao (defaultUrlTransform
   sanitiza e zera a URL) — por isso a imagem aparecia quebrada no preview.
2. Base64 embutido no texto nao e' o padrao certo pra isso (infla o
   campo, duplica em todo fetch do conteudo). O jeito certo, como em
   qualquer editor decente (TinyMCE etc.), e' fazer upload de verdade
   e guardar so a URL — que e' exatamente o que ja fazemos no
   comprovante de prova (ProofSubmissionForm / useFileUploadService).

Reaproveita esse mesmo pipeline: paste ou clique em "Inserir imagem"
sobem o arquivo pro storage (R2/S3, mesmo endpoint /files/upload) e o
markdown so guarda ![imagem](url-real), que passa normal pelo
sanitizador do react-markdown.

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

This branch was successfully deployed

1 active deployment
Preview — 48897a3e Deployed Jul 30, 2026 by vercel[bot]
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