Commit Graph
1343 Commits
Author SHA1 Message Date
Trevor BrownandClaude Opus 5.5 55e2b85fd0 Merge upstream/main into feat/jam-native-board-items-1808
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-11 20:39:08 -05:00
Trevor BrownandClaude Opus 5.5 20f02bb7c1 M12: Boards: mind maps in the document and engine (#2226, step 1) (#2228)
* M9: Boards: mind maps in the document and engine (#2226)

Part of #2226, step 1 of 4. A mind map node is a board object of its own (BoardItem::MindNode: a frame hugging its text, no box) and a branch is a connector marked `branch`; the tree is read from the branches alone. `board.mindMap` places a first node with three children and `board.mindMapAdd` adds a child or a sibling, each one undo step. The normalize pass (`board::settle_mind_maps`, `figcraft_doc::mind_layout`) lays a touched map out again from its first node: 88 between columns, 48 between siblings, each stack centred on its parent; a branch that no longer joins two layers of its page is removed. Branches are curved, stroke 4, #757575, round caps. Numbers are from a FigJam map saved and decoded. No toolbar entry, shortcuts or import yet.

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

* M12: Mind maps: a map around its own container stays put; a moved branch re-flows its old map (#2226)

A map holding a layer and something inside it is skipped by the settle pass (it never settled). Every touched branch now stirs its old ends, so re-attaching a branch's start re-flows the map it left. Boards without branches return early, a map over MIND_MAX_NODES is left whole, shift skips non-finite moves, and the doc tests share one six-node helper.

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

* M12: Mind maps: FigCraft's own starter texts (#2226)

A new map's starter children read "Idea 1", "Idea 2" and "Idea 3", as the design specified,
instead of the incumbent's wording, which the first commit had copied from the measurement.

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

* M12: Docs: the mind-map revision rows go in the revision history (#2226)

The 2026-11-10 rows sat in ROADMAP.md's Headline numbers table and docs/roadmap.md's Alpha gate
table; each now opens its file's revision history.

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-12 00:47:05 +01:00
24cf70329b M5: Locked layers follow Figma's rules: no nudge, a locked parent's children stay locked (#1560) (#2219)
* M5: Locked layers follow Figma's rules: no nudge, a locked parent's children stay locked (#1560)

Pins Figma's locked-layer behaviour (measured in Figma's web app, 2026-11-10; help center "Lock and unlock layers") in a new lock_behaviour_tests suite. Fixes the divergences: transform.nudge and transform.nudgeSize skip locked layers, object.toggleLock without a value counts a child of a locked parent as locked (so it never locks the child on its own), and the Layers panel padlock on such a child is inert.

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

* Layers panel: a padlock sweep skips the children of a locked layer (#1560)

A padlock drag sweep no longer collects rows with `locked_above`, so
dragging across a locked frame's children leaves their own flags alone
and draws no swept value on them. An eye sweep is unchanged.

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

* M5: Lock/Unlock leaves a locked layer's child alone in a mixed selection (#1560)

With a locked frame's child and an unlocked layer selected, Lock/Unlock set both own flags, so
the child stayed locked once the frame was unlocked. With no explicit `locked` value, the command
now skips a layer whose parent is locked, as its padlock does; an explicit value (scripts) still
sets it.

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>
Co-authored-by: FredApps <FredApps@users.noreply.github.com>
2026-11-11 21:06:56 +01: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 4201fed27d M9: .jam import: stickies come in as native board stickies (#1808)
On a FigJam whiteboard the mapper builds a sticky with complete generated records as a native board sticky: the saved colour, size, place, opacity and shadows, the note and the author line as text layers, no background vector. It writes a board field on the REST JSON, which the REST importer reads (junk values are ignored with a warning). Damaged stickies and stickies in a .fig keep the generated layers.

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-10 09:17:19 -05:00
skylar taylor-barrick a2e87433d8 Naming: Developer Mode follow-ups (#2165)
* Naming: record Developer Mode in the feature-names doc and the stage paragraph

docs/feature-names.md gains the entry for the rename: the old label, the new one, Figma's
US registration for DEV MODE (7574348) as the reason with its TSDR record, the identifiers
that keep their names, and the translations that moved from a generic "dev mode" to the
developer mode. The stage paragraph in ROADMAP.md listed the mode as Dev Mode.

* Actions palette: put each search doc comment back on its function

search_text had grown a second doc line under matches's, so the sentence about the query sat
above a function that takes none. search_text now says what it reads and matches keeps its own.
2026-11-09 15:44:02 +01: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
FredApps 72cfe7be30 fix(naming): use direct FigCraft feature descriptions (#2131)
Drops the "Figma-class" self-description from the MCP instructions and the "Accessibility at Figma" aside from pref.uiScaleUp help. Help text only; ids and preference keys unchanged. Adds a display-name guard over mcp/src and engine/src/cmd string literals.
2026-11-09 06:22:48 +01:00
FredApps d54439be8b M6: scale imported vector point radii with their instance row (#2097) 2026-11-08 16:10:54 +01:00
FredApps a07a21b697 M6: bound exported instance factors to the supported range (#2097) 2026-11-08 16:08:34 +01:00
FredApps 23ed778562 M6: preserve scaled instance export overrides (#2097) 2026-11-08 15:23:36 +01:00
Trevor BrownandClaude Sonnet 5.5 62d761a7bc M6: .fig import draws a scaled instance's layers at its scale factor (#2091)
An instance scaled with the Scale tool in Figma stores `symbolData.uniformScaleFactor`; the importer never read it, so the layers of a 128 px instance of a 256 px component came in at 256 px with the main's radii, strokes and spacing. Layers of an instance now take the main's lengths times the factor (composed through nested instances), the same values the Scale tool scales, unless an override or derived row gives the value, which is already at the instance's scale. Eight tests: the reproducer, the round trip, a derived size row not scaled twice, override rows, auto layout gap/padding/text, nested composition, factor 1 or none, and junk factors ignored.

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 high
2026-11-07 22:06:35 -05:00
bflatastic 2c09046a27 Merge main into #1729 2026-11-07 12:47:51 +07:00
bflatastic 4106c26e8c Merge main into #1729 2026-11-07 12:30:05 +07:00
bflatastic 70821e3645 Merge main into #1879 2026-11-07 12:29:18 +07:00
bflatastic 3f6aa299ea Merge main into #1873 2026-11-07 12:15:09 +07:00
bflatastic 9278ee5451 Merge main into #1729 2026-11-07 12:14:41 +07: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
BFlat 808e60eeae Merge pull request #1772 from SoldierPePe/i18n/rtl-window-mirror
M10: a right-to-left UI language mirrors the window
2026-11-07 13:11:40 +08:00
bflatastic 1546d29a66 Merge main into #1729 2026-11-07 12:07:03 +07:00
BFlat 5cbc8207fd Merge pull request #2065 from helenkwok/web/page-api
figcraft-web: window.figcraft takes its request functions from craft-web-api
2026-11-07 13:03:10 +08:00
bflatastic 6304904317 Merge main into #1911 2026-11-07 11:58:09 +07:00
bflatastic 651a7743c1 Merge main into #1873 2026-11-07 11:57:34 +07:00
bflatastic e056dc7608 Merge main into #1879 2026-11-07 11:56:47 +07:00
bflatastic f1eb55f58b Merge main into #1772 2026-11-07 11:56:11 +07:00
BFlat b64f13ac56 Merge pull request #1759 from dotCooCoo/feat/export-color-profile
Export: each export setting chooses a color profile
2026-11-07 12:54:29 +08: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
BFlat 8d1b183e7d Merge pull request #1913 from tommy1616/feat/traditional-chinese-taiwan
M10: Traditional Chinese (Taiwan) interface draft
2026-11-07 12:52:13 +08:00
BFlat 5999408d1e Merge pull request #1858 from TrevorBrown-dev/fix/padding-all-sides
M2: a Cmd/Ctrl-click on a padding field sets all four sides with the value typed
2026-11-07 12:49:06 +08:00
Trevor Brown 0f8f780c19 Merge remote-tracking branch 'upstream/main' into fix/scrub-speed 2026-11-06 23:49:05 -05:00
Trevor Brown 39b93b7950 Merge remote-tracking branch 'upstream/main' into feat/pick-select 2026-11-06 23:49:01 -05:00
BFlat 764c416633 Merge pull request #1912 from TrevorBrown-dev/feat/layers-horizontal-scroll
Layers panel: the list is as wide as its widest name and scrolls sideways (#1904)
2026-11-07 12:47:49 +08:00
bflatastic bc47bcd17a Merge main into #1772 2026-11-07 11:41:20 +07:00
BFlat 1a035285de Merge pull request #1998 from cheyras/fix/live-offline-merge
M9: joining a live session again merges what you did while disconnected
2026-11-07 12:40:49 +08: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 2d25f29cb3 Merge main into #1873 2026-11-07 11:33:07 +07:00
bflatastic 5087bf05dd Merge main into #1879 2026-11-07 11:31:30 +07:00
bflatastic 442d1d66f3 Merge main into #1858 2026-11-07 11:30:58 +07:00
BFlat d578f44742 Merge pull request #1878 from TrevorBrown-dev/feat/region-fills
M8: a fill per region: the Fill section and the fill commands edit the regions selected in vector edit mode (#1875)
2026-11-07 12:29:43 +08:00
bflatastic a6f6c42886 Merge remote-tracking branch 'origin/main' into landb/1913 2026-11-07 11:28:35 +07:00
bflatastic c1ff1de7a9 Merge main into #1858 2026-11-07 11:28:03 +07:00
BFlat 305fc686b2 Merge pull request #1854 from TrevorBrown-dev/fix/control-arrows-pan
Control channel: ui.key arrows pan the view when nothing is selected, as the window does
2026-11-07 12:26:48 +08:00
bflatastic 5552d3dac5 Export profile test: an sRGB JPG embeds its profile since main's JPG change 2026-11-07 11:26:26 +07:00
bflatastic b0664c0b00 Merge main into #1998 2026-11-07 11:23:09 +07:00
bflatastic c4d40d254b Merge main into #1879 2026-11-07 11:19:53 +07:00
bflatastic 02f5a3520a Merge main into #1759 2026-11-07 11:19:38 +07:00
BFlat f490a9b323 Merge pull request #1762 from dotCooCoo/feat/selection-colors-library
M3: Selection colors rows apply library color styles and create a style
2026-11-07 12:18:35 +08:00
BFlat b1078ae51c Merge pull request #1914 from TrevorBrown-dev/fix/jam-connector-auto-side
FigJam import: a connector end with an AUTO or CENTER magnet leaves the side facing the other end (#1909)
2026-11-07 12:14:59 +08:00