openpencil/tests/e2e
Danila Poyarkov 0f64cecc49
fix(text): finalize font readiness and label shaping (#593)
* fix(text): prepare browser fonts atomically

- Fetch approved Fontsource resources directly in browsers with bounded responses and retryable provider failures
- Limit page font resolution concurrency and retain live Inter substitution paragraphs after baked glyph invalidation
- Shape frame, section, and component labels through a bounded native Paragraph cache
- Cover real Geist, Geist Mono, and Roboto Mono browser loading plus substitution and cache lifecycle behavior

* test(canvas): cover substitution and label shaping

- Capture baked missing-font text before editing, live Inter substitution on first input, and visible undo output
- Assert text-picture and derived-glyph invalidation with finalized substituted readiness
- Cover shaped frame, rotated frame, section, component, component-set, ellipsis, kerning, and zoom label presentation

* fix(text): preserve same-origin fetches during font resolution

- Route same-origin application and fixture requests through native fetch while Unifont temporarily proxies global HTTP requests
- Keep the external provider HTTPS allowlist enforced for cross-origin font resources
- Cover the production race discovered while loading gold-preview.fig during provider initialization

* fix(text): preserve substituted path glyphs

- Keep imported derived curved glyphs for text-on-path layers when exact fonts finalize as substituted
- Cover substituted path rendering through the runtime renderer and refresh the corrected visual oracle
- Update shaped Inter measurement badges and merged typography panel snapshots after visual inspection
- Search virtualized font catalogs explicitly and restore the canvas screenshot helper used by broad E2E coverage

* fix(text): use browser font transport without desktop warning

- Keep the browser provider implementation aligned with current settings behavior after splitting from preparation

* test(text): inject same-origin browser font context

- Keep the transport test deterministic outside a Window global

* fix(text): preserve final browser font transport hardening

- Carry the same-origin large-document bypass and bounded cross-origin provider checks from the preserved integration snapshot

* fix(text): initialize font transport outside Window contexts

- Keep unit and headless module imports safe while browsers use their current origin

* test(text): satisfy async visual fixture contract

- Return from the resolver setup continuation after requesting render

* test(canvas): include paragraph cache lifecycle

* fix(text): cancel queued browser font loads

- Race serialized provider work against preparation cancellation\n- Release queue slots after cancelled waiters without disturbing active requests\n- Reuse one section-title paragraph cache entry for measurement and drawing

* fix(text): close font queue cancellation races

- Release reserved proxy queue slots when cancellation lands after queue acquisition\n- Skip paragraph work for zero-width section labels

* fix(text): abort active provider resolution

- Race active provider resolution against its preparation signal and restore the temporary fetch proxy promptly\n- Forward cancellation through proxied provider requests\n- Align the renderer font-readiness facade with substituted text
2026-08-30 14:33:32 +03:00
..
app feat(app): prepare documents atomically per tab (#592) 2026-08-30 12:21:49 +03:00
canvas fix(text): finalize font readiness and label shaping (#593) 2026-08-30 14:33:32 +03:00
chat perf(chat): release completed streaming parser history (#553) 2026-08-18 17:43:49 +03:00
clipboard refactor(app): modernize browser clipboard adapter (#601) 2026-08-28 14:37:42 +03:00
code feat(code): add live JSX and HTML/CSS editing (#525) 2026-08-15 09:48:42 +03:00
collab test(collab): add deterministic browser sessions (#541) 2026-08-17 12:57:03 +03:00
color-picker fix(app): restore release validation coverage 2026-07-20 16:26:07 +03:00
components feat: add Figma-style variants and component libraries (#512) 2026-08-14 19:31:41 +03:00
context-menu test(app): stabilize final interaction coverage 2026-07-20 16:34:16 +03:00
design feat(vue): add responsive property grids 2026-07-26 12:42:50 +03:00
dom-css feat(dom-css): map image aspect styles 2026-06-30 10:51:37 +03:00
editor fix(editor): commit vector drags on pointer release (#586) 2026-08-24 16:02:27 +03:00
export feat(app): migrate paint effect and export panels 2026-07-14 17:06:28 +03:00
fonts fix(text): finalize font readiness and label shaping (#593) 2026-08-30 14:33:32 +03:00
keyboard feat(app): expand Figma menu and selection parity (#459) 2026-08-03 00:23:05 +03:00
layers perf(scene-graph): accelerate axis-aligned hit tests (#534) 2026-08-16 15:43:25 +03:00
native feat(editor): add configurable snapping and guides 2026-08-18 19:11:48 +03:00
pages Release v0.14.0 2026-08-10 11:40:44 +03:00
panels feat(vue): add responsive property grids 2026-07-26 12:42:50 +03:00
perf perf(scene-graph): accelerate axis-aligned hit tests (#534) 2026-08-16 15:43:25 +03:00
properties fix(editor): commit vector drags on pointer release (#586) 2026-08-24 16:02:27 +03:00
scene fix(editor): commit vector drags on pointer release (#586) 2026-08-24 16:02:27 +03:00
settings feat(app): add language picker to General settings 2026-08-29 16:01:03 +03:00
snap feat(editor): add configurable snapping and guides 2026-08-18 19:11:48 +03:00
storage fix(storage): harden workspace previews 2026-08-10 20:02:58 +03:00
stroke-picker feat(app): migrate paint effect and export panels 2026-07-14 17:06:28 +03:00
text fix(text): finalize font readiness and label shaping (#593) 2026-08-30 14:33:32 +03:00
toolbar feat(editor): add Figma-style frame presets (#418) 2026-07-26 00:05:57 +03:00
tools feat(app): migrate position and appearance panels 2026-07-13 14:47:48 +03:00
ui test(ui): keep runtime theme import dependency-safe 2026-07-20 14:07:32 +03:00
variables fix(app): polish variable dialog states 2026-07-18 05:25:40 +03:00
vectorize feat(app): convert image layers to vectors 2026-07-27 16:22:05 +03:00
viewport
autosave.spec.ts fix(app): retain recovery after closing unsaved tabs (#505) 2026-08-13 21:39:35 +03:00
components.spec.ts feat(app): finish Design panel migration 2026-07-14 17:40:56 +03:00
fixtures.ts test(app): stabilize final interaction coverage 2026-07-20 16:34:16 +03:00
recovery.spec.ts fix(app): retain recovery after closing unsaved tabs (#505) 2026-08-13 21:39:35 +03:00