Commit graph

1381 commits

Author SHA1 Message Date
Danila Poyarkov ea323c33f0 fix(clipboard): match shaped glyphs by character index, not array position 2026-05-16 18:38:58 +03:00
Danila Poyarkov 578b93e189 fix(clipboard): use CanvasKit shaping + pretext word wrap for Figma text
- shapeTextForClipboard() now processes all lines, not just the first
- buildFigmaClipboardHTML() passes CanvasKit-shaped positions to
  derivedTextData when available (browser with CanvasKit loaded)
- Add @chenglou/pretext for proper Unicode-aware word wrapping as
  fallback when CanvasKit isn't available (CLI, headless, .fig export)
- Falls back to basic word-boundary wrapping if pretext fails
2026-05-16 18:26:24 +03:00
Danila Poyarkov 7cfa08aec5 fix(clipboard): normalize glyph advance by fontSize
Figma expects derivedTextData glyph advance values normalized to
font-size units (advance / fontSize), not absolute pixel values.
This caused pasted text to appear horizontally mirrored because
Figma multiplied the already-absolute advances by fontSize again.
2026-05-16 18:02:10 +03:00
Danila Poyarkov 680350cdcb test(e2e): extract shared editor setup and store helpers
- useEditorSetup() / useEditorSetupWithClear() in tests/e2e/fixtures.ts
- Migrated 15 simple specs to shared fixture
- Moved getSelectedNode/getSelectedNodes to tests/helpers/store.ts
- Replaced inline getSelectedNode in 4 specs
- Reverted 8 specs with custom beforeAll setup (not fixture-compatible)
- Test duplication in tests/: 329 → 307 clones (10.12% → 8.95%)
2026-05-16 16:55:34 +03:00
Danila Poyarkov 11e38b626a test(e2e): extract shared editor setup fixture
- useEditorSetup() / useEditorSetupWithClear() in tests/e2e/fixtures.ts
- Migrated 17 specs to shared fixture, removing ~300 lines of boilerplate
- Moved getSelectedNode/getSelectedNodes to shared store helpers
- Replaced inline getSelectedNode in 4 specs with shared import
- Test duplication: 329 → 308 clones (10.12% → 9.08%)
2026-05-16 16:19:03 +03:00
Danila Poyarkov e7b610b228 docs: restore dropped user-facing changelog entries 2026-05-16 15:42:52 +03:00
Danila Poyarkov a33100b076 docs: tighten changelog for end users 2026-05-16 15:42:18 +03:00
Danila Poyarkov 9c5db24cf5 docs: update changelog for test and quality improvements 2026-05-16 15:40:06 +03:00
Danila Poyarkov 23583525f5 test(e2e): hide rulers in visual regression snapshots
- Add &no-rulers to all E2E test URLs that use &no-chrome
- Regenerate snapshots without ruler ticks/selection badges
- Remove stale snapshot dirs from old test paths
2026-05-16 15:36:37 +03:00
Danila Poyarkov f7445c88e8 chore: include dupe detection in check gate 2026-05-16 15:12:35 +03:00
Danila Poyarkov 41b314b5ef chore(test): require zero duplicate clones 2026-05-16 14:49:06 +03:00
Danila Poyarkov e94323ee29 refactor: remove duplicated implementation blocks 2026-05-16 14:45:32 +03:00
Danila Poyarkov b460d194e7 chore(test): trim stale path redirects 2026-05-16 14:28:40 +03:00
Danila Poyarkov 41fccdfcc6 chore(test): flag broad engine basic tests 2026-05-16 14:26:44 +03:00
Danila Poyarkov 46bf5a2bd2 test(engine): split profiler coverage by module 2026-05-16 14:15:04 +03:00
Danila Poyarkov cb51fc73fc test(tauri): clean up font cache mocks 2026-05-16 13:55:09 +03:00
Danila Poyarkov bf636155cf test(engine): stabilize render and heavy fig tests 2026-05-16 13:39:45 +03:00
Danila Poyarkov e6a6926f39 test(engine): split geometry coverage by domain 2026-05-16 13:30:25 +03:00
Danila Poyarkov ab700fd8be test(engine): stabilize full engine smoke 2026-05-16 13:27:46 +03:00
Danila Poyarkov 21b649e540 test(engine): organize clipboard and vector coverage 2026-05-16 13:18:38 +03:00
Danila Poyarkov 2fc90769b1 fix(kiwi): export variant prop defs as text 2026-05-16 13:09:48 +03:00
Danila Poyarkov 535d243a14 test(engine): split mutation coverage by domain 2026-05-16 12:51:43 +03:00
Danila Poyarkov 83bb90c188 test(figma): place image api coverage with figma api tests 2026-05-16 12:40:49 +03:00
Danila Poyarkov 39acdd82c7 test(engine): split image coverage by domain 2026-05-16 12:38:00 +03:00
Danila Poyarkov 6eb50affc4 test(engine): move root tests into domains 2026-05-16 12:30:27 +03:00
Danila Poyarkov 937577c0e6 chore(test): generalize engine domain redirects 2026-05-16 12:22:03 +03:00
Danila Poyarkov fca62ac3fe chore(test): guard engine test domains 2026-05-16 12:18:21 +03:00
Danila Poyarkov a710841392 test(engine): align io tests with source tree 2026-05-16 11:59:02 +03:00
Danila Poyarkov 9616094766 refactor(text): group derived text helpers 2026-05-16 11:56:35 +03:00
Danila Poyarkov 358ac9ebf7 fix(clipboard): orient text glyph outlines 2026-05-16 11:52:22 +03:00
Danila Poyarkov 91f516ecaa fix(clipboard): include text glyph blobs 2026-05-16 11:46:14 +03:00
Danila Poyarkov 992be9b713 fix(clipboard): include glyph advances 2026-05-16 11:05:15 +03:00
Danila Poyarkov e47455d91b fix(clipboard): export Figma font style names 2026-05-16 10:52:51 +03:00
Danila Poyarkov 8476ab2c99 chore(vue): guard browser side effects 2026-05-15 17:47:40 +03:00
Danila Poyarkov 4e942f77d7 chore(test): lint raw test id selectors 2026-05-15 17:10:35 +03:00
Danila Poyarkov 4a174e52ed chore(vue): lint generated test id literals 2026-05-15 13:14:51 +03:00
Danila Poyarkov 692ddf9a3f refactor(toolbar): reuse test id helpers 2026-05-15 13:13:24 +03:00
Danila Poyarkov 698bcde00b refactor(vue): share generated test id helpers 2026-05-15 13:10:44 +03:00
Danila Poyarkov 6b406002dd test(e2e): remove remaining raw test id strings 2026-05-15 13:02:41 +03:00
Danila Poyarkov 1583181d3a test(e2e): remove raw test id selectors 2026-05-15 12:55:01 +03:00
Danila Poyarkov 2f94ce6510 test(e2e): use Playwright test id locators 2026-05-15 12:49:49 +03:00
Danila Poyarkov 5f3a4f7816 chore(vue): prefer test id directive 2026-05-15 12:47:01 +03:00
Danila Poyarkov 744f0a0f42 refactor(vue): use test id directive 2026-05-15 12:37:00 +03:00
Danila Poyarkov 50a4e1bf93 refactor(vue): use test id helper for dynamic attrs 2026-05-15 12:28:50 +03:00
Danila Poyarkov cb1c52521b chore(vue): enforce shared test id prop types 2026-05-15 12:21:08 +03:00
Danila Poyarkov 711c7cf5a9 refactor(vue): use shared test id prop types 2026-05-15 12:18:50 +03:00
Danila Poyarkov 0749bfa755 chore(vue): standardize test id helpers 2026-05-15 12:07:58 +03:00
Danila Poyarkov e2eaf85cff chore(vue): enable stricter prop linting 2026-05-15 11:57:38 +03:00
Danila Poyarkov b46295a7bb fix(editor): close padding editor on canvas click 2026-05-15 11:49:18 +03:00
Danila Poyarkov 9537f35a27 perf(vue): remove wheel gesture dependency 2026-05-15 11:39:47 +03:00