Commit graph

356 commits

Author SHA1 Message Date
Danila Poyarkov 28f7ef165b feat(text): wrap styled outline text 2026-05-17 20:23:55 +03:00
Danila Poyarkov 1c8fe1ee8b feat(editor): add outline stroke command 2026-05-17 20:18:14 +03:00
Danila Poyarkov 655f4fcb89 test(ui): cover boolean outline menu placement 2026-05-17 20:09:53 +03:00
Danila Poyarkov 1b1c7e6409 test(text): lock complex outline guards 2026-05-17 20:01:37 +03:00
Danila Poyarkov 75c2975fdc feat(text): outline loaded fallback glyphs 2026-05-17 19:59:30 +03:00
Danila Poyarkov 12787abf85 feat(text): outline loaded style runs 2026-05-17 19:49:44 +03:00
Danila Poyarkov d927a2b443 feat(text): share outline conversion for paths 2026-05-17 19:45:39 +03:00
Danila Poyarkov fa3f60d10c feat(canvas): flatten loaded text outlines 2026-05-17 19:25:43 +03:00
Danila Poyarkov 0772354bff test(canvas): assert boolean matrix cells 2026-05-17 19:16:56 +03:00
Danila Poyarkov 3151132fd3 fix(editor): reject image boolean sources 2026-05-17 19:15:14 +03:00
Danila Poyarkov af70b0eeaf feat(canvas): flatten container and stroke paths 2026-05-17 19:11:22 +03:00
Danila Poyarkov d48e3e5335 test(canvas): verify boolean visual matrix 2026-05-17 18:41:32 +03:00
Danila Poyarkov becbf4360c refactor(figma-api): share renderer-backed flatten 2026-05-17 18:37:53 +03:00
Danila Poyarkov 28829a56a9 fix(editor): guard unsupported boolean sources 2026-05-17 18:32:01 +03:00
Danila Poyarkov dc93ec54c5 feat(editor): add flatten selection command 2026-05-17 18:27:54 +03:00
Danila Poyarkov 92328a21d8 build(lint): enforce shared black color constants 2026-05-17 18:05:07 +03:00
Danila Poyarkov 2eab8f9a50 test(canvas): add boolean shape visual matrix 2026-05-17 18:00:35 +03:00
Danila Poyarkov 40d8a54046 feat(canvas): render boolean operation paths 2026-05-17 17:54:19 +03:00
Danila Poyarkov 15c3ee3f00 fix(vue): remove boolean submenu from canvas menu 2026-05-17 17:42:15 +03:00
Danila Poyarkov 83c24925e8 feat(editor): add boolean operation commands 2026-05-17 17:33:26 +03:00
Danila Poyarkov bf57a429d9 refactor(figma-api): align grouping API signatures 2026-05-17 17:11:15 +03:00
Danila Poyarkov c322f80893 test(editor): harden paste to replace coverage 2026-05-17 16:08:03 +03:00
Danila Poyarkov bdbb37b092 feat(editor): add paste to replace 2026-05-17 16:05:28 +03:00
Danila Poyarkov daef4bdde7 fix(editor): use frame defaults for framed selection 2026-05-17 15:54:47 +03:00
Danila Poyarkov 4a37a5e534 feat(editor): add frame selection command 2026-05-17 15:52:20 +03:00
Danila Poyarkov 0da23d5526 refactor(app): derive command menu shortcuts 2026-05-17 15:07:14 +03:00
Danila Poyarkov 75d1726640 test(app): cover menu shortcut conversion 2026-05-17 15:02:42 +03:00
Danila Poyarkov 433d812b9d refactor(vue): format command shortcuts by platform 2026-05-17 14:19:37 +03:00
Danila Poyarkov cc90c63952 feat(vue): add flip commands to canvas menu 2026-05-17 14:15:20 +03:00
Danila Poyarkov 29d7ae4817 refactor(vue): centralize canvas menu groups 2026-05-17 14:09:52 +03:00
Danila Poyarkov 3534a4a919 fix(canvas): render exact font faces 2026-05-17 13:40:56 +03:00
Danila Poyarkov bb6c537b8e Merge master into image fill hash fix 2026-05-17 13:02:00 +03:00
Danila Poyarkov 3b323a8740 test: cover fig image fill hash roundtrip 2026-05-17 12:58:43 +03:00
Danila Poyarkov f5bcf92ce4 test(canvas): cover scene cache recovery after drag preview 2026-05-17 02:41:13 +03:00
Danila Poyarkov 197e19b6f4 test(e2e): cover live move repaint and component labels 2026-05-17 02:11:04 +03:00
Danila Poyarkov 6954ff3ce7 refactor(jsx): replace hand-rolled Tailwind mapping with twirlwind
- Use twirlwind for CSS-to-Tailwind class conversion instead of
  450 lines of manual lookup tables and formatting functions
- Build a CSS style object from scene node properties, pass to twirl()
- Remove design-jsx/tailwind.ts (pxToSpacing, colorToTwClass, etc.)
- Remove unused Tailwind-specific helpers from jsx/helpers.ts
- Update tests for twirlwind's v4-native output format
2026-05-17 00:54:53 +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 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 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