bflatastic
f68f748418
M12: boards dot grid: blending a dot in a function of its own (Sonar)
2026-10-24 14:19:14 +07:00
bflatastic
99b45d8e52
Merge remote-tracking branch 'origin/main' into feat/board-canvas
...
# Conflicts:
# ROADMAP.md
# docs/gaps.md
2026-10-24 13:34:14 +07:00
BFlat
e3e39bbc4d
M6: Dev Mode measurements kept on the canvas, a read-only layers panel ( #1248 )
...
* M6: Dev Mode measurements kept on the canvas, a read-only layers panel
Measurements placed between two layers, along a side or to the layer
around one (devMode.addMeasurement / removeMeasurement / measurements),
stored on the layer they start from (saved, synced, undoable; old files
open without them), drawn in Dev Mode as labelled redlines that follow
the layers and listed, placed and removed in the Inspect tab. In Dev Mode
the layers panel only selects and expands.
* M6: Dev Mode measurements: explicit imports, a measurement row of its own (Sonar)
2026-10-24 13:33:26 +07:00
bflatastic
762277fb7d
M12: boards dot grid, re-attaching connector ends, curved connectors
...
Board pages draw a dot grid in the canvas render, after the page colour
and under the layers (figcraft_render::Dots), thinned out when zoomed out
and coloured from the theme's ink against the page. A selected connector
shows its ends as handles; dragging one onto an object re-attaches it,
onto empty canvas leaves it free (board.reattach, one undo step, also
over MCP). Connectors can be curved, and elbows go around the objects
they join when the short way would cross them.
2026-10-24 11:20:05 +07:00
BFlat
3476f4b1e7
Merge pull request #1244 from storytold/batch/r2-1
...
Community batch r2-1: 63 reviewed PRs
2026-10-24 11:15:53 +07:00
bflatastic
9f60f5470d
Batch r2-1 review: status lines and rows in ROADMAP, prototyping and UI parity
2026-10-24 10:31:31 +07:00
bflatastic
8af2efd1b9
Batch r2-1 review: U+2007 glues beside ideographs too
2026-10-24 10:31:29 +07:00
bflatastic
d0db758684
Batch r2-1 review: SVG ids unique as written; a filled open curve closes for its fill
2026-10-24 10:31:26 +07:00
bflatastic
31d4c6eba4
Batch r2-1 review: per-side strokes follow smoothed corners for every alignment
2026-10-24 10:31:24 +07:00
bflatastic
c45c693278
Batch r2-1 review: a report reason blank after cleaning is refused
2026-10-24 10:31:22 +07:00
bflatastic
d114c6ed92
Batch r2-1 review: CLI export file names stay within 200 bytes
2026-10-24 10:31:19 +07:00
bflatastic
46b02d44e6
Batch r2-1 review: paste_nodes refuses two nodes mapped to one new id
2026-10-24 10:31:17 +07:00
bflatastic
5d7eb04d44
Batch r2-1 review: the hello and close-drain deadlines bound every read
...
Duplex::read_until gives a reader a deadline: each socket read waits at most what's left of it.
The server reads the handshake and hello under the hello deadline, so a hello trickled in
fragments can't outlast it; manage's close drains under CLOSE_DRAIN, so a silent server can't
hold it for the idle timeout.
2026-10-24 10:31:15 +07:00
bflatastic
aac76ebeca
Batch r2-1 review: Save on close waits a frame for a panel field to commit
...
A click on Save takes the keyboard from a focused panel field, which commits next frame: the files
save then, as the field-save shortcut does. OsStr::to_str as a method reference (SonarCloud).
2026-10-24 10:31:13 +07:00
bflatastic
3334ec6c16
Batch r2-1 review: vector_up in smaller helpers (SonarCloud cognitive complexity)
2026-10-24 10:31:10 +07:00
bflatastic
8dcba0684b
Batch r2-1 review: .fig export grid sizing in helpers; instance layers clear inherited track sizes
...
auto_layout's grid branch moves to grid_layout and grid_sizing (SonarCloud cognitive complexity).
unset() clears gridColumnsSizing and gridRowsSizing, so an instance layer with equal tracks no
longer reads back its main layer's track sizes.
2026-10-24 10:31:08 +07:00
bflatastic
bd80829a27
Batch r2-1 review: a paint keeps its own opacity through unbind and rebind
...
color_alpha is the part of a solid paint's opacity that is its typed colour's alpha, not a flag:
binding a colour variable takes only that part out, unbinding puts the variable's alpha back in,
and REST import records it. A 50% paint bound to a 50% variable stays at 25% bound or not.
2026-10-24 10:30:49 +07:00
bflatastic
1f9effd25d
#660 : a file saved as Proto.figcraft presents as Proto (titles follow file names on main)
2026-10-24 09:34:40 +07:00
bflatastic
f00b62ba2d
Merge fix: the server store tests keep each test closed
2026-10-24 09:26:44 +07:00
bflatastic
9fb88b6668
Merge #904 : M1: write grid track sizes in .fig export ( #465 ) (@xiaou61)
...
# Conflicts:
# docs/file-format-parity.md
2026-10-24 09:24:04 +07:00
bflatastic
489da09905
Merge #740 : engine: fill rules as vector.fillRule and vector.reverseLoop (@yelintong)
2026-10-24 09:23:50 +07:00
bflatastic
550c3e8bbb
Merge #905 : M1: say that the automation roots reach only the headless side ( #835 ) (@xiaou61)
2026-10-24 09:23:48 +07:00
bflatastic
fac42785c1
Merge #1158 : FreeBSD: package the aarch64 cross build (craft-common-actions#39) (@zuujiscom)
2026-10-24 09:23:45 +07:00
bflatastic
ba8b608673
Merge #660 : M5: one presentation tab per page of a file (@JimKnoxx)
...
# Conflicts:
# docs/prototyping-parity.md
2026-10-24 09:23:43 +07:00
bflatastic
21a334b3ef
Merge #976 : fix(ui): keep the style picker open while editing a style's colour (@kollakek1)
2026-10-24 09:23:29 +07:00
bflatastic
075f5bfc98
Merge #1197 : Regression test for #237 (@skylartaylor)
2026-10-24 09:23:26 +07:00
bflatastic
0a99f0fb69
Merge #1032 : M8: save-format tests keep their temp folders apart (@MortenHusted)
2026-10-24 09:23:24 +07:00
bflatastic
2577f53e2c
Merge #1212 : Control server: wait after a failed accept instead of retrying at once (@oracola91)
2026-10-24 09:23:21 +07:00
bflatastic
53b8b531ce
Merge #1031 : Treat U+2007 FIGURE SPACE as non-breaking in line breaking (@Silvertree2010)
2026-10-24 09:23:18 +07:00
bflatastic
771a0060b6
Merge #1038 : Keep literal true/false distinct from variables named true/false (@Silvertree2010)
...
# Conflicts:
# crates/doc/src/proto_expr_parse_tests.rs
2026-10-24 09:23:15 +07:00
bflatastic
60e1ef9976
Merge #1041 : Keep not <var> from reading back as a variable named 'not
' (@Silvertree2010)
2026-10-24 09:23:02 +07:00
bflatastic
a5e8d256e6
Merge #1052 : Drop XML-forbidden control characters from live-text SVG export (@Silvertree2010)
2026-10-24 09:23:00 +07:00
bflatastic
3610a7cb12
Merge #1142 : Write a final Greek sigma in lower-case text layout (@Silvertree2010)
2026-10-24 09:22:57 +07:00
bflatastic
378c015eb3
Merge #1145 : Remove all leftover temp files at server startup (@Silvertree2010)
...
# Conflicts:
# apps/figcraft-server/src/store_tests.rs
2026-10-24 09:22:54 +07:00
bflatastic
53e61e2a5d
Merge #1146 : Guard file generation increments against u64 overflow (@Silvertree2010)
...
# Conflicts:
# apps/figcraft-server/src/store_tests.rs
2026-10-24 09:22:42 +07:00
bflatastic
3774f9e51d
Merge #1149 : Bound the library/plugins close drain with a deadline (@Silvertree2010)
2026-10-24 09:22:28 +07:00
bflatastic
75c1586011
Merge #1153 : Match widget data check depth to serde_json's recursion limit (@Silvertree2010)
...
# Conflicts:
# crates/engine/src/plugins.rs
2026-10-24 09:22:12 +07:00
bflatastic
52afac49fe
Merge #1164 : Reject non-finite coordinates in control-channel ui.input (@Silvertree2010)
2026-10-24 09:21:48 +07:00
bflatastic
f4541d8b24
Merge #1147 : Restrict a pre-existing data directory to 0700 (@Silvertree2010)
2026-10-24 09:21:45 +07:00
bflatastic
70536a6265
Merge #948 : Keep a solid paint's own opacity when binding a colour variable (@Silvertree2010)
2026-10-24 09:21:42 +07:00
bflatastic
d93b806323
Merge #1151 : Never drop Sync events when the live inbox is full (@Silvertree2010)
2026-10-24 09:21:39 +07:00
bflatastic
ef6a6c49b2
Merge #1185 : Make is_ancestor fail closed on deep or looping parent chains (@Silvertree2010)
...
# Conflicts:
# crates/doc/src/tests.rs
2026-10-24 09:21:37 +07:00
bflatastic
82004c6e9c
Merge #1187 : Cap the issue list returned by Document::validate (@Silvertree2010)
2026-10-24 09:21:24 +07:00
bflatastic
15fd9fe1bf
Merge #1192 : Strip bidi control characters from names and report reasons (@Silvertree2010)
...
# Conflicts:
# apps/figcraft-server/src/store_tests.rs
2026-10-24 09:21:04 +07:00
bflatastic
6b37d779e0
Merge #1195 : Accept a version string for the plugin manifest api field (@Silvertree2010)
2026-10-24 09:20:03 +07:00
bflatastic
fed124fa77
Merge #1238 : Fix duplicate SVG ids when a layer name matches a generated id (@Silvertree2010)
...
# Conflicts:
# crates/svg/src/tests.rs
2026-10-24 09:20:00 +07:00
bflatastic
f109945c47
Merge #1165 : Make SVG unique_id linear for repeated layer names (@Silvertree2010)
2026-10-24 09:19:41 +07:00
bflatastic
404916a949
Merge #1169 : Refuse library versions that leave no newer one to publish (@Silvertree2010)
2026-10-24 09:19:38 +07:00
bflatastic
b5a8dcb059
Merge #1230 : Honour even-odd fill rule when hit testing vectors (@Silvertree2010)
...
# Conflicts:
# crates/doc/src/tests.rs
2026-10-24 09:19:18 +07:00
bflatastic
fcace33059
Merge #1178 : Enforce per-address storage caps per IPv6 /64, /56 and /48 (@Silvertree2010)
2026-10-24 09:18:28 +07:00
bflatastic
45a3069dce
Merge #1175 : Keep the hello size limit until a connection is admitted (@Silvertree2010)
2026-10-24 09:18:25 +07:00
bflatastic
f0a7037a53
Merge #1183 : Enforce an absolute pre-hello deadline against ping slowloris (@Silvertree2010)
2026-10-24 09:18:22 +07:00
bflatastic
d40ec98ef6
Merge #1182 : Shut kicked and removed connections when their close can't be queued (@Silvertree2010)
2026-10-24 09:18:19 +07:00
bflatastic
00074d0041
Merge #1186 : Stop stale next_id from making pastes overwrite existing nodes (@Silvertree2010)
2026-10-24 09:18:16 +07:00
bflatastic
dc0ce6c176
Merge #1181 : Refuse text.loadFont path for plugins (@Silvertree2010)
2026-10-24 09:18:13 +07:00
bflatastic
2a20a4de0a
Merge #1190 : Refuse non-local library paths in the library Cache (@Silvertree2010)
2026-10-24 09:18:10 +07:00
bflatastic
e3c9d3f644
Merge #1191 : Deny library.publishToServer to plugins (@Silvertree2010)
2026-10-24 09:18:07 +07:00
bflatastic
243728b758
Merge #1196 : Don't run the expiry sweep from offline CLI commands (@Silvertree2010)
2026-10-24 09:18:03 +07:00
bflatastic
c7062db387
Merge #1171 : Never overwrite a file's log when it can't be read (@Silvertree2010)
2026-10-24 09:17:59 +07:00
bflatastic
ad5d502200
Merge #1014 : M7: keep keyboard focus inside the Interface size menu (@YarilaFox)
2026-10-24 09:17:56 +07:00
bflatastic
f3782e6bc4
Merge #1023 : fix(engine): show the Pen's Shift 45° step in its preview line ( #970 ) (@vxMacDev)
2026-10-24 09:17:11 +07:00
bflatastic
eada8b0ff3
Merge #1042 : M3: style links given in a call apply after its values (@MortenHusted)
...
# Conflicts:
# crates/engine/src/cmd/props.rs
2026-10-24 09:16:54 +07:00
bflatastic
90e5e03b23
Merge #1160 : M0.9: figcraft-cli export names files as the app's export does ( #1154 ) (@switch87)
2026-10-24 09:16:12 +07:00
bflatastic
adc8e81826
Merge #1161 : M0.9: --help and -h after a figcraft-cli subcommand print the usage ( #1155 ) (@switch87)
2026-10-24 09:16:07 +07:00
bflatastic
15321a56ff
Merge #1198 : fill/stroke props: accept 'none' and null as no paint (@lileeei)
...
# Conflicts:
# ROADMAP.md
2026-10-24 09:16:04 +07:00
bflatastic
1e4a31a303
Merge #1199 : M3: instance-swap properties in the Dev Mode component playground (@marcoarnulfo)
2026-10-24 09:15:41 +07:00
bflatastic
6063d3e9a9
Merge #1189 : M4: vector edit transform box around points of several layers (@marcoarnulfo)
...
# Conflicts:
# docs/target-app-parity.md
# docs/ui-parity.md
2026-10-24 09:15:11 +07:00
bflatastic
8f9e2fedc7
Merge #1047 : M7: Type settings keeps its width with long labels ( #1029 ) (@AganzeFelicite)
...
# Conflicts:
# ROADMAP.md
2026-10-24 09:14:10 +07:00
bflatastic
07191c881d
Merge #1030 : M1: individual corner fields sit at their corners, each with its own icon ( #1002 ) (@muamerETS)
2026-10-24 09:13:48 +07:00
bflatastic
8eb5624460
Merge #986 : fix: = zooms in, matching - zooming out ( #973 ) (@Ridzzz0Alam)
2026-10-24 09:13:43 +07:00
bflatastic
f31199d4ca
Merge #1018 : M1: a selected unfilled shape drags from inside its box ( #910 ) (@muamerETS)
2026-10-24 09:13:38 +07:00
bflatastic
370faa52da
Merge #1033 : M3: a variant switch takes the new variant's resizing unless the instance set its own (@MortenHusted)
2026-10-24 09:13:33 +07:00
bflatastic
ab5a62387b
Merge #1034 : M6: SVG import fills open subpaths the way SVG does (@MortenHusted)
2026-10-24 09:13:28 +07:00
bflatastic
98040b48a5
Merge #1037 : M3: a variable mode set on a layer inside an instance is an override (@MortenHusted)
2026-10-24 09:13:23 +07:00
bflatastic
83f840f802
Merge #1043 : M3: a swapped nested instance keeps its outer main's overrides (@MortenHusted)
2026-10-24 09:13:18 +07:00
bflatastic
d394e952c6
Merge #1044 : M4: individual stroke weights follow the corner radius like CSS borders (@MortenHusted)
2026-10-24 09:13:13 +07:00
bflatastic
ac5783d0cd
Merge #1135 : M5: prototype actions lay out what they change like the canvas does (@MortenHusted)
...
# Conflicts:
# docs/prototyping-parity.md
2026-10-24 09:13:08 +07:00
bflatastic
293ab33eaa
Merge #1166 : M7: Cmd/Ctrl+S saves while a panel field has the keyboard ( #1157 ) (@switch87)
2026-10-24 09:12:49 +07:00
bflatastic
90f401d73c
Merge #1173 : M8: the unsaved-changes question on close offers Save ( #1170 ) (@switch87)
2026-10-24 09:12:45 +07:00
bflatastic
2053098e8e
Merge #1200 : The colour picker's eyedropper applies the colour to the paint the picker edits (Reported in storytold/vectorcraft#3342 ) (@marcoarnulfo)
...
# Conflicts:
# crates/engine/src/tools.rs
2026-10-24 09:12:42 +07:00
bflatastic
2c9f5267a9
Merge #1232 : M5: a top-level frame taller than the device scrolls without an overflow setting (@seltzdesign)
2026-10-24 09:11:46 +07:00
bflatastic
703d55cc67
Merge #983 : Fix invisible dropdown options in the light theme (@Ridzzz0Alam)
2026-10-24 09:11:41 +07:00
BFlat
8167f13a6a
M12: Boards: a collaborative whiteboard file kind ( #1229 )
...
Board files (File > New board) with sticky notes, shapes with text, connectors that follow what they join (straight or elbow, arrowheads, labels), marker, highlighter and eraser, and stamps; a board toolbar and a contextual bar; the Design panel hidden on boards, Prototype and Dev Mode refused there. Boards are ordinary FigCraft files built from ordinary layers, so saving, undo, export, MCP and live sessions work unchanged. File tabs, recent files and Open files show a pen nib for design files and a note for boards (original icons drawn in code).
2026-10-24 04:18:55 +07:00
BFlat
17ed21d128
M6: Dev Mode tail: imports in layer trees, compare with versions, an inspect-only canvas ( #538 )
...
Import lines for connected components inside generated layer trees; Compare changes against any saved version; a Dev Mode behaviour suite with an inspect-only canvas (menus, shortcuts, paste and Revert to saved refuse design edits; a drag under way is dropped on entering), Changed in the ready list, statuses only on top-level frames and sections; read-only plugins' panels from the Inspect tab.
2026-10-24 02:56:55 +07:00
BFlat
d6e8a6e874
Docs: roadmap entries for the community PRs in #507 , #510 , #529 and #530 ( #587 )
...
Roadmap, milestone and parity rows for the 93 community PRs landed in batches #507 , #510 , #529 and #530 .
2026-10-24 02:02:19 +07:00
BFlat
5fa586306a
Merge pull request #1049 from storytold/readme/app-icon
...
README: the app icon above the title
2026-10-22 18:01:42 +07:00
bflatastic
ce8a224c9e
README: the app icon above the title
2026-10-22 17:57:45 +07:00
BFlat
74c4a84da3
Merge pull request #907 from RiceDee/fix/idle-tests-font-scan
...
test(ui-egui): idle harness scans system fonts before its first frame
2026-10-21 16:32:52 +07:00
BFlat
123e46550f
Merge pull request #909 from RiceDee/fix/component-set-name
...
#903 follow-up: name new component sets from the variant path, not the first property
2026-10-21 16:31:04 +07:00
BFlat
44e64d8d47
Merge pull request #933 from SiadeLucas/feat/pages-scroll-area
...
ui: keep the current page scrolled into view in the pages list (#930 )
2026-10-21 16:21:38 +07:00
BFlat
bb532a5790
Merge pull request #908 from RiceDee/feat/903-variants-discoverability
...
#903 : Combine as variants in the context menu and Design panel; Add variant on a lone component
2026-10-21 16:01:25 +07:00
BFlat
f6f44dcc53
Merge pull request #928 from AganzeFelicite/fix/web-drop-opens-documents-916
...
M7: a document dropped on the canvas opens as a new file (#916 )
2026-10-21 15:50:24 +07:00
BFlat
96a82edecf
Merge pull request #939 from YarilaFox/fix/comment-draft-on-tool-switch
...
M7: dismiss comment draft when switching tools
2026-10-21 15:48:42 +07:00
BFlat
f143260c3a
Merge pull request #935 from YarilaFox/fix/saved-document-title
...
M7: show the chosen filename for saved documents
2026-10-21 15:47:09 +07:00
BFlat
bb93e5e433
Merge pull request #929 from Silvertree2010/fix/h881-local-from-link-accepts-a-sign-i
...
Reject non-hex characters in Local::from_link token
2026-10-21 15:44:45 +07:00
BFlat
da96d54157
Merge pull request #961 from Silvertree2010/fix/h1145-reversesubpaths-reverse-subpaths
...
Keep open subpaths open in ReverseSubpaths::reverse_subpaths
2026-10-21 15:35:17 +07:00
BFlat
a1758c163f
Merge pull request #958 from Silvertree2010/fix/h1112-live-text-svg-export-capitalises
...
Fix Title Case restarting mid-word across styled runs in SVG export
2026-10-21 15:34:55 +07:00
BFlat
b1d00f0802
Merge pull request #943 from Silvertree2010/fix/h932-trim-num-prints-any-whole-number
...
Fix trim_num saturating whole numbers beyond i64 range
2026-10-21 15:34:34 +07:00
BFlat
efb95b29bf
Merge pull request #938 from Silvertree2010/fix/h911-same-server-ignores-the-scheme-s
...
Strip default port in same_server when the address has a path
2026-10-21 15:34:08 +07:00
BFlat
9257f97d69
Merge pull request #911 from Silvertree2010/fix/h737-parse-css-accepts-a-malformed-al
...
Reject malformed alpha and extra args in Color::parse_css
2026-10-21 15:33:47 +07:00