Commit graph

1694 commits

Author SHA1 Message Date
Danila Poyarkov 1ed7de6056 chore(lint): reject broad unknown type assertions
- Add AST-based lint checks for broad unknown object assertions and local JsonObject aliases
- Centralize JsonObject in core and package-local MCP RPC JSON typing
- Replace baseline Record<string, unknown> assertions with named shared/domain types
2026-05-25 00:26:02 +03:00
Danila Poyarkov b4dfd90da0 fix(kiwi): resolve variable radius overrides
- Resolve numeric variable aliases in symbol override radius fields
- Preserve imported 999 corner sentinels through G0 to G1 roundtrips
- Remove the resolved corner-radius roundtrip TODO
2026-05-24 23:46:29 +03:00
Danila Poyarkov ae2ba1455b fix(vue): sync locale messages
- Add missing menu and panel translations across locale files
- Restore locale sync check on master
2026-05-24 22:55:45 +03:00
Danila Poyarkov 7f2c21bb23 refactor(core): avoid record casts for dynamic writes
- Use KiwiNodeChange index signature for raw Figma field assignment
- Type preserved raw NodeChange keys with keyof NodeChange
- Replace scene graph property write casts with a typed setter
2026-05-24 22:37:03 +03:00
Danila Poyarkov 22280cc758 fix(kiwi): preserve imported derived text data
- Prefer raw derivedTextData for imported Figma nodes during export
- Keep G1 exports idempotent with preserved text glyph and baseline payloads
- Remove the resolved derivedTextData roundtrip TODO
2026-05-24 22:27:31 +03:00
Danila Poyarkov b29bbe75a7
Merge pull request #268 from SantosAlarcon/master
Refactor tooltips and improve internationalization support
2026-05-24 22:09:42 +03:00
Danila Poyarkov 15e2c38137 Merge remote-tracking branch 'origin/master' into SantosAlarcon/master 2026-05-24 22:04:51 +03:00
Danila Poyarkov 8a10552c94 test(kiwi): verify component prop roundtrips
- Add semantic raw verifier for componentPropDefs
- Keep derived text raw checks focused on stable metadata
- Split raw verifier helpers to keep roundtrip test utilities small
2026-05-24 19:39:39 +03:00
Danila Poyarkov 35db955cb9 fix(kiwi): improve fig roundtrip fidelity
- Refresh the bundled Figma Kiwi schema from a newer embedded schema
- Preserve additional raw node fields and omitted imported stack sizing
- Tighten idempotent roundtrip checks while documenting known G0 import gaps
2026-05-24 19:27:19 +03:00
Danila Poyarkov c4f33036b1 Merge remote-tracking branch 'origin/master' into SantosAlarcon/master
# Conflicts:
#	src/components/ui/AppSelect.vue
2026-05-24 15:52:52 +03:00
Danila Poyarkov 655a752662 fix: preserve tooltip and select composition 2026-05-24 15:48:08 +03:00
Joseph Cumines bfe1b63299 fix(formatting) 2026-05-24 21:10:27 +10:00
Joseph Cumines 2a6c455464 Merge remote-tracking branch 'upstream/HEAD' into fix/fig-roundtrip-fidelity 2026-05-24 21:09:42 +10:00
Danila Poyarkov afd571341b fix(ai): render common generated JSX aliases 2026-05-24 12:45:42 +03:00
Danila Poyarkov 227ee97448 ci: share Bun setup across workflows 2026-05-24 12:33:58 +03:00
Danila Poyarkov abd795bd9a chore: format codebase 2026-05-24 12:15:29 +03:00
Joseph Cumines c4073dc284 fix(kiwi): repair .fig roundtrip - missing nodes, schema mismatch, GUID collisions
Exporting a .fig from OpenPencil and reimporting lost most nodes
(38323 to 57 on gold-preview.fig) and the same files wouldn't open
in Figma. gold-preview.fig now roundtrips into Figma. I haven't
traced each symptom to a specific fix with confidence, but the
changes address the underlying causes:

- fractionalPosition overflow past 94 siblings produced characters
  outside Figma's printable ASCII range (33-126); gold-preview.fig
  has nodes with 492 children so this hit immediately. New telescoping
  ~-prefix scheme matches Figma's own encoding.
- re-export used OpenPencil's subset kiwi schema, likely producing
  field IDs misaligned with the embedded schema. Preserve and use
  the original schema (graph.figSchemaDeflated) instead.
- variable GUIDs assigned before canvas entries could collide with
  source.id-derived canvas GUIDs. Reversed the order, scan all
  imported GUIDs to advance the counter.
- auto-layout child sort ignored parentIndex.position, using only
  transform position which may not reflect original tree order for
  imported nodes. Sort by position first, transform as tiebreaker.
- Object.assign of rawNodeFields overwrote explicit serialization.
  Materialize with paint variables, apply blocklist, skip keys
  already set on nc.

Also fixes: strokeWeight defaulting on strokeless nodes, colorVar
assetRef to guid conversion, per-corner radii emission, textAlignVertical
hardcoding, textAutoResize override for imported nodes, stackReverseZIndex
roundtrip, variable key/version preservation, blendMode on effects,
textCase emission.

Adds exhaustive roundtrip test comparing G0 to G1 to G2 across schema
bytes, node count, tree paths, scene props, and raw node fields.
2026-05-24 18:29:14 +10:00
Danila Poyarkov a38c0ac7b5 fix(core): satisfy type-aware lint 2026-05-23 05:25:06 +03:00
Danila Poyarkov 06dce623db refactor(core): split text data serialization 2026-05-23 03:30:07 +03:00
Danila Poyarkov c337905a02 fix(canvas): preserve text OpenType toggles 2026-05-23 01:43:00 +03:00
Danila Poyarkov f36d6b94b7 fix(canvas): apply affine image fill transforms 2026-05-23 01:31:04 +03:00
Danila Poyarkov 762c86e094 Revert "perf(canvas): defer backing rebuilds while zooming"
This reverts commit 21a79d4cd5.
2026-05-23 01:17:48 +03:00
Danila Poyarkov 21a79d4cd5 perf(canvas): defer backing rebuilds while zooming 2026-05-23 01:17:07 +03:00
Danila Poyarkov 0d5db35147 perf(canvas): bound blend and text mask layers 2026-05-23 01:10:24 +03:00
Danila Poyarkov f07d26c50b perf(canvas): bound effect render layers 2026-05-23 01:01:38 +03:00
Danila Poyarkov 7184bc1b06 Revert "perf(canvas): cap retained backing size"
This reverts commit 7b62c8acca.
2026-05-23 00:45:13 +03:00
Danila Poyarkov 7b62c8acca perf(canvas): cap retained backing size 2026-05-23 00:30:30 +03:00
Danila Poyarkov 054199ac15 fix(kiwi): preserve edited font variation axes 2026-05-23 00:26:58 +03:00
Danila Poyarkov 8c85d2b953 fix(canvas): improve Figma mask and text fidelity 2026-05-23 00:18:33 +03:00
Danila Poyarkov 5b12b1597f test(canvas): make luminance tile fixture visible 2026-05-22 23:55:20 +03:00
Danila Poyarkov ea08ea1370 test(canvas): cover luminance masks and tile transforms 2026-05-22 23:52:47 +03:00
Danila Poyarkov 3dc0904466 fix(canvas): support luminance masks and tile transforms 2026-05-22 23:44:10 +03:00
Danila Poyarkov f8db73949e test(canvas): cover renderer showcase visuals 2026-05-22 23:24:26 +03:00
Danila Poyarkov e65d53c9d3 test(canvas): add visual blend and mask fixtures 2026-05-22 23:13:46 +03:00
Danila Poyarkov ad0b984057 test(canvas): cover smoothed corner visuals 2026-05-22 23:09:55 +03:00
Danila Poyarkov 98616c8610 fix(canvas): render Figma-style corner smoothing 2026-05-22 23:05:24 +03:00
Danila Poyarkov 76ee122dee fix(canvas): render smoothed corners and effect blend modes 2026-05-22 22:50:58 +03:00
Danila Poyarkov ed8c62cefc feat(demo): showcase blend modes and masks 2026-05-22 22:40:00 +03:00
Santos Alarcón Asensio 1d297f090c
Merge branch 'master' into master 2026-05-22 20:27:54 +02:00
Santos Alarcón 091271b05f chore: code formatting 2026-05-22 20:24:02 +02:00
Danila Poyarkov 0ce57ea0fa fix(canvas): render Figma mask stacks 2026-05-22 21:05:35 +03:00
Danila Poyarkov 8e1d5d40e7 fix(canvas): render Figma blend modes 2026-05-22 21:00:34 +03:00
Danila Poyarkov da65cb6dc7 docs: expand agent workflow roadmap 2026-05-22 20:54:10 +03:00
Santos Alarcón Asensio 560285bb4d
Merge branch 'master' into master 2026-05-22 19:33:45 +02:00
Santos Alarcón 0babefa30b fix: build errors 2026-05-22 19:26:28 +02:00
Danila Poyarkov bfd89b9ee9 docs: add shader layers to roadmap 2026-05-22 20:18:43 +03:00
Santos Alarcón Asensio 9bbd57299d
Merge branch 'open-pencil:master' into master 2026-05-22 19:15:23 +02:00
Danila Poyarkov bf232bac8b docs: centralize roadmap 2026-05-22 20:02:05 +03:00
Danila Poyarkov 77307e17da docs: drop README roadmap 2026-05-22 19:54:46 +03:00
Danila Poyarkov 9431c1935e docs: remove stale roadmap pages 2026-05-22 19:46:57 +03:00