mirror of
https://github.com/penpot/penpot.git
synced 2026-09-14 16:09:01 +00:00
* 🐛 Fix missing text in legacy SVG board thumbnails Board thumbnails rendered by frame-imposter used React's renderToStaticMarkup, a synchronous pass with no live DOM to measure text against. Text shapes without a persisted position-data value therefore rendered as nothing, so a cached board thumbnail silently lost its text until the board was hovered, selected, or the canvas was zoomed past 130%, all of which bypass the cached thumbnail in favor of live content. frame-imposter now provides the same is-render? context the standalone exporter already sets, so text without position-data falls back to the synchronous foreignObject renderer instead of rendering nothing. Thumbnails cached before this fix stay broken until something regenerates them, so on each page load, board thumbnails containing text are opportunistically regenerated once per browser (tracked via local-storage) so existing files self-heal without requiring an edit. AI-assisted-by: claude-sonnet-5 * ♻️ Use a transducer in heal-stale-text-thumbnails Fixes a PR review comment: the frame filtering/mapping was spread across four separate rx operators. Collapse it into a single transducer pass over frame-ids, leaving only one rx/map to perform the mark-healed side effect and build the update-thumbnail action.