Uma biblioteca rápida de renderização 2D para a web que desenha gráficos, sprites e texto com WebGL e WebGPU.
chenglou/pretext
Biblioteca pura de JavaScript/TypeScript que mede e organiza texto em várias linhas sem provocar reflow do DOM nem renderizar no DOM, Canvas ou SVG.
- Estrelas
- 50,839
- Forks
- 2,761
- Issues abertas
- 65
- Último commit
- há 5 dias
O que é?
Pretext mede textos em várias linhas e calcula as quebras de linha em JavaScript ou TypeScript puro, para que o código de layout possa obter a altura de um parágrafo ou suas linhas individuais sem ler `getBoundingClientRect` ou `offsetHeight`. Essas leituras do DOM forçam o navegador a recalcular o layout da página, o que é custoso. Pretext usa a medição de texto do Canvas do navegador como fonte das larguras e aplica sua própria lógica de quebra de linha.
O fluxo básico consiste em duas chamadas: `prepare()` analisa e mede o texto uma vez para uma determinada fonte, e `layout()` retorna `height` e `lineCount` para qualquer largura máxima e altura de linha, usando apenas operações aritméticas sobre as larguras em cache. APIs de nível mais baixo retornam linhas individuais, larguras de linha ou cursores para layouts manuais, como balões ajustados ao conteúdo, texto contornando uma imagem ou truncamento com reticências. Uma API rica para conteúdo inline lida com fontes variadas, trechos de código e caixas inline, como imagens ou chips.
A biblioteca oferece suporte aos modos de espaço em branco `normal` e `pre-wrap`, à quebra de palavras `keep-all` e ao espaçamento entre letras. Ela precisa de um navegador com medição de texto do Canvas 2D, escapes de propriedades Unicode e `Intl.Segmenter`; fora do navegador, é necessário fornecer um medidor `OffscreenCanvas` personalizado.
Recursos principais
- 01Calcula a altura e o número de linhas de um parágrafo sem reflow do DOM, usando `prepare()` e `layout()`.
- 02Retorna linhas individuais, larguras de linha e cursores para layouts manuais.
- 03Inclui uma API rica para conteúdo inline com fontes variadas, trechos de código e caixas inline.
- 04Oferece suporte a `pre-wrap`, à quebra de palavras `keep-all` e ao espaçamento entre letras.
- 05Renderiza os resultados no DOM, Canvas ou SVG.
Casos de uso
- Virtualizar listas longas sabendo a altura de cada item antes da renderização.
- Ajustar balões de chat à largura da linha mais longa.
- Fazer o texto contornar imagens flutuantes, com linhas de larguras variadas.
- Verificar durante o desenvolvimento se os rótulos dos botões não quebram para uma segunda linha.
Início rápido
- 1
Instale o pacote pelo npm
npm install @chenglou/pretext - 2
Importe prepare e layout e, em seguida, meça a altura de um parágrafo sem tocar no DOM
Antes de usar
- A licença está indicada como NOASSERTION, então os termos de uso não estão claros e devem ser verificados antes da adoção.
- A medição depende do mecanismo de fontes do navegador, portanto os resultados exatos variam conforme as fontes disponíveis.
Tópicos
Perguntas frequentes
- O que é pretext?
- Biblioteca pura de JavaScript/TypeScript que mede e organiza texto em várias linhas sem provocar reflow do DOM nem renderizar no DOM, Canvas ou SVG. Pretext mede textos em várias linhas e calcula as quebras de linha em JavaScript ou TypeScript puro, para que o código de layout possa obter a altura de um parágrafo ou suas linhas individuais sem ler `getBoundingClientRect` ou `offsetHeight`. Essas leituras do DOM forçam o navegador a recalcular o layout da página, o que é custoso. Pretext usa a medição de texto do Canvas do navegador como fonte das larguras e aplica sua própria lógica de quebra de linha.
- pretext é gratuito? Qual é a licença?
- pretext é open source sob a licença Other. Confira os termos da licença antes de usá-lo em produtos comerciais.
- pretext ainda é mantido?
- Manutenção ativa. O último commit de pretext foi em 15 de out. de 2026.
- Para que posso usar pretext?
- Virtualizar listas longas sabendo a altura de cada item antes da renderização. Ajustar balões de chat à largura da linha mais longa. Fazer o texto contornar imagens flutuantes, com linhas de larguras variadas. Verificar durante o desenvolvimento se os rótulos dos botões não quebram para uma segunda linha.
- Como instalar pretext?
- Instale o pacote pelo npm: npm install @chenglou/pretext Importe prepare e layout e, em seguida, meça a altura de um parágrafo sem tocar no DOM
- Onde consigo pretext?
- O código-fonte e as instruções de instalação estão no GitHub: https://github.com/chenglou/pretext
Resumo gerado por IA a partir do README do projeto. As estatísticas do GitHub são atualizadas diariamente.
Projetos relacionados
Uma biblioteca WebGL para globos, com cerca de 5 KB e sem dependências, que permite vincular qualquer elemento do DOM ao globo como marcador.
Um editor visual modular e open source de arrastar e soltar para React, que renderiza páginas com seus próprios componentes e dados.
Emulador de terminal para navegador baseado no parser VT do Ghostty compilado para WASM, com API compatível com xterm.js.
Um CRM de código aberto que você pode estender como código, com objetos, visualizações, workflows e agentes de IA, desenvolvido com TypeScript, React e PostgreSQL.
Plataforma open source de automação de workflows e alternativa ao Zapier, com integrações em TypeScript que também funcionam como servidores MCP para agentes de IA.