openpencil/packages
Danila Poyarkov 67dbd7156f
feat(design-jsx): export every property the renderer accepts (#814)
* feat(design-jsx): export every property the renderer accepts

JSX export wrote only part of a layer: one solid fill, one stroke
without its alignment, shadows as repeated attributes, background blurs
as layer blurs, and nothing for hidden children, constraints, size
limits, absolute positioning, vertical text alignment, masks, or
variable bindings. Rendering an export lost those properties, and JSX
diffs could not see changes to them.

The export now writes them, using paint and effect helper calls when a
shorthand cannot express a value exactly, and leaves out values the
renderer would infer, so ordinary output stays as it was. Prop values
can now hold objects, arrays, and helper calls, printed through
@open-pencil/codegen's builders, which gain a call expression. The
language gains `visible`, `locked`, `constraints` (Figma's constraints
object with lowercase values, as `blendMode` uses), `italic`,
`strokes`, `strokeWeights`, `strokeCap`, and `strokeJoin`, and now
applies `strokeAlign`, `strokeDash`, and the size limits, which it
accepted but ignored. Per-corner radii are written even when the
uniform radius is 0. A round-trip test renders each case's export and
checks the fields and that exporting again changes nothing.

* docs(fig): name the saved-glyph fixture by its repository path

The observation note linked the fixture with a relative path climbing four directories. Other notes name fixtures by their repository path, which reads the same from anywhere.

* fix(design-jsx): export the node-level dash pattern

A node's own dashPattern was not written, so a node dashed at node level
came back solid and the DOM/CSS export chose a solid border. It now
round-trips as a separate dashPattern prop; strokeDash stays the
stroke-local dash.
2026-10-03 15:40:21 +04:00
..
cli feat(fig): occurrence-scoped instance interpretation as the single .fig reader 2026-10-01 11:20:27 +04:00
codegen feat(design-jsx): export every property the renderer accepts (#814) 2026-10-03 15:40:21 +04:00
core feat(design-jsx): export every property the renderer accepts (#814) 2026-10-03 15:40:21 +04:00
demos
design-jsx feat(design-jsx): export every property the renderer accepts (#814) 2026-10-03 15:40:21 +04:00
docs feat(design-jsx): export every property the renderer accepts (#814) 2026-10-03 15:40:21 +04:00
dom-css refactor: print OpenPencil JSX export as syntax trees (#799) 2026-10-01 21:22:43 +04:00
fig feat(design-jsx): export every property the renderer accepts (#814) 2026-10-03 15:40:21 +04:00
harness docs: route contributors through per-domain guides and ship npm license text (#785) 2026-09-29 01:02:06 +04:00
kiwi refactor(kiwi)!: drop the colorVariableBinding paint field 2026-10-01 23:47:51 +04:00
mcp refactor(design-jsx): extract design JSX into its own package (#793) 2026-09-30 20:55:27 +04:00
pen fix(figma-api): validate effects like Figma (#794) 2026-09-30 21:18:20 +04:00
scene-graph fix(core): show imported page backgrounds and stop fixed text collapsing 2026-10-02 12:10:06 +04:00
vue feat: show AI agents on the canvas and to collaborators (#803) 2026-10-03 14:01:36 +04:00