← Ко всем open source проектам

Pretext

chenglou/pretext

Pretext — TypeScript-библиотека для быстрого измерения и раскладки многострочного текста без постоянных DOM-измерений.

Форки 2,692
Автор chenglou
Язык TypeScript
Лицензия MIT
Обновлено 2026-06-10

Что это такое

Pretext — молодая TypeScript-библиотека для измерения и раскладки многострочного текста. Она решает болезненную задачу интерфейсов: понять высоту абзаца, переносы строк и расположение текста без постоянных DOM-измерений вроде getBoundingClientRect или offsetHeight, которые могут вызывать дорогой перерасчет layout.

Репозиторий создан в 2026 году, поэтому это свежий проект, а не зрелый стандарт. Тем не менее проблема, которую он решает, очень практичная: виртуальные списки, редакторы, canvas/SVG-рендеринг, предпросмотр сообщений и сложные интерфейсы часто упираются в измерение текста.

Что внутри

Библиотека разделяет подготовку текста и быстрый расчет раскладки. prepare нормализует пробелы, сегментирует текст и заранее измеряет части, а layout затем дешево пересчитывает строки и высоту для заданной ширины. Такой подход особенно полезен при ресайзе: не нужно заново делать всю тяжелую подготовку.

Измерение абзаца без DOM-разметки

Пример показывает основную модель: подготовить текст один раз, а затем быстро считать высоту и количество строк для нужной ширины.

Язык: TypeScript
import { prepare, layout } from "@chenglou/pretext";

const prepared = prepare("AGI весна. بدأت الرحلة 🚀", "16px Inter");
const result = layout(prepared, 320, 20);

console.log(result.height, result.lineCount);

Где полезен

Pretext может быть полезен в редакторах, чатах, досках, инструментах дизайна, canvas-приложениях и любых местах, где текст нужно раскладывать вручную или предсказывать размер до реального рендера. Поддержка разных письменностей особенно важна: переносы и сегментация сильно отличаются между языками.

Ограничения

Главное ограничение — молодость проекта и сложность самой области. Браузерная типографика полна крайних случаев: шрифты, emoji, bidirectional text, переносы, white-space и разные движки. Pretext выглядит перспективно, но для критичного интерфейса его стоит проверять на собственных языках, шрифтах и размерах.