Быстрая библиотека для 2D-рендеринга в вебе: рисует графику, спрайты и текст с помощью WebGL и WebGPU.
chenglou/pretext
Библиотека на чистом JavaScript/TypeScript измеряет многострочный текст и рассчитывает его раскладку без перерисовки DOM, выводя результат в DOM, Canvas или SVG.
- Звёзды
- 50,839
- Форки
- 2,761
- Открытые issues
- 65
- Последний коммит
- 5 дней назад
Что это?
Pretext измеряет многострочный текст и вычисляет места переносов строк на чистом JavaScript или TypeScript. Благодаря этому код раскладки может получить высоту абзаца или отдельные строки, не обращаясь к `getBoundingClientRect` и `offsetHeight`. Такие обращения к DOM заставляют браузер пересчитывать раскладку страницы, что обходится дорого. Pretext использует для получения ширины текста измерения Canvas в браузере и применяет поверх них собственную логику переноса строк.
Основной процесс состоит из двух вызовов: `prepare()` анализирует и один раз измеряет текст для заданного шрифта, а `layout()` возвращает `height` и `lineCount` для любой максимальной ширины и высоты строки, используя только арифметические операции над закэшированными ширинами. API низкого уровня возвращают отдельные строки, их ширину или курсоры для ручной раскладки — например, для подгонки размера пузырей по содержимому, обтекания изображения текстом или обрезки с многоточием. Расширенный API для встроенных элементов поддерживает смешанные шрифты, фрагменты кода и встроенные блоки, такие как изображения или чипы.
Библиотека поддерживает режимы пробелов `normal` и `pre-wrap`, перенос слов `keep-all` и межбуквенный интервал. Для работы нужен браузер с измерением текста через Canvas 2D, Unicode property escapes и `Intl.Segmenter`; вне браузера необходимо передать собственный измеритель на основе `OffscreenCanvas`.
Ключевые возможности
- 01Вычисляет высоту абзаца и количество строк без перерисовки DOM с помощью `prepare()` и `layout()`.
- 02Возвращает отдельные строки, их ширину и курсоры для ручной раскладки.
- 03Предоставляет расширенный API для встроенных элементов, поддерживающий смешанные шрифты, фрагменты кода и встроенные блоки.
- 04Поддерживает `pre-wrap`, перенос слов `keep-all` и межбуквенный интервал.
- 05Выводит результат в DOM, Canvas или SVG.
Сценарии использования
- Виртуализация длинных списков: высоту каждого элемента можно узнать до его отрисовки.
- Подгонка ширины пузырей чата по самой длинной строке.
- Обтекание плавающих изображений текстом со строками разной ширины.
- Проверка в режиме разработки, что подписи на кнопках не переносятся на вторую строку.
Быстрый старт
- 1
Установите пакет из npm
npm install @chenglou/pretext - 2
Импортируйте prepare и layout, а затем измерьте высоту абзаца, не обращаясь к DOM
Что важно знать
- В качестве лицензии указано NOASSERTION, поэтому условия использования неясны — перед внедрением их следует проверить.
- Измерение зависит от механизма обработки шрифтов в браузере, поэтому точность результатов определяется доступными шрифтами.
Темы
Частые вопросы
- Что такое pretext?
- Библиотека на чистом JavaScript/TypeScript измеряет многострочный текст и рассчитывает его раскладку без перерисовки DOM, выводя результат в DOM, Canvas или SVG. Pretext измеряет многострочный текст и вычисляет места переносов строк на чистом JavaScript или TypeScript. Благодаря этому код раскладки может получить высоту абзаца или отдельные строки, не обращаясь к `getBoundingClientRect` и `offsetHeight`. Такие обращения к DOM заставляют браузер пересчитывать раскладку страницы, что обходится дорого. Pretext использует для получения ширины текста измерения Canvas в браузере и применяет поверх них собственную логику переноса строк.
- pretext можно использовать бесплатно? Какая у него лицензия?
- pretext распространяется с открытым исходным кодом под лицензией Other. Перед использованием в коммерческих продуктах проверьте условия лицензии.
- pretext всё ещё поддерживается?
- Активно поддерживается. Последний коммит в pretext — 15 окт. 2026 г..
- Для чего можно использовать pretext?
- Виртуализация длинных списков: высоту каждого элемента можно узнать до его отрисовки. Подгонка ширины пузырей чата по самой длинной строке. Обтекание плавающих изображений текстом со строками разной ширины. Проверка в режиме разработки, что подписи на кнопках не переносятся на вторую строку.
- Как установить pretext?
- Установите пакет из npm: npm install @chenglou/pretext Импортируйте prepare и layout, а затем измерьте высоту абзаца, не обращаясь к DOM
- Где скачать pretext?
- Исходный код и инструкции по установке — на GitHub: https://github.com/chenglou/pretext
Описание создано ИИ на основе README проекта. Статистика GitHub обновляется ежедневно.
Похожие проекты
WebGL-библиотека для глобуса размером около 5 КБ без зависимостей, позволяющая привязать любой DOM-элемент к глобусу в качестве маркера.
Модульный редактор с открытым исходным кодом для визуального создания страниц в React методом drag-and-drop — на основе ваших компонентов и данных.
Эмулятор терминала для браузера на основе скомпилированного в WASM VT-парсера Ghostty с API, совместимым с xterm.js.
CRM с открытым исходным кодом, которую можно расширять с помощью кода: объекты, представления, рабочие процессы и AI-агенты на TypeScript, React и PostgreSQL.
Платформа с открытым исходным кодом для автоматизации рабочих процессов и альтернатива Zapier; интеграции на TypeScript также работают как MCP-серверы для AI-агентов.