Commit Graph
526 Commits
Author SHA1 Message Date
bflatastic 35aa524f8a Merge main into #2291 2026-11-13 23:42:21 +07:00
bflatastic 8932347ef8 Merge main into #2139 2026-11-13 23:23:44 +07:00
bflatastic bbd8d7c661 Merge main into #2331 2026-11-13 23:06:07 +07:00
bflatastic e1647fba6a Merge main into #2139 2026-11-13 23:04:53 +07:00
bflatastic 953383fff8 Merge main into #2331 2026-11-13 22:54:24 +07:00
bflatastic 996b16a75e Merge main into #2288 2026-11-13 22:47:14 +07:00
bflatastic 71e063de9f Merge main into #2139 2026-11-13 22:47:03 +07:00
BFlat 1448a91a54 Merge pull request #2086 from TrevorBrown-dev/fix/snap-threshold-measured
Smart guides: objects snap within 4.5 screen pixels, as measured in Figma
2026-11-13 22:45:56 +07:00
Trevor BrownandClaude Sonnet 5.5 e335ce7b73 Merge upstream/main into feat/select-layer-locked-1560
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium
2026-11-13 10:39:59 -05:00
bflatastic 9baf13c2a4 Merge main into #2288 2026-11-13 22:39:06 +07:00
BFlat bdf14ae7f0 Merge pull request #2286 from TrevorBrown-dev/fix/icon-buttons-16pt-2238
M8: every 24 pt icon button paints its glyph at 16 pt (#2238)
2026-11-13 22:36:15 +07:00
bflatastic 83a0177310 Merge main into #2139 2026-11-13 22:29:54 +07:00
bflatastic 91d2caf9df Merge main into #2086 2026-11-13 22:29:18 +07:00
Denis GomesandClaude Opus 5.5 c74bcd0b0e M1: Paste over selection puts the copies just above the selected layer
Shift+Cmd/Ctrl+V pasted into the selected layer's parent at its top-left,
but appended the copies, so they went to the top of the parent's layers
whatever was selected. In an auto layout frame that put them at the end of
the flow, away from the layer they were pasted over.

They now go just above the selected layer, in the copied order: in the
Layers panel the row above it, in an auto layout frame the item after it.
A section pasted over a layer in a frame still goes on the page, on top
of its layers, as before. Paste to replace already kept the replaced
layer's place.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 01:41:48 -05:00
Trevor BrownandClaude Opus 5.5 3be1a6a60b Merge upstream/main into feat/select-layer-locked-1560
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 22:19:23 -05:00
Trevor BrownandClaude Opus 5.5 6ad4e02498 Merge upstream/main into docs/drag-modifiers-measured
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 22:18:45 -05:00
Trevor BrownandClaude Sonnet 5.5 3cf7385f3d Docs: keep one Vector edit mode row (main's, plus this PR's mirror clause)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium
2026-11-12 22:07:04 -05:00
Trevor BrownandClaude Opus 5.5 7d94fa78e9 Merge upstream/main into fix/mirror-sharp-point-2110
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 22:06:21 -05:00
Trevor BrownandClaude Sonnet 5.5 197af01629 Merge upstream/main into fix/snap-threshold-measured
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium
2026-11-12 20:42:00 -05:00
Trevor BrownandClaude Sonnet 5.5 e4ef6a62a7 Merge upstream/main into feat/zoom-selection-margin
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium
2026-11-12 20:41:24 -05:00
Trevor BrownandClaude Sonnet 5.5 39acc36438 Docs: the interactions measured against Figma on 2026-11-08, case by case (#2111)
* Docs: the interactions measured against Figma on 2026-11-08, case by case

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at low

* Docs: the measured values for snapping, menus and Escape, and what FigCraft did before each fix

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and wrote

* Docs: the safe triangle unresolved, the Hug notice fixed in #2099, the variant warning not added (#2111 review)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and wrote

* Docs: partly fixed defined, the test row a match, open questions without repeats, ui-parity's line reworded (#2111 review)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and wrote

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 01:47:38 +01:00
Trevor BrownandClaude Sonnet 5.5 8ffa1bfbd1 Docs: one Vector edit mode row after the merges (#2287)
Three parallel merges (#2121, #2195, #1875) each left a copy of the Vector edit mode row with its own additions. They are folded into one row: the Point section Mixed X and Y, Flatten baking a point corner radius, and vector edit Copy, Cut and Paste, in the order of the shared text. Nothing dropped.


Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 01:45:10 +01:00
Trevor BrownandClaude Sonnet 5.5 2408d0aa81 M8: Tab while renaming moves only the rename and wraps from the last layer, as in Figma (#2311)
* M8: Tab while renaming the last layer wraps to the first, as in Figma

Measured in Figma's web app on 2026-11-12: Tab on the last row of the Layers panel commits the name and opens the first row's rename. FigCraft ended the rename there. Shift+Tab on the first row is unmeasured and unchanged, and Tab still moves the selection with the rename.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Fable 5.2 queued; Sonnet 5.5 measured and wrote at medium

* M8: Tab while renaming moves the rename, not the selection, as in Figma

Measured in Figma's web app (second run, 2026-11-12): while renaming, Tab and Shift+Tab open the next or previous row in edit, and the selection stays on the layer first renamed. FigCraft moved the selection to the renamed row. Tab now moves only the rename field.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Fable 5.2 queued; Sonnet 5.5 measured and wrote at medium

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-13 01:43:49 +01:00
Trevor BrownandClaude Opus 5.5 477f004400 Merge upstream/main into fix/mirror-sharp-point-2110
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 19:39:01 -05:00
Trevor BrownandClaude Opus 5.5 44a761e783 Merge upstream/main into fix/snap-threshold-measured
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 04:59:25 -05:00
Trevor BrownandClaude Opus 5.5 0a8d832c2d Merge upstream/main into feat/zoom-selection-margin
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 04:58:32 -05:00
Trevor BrownandClaude Opus 5.5 e27d67fa03 Docs: Last updated matches the newest revision row
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and fixed
2026-11-12 03:39:53 -05:00
Trevor BrownandClaude Sonnet 5.5 6cb015d4f8 M5: Select layer lists locked layers with a padlock and picks them (#1560)
The context menu's Select layer now lists locked layers (and what a locked frame holds) with a padlock in the leading column, and picking one selects it, as the help center's "Lock and unlock layers" says and as measured in Figma's web app, 2026-11-10. The submenu shows only with more than one layer under the pointer (measured on a single locked layer only, the least certain rule). Clicks, hover and marquee still never reach a locked layer.

- doc: geometry::HitOpts { locked } and layers_at_opts; layers_at and the other public hit functions keep their signatures and pass the default.
- engine: select.layersAt lists locked layers and its rows gain locked (the layer or an ancestor is locked).
- ui-egui: indented_item takes locked and paints the Layers panel's padlock icon; a row both selected and locked shows the check.
- docs: ui-parity Select layer row, revision row and status line; mcp.md select.layersAt.

Tests: layers_at_a_point_list_locked_layers_with_a_flag_and_select_set_takes_them, select_layer_marks_locked_layers_with_a_padlock_and_picks_them, select_layer_needs_more_than_one_layer_under_the_pointer.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Fable 5.1 briefed; Sonnet 5.5 wrote at medium
2026-11-12 03:03:25 -05:00
Trevor BrownandClaude Sonnet 5.5 70552482c4 M8: the popover's close glyph is 16 pt too, and the style picker's 24 pt check allows rounding (#2238)
The popover's 24 pt close button painted its cross through rect.shrink(6.0), a 12 pt glyph; it now goes through icon_glyph_rect like the other 24 pt buttons, with a painted-size test that failed before the change. The style picker's menu_icon picked the 16 pt glyph with an exact size equality, so a button at a fractional x that measured a hair off 24 in f32 painted at 14 pt; it now allows 0.5 pt of rounding.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium
2026-11-12 02:51:37 -05:00
Trevor BrownandClaude Opus 5.5 03bfdadb88 Docs: one Resize handles row after the merge
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and reviewed
2026-11-12 02:38:07 -05:00
Trevor BrownandClaude Opus 5.5 e2987ef654 Merge upstream/main into docs/drag-modifiers-measured
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 02:37:47 -05:00
bflatastic 5b20fac623 Merge main into #2163 2026-11-12 14:22:18 +07:00
Trevor BrownandClaude Opus 5.5 8553ee3358 Merge upstream/main into docs/drag-modifiers-measured
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-12 02:10:29 -05:00
bflatastic 64e3684a11 Merge main into #2163 2026-11-12 14:05:23 +07:00
bflatastic 12b293efe5 Merge main into #2200 2026-11-12 14:04:50 +07:00
bflatastic 47f5518155 Merge main into #2163 2026-11-12 13:49:58 +07:00
bflatastic 7a052d73a4 Merge main into #2192 2026-11-12 13:49:25 +07:00
bflatastic d3f14f5bd8 Merge main into #2200 2026-11-12 13:48:51 +07:00
Trevor BrownandClaude Sonnet 5.5 293c922609 Docs: drag modifiers measured in Figma
Move and resize modifiers were compared in Figma web on 2026-11-08: Shift locks a move to the dominant axis, Alt copies, Shift keeps the ratio and an edge scales about the opposite edge middle, Alt keeps the centre, Shift+Alt does both, and a modifier changed mid-drag is read fresh. FigCraft matches; Ctrl/Cmd was not measurable. The three ui-parity rows, a revision row and the status line record it, and target-app-parity no longer says modifiers are uncompared.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove; Opus 5.5 briefed; Sonnet 5.5 wrote at medium
2026-11-12 01:41:23 -05:00
bflatastic b9486affb9 Merge main into #2163 2026-11-12 13:30:33 +07:00
bflatastic d50203228d Merge main into #2191 2026-11-12 13:29:57 +07:00
bflatastic 2636516fbb Merge main into #2192 2026-11-12 13:29:23 +07:00
bflatastic c98ad17451 Merge main into #2200 2026-11-12 13:28:50 +07:00
bflatastic d3a75187d8 Merge main into #2163 2026-11-12 13:15:51 +07:00
bflatastic 7f017a736b Merge main into #2191 2026-11-12 13:15:16 +07:00
bflatastic 23db6dbddb Merge main into #2192 2026-11-12 13:14:43 +07:00
bflatastic bd656ae5b3 Merge main into #2199 2026-11-12 13:14:10 +07:00
bflatastic 39b7c54766 Merge main into #2200 2026-11-12 13:13:38 +07:00
bflatastic 41a8915c4e Merge main into #2163 2026-11-12 12:58:57 +07:00
bflatastic f286b6bbe6 Merge main into #2191 2026-11-12 12:58:24 +07:00