Commit Graph
892 Commits
Author SHA1 Message Date
BFlat dd2a9fd013 Docs: one copy of each row and status item, and a check that keeps it so (#1658)
* Docs: one copy of each row and status item, and a check that keeps it so

Merge resolutions that kept both sides had left progress-doc rows (the .fig row four times, co-editing, live cursors, Windows, M0.9) and status-line items (302 in all) twice or more. The rows are merged keeping every distinct fact, the newest wording winning (#1649's connector routing included); repeated status items are removed, the first kept. cargo xtask docs, run by ci, fails on a repeated table row or status item.

* Docs: remove the status items the merge of main brought back

Merging main into #1658 rebuilt the status lines from main's copies, which still listed items twice: ROADMAP 2, docs/roadmap.md 5, docs/gaps.md 43 and docs/target-app-parity.md 190, whose unclosed parenthesis also came back and hid them from cargo xtask docs. They are removed again, the first copy kept, and the parenthesis closed; every distinct item is still present against main.
2026-10-30 18:36:00 +07:00
BFlat e4a7e89f39 M3: typed and stored variable, collection and mode ids find exactly that object (#1613) (#1635)
Builds on #1618. Variables::get and Variables::collection take an exact id before a name; stored mode ids go through Collection::mode_by_id (expressions, the prototype's mode switch); font family variables and the colour picker, prototype editor and panels read stored ids exactly. Ported from fix/stored-ids-exact.
2026-10-30 18:00:34 +07:00
BFlat f0abe51a84 M6: plugin widgets have hover styles (gap 6) (#1634) 2026-10-30 17:33:04 +07:00
BFlat 9099f1d5ae M6: .fig elbowed and curved connectors without a saved path are routed, not drawn straight (#1649)
The board connector router moves, unchanged, from the engine into figcraft-doc (route_points, RouteEnd) so the .fig importer can use it: an elbowed or curved connector saved without its path runs in right angles or one curve from the side of each layer it joins (the file's magnet, else the edge its point is on, else the side facing the other end). Straight connectors are unchanged. Gap 1.
2026-10-30 17:11:22 +07:00
BFlat 3d7ca30d51 M6: plugin panels take a slider control (gap 6) (#1637) 2026-10-30 16:45:33 +07:00
BFlat 84e5278209 M6: figcraft-cli connect publish publishes code connect mappings to a design file (#1643)
* M6: figcraft-cli connect publish publishes code connect mappings to a design file

figcraft-cli connect publish <file.figcraft> [--mappings figcraft.connect.json] [--dry-run] links each entry's component or set by name through codeConnect.import, warns about and skips links that don't fit, saves the file in place through the engine's file.save, and exits 1 when nothing links. Gap 16.

* M6: the generated man pages include connect and connect publish
2026-10-30 16:31:25 +07:00
BFlat 10c66678c3 Merge pull request #1641 from ChristopherLinnett/feat/1280-color-calculations
M3: colour variables can be calculated from others, faded or mixed per mode (#1280)
2026-10-30 16:16:23 +07:00
BFlat 99440fa9ff M8: a drag that only moves the selection shifts what was worked out at its start (#1571) (#1640)
The engine notes when a drag has only moved the selected layers by one offset (Interaction::moved_by); the canvas keeps the outlines, box and slots from the drag's start document and shifts them, the selection spacing and the Design panel's values (but the position fields) come from that document, and the Export section's values are kept. Dragging 648 layers: UI pass 2.10 to 1.44 ms a frame.
2026-10-30 16:13:55 +07:00
BFlat 34fce9bfcf M12: create the next board shape already connected (#1631)
* M12: create the next board shape already connected (#1597)

A selected sticky or shape shows a + beside each side; hovering one previews where the next goes, clicking makes one of the same kind, size and colour there, joined by a connector, and starts typing in it, in one undo step. board.addConnected {id?, side?, edit?} does it from commands.

* M12: the connected-shape handle and command in every full catalog (#1597)

* M12: Shift+Cmd/Ctrl+Enter on a board shape adds the next one already connected (#1597)
2026-10-30 15:59:13 +07:00
bflatastic 68450a6a0e Merge main into #1641 2026-10-30 15:57:31 +07:00
BFlat c1451fecd5 M4: an imported file finds an installed family under the other names its fonts give it (#1292) (#1628)
Fonts name a family by its typographic name and by a legacy name per weight; fonts without typographic names are installed under the legacy ones only. FontDb::resolve finds either from the other, and matches names across case, spaces, hyphens and underscores; every lookup (import, paste, REST import, rendering, missing fonts, the font report) uses it. A weight-number style goes by that weight, and .fig and REST imports wait for the installed fonts to be indexed.
2026-10-30 15:44:09 +07:00
BFlat 328bb6e269 Merge pull request #1609 from avhn/fix/1085-grouped-panic-rollback
M8: a grouped command whose closure panics leaves the document as before (#1085)
2026-10-30 15:27:30 +07:00
Christopher Linnett bc76665c65 M3: colour variables can be calculated from others, faded or mixed per mode (#1280)
A colour variable's value in a mode can now be {"alpha": {"variable", "opacity"}} - that
variable's colour with its alpha replaced - or {"mix": {"from", "to", "t"}}, a per-channel blend
of two colour variables or literals over the stored values (in the document's colour profile),
alpha included. Calculations resolve lazily like aliases, so bound layers, mode switches,
instances and undo follow their sources; they compose, and a loop, or a calculation that reads
more than 32 variables in its collection's modes (other collections in their default modes), is
refused when it is set. Operands are stored by id and read by exact id, as stored references
are. Files keep them; REST, CSS, Penpot and .fig exports write the colour they show in each mode;
deleting a source leaves its readers on the colour they showed; library import and swap
re-point their operands. The Variables panel shows them with their formula and can swap one for
an alias or detach it to its colour.
2026-10-30 16:25:26 +08:00
BFlat 1772ecefb0 Merge pull request #1636 from ChristopherLinnett/fix/574-fig-import-large
M8: .fig import budgets four values per compressed canvas byte instead of one (#574)
2026-10-30 15:22:58 +07:00
bflatastic 955f101221 Merge main into #1609 2026-10-30 15:12:01 +07:00
bflatastic 027a0bbf92 Merge main into #1636 2026-10-30 15:06:33 +07:00
bflatastic 7c8f2a929a Merge main into #1609 2026-10-30 14:52:57 +07:00
bflatastic 4acbb1f7db Merge main into #1615 2026-10-30 14:52:23 +07:00
bflatastic e5a5da9e62 Merge main into #1609 2026-10-30 14:35:19 +07:00
bflatastic 83c6947e23 Merge main into #1615 2026-10-30 14:34:35 +07:00
bflatastic d9955fdc14 Merge main into #1616 2026-10-30 14:32:50 +07:00
BFlat 51f275b2ff Merge pull request #1420 from avhn/feat/996-inspect-fields
M0.9: inspect layer trees with selected fields or a compact outline (#996)
2026-10-30 14:31:33 +07:00
bflatastic 871ac24e6f Merge main into #1616 2026-10-30 14:29:56 +07:00
bflatastic 09e0e2dbfc Merge main into #1609 2026-10-30 14:29:18 +07:00
bflatastic 015685ee6f Merge main into #1615 2026-10-30 14:20:35 +07:00
BFlat c8b0726d2d Merge pull request #1505 from markx77/fix/german-labels
M10: clarify German gradient, OpenType and startup labels
2026-10-30 14:18:18 +07:00
bflatastic e573652b17 Merge main into #1420 2026-10-30 14:14:34 +07:00
bflatastic ed5bf558c4 Merge main into #1615 2026-10-30 14:13:56 +07:00
Christopher Linnett 1a454edd09 M8: .fig import budgets four values per compressed canvas byte instead of one (#574)
The .fig import gave a file one decoded value per byte of its compressed canvas (at least 20M, at
most 128M). Dense legitimate files decode past that, further since every scalar field counts, and
the whole import was refused as "not a valid FigCraft file: .fig file: message: too many values".
The budget is now four values per compressed byte; the floor and both ceilings (128M, 32M on 32-bit
targets) are unchanged, so a small file that unpacks past the floor is still refused and no file
decodes more values than the ceiling allowed before. Generated 21 MB and 15 MB canvases (220,044
and 108,012 layers) and a 49.7 MB one budgeted at the ceiling (530,106 layers) now open whole
without warnings; the 49.7 MB one's test peaks at about 9 GB.
2026-10-30 15:09:50 +08:00
bflatastic d0d79fdee5 Merge main into #1616 2026-10-30 13:57:06 +07:00
bflatastic 991ea891b5 Merge main into #1609 2026-10-30 13:56:15 +07:00
bflatastic c334853a6e Merge main into #1505 2026-10-30 13:53:42 +07:00
bflatastic 966f823551 Merge main into #1420 2026-10-30 13:52:53 +07:00
bflatastic 1c9aece79d Merge main into #1618 2026-10-30 13:52:02 +07:00
bflatastic 10a778930b Merge main into #1615 2026-10-30 13:50:49 +07:00
BFlat c47177498d M8: every file a command reads by path is a regular file within a cap (#1114) (#1625) 2026-10-30 13:48:26 +07:00
bflatastic 20ae99afff Merge main into #1505 2026-10-30 13:36:51 +07:00
bflatastic cf54d64a64 Merge main into #1420 2026-10-30 13:36:11 +07:00
bflatastic ad8bad3cc3 Merge main into #1618 2026-10-30 13:35:24 +07:00
bflatastic eafa29700a Merge main into #1615 2026-10-30 13:34:41 +07:00
BFlat 47e9e0a50d M8: a component set's property rows fit the 240 px right panel (#1629) 2026-10-30 13:32:36 +07:00
bflatastic a3c0de04a8 Merge main into #1505 2026-10-30 13:22:50 +07:00
bflatastic cf129e42c9 Merge main into #1420 2026-10-30 13:21:51 +07:00
bflatastic a09e23e1d2 Merge main into #1618 2026-10-30 13:20:42 +07:00
bflatastic 9ae8c2e377 Merge main into #1615 2026-10-30 13:20:02 +07:00
bflatastic 6e4450d209 Merge main into #1615 2026-10-30 13:07:00 +07:00
bflatastic b157a38e99 Merge main into #1618 2026-10-30 13:05:24 +07:00
bflatastic cabbb138da Merge main into #1614 2026-10-30 13:04:48 +07:00
BFlat 7b886404c3 M8: Opening a file contacts no team library server it names until you check it (#1621)
* M8: opening a file contacts no team library server it names until you check it (#1097)

* M8: translate the team library check strings (#1097)

* M8: the Assets panel library test checks what allows a library, without its own fake link (Sonar duplication and coverage)
2026-10-30 13:03:31 +07:00
bflatastic f11cad01b8 Merge main into #1615 2026-10-30 13:03:09 +07:00