Motor de Layout de Texto JavaScript
A biblioteca Pretext e a forma mais rapida de medir texto multilinha na web. Esta biblioteca JavaScript de medicao de texto calcula quebras de linha, alturas e layout sem tocar no DOM — aproximadamente 600x mais rapida que a medicao tradicional do navegador. A biblioteca Pretext funciona em qualquer framework, qualquer navegador e qualquer idioma.
Visao Geral
A biblioteca Pretext e um motor de layout de texto em JavaScript/TypeScript puro criado por Cheng Lou, ex-membro da equipe principal do React e atualmente na Midjourney. Diferente das abordagens tradicionais que exigem que o navegador renderize o texto no DOM antes de medi-lo, a biblioteca Pretext divide o layout de texto em duas fases leves — tornando-a a biblioteca JavaScript de medicao de texto mais rapida disponivel.
A primeira fase da biblioteca Pretext e a preparacao. Voce chama prepare() uma vez com o texto e a fonte. A biblioteca Pretext segmenta o texto usando regras Unicode e mede a largura de cada glifo via a API measureText() do Canvas. Isso normalmente leva de 0,1 a 1ms dependendo do tamanho do texto.
A segunda fase e o layout. Voce chama layout() com a largura do container e a altura da linha. A biblioteca Pretext percorre as larguras de segmentos em cache usando aritmetica pura — sem acesso ao DOM, sem reflow DOM forcado. Uma unica chamada de layout na biblioteca Pretext leva ~0,001ms, rapida o suficiente para executar milhares de vezes por frame. O handle preparado e reutilizavel: calcule alturas para mobile, tablet e desktop a partir do mesmo handle em tres operacoes.

$ npm install @chenglou/pretext import { prepare, layout } from '@chenglou/pretext' const prepared = prepare('Your text', '16px Inter') const { height, lineCount } = layout(prepared, 400, 24)
Por Que Escolher Esta Biblioteca
A biblioteca Pretext foi projetada desde o inicio para desempenho web e ergonomia do desenvolvedor. Veja o que torna a biblioteca Pretext a melhor escolha para medicao de texto em aplicacoes JavaScript.
A biblioteca Pretext nunca le nem escreve no DOM durante o layout. Apos a medicao inicial no Canvas, cada operacao subsequente e aritmetica pura. Isso elimina layout sincrono forcado, reflow DOM e layout thrashing — os tres maiores problemas de desempenho web em aplicacoes com muito texto.
A biblioteca Pretext e um modulo JavaScript autonomo com zero dependencias. Importe-a no React, Vue, Svelte, Angular ou JavaScript puro. A biblioteca Pretext funciona de forma identica em qualquer ambiente — client-side, server-side ou Web Workers.
A biblioteca Pretext usa Intl.Segmenter para segmentacao de texto com suporte a Unicode. CJK, arabe, hebraico, tailandes, coreano e texto com scripts mistos sao todos medidos com precisao pela mesma API. A biblioteca Pretext lida com texto bidirecional e scripts complexos sem tratamento especial.
Cada chamada de <code>layout()</code> na biblioteca Pretext leva aproximadamente 0,001ms — aritmetica pura sobre larguras de glifos em cache. Voce pode chamar <code>layout()</code> milhares de vezes por frame de animacao. Isso torna a biblioteca Pretext ideal para reflow DOM em tempo real, redimensionamento responsivo e tipografia interativa.
A biblioteca Pretext suporta controle de largura por linha via <code>layoutNextLine()</code>. O texto pode fluir ao redor de obstaculos, seguir formas irregulares ou se adaptar a layouts editoriais complexos. Esta e a mesma tecnica usada em quebra de texto estilo revista e projetos de tipografia criativa construidos com a biblioteca Pretext.
A biblioteca Pretext e escrita em TypeScript com definicoes de tipo completas. Cada funcao, parametro e tipo de retorno e fortemente tipado. Autocompletar no IDE e verificacao de tipos funcionam nativamente — nenhum pacote @types necessario ao usar a biblioteca Pretext no seu projeto.
Comparacao de Desempenho
A medicao DOM tradicional cria elementos invisiveis, renderiza o texto, le a altura calculada e remove o elemento. A biblioteca Pretext elimina todo esse ciclo. Veja como a biblioteca Pretext se compara as abordagens tradicionais.
| Aspecto | Medicao DOM | Biblioteca Pretext |
|---|---|---|
| Velocidade por medicao | 0,5–2ms (reflow DOM forcado) | ~0,001ms (aritmetica pura) |
| Acesso ao DOM necessario | Sim — cria elementos ocultos | Nao — zero leituras/escritas no DOM |
| Layout thrashing | Sim — aciona reflow DOM do navegador | Nunca — reflow impossivel |
| Suporte a SSR / Web Worker | Nao — requer DOM do navegador | Sim — funciona em qualquer lugar |
| Tamanho do bundle | Nativo do navegador (mas lento) | ~15KB gzipado, 0 deps |
| Multiplas larguras do mesmo texto | Re-renderizar para cada largura | Reutilizar handle — instantaneo |
| Suporte a Unicode e CJK | Depende da renderizacao de texto do navegador | Intl.Segmenter — preciso |
Aplicacoes
A biblioteca Pretext se destaca onde quer que a medicao de texto seja um gargalo. De scroll virtual a tipografia criativa, veja as formas mais comuns como desenvolvedores usam a biblioteca Pretext em producao.
Pre-calcule alturas para milhares de itens de lista com altura variavel usando a biblioteca Pretext. Nenhum elemento DOM necessario. Funciona com React Virtuoso, TanStack Virtual e qualquer biblioteca de virtualizacao para scroll a 60fps.
Preveja alturas de bolhas de mensagem com a biblioteca Pretext antes que respostas de IA em streaming terminem a renderizacao de texto. Elimine mudancas de layout e instabilidade. Ajuste bolhas para minimizar espaco desperdicado no mobile.
Dimensione tooltips de graficos, celulas de tabela e layouts de cards com a biblioteca Pretext — sem reflow DOM sincrono forcado. Mantenha 60fps mesmo com centenas de elementos de texto visiveis atualizando em tempo real.
Use a biblioteca Pretext para calcular alturas de texto em multiplos breakpoints a partir de uma unica chamada <code>prepare()</code>. Mobile, tablet e desktop — tres operacoes aritmeticas do mesmo handle, zero reflows.
Construa layouts editoriais onde o texto flui ao redor de obstaculos, spreads multi-coluna estilo revista ou arte ASCII com particulas. A biblioteca Pretext oferece controle por linha que a quebra de texto por CSS sozinha nao consegue alcancar.
A biblioteca Pretext mede texto CJK, arabe, hebraico, tailandes, coreano e scripts mistos com a mesma API de duas funcoes. Segmentacao Unicode e texto bidirecional sao tratados automaticamente atraves de metricas de fonte precisas.
API
A biblioteca Pretext expoe uma API pequena e focada. Cada funcao na biblioteca Pretext tem um proposito especifico — preparacao ou layout. Aqui esta a referencia completa das funcoes.
| Funcao | Fase | Proposito |
|---|---|---|
| prepare(text, font) | Preparacao | Segmentar e medir texto. Retorna handle opaco. |
| prepareWithSegments(text, font) | Preparacao | Como prepare(), mas expoe dados de segmento para uso avancado. |
| layout(prepared, width, lineHeight) | Layout | Calcular contagem de linhas e altura total. Aritmetica pura. |
| layoutWithLines(prepared, width, lineHeight) | Layout | Como layout(), mais o texto e largura de cada linha. |
| layoutNextLine(prepared, cursor, width) | Layout | Layout de uma linha por vez. Largura variavel por linha. |
| walkLineRanges(prepared, width, cb) | Layout | Iterar limites de linha sem construir strings. |
Inicio Rapido
Instalar a biblioteca Pretext leva um comando. A biblioteca Pretext e distribuida como um unico pacote npm com zero dependencias. Siga estes tres passos para comecar a usar a biblioteca Pretext no seu projeto.
Adicione a biblioteca Pretext ao seu projeto com npm, pnpm ou yarn. O pacote e @chenglou/pretext — aproximadamente 15KB gzipado com zero dependencias.
Chame prepare(text, font) uma vez por par texto+fonte. A biblioteca Pretext segmenta o texto e mede larguras de glifos via Canvas. Armazene o handle para reutilizar em multiplas chamadas de layout.
Chame layout(handle, width, lineHeight) para obter a altura e contagem de linhas. A biblioteca Pretext calcula isso com aritmetica pura em ~0,001ms. Reutilize o mesmo handle para diferentes larguras de container.
A biblioteca Pretext e open source, licenciada sob MIT e pronta para producao. Experimente no playground interativo, explore demos da comunidade ou mergulhe no codigo-fonte no GitHub. Junte-se a milhares de desenvolvedores que ja usam a biblioteca Pretext para medicao de texto rapida e sem DOM.
A biblioteca Pretext foi criada por Cheng Lou. Saiba mais sobre o ecossistema GitHub Pretext.