Commit Graph
1435 Commits
Author SHA1 Message Date
BFlat 8b8eea2561 Merge pull request #1184 from saturngod/fix/boolean-stroke-outlines
Fix stroke-only boolean operand outlines
2026-10-26 08:33:31 +07:00
BFlat b3f06f6eca Merge pull request #1163 from switch87/fix/linux-symbol-fallback
M9: fall back to the Noto symbol and math fonts on Linux (#1156)
2026-10-26 08:33:05 +07:00
BFlat 2b23477544 Merge pull request #1035 from Nael-Nathanael/fix/752-alias-walk
M7: missing fonts: follow each font variable's aliases once (#752)
2026-10-26 08:32:52 +07:00
BFlat df1bdd0e7c Merge pull request #1010 from Ridzzz0Alam/fix/969-web-save-download
Web build: Save, Save as and Export arrive as downloads
2026-10-26 08:32:39 +07:00
BFlat c853432360 Merge pull request #989 from Ridzzz0Alam/fix/981-fig-layer-cap
Large `.fig` files keep their layers and their library links (#981)
2026-10-26 08:32:26 +07:00
BFlat c5b914ead0 Merge pull request #951 from Hamza0101/fix/fig-note-counts
fig import: a note says how much of the file it covers (#467)
2026-10-26 08:32:09 +07:00
BFlat 378ac56286 Merge pull request #1003 from kkilchrist/feat-994-batch-step-refs
command.batch: named step references (`as` / `$ref`) and paths in `field`
2026-10-26 08:31:53 +07:00
Dylan M. Taylor 106ef69351 feat: startup update prompt modal and direct self-updating (#1328)
* feat: startup update prompt modal and direct self-updating

The update flow (check at start or on request, the startup prompt, the self-update worker) is craft-update's Updater; the app only supplies the suite, its close path and its status window. The check at start is opt-in for the desktop app, an install holds back while documents are unsaved, and the Windows update helper runs before argument parsing.

Ref: storytold/craft-libs#319

* fix(updates): re-add the update hooks to the 0.37 frame loop

* fix(updates): address review feedback

Wake the UI when a manual check is queued from a menu callback; the update prompt owns the keyboard while it is open (LightCraft); Download opens through the desktop URL hook (FilmCraft); the Help menu dispatches through menus::invoke (FigCraft); print jobs and comment drafts hold an install back (WordCraft); Check for Updates is a registered command (GridCraft); an install holds back while documents are unsaved.

* fix(updates): show the prompt on Home and presenter frames and close the application, not one window

* fix(updates): add the update strings to the English catalog
2026-10-25 16:23:00 -04:00
236f3185d6 Migrate FigCraft to egui 0.37 (#1312)
* E21: require release font coverage and stabilize capture deadline tests

* E21: separate capture, IME and field-save regression phases

* M0: correct the migration qualification reference

* M-egui037: document input lifecycle and UI regression contracts

* M0: correct egui 0.37 status docs and stabilize join-code regression

---------

Co-authored-by: Dylan M. Taylor <dylan@dylanmtaylor.com>
Co-authored-by: Codebuff <noreply@codebuff.com>
2026-10-25 15:04:39 -04:00
Brandon Thomas 3fc005c7fe Merge pull request #1295 from Silvertree2010/fix/h2091-inserting-text-at-the-boundary-o
Keep style runs disjoint when inserting text at a run boundary
2026-10-25 12:11:24 -04:00
Brandon Thomas e1d23d8480 Merge pull request #944 from Silvertree2010/fix/h884-color-from-hex-accepts-several-l
Reject multiple leading '#' in Color::from_hex
2026-10-25 12:11:18 -04:00
Brandon Thomas f53001cd93 Merge pull request #931 from lukasz-sklad/community/polish-native-review
i18n(pl): native review, catch-up and terminology fixes
2026-10-25 12:11:13 -04:00
Brandon Thomas 8436737129 Merge pull request #1310 from dotCooCoo/fix/collab-net-loopback-tests
M9: the hello deadline refuses a connection even when a read times out early
2026-10-25 12:11:03 -04:00
Brandon Thomas 31b857433d Merge pull request #1242 from SusieeTheLinuxUser/fix/1220-thai-backspace
Text: Backspace removes Thai and other marks one at a time (#1220)
2026-10-25 12:10:52 -04:00
Brandon Thomas 610fe374c7 Merge pull request #1218 from Salah1St/fix/justify-zwsp
M4: justified text doesn't widen U+200B
2026-10-25 12:10:47 -04:00
Brandon Thomas 15aeff572b Merge pull request #1291 from watchakorn-18k/context-menu-copy-link
M8: Copy link to selection in the layer context menu
2026-10-25 12:10:42 -04:00
Brandon Thomas dfbba05318 Merge pull request #1144 from Silvertree2010/fix/1139-bug-report-figcraft-macos-contex
Keep context menu open after a same-frame trackpad tap
2026-10-25 12:10:37 -04:00
Brandon Thomas 97191e20c7 Merge pull request #1251 from storytold/fix/hover-lines-leave
Canvas: hover distances go when the pointer leaves the canvas
2026-10-25 12:10:32 -04:00
Brandon Thomas 3ec1197a8e Merge pull request #1276 from Ridzzz0Alam/fix/1150-section-labels
fix: Issue #1150 a section's title draws above the labels of frames inside it (#1150)
2026-10-25 12:10:27 -04:00
Brandon Thomas 01c17983fb Merge pull request #1326 from Silvertree2010/fix/h2485-number-field-rejects-a-unit-type
Accept a unit typed after a space in number fields
2026-10-25 12:10:21 -04:00
Brandon Thomas ff056176f8 Merge pull request #1323 from Silvertree2010/fix/h2483-component-code-uses-js-strict-mo
Rename component parameters that are strict-mode reserved words
2026-10-25 12:10:15 -04:00
Brandon Thomas 4b27ae4c77 Merge pull request #1317 from Silvertree2010/fix/h2376-svg-export-rounds-the-scale-of-a
Keep significant digits in SVG matrix scale coefficients
2026-10-25 12:10:09 -04:00
Brandon Thomas 132fdba12f Merge pull request #1296 from Silvertree2010/fix/h2093-code-export-prints-any-whole-num
Fix code export printing whole numbers of 2^63 or more as i64::MAX
2026-10-25 12:10:05 -04:00
Brandon Thomas 7df4ba4900 Merge pull request #1282 from Silvertree2010/fix/h1985-distribute-spacing-measures-the
Measure distribute span to the group's outermost edge
2026-10-25 12:10:00 -04:00
Brandon Thomas 1b8e65fb01 Merge pull request #1274 from Silvertree2010/fix/h1924-non-finite-percent-strings-accep
Reject non-finite percent strings for lineHeight and letterSpacing
2026-10-25 12:09:54 -04:00
Brandon Thomas 8cbdff697f Merge remote-tracking branch 'origin/main' into fix-1295
# Conflicts:
#	crates/doc/src/tests.rs
2026-10-25 11:56:28 -04:00
Brandon Thomas 44a2091b42 Merge remote-tracking branch 'origin/main' into fix-944
# Conflicts:
#	crates/color/src/tests.rs
2026-10-25 11:56:28 -04:00
NetterSilverandClaude Haiku 5.5 8e8314e273 Accept a unit typed after a space in number fields
Found while testing crates/ui-egui/src/field_math.rs:105 (Parser::factor, unit loop; end() at :109)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 11:35:08 +00:00
NetterSilverandClaude Haiku 5.5 142676191e Rename component parameters that are strict-mode reserved words
Found while testing crates/engine/src/component_codegen.rs:~226 (RESERVED list used by ident at :346)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 12:08:47 +01:00
NetterSilverandClaude Haiku 5.5 283c6de2b1 Keep significant digits in SVG matrix scale coefficients
Found while testing crates/svg/src/lib.rs:97 (num, used by matrix at :129 for the image pattern's patternTransform at :243-254)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-25 06:07:08 +00:00
aiongg 92682728e9 Follow-ups from the #1311 review: link notice clicks, variable scopes, corner tooltip (#1316)
* Prototype player: no clicks reach the prototype behind the link notice

* Selection colors: scopes filter the variable menu; the command binds as variable.bind does

* Style picker: color variables scoped to every selected layer's fill or stroke

* Corner button: named Corner smoothing on polygons and stars

* docs/gaps.md: known gaps from the #1311 review

* cargo fmt

* Style picker: clippy
2026-10-25 01:09:29 -04:00
aiongg d135620b9f Dev Mode: the Assets panel's Publish refuses too (#1277) 2026-10-25 02:40:12 +00:00
aiongg 32199cc8e8 Text on a path tool: carry fill and effect bindings as text.onPath does (#1298, #1301) 2026-10-25 02:40:12 +00:00
aiongg b5ed2913d7 Merge #1307 2026-10-25 02:21:44 +00:00
aiongg 86bcfaddb9 Merge #1305
# Conflicts:
#	docs/file-format-parity.md
2026-10-25 02:21:44 +00:00
aiongg b95a04dc43 Merge #1304
# Conflicts:
#	docs/prototyping-parity.md
2026-10-25 02:21:29 +00:00
aiongg ad40507450 Merge #1277 2026-10-25 02:21:19 +00:00
aiongg 7aab188389 Merge #1301 2026-10-25 02:21:19 +00:00
aiongg d31a43419d Merge #1298
# Conflicts:
#	docs/ui-parity.md
2026-10-25 02:21:19 +00:00
aiongg 855631759f Merge #1288 2026-10-25 02:21:08 +00:00
aiongg c104757f59 Merge #1286 2026-10-25 02:21:08 +00:00
aiongg cdf37f9fc9 Merge #1284 2026-10-25 02:21:08 +00:00
aiongg 90bbd6a6d4 Merge #1281 2026-10-25 02:21:07 +00:00
aiongg e9edc298aa Merge #1283 2026-10-25 02:21:07 +00:00
aiongg cff215a107 Merge #1273 2026-10-25 02:21:07 +00:00
dotCooCoo 6e86e26d14 M9: the hello deadline refuses a connection even when a read times out early
On Windows a socket's read timeout counts whole milliseconds, so a read
bounded by the hello deadline can time out a moment before it.
`next_message` then took the timeout for a closed connection: the client
got no "no hello in time" refusal, and the socket closed only after the
2 s linger. `Duplex::read` now reads again until the deadline has passed.

Tests:
- `connections_without_a_hello_are_told_why_they_end` (new): twelve
  connections that never say hello each get the refusal. Failed 5 of 10
  runs without the fix.
- `pre_hello_lifetime` notes the end of the stream on a thread of its own
  instead of reading one message per 300 ms poke, where pongs queued
  ahead of the close delayed it.
- `quiet_guests_stay_and_silent_connections_are_dropped`: the guest takes
  only the host's keepalive. Its 600 ms idle timeout also bounded the wait
  for the welcome.
- `two_files_are_hosted_and_joined_independently`: the two joins race, so
  the file whose welcome arrived last is in front. The test checks that,
  then brings B to the front.
- `a_local_share_is_joined_by_its_code_and_edits_sync`: once the share
  stops, another program's host can take the freed port and refuse the
  code.
2026-10-24 19:00:42 -07:00
Dylan M. TaylorandClaude Sonnet 5.5 9f78875338 security: linear vector import, stroking and rounding, validation, and cyclic dev snapshots (#1306)
* security: linear vector import, stroking and rounding, validation and a cycle check for dev snapshots

Closing a subpath, rounding corners and chaining stroke runs each rescanned the whole
network per step, and Document::validate searched a parent's children per child. They now
update only the current subpath's last segment, rebuild each region loop in one pass, walk
per-vertex adjacency lists, and check edges against a once-built index. A dev snapshot whose
layers contain a cycle under the root is refused instead of reconstructed.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>

* fix(doc): address review findings for snapshot children and 2-segment rounded loops

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-24 21:17:36 -04:00
dotCooCoo 4f0649ad52 M7: the export settings name Ignore overlapping layers and offer Include bounding box for text layers only
The export setting's advanced options name the contentsOnly option
"Ignore overlapping layers" and offer Include bounding box only when
every selected layer is a text layer. A setting that already has Include
bounding box on still shows the option, so it can be turned off, and the
export still applies it. The saved keys and the contentsOnly and
includeBoundingBox params of export.add, export.update and file.export
are unchanged.

Every catalog's "Contents only" row becomes an "Ignore overlapping
layers" row.
2026-10-24 17:21:42 -07:00
dotCooCoo 9c20d06abd M7: with Contents only on, a slice in a frame or group exports only that container
A slice exported every layer of its page that showed in its area, whatever
its Contents only setting said. With Contents only on (the default), a slice
inside a frame or group now exports only that frame or group and the layers
in it. With it off, or for a slice on the page or in a section, the slice
exports everything in its area as before. The Export section's preview of a
slice follows its first export setting in the same way.
2026-10-24 15:53:33 -07:00
dotCooCoo ae57bf84d0 M5: a notice before a prototype's Open link leaves for a website
The player opened a prototype's Open link at once, also from an After
delay trigger with no click. The help center's Prototype actions page
says that the viewer is told they are leaving before an external
website opens, with a checkbox that skips this page on the current
device.

An Open link to an http or https address now shows a notice with the
link, Open link, Cancel and "Don't show this again". Open link opens
it; Cancel, the close button or Escape drops it. While the notice
shows, the prototype takes no keys, and the presenter's C, Shift+C and
F keys do nothing. When Open link is pressed with the box ticked, the
desktop app saves the choice with its preferences; the web build keeps
it until the page reloads. proto.linkNotice {show} turns the notice on
or off. A mail link opens at once, as before, also while the notice
shows. A second link to a website that fires while the notice shows is
dropped.
2026-10-24 14:10:41 -07:00