Commit Graph
2419 Commits
Author SHA1 Message Date
bflatastic d8a4de1bd5 Merge main into #1360 2026-10-29 11:28:49 +07:00
BFlat e41f484733 Merge pull request #1439 from Guillergood/codex/round-dash-dots
M4: draw dots for zero-length round dashes
2026-10-29 11:20:12 +07:00
BFlat 60ea32f171 Merge pull request #1465 from phonedu/mcp-agent-feedback
M12: MCP comment feedback and live change events
2026-10-29 10:51:24 +07:00
BFlat 91cc0f1fad Merge pull request #1406 from yelintong/feat/constraint-guides
ui: show constraint guides for a selected layer in its frame
2026-10-29 10:51:17 +07:00
BFlat 1611e14453 Merge pull request #1400 from SusieeTheLinuxUser/fix/1219-thai-line-breaks
M4: Thai lines keep marks and leading vowels with their letter (part of #1219)
2026-10-29 10:50:28 +07:00
BFlat 2e6612e002 Merge pull request #1457 from culiulemon/pr/misc-fixes
feat: property copy/paste, blend-mode hover preview and clipboard fixes
2026-10-29 10:47:30 +07:00
BFlat fbc1cc63ba Merge pull request #1462 from Skyfuller1303/fix/home-tab-sidebar-alignment
M7: line the Home tab's divider up with the icon rail
2026-10-29 10:45:54 +07:00
bflatastic a718332571 Merge main into #1439 2026-10-29 10:33:54 +07:00
BFlat da1cf8da3a Merge pull request #1466 from hussain-hz/ar/figcraft-catalog
i18n(ar): add Arabic draft interface catalog
2026-10-29 10:18:37 +07:00
BFlat 4ae1b7c574 Merge pull request #1491 from samhyun/fix/jpeg-finer-than-first
M8: a progressive JPEG sampling a component finer than its first is refused, not decoded
2026-10-29 10:12:58 +07:00
bflatastic 0cc380c228 Merge main into #1466 2026-10-29 10:08:11 +07:00
BFlat a8753e4aca Merge pull request #1484 from StrajnarFilip/claude/fix-922-scaled-instances
M3: scaled instances keep their scale when their main is rebuilt (#922)
2026-10-29 10:07:47 +07:00
bflatastic 6abddb0f68 Merge main into #1465 2026-10-29 09:55:55 +07:00
bflatastic 158d402ee7 Merge main into #1457 2026-10-29 09:55:12 +07:00
bflatastic fe56681075 Merge main into #1406 2026-10-29 09:55:07 +07:00
bflatastic 1bb73d6809 Merge main into #1400 2026-10-29 09:54:58 +07:00
bflatastic d7945584b3 Merge main into #1462 2026-10-29 09:54:48 +07:00
bflatastic 233d92b022 Merge main into #1439 2026-10-29 09:54:41 +07:00
BFlat 7f646aac24 Merge pull request #1468 from samhyun/perf/web-zoom-settle
M8: the browser refines a zoom only once it has paused
2026-10-29 09:49:26 +07:00
BFlat 4a0bd79797 Merge pull request #1488 from ChristopherLinnett/issue/1086-image-validation
fix(collab): image entries must match their hash and sane bounds (#1086)
2026-10-29 09:49:20 +07:00
bflatastic 8440cb80f9 Merge main into #1484 2026-10-29 09:48:13 +07:00
BFlat d2811b9d86 Merge pull request #1486 from StrajnarFilip/claude/fix-1059-fig-embedded-copies
M6: .fig embedded images are copied once per blob, not once per hash (#1059)
2026-10-29 09:44:38 +07:00
BFlat 5804c0e2cc Merge pull request #1489 from ChristopherLinnett/issue/857-confirm-quit
fix(app): ask before ⌘Q quits with unsaved changes (#857)
2026-10-29 09:41:19 +07:00
BFlat 738f7c7692 Merge pull request #1470 from watchakorn-18k/fix/context-menu-frame-label
fix(ui): right-click on a frame's name label picks that frame
2026-10-29 09:37:58 +07:00
BFlat 3a86db900d Merge pull request #1424 from samhyun/fix/keepalive-ping-under-presence
M9: a ping every keep-alive interval, whatever else the client sends
2026-10-29 09:37:20 +07:00
BFlat ea2a8ea84a Merge pull request #1443 from devius/ka-new-strings
i18n(ka): Georgian for 76 strings added since the language landed
2026-10-29 09:35:42 +07:00
BFlat 84e0ea5449 Merge pull request #1393 from kler/swedish-ui-2026-10-26
i18n(sv): translate 47 new strings
2026-10-29 09:35:37 +07:00
bflatastic e83f9691b3 Merge main into #1466 2026-10-29 09:32:26 +07:00
bflatastic 7c413dfe0a Merge main into #1486 2026-10-29 09:32:05 +07:00
bflatastic a6b41b2f4c Merge main into #1484 2026-10-29 09:31:53 +07:00
BFlat cff1d0bf45 Merge pull request #1487 from ChristopherLinnett/issue/1096-openurl-gesture
fix(present): prototype links open only behind the notice or a viewer's click (#1096)
2026-10-29 09:30:04 +07:00
BFlat baaafc381b Merge pull request #1485 from StrajnarFilip/claude/fix-1476-guides-reopen
M1: page ruler guides survive save and reopen (#1476)
2026-10-29 09:29:31 +07:00
BFlat 95fd3c2444 Merge pull request #1482 from StrajnarFilip/claude/fix-1452-stroke-weight
M1: the stroke weight keeps room for its value beside the variable button (#1452)
2026-10-29 09:29:26 +07:00
BFlat 712074ae2d Merge pull request #1481 from StrajnarFilip/claude/fix-1085-normalize-guard
M8: normalising after a command runs under the panic guard (part of #1085)
2026-10-29 09:29:21 +07:00
BFlat f8355c0680 Merge pull request #1480 from StrajnarFilip/claude/fix-1078-linear-repair
M8: repair and library manifests check membership by set lookups (#1078)
2026-10-29 09:28:53 +07:00
bflatastic 170f1fdf32 #1466: gaps and ROADMAP list the Arabic draft as shipped 2026-10-29 09:26:15 +07:00
Christopher Linnett 57cf1bec48 fix(collab): keep in-use images and resync clients after filtered history (#1086)
- An image a layer or style still shows can't be removed: removing it and
  putting other bytes under its key would swap the picture that layer
  shows, which giving the key other bytes directly can't. A batch made by
  the diff stops using an image (node changes, then styles) before it
  removes it; an undo keeps the changes that apply, so its image may stay.
- Restore and replay leave out the image entries history written under
  older rules can't apply, using one method shared with the undo history
  (Replica::apply_kept, extracted from history.rs). It is exact for every
  image rule, including removals in use and replacements, and leaves out
  only image entries: any other change that doesn't apply is still an
  error. The image-only filter it replaces is gone.
- A server whose restore or replay left image entries out, or whose saved
  log puts images, catches every resuming client up with its snapshot,
  including one at the same sequence number.
- Tests: an_image_in_use_cannot_be_removed,
  an_image_no_longer_in_use_can_be_removed, undoing_an_image_layer_still_works,
  a_restart_replays_past_a_logged_removal_of_an_image_in_use,
  a_resume_after_history_was_left_out_catches_up_with_the_snapshot,
  a_resume_after_a_clean_restart_catches_up_with_the_log,
  a_snapshot_with_a_broken_layer_change_still_fails_to_open.
- Docs: collab-protocol.md, collaboration-parity.md.
2026-10-29 10:25:16 +08:00
bflatastic 6c18fe916b Merge main into #1466 2026-10-29 09:23:22 +07:00
bflatastic 2bc14d946b #1465: split the event and prompt code for cognitive complexity, drop the panel header button 2026-10-29 09:20:55 +07:00
bflatastic 1ed9eb6b8c Merge main into #1393 2026-10-29 09:20:18 +07:00
bflatastic 0da3a564ca Merge main into #1443 2026-10-29 09:20:09 +07:00
bflatastic dfe83f63f0 Merge main into #1470 2026-10-29 09:19:59 +07:00
bflatastic 9d42833008 Merge main into #1465 2026-10-29 09:18:39 +07:00
bflatastic 5f58acdb35 #1406: guides for an absolute child of an auto layout frame, and a test 2026-10-29 09:17:25 +07:00
samhyunandClaude Fable 5.1 bdddf9a2ba M8: the baseline fixture of the JPEG sampling test is a well-formed file
From the review of #1491: patching a component's sampling in the header of a baseline JPEG
`image` wrote leaves its entropy data for 1 × 1 components, so decoding it could only fail and
the test proved nothing past the frame not being refused. The fixture is now a baseline CMYK
JPEG as jpeg-encoder writes it with 2 × 2 sampling (its black sampled finer than its cyan), and
the test asserts it is left to the decoder and decodes.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-29 11:16:17 +09:00
bflatastic fba0ae85c3 Merge main into #1406 2026-10-29 09:14:58 +07:00
bflatastic 4826d54a3d #1400: pass chars and clusters into break_lines, safe break in safe_break_index 2026-10-29 09:13:08 +07:00
bflatastic 49bf4b0fd8 Merge main into #1400 2026-10-29 09:11:47 +07:00
bflatastic fdaaeaa218 Merge main into #1462 2026-10-29 09:11:30 +07:00
bflatastic 091640bfb2 Merge main into #1439 2026-10-29 09:07:04 +07:00