Commit Graph
2890 Commits
Author SHA1 Message Date
BFlat 760aece238 M5: an Open link action can open in place of the prototype, with Open in new tab off (#1685) 2026-10-31 02:37:54 +07:00
BFlat 77778cad9d Merge pull request #1700 from Janiz-zzz/fi-update-20261030
i18n(fi): translate the 99 UI strings and 23 command labels Finnish lacked
2026-10-31 02:34:39 +07:00
BFlat bbd1188c81 M3: a collection of this file can be extended (#1679)
Gap 14: variable.extendCollection and Extend collection on a collection's row in the Variables editor. Extensions follow edits of the collection they extend at once (normalising keeps them in step whenever variables change), extensions extend again, and a loop of extensions from a hostile file comes apart into plain collections.
2026-10-31 02:21:53 +07:00
bflatastic 50fdcfe43a Merge main into #1700 2026-10-31 02:15:51 +07:00
BFlat 6bc8d39433 Merge pull request #1698 from saimskywalker/issue-1681-dash-pattern-edit
M4: editing a stroke's Dash or Gap keeps the rest of its dash pattern (#1681)
2026-10-31 02:13:10 +07:00
BFlat f152ca995f Merge pull request #1697 from saimskywalker/issue-1095-roots-refuse-network
M8: commands confined to automation roots reach no server (#1095)
2026-10-31 02:10:56 +07:00
BFlat b377c70a8c M4: the eyedropper with Cmd/Ctrl+Shift makes a colour style or variable (#1674)
* M4: the eyedropper with Cmd/Ctrl+Shift makes a colour style or variable of what it picks

* M4: the Create from color window's collection picker is its own function
2026-10-31 02:09:08 +07:00
BFlat 54a0c6954b M9: a live session's welcome sends the document compressed to clients that read it (#1665) (#1693) 2026-10-31 01:51:12 +07:00
saimskywalker 391982aab6 M4: editing the Dash of an odd-length dash pattern keeps its gaps (#1681)
An odd-length pattern is drawn repeated ([4, 2, 1] as [4, 2, 1, 4, 2, 1]),
so editing its Dash as three values changed the second gap. The pattern is
written out repeated first and only the edited entry changes.
2026-10-31 02:47:17 +08:00
saimskywalker e6059b3543 M8: confined library checks say they were refused (#1095)
library.check refused nothing while automation roots confined it: it
counted libraries it never asked about and remembered them as yours. It
now refuses before remembering any. library.updates and library.list
answered a refused check with the team library cached earlier, as if the
server had nothing newer; the refusal now reaches them instead of
falling back like an offline server. The MCP and control protocol docs
say that a root on a network share still reaches that file server.
2026-10-31 02:43:50 +08:00
BFlat b6499a295c M8: a control request that times out says whether it was applied (#1673) (#1692)
The UI starts a request through its gate (a new Running state) just before running it and never runs one the transport already cancelled. At the timeout the reply says it was dropped and not applied, or that it is still running and will take effect; a reply that just made it is delivered. Only screenshots and input blame the window.
2026-10-31 01:37:09 +07:00
BFlat 9f4d1ce75b M12: board votes say who voted for what, and earlier votes' results are kept (#1666)
* M12: an ended vote's results say who voted for each object

* M12: a board keeps earlier votes' results, listed in Results and deleted one at a time

* M12: the vote Results popover is drawn by small helpers, and its stepper, rows and Clear are tested
2026-10-31 01:19:03 +07:00
Janiz-zzzandClaude Opus 5.5 aaa5ba4bde i18n(fi): translate the 99 UI strings and 23 command labels Finnish lacked
Fills every key the Finnish catalog was missing against the current
English catalog and command set (missing_translations_report: fi 0 / 0 / 0),
following the catalog's existing terms (sisämarginaali, täyttö,
reunaviiva, tehoste, ilmentymä, yhdistin, taulu) and its space before %.
No existing row is changed.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 20:18:33 +02:00
BFlat 930cd9b323 Merge pull request #1686 from saimskywalker/issue-1672-finite-check-changed
M8: an edit checks only the layers it changed for out-of-range positions and sizes (#1672)
2026-10-31 01:17:30 +07:00
saimskywalker f4e34bac71 M4: editing a stroke's Dash or Gap keeps the rest of its dash pattern (#1681)
The stroke settings show the first dash and gap only, and editing either
wrote back [dash, gap], so an imported pattern like [4, 2, 1, 2] collapsed
on the first edit. Each field now changes its own value and keeps the
rest of the pattern.
2026-10-31 02:10:55 +08:00
saimskywalker ef4c0aacfd M8: commands confined to automation roots reach no server (#1095)
The roots confined files only: a confined agent could still publish the
open document to any server, host it on the network or join a session.
The engine reaches the network only through the live link, which now
refuses a call made while the roots confine it (hosting, joining,
publishing, sharing, team libraries, plugin directories), and skips the
background team library checks. The MCP and control protocol docs say so.
2026-10-31 02:05:29 +08:00
saimskywalker 7ce19ebe38 M8: test the finite-geometry check by the layers it visits, not by time (#1672)
The timing assertion could fail under load. finite_check_candidates is now its own function, and the test checks that a rename among 200,000 layers looks at only a handful of them.
2026-10-31 01:46:30 +08:00
saimskywalker 646ac60b75 M8: an edit checks only the layers it changed for out-of-range positions and sizes (#1672)
check_finite_geometry went over every layer of the document after every
command, so each edit cost time in proportion to the file, not the edit.
It now walks Document::changed_ids against the version the command
started from; the imbl diff skips what the two versions share.

100 renames among 200,000 layers: ~0.60 s before, ~0.02 s after.
2026-10-31 01:27:33 +08:00
BFlat e97961ba66 M12: stamps stick to the objects they land on, which are highlighted first (#1671)
* M12: stamps stick to the objects they land on

A stamp sticks to the topmost object under its centre (BoardItem::Stamp gains an optional on, left out when empty so older files open with stamps on nothing) and the board's normalize pass carries it when that object moves or turns, once when both move together. A stamp dragged onto another object sticks to that one, off everything to nothing; one whose object is deleted stays where it is. Gap 24.

* M12: the object a stamp will stick to is highlighted

While the stamp tool is over an object, or a stamp is dragged over one, the object it will stick to is outlined with the canvas's hover outline (Overlay::stamp_target, found by the same stamp_target as board.stamp and settle_stamps). A drag no longer drops what it moves into the auto layout of a sticky, shape with text or table: board objects take no drops; a stamp already inside its sticky moves with it once. Builds on #1671. Gap 24.
2026-10-31 00:25:38 +07:00
BFlat 87f3edbc7e Merge pull request #1678 from patlux/team-directory
M9: a team list on figcraft-server, shown in Home ▸ Online, with links that carry no secret (part of #742)
2026-10-31 00:08:34 +07:00
bflatastic 497e2d020f Merge main into #1678 2026-10-30 23:51:41 +07:00
BFlat 958b9b8c44 Merge pull request #1676 from nine-codes/claude/sharp-feynman-me8n1o
M10: Bosnian catalog covers main's new paste strings
2026-10-30 23:46:50 +07:00
BFlat 170b9f9066 Merge pull request #1675 from MarekSpodBiedry/issue-1664
Live join: a large Welcome still downloading is not given up on at the idle timeout (#1664)
2026-10-30 23:44:38 +07:00
Patrick Wozniak d015436b13 M9: team links the list no longer hands out are removed at startup; a team link is made before the list changes 2026-10-30 17:39:36 +01:00
BFlat be6a7af25f M3: team library analytics count detached instances (#1668)
* M3: team library analytics count detached instances

Detaching an instance of a library component counts it in the file (libraries.detached, saved with it, capped). The background library check reports the counts after its fetch (ReportDetached); the server keeps them per file beside the file's usage report in usage.json (same caps) and answers Detached with them. Show usage and library.usage list detaches per component and per file (detached, detachesKnown). The new request and reply variants are appended, so every older library message keeps its bytes; an older server refuses the new requests, which the app ignores. Gap 10.

* M3: the detach test waits for the instance count too (the two arrive in separate reports)
2026-10-30 23:29:18 +07:00
Claude 3f867cc4fc Merge main into the Bosnian catalog follow-up
Main merged #1652 (the Bosnian catalog) and added more strings; ROADMAP keeps main's rows with the count updated, and bs.toml translates the two new strings (a pasted table's size limit, connector labels without a snapshot), so it covers all 1,906 UI strings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Tayw8nmxoLLmKv13jK93z
2026-10-30 16:18:27 +00:00
Patrick Wozniak 2d23f95673 M9: Home ▸ Online shows the server's team list, and its files open by links without a secret (desktop and browser) 2026-10-30 17:10:12 +01:00
Patrick Wozniak 4b4b2bfd00 M9: a team list on figcraft-server: the files shared now, joined without a token (team_files) 2026-10-30 17:09:07 +01:00
BFlat b3ca228a75 M5: skipping the Open link notice by command is saved at once (#1667)
proto.linkNotice from the Actions palette, the control channel or MCP changed the preference in memory only until the app next saved its preferences. It now sets Session::prefs_unsaved, which the app saves at the end of the frame like installed plugins and live-session tokens; the notice's own Don't show this again goes the same way. Gap 15.
2026-10-30 23:05:57 +07:00
BFlat 7e9d6ce8c5 M12: line ends, dashes, weight and any colour on a board connector's bar (#1596) (#1632)
The bar over a selected connector adds start and end point menus with every line end, a line style menu (solid or dashed, weights 1 to 6) and a colour wheel opening the colour picker, beside the board colours and line type; every control names itself on hover. UI only, through board.setStyle and the stroke's dashes and weight.
2026-10-30 22:50:20 +07:00
MarekSpodBiedry 0ebe626062 Live join: a large Welcome still downloading is not given up on at the idle timeout (#1664) 2026-10-30 16:38:36 +01:00
Claude 34cd65a711 M10: Bosnian catalog covers main's new paste strings
Four strings main added since the last merge (pasted design layers and
their missing images, image fills and shared styles not in the file) get
Bosnian translations, so the catalog covers all 1,905 UI strings again;
the counts in ROADMAP.md and the localization parity doc follow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Tayw8nmxoLLmKv13jK93z
2026-10-30 15:34:04 +00:00
BFlat 4f5a25cc82 M12: spreadsheet cells paste onto a board as a table (#1663) 2026-10-30 22:32:44 +07:00
BFlat ddda495a6f M6: a long frame name stays on one line in the Export button and Dev Mode's header (#1650) (#1661) 2026-10-30 22:12:49 +07:00
BFlat db725dc73f M8: the Design panel and the selection overlays stop going over a large selection every frame (#1571) (#1660) 2026-10-30 21:58:41 +07:00
BFlat 139d5e94a9 Server tests: rate limits measured at a clock the tests hold still (#1662)
downloads_have_a_share_per_address failed once under a full gate: its 40 library fetches could take long enough for the address's download share, measured against Instant::now() and refilling 1 MiB a second, to refill one more. Store::clock() is now what every rate limit the store checks reads: the clock, or in test builds a time the test holds it at (a #[cfg(test)] field). The hardening, download burst and admin budget tests hold it still; the admin test is back to its exact budget (#1564 had allowed for refilling). Found flaking in gates.
2026-10-30 21:42:49 +07:00
BFlat 9b1812432f M6: plugin panels show images (#1639)
* M6: plugin panels show images

An image control in a plugin panel carries a picture as base64 (at most 256 KB; panel specs up to 1 MB), drawn at its size up to a field's width and named by its label, which shows instead when the picture can't be decoded or is over 4,096 px on a side. Images can't be clicked or be command parameters. Panel and form captions no longer wrap.

* Render worker: in_flight counts the watchdog's late preview

The watchdog that previews a render running past PREVIEW_AFTER_MS could pass its still-rendering check, lose the race to the full render, and then hand over its preview and wake the UI after Worker::in_flight had gone false. An idle test that had settled then saw a 0 ns repaint whose cause egui reports a frame late (CI on #1639: 'asked for a repaint in 0ns: [app/files.rs:211]', the autosave tick of the previous frame). The watchdog now marks itself busy from before that check until it has handed over and woken (or skipped), and in_flight counts it; the full render's done markers are SeqCst so the watchdog sees a finished render before in_flight can read idle.

* Docs: drop a status item the merge listed twice
2026-10-30 21:26:15 +07:00
BFlat 838d368712 M6: .fig connector labels without a saved snapshot are kept, centred on their line (#1659)
* M6: .fig connector labels without a saved snapshot are kept, centred on their line

A connector with its own label text but no saved snapshot imports as a frame holding its line (a vector with the connector's stroke and ends) and the label as text centred on the line's middle by length, in the connector's fill paints or black; its background isn't known and is left out, as the import report says. The connector branch of layer_filtered moves into connector_layer. Gap 1.

* Docs: drop a status item the merge listed twice
2026-10-30 21:10:04 +07:00
BFlat 27920c5e26 M8: a drag moving many layers normalises only what sits around them, not each layer's bindings, sizing, text and instance checks (#1571) (#1656) 2026-10-30 20:53:03 +07:00
BFlat 64fc996128 Merge pull request #1657 from avhn/fix/1125-font-offset-overflow
M8: a font's damaged table offsets are skipped instead of wrapping on 32-bit targets (#1125)
2026-10-30 20:37:44 +07:00
bflatastic 5adcf3cf83 Merge main into #1657 2026-10-30 20:19:47 +07:00
BFlat 6cf1ed1dd7 Merge pull request #1652 from nine-codes/claude/sharp-feynman-me8n1o
bs: Bosnian (bs) interface catalog
2026-10-30 20:18:36 +07:00
bflatastic f20e474d7e Merge main into #1652 2026-10-30 20:06:28 +07:00
bflatastic ed6a078854 Merge main into #1657 2026-10-30 20:05:52 +07:00
BFlat 22be27fb2a Merge pull request #1655 from lileeei/1102-style-dedupe-buckets
Text style dedupe is O(spans)
2026-10-30 20:03:38 +07:00
BFlat 4a9a5084bb Merge pull request #1651 from Carbocode/fix/sidebar-input-focus
M1: keep sidebar field text in place on focus
2026-10-30 20:01:24 +07:00
bflatastic cd95894f84 Merge main into #1652 2026-10-30 19:50:13 +07:00
bflatastic 60cb106eb6 Merge main into #1655 2026-10-30 19:49:39 +07:00
bflatastic a55854955d Merge main into #1651 2026-10-30 19:49:02 +07:00
bflatastic 6b35fd80cf Merge main into #1657 2026-10-30 19:48:25 +07:00