Commit Graph
454 Commits
Author SHA1 Message Date
bflatastic f286b6bbe6 Merge main into #2191 2026-11-12 12:58:24 +07:00
bflatastic cd6d5a0072 Merge main into #2191 2026-11-12 11:43:31 +07:00
bflatastic d4afda1ea5 Merge main into #2121 2026-11-12 11:39:36 +07:00
bflatastic 20bea05bac Merge main into #2203 2026-11-12 11:21:48 +07:00
bflatastic 7da79d0555 Merge main into #2191 2026-11-12 11:16:50 +07:00
bflatastic 13635a24ea Merge main into #2121 2026-11-12 11:08:15 +07:00
bflatastic 2161c92f5d Merge main into #2229 2026-11-12 10:48:56 +07:00
bflatastic 19a7db95b4 Merge main into #2203 2026-11-12 10:46:40 +07:00
bflatastic f27a897b46 Merge main into #2191 2026-11-12 10:17:43 +07:00
bflatastic f51d2ee348 Merge main into #2121 2026-11-12 09:55:40 +07:00
BFlat ed83ff3f26 Merge pull request #2161 from TrevorBrown-dev/fix/variant-connection-2158
M7: a connection dropped on a sibling variant creates Change to (#2158)
2026-11-12 09:53:51 +07:00
bflatastic cfa288f992 Merge main into #2191 2026-11-12 09:52:40 +07:00
bflatastic 34b2bba9d3 Merge main into #2121 2026-11-12 09:30:04 +07:00
BFlat d0c4aca65b Merge pull request #2095 from TrevorBrown-dev/feat/create-multiple-components-dropdown-2088
Components: several layers selected, the component button offers Create multiple components (#2088)
2026-11-12 09:28:25 +07:00
ljkx 452ee9b74a Merge remote-tracking branch 'origin/main' into fill-row-copy 2026-11-11 17:58:31 +01:00
Trevor BrownandClaude Opus 5.5 83773deb92 Merge upstream/main into fix/selection-colors-single-2188
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:39:44 -05:00
Trevor BrownandClaude Opus 5.5 c6b030ae02 Merge upstream/main into feat/vector-edit-point-xy-mixed
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:39:31 -05:00
Trevor BrownandClaude Opus 5.5 986f6d0a4c Merge upstream/main into fix/header-icon-size-2227
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 11:39:30 -05:00
Trevor BrownandClaude Sonnet 5.5 2dd1b5a53a Menus: the main menu and its submenus stay inside the window and scroll when taller (#2217) (#2220)
Submenus of the main menu were not constrained to the window (constrain: false, so they sit
beside their row), so the Object submenu ran past the bottom edge with its lowest commands out of
reach. Menus and submenus are now held within the window's height (moved up, never above the top,
8 pt margins, still beside their row so menu-aim is unchanged), and a panel taller than that
scrolls with the wheel; the keyboard's focus scrolls into view.


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-11 15:32:21 +01:00
Trevor BrownandClaude Sonnet 5.5 ebcaa58c4f M10: Design panel: section header icons draw at the panel's icon size (#2227)
Section header buttons painted their glyph in a 12 pt box inside the 24 pt button while icon_button_at used 14 pt. Both now use icon_glyph_rect (ICON_BUTTON_INSET 5 pt), as do the 24 pt Close and Swap buttons in the assets and prototype panels. Test compares the painted Eye bounds of a header and an icon button.

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-10 15:55:41 -05:00
Trevor BrownandClaude Sonnet 5.5 dadd4dfc69 M3: Selection colors shows for a layer with children from one colour (#2188)
Measured in Figma web app 2026-11-09: a selection holding a layer with children (frame, group, component, instance) shows Selection colors from one distinct colour; layers without children need two. The section now shows when there are two colours, or one colour and a selected layer with children. Tests in selection_colors_tests; ui-parity updated.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and briefed; Sonnet 5.5 measured in Figma and wrote at medium
2026-11-09 16:50:45 -05:00
ljkx 33ac1d14fc M1: Cmd/Ctrl+C and Cmd/Ctrl+V copy and paste the highlighted fill, stroke or effect (#1494)
With a fill, stroke or effect row highlighted, Cmd/Ctrl+C (or Edit ▸
Copy) copies that paint or effect instead of the layers, through the
same `fill.copy`, `stroke.copy` and `effect.copy` the row's menu runs.
Cmd/Ctrl+V then pastes it onto every selected layer with `fill.paste`,
`stroke.paste` or `effect.paste`, one undo step: on top of each layer's
list, or in place of the highlighted row when it is of the same kind.

- A copy keeps its kind. A stroke goes to the strokes and an effect to
  the effects whatever row is highlighted, and the last row copied is
  the one pasted.
- A solid colour goes to the system clipboard as its hex code, anything
  else as a marker. A paste takes the property only while the system
  clipboard still holds that copy and no layers were copied since, so
  text or an image from another app, or a later layer copy, pastes as
  before. The row menus' Copy writes the same, so Cmd/Ctrl+V pastes it.
- A programmatic copy never writes the system clipboard, and forgets a
  property mirror it replaced. A mirror whose engine copy is gone pastes
  nothing rather than the layers copied before it.
- The copy is shared by every window, as the layer copy is.

Tests: property_rows_tests (15 more, 22 in all); the replace index and
the Escape key were each removed once to check the tests fail.
2026-11-09 20:34:32 +00:00
ljkx 375a7b8abb M1: a click on a fill, stroke or effect row highlights it (#1494)
Fill, stroke and effect rows in the Design panel couldn't be selected.
A click on a row's reorder grip (the strip left of its fields) or on its
background between its controls now highlights it in the selected-row
colour, one row at a time, as the help center's "Copy and paste
properties between layers" describes ("Click to highlight the property
on the right sidebar").

- The row is a click target under its controls (`row_target`), and the
  grip of these lists also takes a click (`ListDrag::row_clicked`).
  Neither is focusable, so Tab still goes from control to control.
- The highlight belongs to the selection, file and Design tab it was made
  on. Escape lets it go before it deselects; so does a press on the
  canvas or elsewhere in the Design panel, or a frame its row isn't
  drawn in (an undo took its paint away). It follows its paint or effect
  when rows are reordered or removed.

Tests: property_rows_tests (7).
2026-11-09 20:30:25 +00:00
Trevor BrownandClaude Sonnet 5.5 5c50025270 M7: a connection dropped on a sibling variant creates Change to (#2158)
A connection dragged from a variant (or a layer in it) onto a sibling variant of its set now creates Change to that variant (On click, Instant) and outlines the sibling while dragging, as measured in Figma. The set background and the variant itself add nothing; a frame outside the set still gets Navigate to.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove and briefed; Sonnet 5.5 measured in Figma and wrote at medium
2026-11-09 08:37:11 -05:00
skylar taylor-barrick 3839fe4a0c Naming: use Developer Mode instead of Figma's Dev Mode (#2135)
Figma holds a US registration for DEV MODE (US 7574348). Display text only: the view.devMode label, Inspect tab, shortcut row, refusal messages, CLI help, docs and all locale catalogs now say Developer Mode. Command ids, preference keys and saved fields are unchanged; "Dev Mode" stays a search alias in the Actions palette. Adds a naming guard test.
2026-11-09 06:24:44 +01:00
Trevor BrownandClaude Sonnet 5.5 6ac20c7d53 M8: points' X and Y in vector edit mode show Mixed and set every selected point, as in Figma
Cause: with several points selected, the Point section's X and Y showed the selection's top-left and `vector.edit.position` moved the group so that its top-left landed on the typed value. Figma shows the value the selected points share (Mixed when they differ) and sets every selected point's own coordinate.

Fix: `vector.edit.position {x?, y?}` takes, per axis, a number (every selected point's own coordinate becomes it, in the parent's coordinates) or `{add}`, `{mul}`, `{div}` applied to each point's own coordinate; each point moves by its own delta with its handles, in one undo step; a zero divisor, a non-finite result, unknown keys and other junk are refused. A new `selected_parent_points` gives the panel the points in the parent's coordinates. The panel's X and Y are mixed-value fields: the shared value (compared within 1e-6) or Mixed, a typed value sets every point, and a relative edit typed into a Mixed field sends the object form. A scrub only starts from a shared value and sets it absolutely each frame inside one interaction, as the other point fields do.

Verified: engine tests for two points at different x, one point, add, mul and div, curve handles, one undo, the parent's coordinates and refused junk; panel tests for Mixed, typing -200 and a relative edit on a Mixed field, and a single point's value; the engine lib tests, the vector and field panel tests, clippy and fmt. Measured in Figma on 2026-11-08.

Not changed: the W and H row, other edited layers' points, and scrubbing semantics (the Mixed field cannot be scrubbed, as no start value exists).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Model-Effort: Opus 5.5 drove, measured and briefed; Sonnet 5.5 wrote at medium
2026-11-08 07:53:14 -05:00
Trevor BrownandClaude Sonnet 5.5 f5a52ea528 Components: several layers selected, the component button offers Create multiple components (#2088)
With two or more layers selected, the Design panel header's component button opens a menu with Create component and Create multiple components, as Figma's does; one layer keeps the plain button. Headless UI tests cover both cases (three frames: menu order, names kept, all selected, one undo; one frame: plain click), and an engine test pins createMultiple's names, positions and single undo step.

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-07 21:20:56 -05:00
bflatastic 12293e2e55 Merge main into #1879; shortcut counts with #1858's row 2026-11-07 12:14:30 +07:00
BFlat 9bec55c05a Merge pull request #1911 from TrevorBrown-dev/fix/layers-component-contrast
Layers panel: component rows in the theme's component tint, at AA contrast (#1903)
2026-11-07 13:12:56 +08:00
bflatastic f1eb55f58b Merge main into #1772 2026-11-07 11:56:11 +07:00
Trevor Brown 3c607075f9 Merge remote-tracking branch 'upstream/main' into fix/layers-component-contrast
# Conflicts:
#	crates/ui-egui/src/panels/layers.rs
#	docs/ui-parity.md
2026-11-06 23:53:00 -05:00
Trevor Brown 39b93b7950 Merge remote-tracking branch 'upstream/main' into feat/pick-select 2026-11-06 23:49:01 -05:00
bflatastic bc47bcd17a Merge main into #1772 2026-11-07 11:41:20 +07:00
bflatastic 30e89c81c1 Merge main into #1912 2026-11-07 11:34:16 +07:00
bflatastic 17cbab31b7 Merge main into #1911 2026-11-07 11:33:42 +07:00
bflatastic 5087bf05dd Merge main into #1879 2026-11-07 11:31:30 +07:00
Trevor BrownandClaude Sonnet 5.5 a794e57e3d Merge upstream/main into fix/layers-component-contrast
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 22:53:39 -05:00
Trevor BrownandClaude Sonnet 5.5 18b2bdcb54 Merge upstream/main into feat/layers-horizontal-scroll
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-06 22:45:07 -05:00
Trevor BrownandClaude Fable 5.1 13937c70eb Merge upstream/main into feat/region-fills
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-06 22:39:44 -05:00
Trevor BrownandClaude Fable 5.1 bce99a53c8 Merge upstream/main into feat/pick-select
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-06 22:39:41 -05:00
BFlat 24c4242dca Merge pull request #1857 from TrevorBrown-dev/fix/text-mixed-fill-section
M1: the Fill section shows a text's characters' fills, mixed when they differ, and a layer fill edit reaches every character
2026-11-07 11:36:20 +08:00
Trevor Brown a037c774e1 Merge remote-tracking branch 'upstream/main' into feat/pick-select
# Conflicts:
#	crates/ui-egui/src/canvas/input.rs
#	docs/ui-parity.md
2026-11-06 21:59:18 -05:00
Trevor BrownandClaude Fable 5.1 e4b3815439 Merge upstream/main into feat/region-fills
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-06 21:40:15 -05:00
Trevor BrownandClaude Fable 5.1 47c5796ed5 Merge upstream/main into feat/variables-multi-select-2002
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-11-06 21:39:51 -05:00
bflatastic e619c509a0 Merge main into #1857 2026-11-07 09:38:13 +07:00
bflatastic e9098d0df3 Merge main into #1911 2026-11-07 09:36:00 +07:00
bflatastic 643cc361f8 Merge main into #1912 2026-11-07 09:35:27 +07:00
bflatastic d3976bc6b5 Merge main into #1912 2026-11-07 09:28:16 +07:00
bflatastic 7c457e854c Merge main into #1857 2026-11-07 09:22:00 +07:00
bflatastic d178d149c0 Merge main into #1911 2026-11-07 09:21:27 +07:00