What’s New

pretext

Frameworks & Libraries

Fast, accurate and comprehensive text measurement and layout.

Latest v0.0.8 · by chenglouWebsite

Changelog

v0.0.8

v0.0.8: Release 0.0.8

Release 0.0.8 Co-Authored-By: Claude Fable 5

Added 1
  • The published package now ships declaration maps, so editor go-to-definition and programmatic TypeScript source tracing land in the shipped .ts source instead of the .d.ts files
Fixed 2
  • Word-internal keyboard and Unicode symbol runs in long words now stay with surrounding text the way browsers break them, while browser-break symbols stay breakable
  • Overlong hyphenated runs now prefer browser-like dash breakpoints before falling back to emergency grapheme breaks
Added
  • The published package now ships declaration maps, so editor go-to-definition and programmatic TypeScript source tracing land in the shipped .ts source instead of the .d.ts files.
Fixed
  • Word-internal keyboard and Unicode symbol runs in long words now stay with surrounding text the way browsers break them, while browser-break symbols stay breakable (#169).
  • Overlong hyphenated runs now prefer browser-like dash breakpoints before falling back to emergency grapheme breaks (#89).

v0.0.7

Changed 2
  • The package now declares itself side-effect-free so bundlers can tree-shake unused entrypoints
  • layoutNextLine() and layoutNextLineRange() now avoid redundant chunk lookup in chunk-heavy manual layout paths
Fixed 8
  • { wordBreak: 'keep-all' } now handles no-space mixed Latin, numeric, and CJK text more like browsers
  • No-space punctuation chains now stay together for non-ASCII word-like text too, instead of only ASCII words
  • Opening punctuation such as ¡, ¿, German low quotes, and ⸘ now stays with the following word instead of dangling at line end
  • Numeric prefix/postfix symbols like $, %, €, +, −, and ° now stay attached to adjacent text the way browser line breaking does
  • Soft-hyphen breaks now stay at the soft-hyphen insertion point instead of pulling post-hyphen graphemes onto the broken line
  • Line geometry now preserves browser-style terminal letter spacing, including rich-inline item boundaries and visible soft-hyphen breaks
  • Rich-inline item boundaries no longer overflow the requested width after a forced-progress break
  • The markdown chat demo now drops parsed link URLs unless they resolve to HTTP(S) hrefs
Changed
  • The package now declares itself side-effect-free so bundlers can tree-shake unused entrypoints (#160).
  • layoutNextLine() and layoutNextLineRange() now avoid redundant chunk lookup in chunk-heavy manual layout paths (#140).
Fixed
  • { wordBreak: 'keep-all' } now handles no-space mixed Latin, numeric, and CJK text more like browsers.
  • No-space punctuation chains now stay together for non-ASCII word-like text too, instead of only ASCII words.
  • Opening punctuation such as ¡, ¿, German low quotes, and now stays with the following word instead of dangling at line end (#165).
  • Numeric prefix/postfix symbols like $, %, , +, , and ° now stay attached to adjacent text the way browser line breaking does (#105).
  • Soft-hyphen breaks now stay at the soft-hyphen insertion point instead of pulling post-hyphen graphemes onto the broken line (#162).
  • Line geometry now preserves browser-style terminal letter spacing, including rich-inline item boundaries and visible soft-hyphen breaks (#171).
  • Rich-inline item boundaries no longer overflow the requested width after a forced-progress break (#132).
  • The markdown chat demo now drops parsed link URLs unless they resolve to HTTP(S) hrefs (#168).

v0.0.6

Added 1
  • Numeric CSS-pixel letterSpacing support on prepare(), prepareWithSegments(), and each existing rich-inline item
Fixed 1
  • CJK text followed by opening bracket annotations now wraps like browsers instead of leaving the opening bracket on the previous line
Added
  • Numeric CSS-pixel letterSpacing support on prepare(), prepareWithSegments(), and each existing rich-inline item (#108, #156).
Fixed
  • CJK text followed by opening bracket annotations now wraps like browsers instead of leaving the opening bracket on the previous line (#148).

v0.0.5

Added 4
  • Add geometry-first rich line helpers for manual layout work: measureLineStats(), measureNaturalWidth(), layoutNextLineRange(), and materializeLineRange()
  • Add @chenglou/pretext/rich-inline, a narrow helper for inline-only rich text, mentions/chips, and browser-like boundary whitespace collapse
  • Add { wordBreak: 'keep-all' } support on prepare() / prepareWithSegments() for CJK and Hangul text
  • Add a virtualized markdown chat demo for rich inline text and pre-wrap layout
Changed 1
  • Make prepare-time analysis more resilient on long mixed-script, CJK, Arabic, repeated-punctuation, and other degenerate inputs
Fixed 2
  • Fix mixed CJK-plus-numeric runs, keep-all mixed-script boundaries, and long breakable runs to stay closer to browser behavior
  • Fix rich-path bidi metadata and CJK detection to handle the relevant astral Unicode ranges correctly
Added
  • Geometry-first rich line helpers for manual layout work: measureLineStats(), measureNaturalWidth(), layoutNextLineRange(), and materializeLineRange().
  • @chenglou/pretext/rich-inline, a narrow helper for inline-only rich text, mentions/chips, and browser-like boundary whitespace collapse.
  • { wordBreak: 'keep-all' } support on prepare() / prepareWithSegments() for CJK and Hangul text.
  • A virtualized markdown chat demo for rich inline text and pre-wrap layout.
Changed
  • Prepare-time analysis is more resilient on long mixed-script, CJK, Arabic, repeated-punctuation, and other degenerate inputs.
Fixed
  • Mixed CJK-plus-numeric runs, keep-all mixed-script boundaries, and long breakable runs now stay closer to browser behavior.
  • Rich-path bidi metadata and CJK detection now handle the relevant astral Unicode ranges correctly.

v0.0.4

Added 1
  • A justification comparison demo that shows native CSS justification, greedy hyphenation, and a Knuth-Plass-style paragraph layout side by side
Changed 1
  • Rich layout is faster on chunk-heavy and long-breakable text
Fixed 2
  • layout(), layoutWithLines(), and layoutNextLine() stay aligned on narrow ZWSP / grapheme-breaking edge cases
  • The justification comparison demo no longer paints justified lines wider than their column
Added
  • A justification comparison demo that shows native CSS justification, greedy hyphenation, and a Knuth-Plass-style paragraph layout side by side.
Changed
  • Rich layout is faster on chunk-heavy and long-breakable text.
Fixed
  • layout(), layoutWithLines(), and layoutNextLine() stay aligned on narrow ZWSP / grapheme-breaking edge cases.
  • The justification comparison demo no longer paints justified lines wider than their column.

Discussion