openpencil/packages/core/src
Danila Poyarkov cb7018a2d7
perf: stop repeating glyph coverage and component sync during layout (#957)
* perf(text): keep glyph coverage when layout resizes a text box

Every layout write invalidated a text node's coverage record by id, and the record compared its width and height, so each measurement shaped the text twice. Coverage now ignores the box size unless the text is truncated, and an update that changes only fields coverage compares keeps the record. A demo load went from about 38,000 coverage checks with 228 hits to one shaping per text node.

* perf(editor): skip component sync for layout's own writes

Layout lays out instances itself, and the edit that made it run has already scheduled its sync. Its size and position writes scheduled about 56,000 more, so each yield of an async build re-synchronised components and re-laid out whole pages.
2026-10-07 18:46:56 +00:00
..
cache refactor(canvas): share bounded resource cache bookkeeping 2026-09-15 21:28:16 +03:00
canvas perf: stop repeating glyph coverage and component sync during layout (#957) 2026-10-07 18:46:56 +00:00
clipboard fix: validate parsed JSON at untrusted boundaries with Valibot (#855) 2026-10-04 17:01:50 +00:00
design-jsx feat(collab): show MCP agents, follow streamed JSX, and follow your agents as they work (#725) 2026-10-07 10:04:58 +00:00
editor perf: stop repeating glyph coverage and component sync during layout (#957) 2026-10-07 18:46:56 +00:00
figma-api fix: keep stored page backgrounds and number layers by their own page (#949) 2026-10-07 13:35:59 +00:00
geometry fix: match Figma's panel X, Y, rotation and themed page backgrounds (#940) 2026-10-07 10:02:52 +00:00
icons fix(core): fill open subpaths of filled SVG paths (#876) 2026-10-04 13:25:23 +00:00
io feat: behaviours and preview mode (#893) 2026-10-06 13:23:05 +00:00
kiwi fix(fig): write text glyphs from the layout the renderer draws (#928) 2026-10-06 11:37:02 +00:00
layout fix: keep bound text and visibility in step with their variables (#954) 2026-10-07 18:37:15 +00:00
library feat: behaviours and preview mode (#893) 2026-10-06 13:23:05 +00:00
lint chore: prefer es-toolkit helpers and lint the mechanical cases (#898) 2026-10-05 09:34:00 +00:00
openpencil-api feat: behaviours and preview mode (#893) 2026-10-06 13:23:05 +00:00
profiler perf(canvas): rebuild navigation rendering (#591) 2026-08-31 13:39:40 +03:00
rpc feat: write variables as a CSS token stylesheet (#856) 2026-10-04 18:15:52 +00:00
text fix: show the caret in new, empty text (#932) 2026-10-06 12:33:49 +00:00
tools feat(mcp): let MCP clients read only the selection, with a compact get_selection (#732) 2026-10-07 13:01:28 +00:00
vector chore: prefer es-toolkit helpers and lint the mechanical cases (#898) 2026-10-05 09:34:00 +00:00
canvaskit.ts fix(editor): preserve edits over imported metadata 2026-05-21 14:54:17 +03:00
clipboard.ts fix(fig): keep filled frames and copied text sized as in OpenPencil when exported to Figma (#956) 2026-10-07 18:05:23 +00:00
constants.ts feat(canvas): select auto layout frames by their gaps and dot their children, as in Figma (#943) 2026-10-07 11:29:52 +00:00
global.d.ts fix(figma-api): validate effects like Figma (#794) 2026-09-30 21:18:20 +04:00
index.ts feat: behaviours and preview mode (#893) 2026-10-06 13:23:05 +00:00
layout.ts feat: show controls in a prebuilt demo and fix what saving it to .fig lost (#938) 2026-10-07 18:37:05 +00:00
xpath.ts fix(core): load fontoxpath under Node's ESM loader (#824) 2026-10-06 11:44:16 +00:00