BFlat
0d9c2c3f73
M3: components that would contain themselves are refused, and loops in files are repaired ( #1084 ) ( #1540 )
...
* M2: components can't contain their own instances (#1084 )
Edits that would make a component hold an instance of itself, directly, through other components or through another variant of its set, are refused with the loop named. Files holding such a loop open with one instance per loop detached and a note; a rebuild never expands an instance inside a copy of itself, so a loop merged in a live session stops growing.
* M2: a variant may hold a sibling variant's instance; only true loops are refused (#1084 )
Each variant counts as its own component: refusals and open-time repairs apply only to a component leading back to itself through instances (an instance-swap value included), so files with nested sibling variants open unchanged. sync_instance_depth is split into match_layers and copy_layers.
2026-10-29 21:05:32 +07:00
BFlat
3108d5bee7
M8: edit.duplicate returns an id map with map: true ( #995 ) ( #1528 )
...
With map: true, edit.duplicate also returns map: each original layer's id, descendants included (nested frames, groups, instances and their sublayers), paired with its copy's id, so a batch can edit inside a copy through a step reference instead of inspecting it. Without map the result is unchanged.
2026-10-29 20:34:30 +07:00
BFlat
714bbfcdaa
M8: MCP and control calls name the document they act on ( #998 ) ( #1533 )
...
Tools that act on a document, and the control methods engine.execute,
document.inspect, node.get and ui.render, take an optional `document`
(an open file's id from doc.list / document.inspect, or its path). The
call acts on that file and the tab in front stays in front, so an
attached agent keeps editing its own file when the user switches tabs.
2026-10-29 19:47:41 +07:00
BFlat
72b4269383
M8: an AI agent attached over MCP comments under its own name ( #1414 ) ( #1529 )
...
Every command an MCP client runs acts as the client's name from initialize (clientInfo.title, else .name) with ' (agent)' after it, or 'AI agent' without one, carried to the app as engine.execute {agent}. Its messages, reactions and read state are its own, and its messages are marked (agent: true in the file and comment.list, an Agent label in the thread). The user's name and comments made in the app are unchanged; in live sessions the name and marker travel with the thread.
2026-10-29 19:15:19 +07:00
BFlat
7ba22fb2b6
M1: Crop image from the Object menu, the right-click menu and the image fill row ( #1464 ) ( #1501 )
...
* M1: Crop image from the Object menu, the right-click menu and the image fill row (#1464 )
* M1: crop mode shows the image dimmed outside the layer and heavier crop marks (#1464 )
* M1: the handle overlay draws gradients and crops in their own helpers (#1464 )
2026-10-29 15:07:21 +07:00
BFlat
fe7b4bac63
Merge pull request #1143 from Guillergood/feat/penpot-import-export
...
M6: import and export Penpot 2.x files offline
2026-10-29 14:20:14 +07:00
BFlat
cabf8641fb
Merge pull request #1409 from avhn/feat/1386-batch-continue
...
M0.9: let batches continue after failed steps (#1386 )
2026-10-29 14:04:46 +07:00
BFlat
68169b8146
Merge pull request #1421 from avhn/feat/1000-variable-props
...
M3: bind fill and stroke variables directly in layer props (#1000 )
2026-10-29 14:01:40 +07:00
BFlat
e1c7879957
Merge pull request #1360 from denisg0mes/place-images-at-own-size
...
M7: place images at their own size, in points for 2x screenshots
2026-10-29 13:52:42 +07:00
BFlat
f2d90da58d
Merge pull request #1389 from sarsonj/fix/sketch-import-rundogo
...
M6: Sketch import (#1021 follow-up): match Sketch's renders rule by rule
2026-10-29 13:52:26 +07:00
bflatastic
0a6642747a
Merge main into #1143
...
file.open and file.export docs: main's (reload, export options) plus the Penpot format.
2026-10-29 13:51:11 +07:00
bflatastic
e89def2068
Merge main into #1409
2026-10-29 13:46:42 +07:00
bflatastic
c87be091ac
Merge main into #1421
...
apply_order takes #1458 's numbering; a $var wrapper ranks 7, after boundVariables.
2026-10-29 13:46:39 +07:00
BFlat
c2c720087c
Merge pull request #1408 from avhn/feat/996-node-find
...
M0.9: find layer ids without changing the selection (#996 )
2026-10-29 13:41:43 +07:00
BFlat
3be354d227
Merge pull request #1461 from MortenHusted/fix/open-file-reload
...
M1: opening a file that is already open says when it changed on disk, and can read it again (#997 )
2026-10-29 13:41:21 +07:00
BFlat
f3e7db0b2a
Merge pull request #1460 from MortenHusted/fix/unknown-params
...
M0.9: commands, MCP tools and batch steps refuse names they don't take (#1413 )
2026-10-29 13:40:58 +07:00
bflatastic
08ac26299e
Merge main into #1143
2026-10-29 13:39:41 +07:00
bflatastic
75b4b5a72b
Merge main into #1389
2026-10-29 13:39:38 +07:00
bflatastic
d4aae905a2
Merge main into #1409
2026-10-29 13:39:30 +07:00
BFlat
299c1d5f59
Merge pull request #1458 from MortenHusted/fix/layout-key-order
...
M2: auto layout settings in one call don't depend on how their keys are spelled
2026-10-29 13:37:32 +07:00
bflatastic
0bac4f5083
Merge main into #1360
2026-10-29 13:36:26 +07:00
bflatastic
1e22268602
Merge main into #1143
2026-10-29 12:44:42 +07:00
bflatastic
789fa33444
Merge main into #634
2026-10-29 12:25:06 +07:00
bflatastic
f6407b1ba0
Merge main into #1389
2026-10-29 12:24:46 +07:00
bflatastic
fc6ea73154
Merge main into #1421
...
# Conflicts:
# crates/engine/src/cmd/props.rs
# docs/roadmap.md
2026-10-29 12:24:32 +07:00
bflatastic
c6c11471db
Merge main into #1408
...
# Conflicts:
# crates/engine/src/cmd/edit.rs
# docs/roadmap.md
2026-10-29 12:23:48 +07:00
bflatastic
c5ba6dd2e8
Merge main into #1409
...
# Conflicts:
# crates/engine/src/session/undo.rs
# docs/roadmap.md
2026-10-29 12:23:11 +07:00
bflatastic
d1e96ea706
Merge main into #1461
2026-10-29 12:22:30 +07:00
bflatastic
ee12a51045
Merge main into #1458
2026-10-29 12:22:29 +07:00
bflatastic
a51e815073
Merge main into #1460
2026-10-29 12:22:28 +07:00
bflatastic
44a9b10e46
Merge main into #1389
...
# Conflicts:
# crates/engine/src/cmd/file.rs
# docs/file-format-parity.md
2026-10-29 12:08:39 +07:00
bflatastic
9f5178f53a
Merge main into #1421
...
# Conflicts:
# crates/engine/src/cmd/props.rs
# crates/engine/src/selection/selection_colors.rs
# docs/roadmap.md
2026-10-29 11:50:45 +07:00
bflatastic
a48f43cd34
#1408 : import opt_id for node.find now that edit.rs names its imports
2026-10-29 11:49:37 +07:00
BFlat
1a755ccb0c
Merge pull request #1425 from Silvertree2010/fix/h3041-node-set-opacity-1-gives-full-op
...
Treat a % suffix on node.set opacity as a percentage
2026-10-29 11:41:54 +07:00
bflatastic
49a41cddd4
Merge main into #1408
...
# Conflicts:
# docs/roadmap.md
2026-10-29 11:40:48 +07:00
BFlat
18abd3ab48
Merge pull request #1467 from Silvertree2010/fix/h3521-node-set-paddinghorizontal-paddi
...
Reject non-numeric paddingHorizontal/paddingVertical in node.set
2026-10-29 11:38:41 +07:00
BFlat
c3f8790f0b
Merge pull request #1469 from Silvertree2010/fix/h3578-page-duplicate-accepts-a-non-pag
...
Reject non-page ids in page.duplicate
2026-10-29 11:38:31 +07:00
BFlat
bc1319ccf0
Merge pull request #1432 from Zaxaerith/fix/1428-set-as-thumbnail
...
fix(engine): make Set as thumbnail affect saved files (#1428 )
2026-10-29 11:38:08 +07:00
BFlat
80ffd8308c
Merge pull request #1405 from Silvertree2010/fix/h2933-cornerradius-padding-strokesides
...
Reject cornerRadius/padding/strokeSides arrays with non-numeric entries
2026-10-29 11:35:03 +07:00
bflatastic
d8a4de1bd5
Merge main into #1360
2026-10-29 11:28:49 +07:00
bflatastic
56196eac5a
Merge main into #1409
...
# Conflicts:
# ROADMAP.md
# crates/engine/src/session/undo.rs
# docs/roadmap.md
2026-10-29 11:27:45 +07:00
bflatastic
f154011299
Merge main into #1461
2026-10-29 11:19:05 +07:00
bflatastic
4fcc49aa37
Merge main into #1458
2026-10-29 11:15:01 +07:00
bflatastic
f99f01d57b
Merge main into #1460
2026-10-29 11:09:30 +07:00
bflatastic
fd81433a23
#1460 : text.style lists the text-decoration and variation keys the Typography panel sends, paragraph spacing on selected characters goes to node.set, MCP builds its tool catalogue once, and a test for the params panels build
2026-10-29 11:09:09 +07:00
BFlat
60ea32f171
Merge pull request #1465 from phonedu/mcp-agent-feedback
...
M12: MCP comment feedback and live change events
2026-10-29 10:51:24 +07:00
BFlat
2e6612e002
Merge pull request #1457 from culiulemon/pr/misc-fixes
...
feat: property copy/paste, blend-mode hover preview and clipboard fixes
2026-10-29 10:47:30 +07:00
bflatastic
9202b1032f
Merge main into #1460
2026-10-29 10:38:06 +07:00
bflatastic
069449e33c
#1425 : share fraction_of for opacity, fill opacity, innerRadius and arcInner
2026-10-29 10:29:16 +07:00
bflatastic
d5494fc989
Merge main into #1425
...
# Conflicts:
# crates/engine/src/cmd/props.rs
2026-10-29 10:29:16 +07:00