Верстка текста
без CSS

Чистая математика. Без DOM. В 500 раз быстрее.

Двигай мышкой — текст живой

Обтекание мемами

Таскай кружок — мемы обтекают его в реальном времени. 60 fps, ноль обращений к DOM.

Текстовая волна

Каждый символ рассчитан математикой. Наведи мышь — создай рябь. Кликни — ударная волна.

Дождь из мемов

Тысячи символов падают и переливаются. Кликни — взрыв мемов.

Гравитация слов

Слова падают и сталкиваются. Кликни, чтобы подбросить. Двигай мышкой — отталкивай.

Производительность

0
x быстрее
layout() vs DOM reflow
0
мс
500 текстов layout()
0
мс
500 текстов prepare()
0
DOM-чтений
ноль getBoundingClientRect

Как это работает

1

prepare()

Одноразовый анализ: нормализация, сегментация, правила переноса Unicode, измерение через canvas. ~19мс на 500 текстов.

2

layout()

Чистая арифметика из кешированных измерений. Высота, строки, перенос — всё за ~0.09мс. Без единого касания DOM.

3

render()

Вывод куда угодно: DOM, Canvas, SVG, сервер. Вы контролируете рендер. Полная свобода, ноль layout thrashing.

Все языки мира

Русский
English
العربية
中文
日本語
한국어
עברית
हिन्दी
Emoji 🚀🔥💀
Микс: AGI春天 بدأت 🤡

Минимальный API

app.js
import { prepare, layout } from '@chenglou/pretext'

// Одноразовое измерение
const prepared = prepare('Ваш текст здесь', '16px Inter')

// Мгновенный layout — вызывай на каждый resize
const { height, lineCount } = layout(prepared, width, 20)

// Обтекание препятствий
let cursor = { segmentIndex: 0, graphemeIndex: 0 }
while (true) {
  const line = layoutNextLine(prepared, cursor, w)
  if (!line) break
  ctx.fillText(line.text, 0, y)
}

Попробовать?

GitHub npm install