Commit Graph
3465 Commits
Author SHA1 Message Date
Skyfuller1303 a4076caaf4 Merge main and preserve vector region paints through path operations
Retain regional paint stacks and coordinate frames through simplify, offset, flatten, bucket normalization and Shape Builder. Preserve legacy fill semantics and synchronize importer warning catalogs. Verified with cargo xtask ci on Windows and Ubuntu/WSL, native UI screenshots, and CLI round-trip/export checks.
2026-10-26 19:50:00 +01:00
bflatastic 5e7cd52f6d Merge main into #827 2026-10-27 01:06:45 +07:00
BFlat cac54fd552 Merge pull request #840 from StrajnarFilip/feat/vector-drawable-export
M6: export as Android Vector Drawable (XML)
2026-10-27 01:06:21 +07:00
BFlat 740cc2a2c6 Merge pull request #726 from ijashuzain/feat/variables-dart-export
M6: export variables as Dart constants for Flutter
2026-10-27 00:53:10 +07:00
BFlat a93dd5ab3b Merge pull request #287 from Nael-Nathanael/perf/256-glass-cache
perf(render): keep glass shapes between renders, fix a glass seam (#256)
2026-10-27 00:52:56 +07:00
BFlat cac991334d Merge pull request #320 from tylerjenningsw/perf/zoom-preview-cold
perf(canvas): preview cold zoom and page transitions once they run long (M8)
2026-10-27 00:50:49 +07:00
BFlat 29c89f7d5b Merge pull request #650 from JimKnoxx/overlay-anchor-trigger
M5: overlay positions relative to the layer that opens them
2026-10-27 00:49:52 +07:00
BFlat 9fdd226509 Merge pull request #664 from phonedu/feat/vue-code-target
M6: a Vue code target (single-file components)
2026-10-27 00:48:53 +07:00
bflatastic c16fd68242 Merge main into #840 2026-10-27 00:38:47 +07:00
BFlat b6fc2fd1ab Merge pull request #1152 from ricardoavilesfoto-collab/pr/fig-export-for-figma
.fig export: files Figma imports, with component set properties
2026-10-27 00:35:31 +07:00
bflatastic 2aae395310 Merge main into #840 2026-10-27 00:31:32 +07:00
bflatastic fd0f4d8b60 Merge main into #664
Main's class_name takes the node kind (#1372); Vue's slot names pass slot.
2026-10-27 00:30:42 +07:00
BFlat 83c7940293 Merge pull request #1384 from muamerETS/fix/1370-drag-unfilled-selection
M1: a selected unfilled shape drags over a filled layer stacked below it (#1370)
2026-10-27 00:25:59 +07:00
BFlat 7cb369db8c Merge pull request #1372 from lileeei/1235-transliterate-class-names
Transliterate non-ASCII layer names into code-export class names
2026-10-27 00:23:36 +07:00
bflatastic b3016f7089 Merge main into #1152 2026-10-27 00:14:07 +07:00
BFlat 8583588839 Merge pull request #1366 from Silvertree2010/fix/h2716-px-to-rem-conversion-rounds-to-2
Keep full precision when converting px to rem in code export
2026-10-27 00:13:42 +07:00
BFlat ad9abe7ce6 Merge pull request #1133 from g1obalworlds/fix-batch-rollback-closed-tabs
engine: restore tabs closed inside a failed command group
2026-10-27 00:13:37 +07:00
BFlat 5890784fe2 Merge pull request #1369 from mojtabajafarzadeh/fix/share-key-and-large-file-publish
follow-up: server publish timeout, key-to-server binding, and "Go to main component" in the context menu
2026-10-27 00:13:25 +07:00
BFlat 4b000eeddf Merge pull request #1371 from denisg0mes/crisp-magnified-images
M7: show a magnified image's pixels on the canvas
2026-10-27 00:13:20 +07:00
BFlat dd5b5c0dc0 Merge pull request #1374 from Ridzzz0Alam/fix/1330-save-disk-changes
fix: Issue #1330 Save no longer overwrites changes another app made to the open file
2026-10-27 00:13:15 +07:00
BFlat adea3a5550 Merge pull request #1053 from Silvertree2010/fix/h1274-title-case-leaves-a-word-lowerca
Capitalise title-case word after an opening apostrophe
2026-10-27 00:13:01 +07:00
bflatastic 632f2cef4b Merge main into #840
# Conflicts:
#	docs/roadmap.md
2026-10-27 00:12:27 +07:00
BFlat 4392fe50d3 Merge pull request #1373 from Ridzzz0Alam/fix/1338-instance-swap-scroll
fix: Issue #1338 an instance-swap property's default menu scrolls
2026-10-27 00:11:16 +07:00
bflatastic 15c6834114 Merge main into #1384 2026-10-27 00:10:34 +07:00
BFlat 58718d9a09 Merge pull request #959 from Silvertree2010/fix/h1129-saving-a-document-with-a-nan-num
Save NaN or infinite numbers as 0 so the file reopens
2026-10-27 00:09:53 +07:00
Jindřich ŠaršonandClaude Opus 5.5 3c71058177 M6: Sketch import (#1021 follow-up): review fixes
From a code review, each behaviour question checked on Sketch's own renders of
files built for it:

- background and motion blur radii are standard deviations too (doubled, like
  Gaussian ones); zoom blurs keep half their radius
- colour adjustments clamp FigCraft's contrast before working out the exposure,
  so the slope stays exact past FigCraft's ranges (brightness below -0.5 bent
  the whole curve)
- an image override applies after a layer style override on the same shape
- a bitmap's fills (its image under the style's fills) aren't linked to the
  shared fill style any more
- one read of a gradient's colorInterpolation; a dead stack condition removed

Checked and unchanged: symbols of a Sketch 63 file don't clip either, and
Sketch mixes OKLab gradients' alpha as the importer does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 17:55:56 +01:00
bflatastic 56ed786e0e #726: reuse codegen's kotlin_color for Dart colours 2026-10-26 23:54:09 +07:00
bflatastic 5a5175cc7e #726: write Dart numbers at full precision 2026-10-26 23:54:08 +07:00
bflatastic a683e51045 #726: Dart names never shadow Dart types (classes and constants) 2026-10-26 23:54:08 +07:00
bflatastic 8653597c3d #664: Vue layer trees import connected components in <script setup> 2026-10-26 23:53:30 +07:00
bflatastic 4176400e09 Merge main into #664
# Conflicts:
#	crates/engine/src/code_connect.rs
#	crates/engine/src/codegen.rs
#	crates/engine/src/component_codegen.rs
#	crates/engine/src/lib.rs
#	crates/engine/src/playground.rs
#	crates/ui-egui/locales/bn.toml
#	crates/ui-egui/locales/cs.toml
#	crates/ui-egui/locales/de.toml
#	crates/ui-egui/locales/en.toml
#	crates/ui-egui/locales/es.toml
#	crates/ui-egui/locales/fi.toml
#	crates/ui-egui/locales/fr.toml
#	crates/ui-egui/locales/id.toml
#	crates/ui-egui/locales/ja.toml
#	crates/ui-egui/locales/ka.toml
#	crates/ui-egui/locales/ko.toml
#	crates/ui-egui/locales/nl.toml
#	crates/ui-egui/locales/pl.toml
#	crates/ui-egui/locales/pt-BR.toml
#	crates/ui-egui/locales/ru.toml
#	crates/ui-egui/locales/sv.toml
#	crates/ui-egui/locales/tr.toml
#	crates/ui-egui/locales/zh-Hans.toml
#	crates/ui-egui/src/dev_mode.rs
#	docs/dev-mode-parity.md
#	docs/gaps.md
#	docs/mcp.md
#	docs/target-app-parity.md
2026-10-26 23:52:51 +07:00
Jindřich ŠaršonandClaude Opus 5.5 267fc624ad M6: Sketch import (#1021 follow-up): match Sketch's renders rule by rule
Each rule was checked against Sketch's own renders (sketchtool) of files built
for the case, and on real Sketch 50, 63 and 2026 files:

- instances show a master's background only when it is included in both
  instances and exports
- symbols clip their layers only with clippingBehavior 1
- group and instance fills are tints only from Sketch 64 (format > 123)
- an outline mask's opacity fades the mask and what it clips together
- a bitmap's image lies under its style's fills
- image overrides reach a shape's top image fill
- stretching stacks fill their items across
- a layer blur's radius is Sketch's standard deviation (FigCraft radius x2)
- colour adjustments: contrast, then brightness added, mapped exactly onto
  exposure and contrast within FigCraft's ranges
- gradients mixed in OKLab or OKLCH become sRGB stops along the same colours
  (with an import note)
- auto-width texts an override made longer grow from their aligned edge
- shape group operands lose their own borders (since #1184 a stroke-only
  operand gives its stroke band, not its area)

Known limitations are listed in the file-format parity row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 17:43:10 +01:00
bflatastic ec12b7d5f3 #827: port the picker's new ids to egui 0.37 (Id::unique) 2026-10-26 23:42:11 +07:00
bflatastic 3beea93715 Merge main into #827
# Conflicts:
#	ROADMAP.md
#	contributors/people.toml
#	crates/ui-egui/src/colorpicker.rs
#	docs/ui-parity.md
2026-10-26 23:38:20 +07:00
bflatastic 6145409859 Merge main into #726
# Conflicts:
#	ROADMAP.md
#	crates/engine/src/cmd/variables_io.rs
#	crates/engine/src/variables_io_tests.rs
#	docs/components-parity.md
#	docs/mcp.md
2026-10-26 23:28:15 +07:00
bflatastic bf9783f30f #650: mark relative overlay positions as an extra beyond the reference tool 2026-10-26 23:24:36 +07:00
bflatastic de826e14cf Merge main into #650
# Conflicts:
#	crates/ui-egui/locales/es.toml
#	crates/ui-egui/locales/pl.toml
#	docs/prototyping-parity.md
2026-10-26 23:24:22 +07:00
bflatastic c208ae442c #840: move the CLI and MCP XML export tests into tests/it 2026-10-26 23:23:08 +07:00
bflatastic e469cc8135 Merge main into #840
# Conflicts:
#	apps/figcraft-cli/src/files.rs
#	apps/figcraft-cli/src/main.rs
#	crates/engine/src/cmd/file.rs
#	crates/engine/src/lib.rs
#	crates/ui-egui/locales/en.toml
#	crates/ui-egui/locales/es.toml
#	crates/ui-egui/src/export_panel.rs
#	crates/ui-egui/src/export_preview_tests.rs
#	docs/file-format-parity.md
#	docs/mcp.md
#	docs/roadmap.md
#	docs/ui-parity.md
2026-10-26 23:23:07 +07:00
bflatastic 4c101fa549 #959: the test is named for what it checks: non-finite numbers are saved as zero 2026-10-26 23:05:53 +07:00
bflatastic 8186c4da3f #1369: Go to main component replaces Create component only when every selected layer is an instance 2026-10-26 23:05:40 +07:00
bflatastic 35108cf8dc #1369: the server key field shows a key only for the server it was typed for 2026-10-26 23:05:39 +07:00
bflatastic d3db02de9a #1378: max lines only while truncation is ENDING, with a REST test for auto height with truncation off 2026-10-26 23:04:38 +07:00
bflatastic b8f34b11c1 Merge main into #320 2026-10-26 23:03:01 +07:00
bflatastic daec0e75d6 Merge main into #287 2026-10-26 23:02:48 +07:00
bflatastic 153250fedf Merge main into #1152 2026-10-26 23:00:18 +07:00
bflatastic 5a9b509074 Merge main into #1366 2026-10-26 22:57:27 +07:00
bflatastic e6e4e9ab8a Merge main into #1053 2026-10-26 22:57:25 +07:00
bflatastic b90749b377 Merge main into #1133 2026-10-26 22:57:23 +07:00
bflatastic d5e3e68158 Merge main into #1372 2026-10-26 22:57:22 +07:00