What's Changed
- Reject non-finite percent strings for lineHeight and letterSpacing by @Silvertree2010 in #1274
- Measure distribute span to the group's outermost edge by @Silvertree2010 in #1282
- Fix code export printing whole numbers of 2^63 or more as i64::MAX by @Silvertree2010 in #1296
- Keep significant digits in SVG matrix scale coefficients by @Silvertree2010 in #1317
- Rename component parameters that are strict-mode reserved words by @Silvertree2010 in #1323
- Accept a unit typed after a space in number fields by @Silvertree2010 in #1326
- fix: Issue #1150 a section's title draws above the labels of frames inside it (#1150) by @Ridzzz0Alam in #1276
- Canvas: hover distances go when the pointer leaves the canvas by @bflatastic in #1251
- Keep context menu open after a same-frame trackpad tap by @Silvertree2010 in #1144
- M8: Copy link to selection in the layer context menu by @watchakorn-18k in #1291
- M4: justified text doesn't widen U+200B by @Salah1St in #1218
- Text: Backspace removes Thai and other marks one at a time (#1220) by @SusieeTheLinuxUser in #1242
- Dialogs start in the folder of the last file picked by @marcoarnulfo in #1303
- M9: the hello deadline refuses a connection even when a read times out early by @dotCooCoo in #1310
- M0.9: allow literal dash-prefixed CLI filenames by @MMexicann in #954
- i18n(pl): native review, catch-up and terminology fixes by @lukasz-sklad in #931
- Reject multiple leading '#' in Color::from_hex by @Silvertree2010 in #944
- Keep style runs disjoint when inserting text at a run boundary by @Silvertree2010 in #1295
- Migrate FigCraft to egui 0.37 by @skylartaylor in #1312
- feat: startup update prompt modal and direct self-updating by @dylanmtaylor in #1328
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in #1347
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in #1348
- chore(deps): safe dependency refresh by @aiongg in #1352
- command.batch: named step references (
as/$ref) and paths infieldby @kkilchrist in #1003 - fig import: a note says how much of the file it covers (#467) by @Hamza0101 in #951
- Large
.figfiles keep their layers and their library links (#981) by @Ridzzz0Alam in #989 - Web build: Save, Save as and Export arrive as downloads by @Ridzzz0Alam in #1010
- M7: missing fonts: follow each font variable's aliases once (#752) by @Nael-Nathanael in #1035
- M9: fall back to the Noto symbol and math fonts on Linux (#1156) by @switch87 in #1163
- Fix stroke-only boolean operand outlines by @saturngod in #1184
- M7: avoid Windows GNU UI Automation crash by @YarilaFox in #919
- M9: avoid unnecessary snapshot rewrites and duplicate buffers by @F3R9 in #1134
- Review fixes for #1184, #919 and #1134 by @bflatastic in #1355
- build: one craft-libs rev for every craft-libs crate (495e597) by @bflatastic in #1354
- M5: controller buttons wait while the link notice shows by @dotCooCoo in #1349
- fix: Issue #1060 Dash patterns too fine for their path draw solid instead of running out of memory by @Ridzzz0Alam in #1278
- Scale down images past 16384 px a side instead of drawing nothing by @Silvertree2010 in #1337
- Dev Mode: React + Tailwind page code and Tailwind theme export by @lucasmartins-ai in #1011
- refactor: clear SonarCloud new-code issues (S3776, S107) and exclude generated coverage tree by @dylanmtaylor in #1353
- Keep synthetic Copy link commands inside the clipboard fence by @skylartaylor in #1346
- i18n(ka): shorter Georgian for 13 labels that were cut off by @devius in #1339
- Docs: the PNG row names ignore overlapping layers and where include bounding box is offered by @dotCooCoo in #1350
- Scale the path of text on a path in transform.scale by @Silvertree2010 in #1315
- Scale per-point corner radius of vector layers in transform.scale by @Silvertree2010 in #1329
- Fix missing end arrowhead when a closed subpath follows an open one by @Silvertree2010 in #1324
- Skip zero-length segments when finding arrowhead direction by @Silvertree2010 in #1297
- M4: Thai faces in the text fallback list by @Salah1St in #1215
- Add Italian (it) interface language by @CosmoNetinfo in #1224
- M7: Noto Sans Thai as a UI fallback when the build embeds it by @Salah1St in #1216
- M7: FIGCRAFT_DEFAULT_FONT names the font new text starts in by @Salah1St in #1217
- i18n(fr): translate the missing strings and review the draft catalog by @leandrodslv in #681
- M7: paste images into selected shapes by @YarilaFox in #921
- Fix the system theme mode always drawing light on Linux and the BSDs by @ahmedhosnypro in #623
- M4: preserve stroke rings when outlining shapes by @MMexicann in #607
- M1: crop image fills on Command/Ctrl resize by @timrrrr in #703
- M7: toolbar flyout carets get a wider target clear of their tool (#988) by @muamerETS in #1019
- M6: mobile layout (phones and portrait tablets) by @aryann2611 in #1209
- M7: find fonts activated through Adobe Fonts on macOS (#298) by @AganzeFelicite in #661
- M9: make graphics-startup assertions independent of UI language (#1017) by @bflatastic in #1357
- M9: make graphics-startup assertions independent of UI language by @F3R9 in #1017
- UI: Route text clipboard writes through egui (#1239) by @SusieeTheLinuxUser in #1243
- fix: Issue (#1062) render bounds stop at the depth the renderer draws. by @Ridzzz0Alam in #1275
- Name the failing step in batch command errors by @Silvertree2010 in #1340
- i18n(sv): translate 38 new strings, use the agreed terms in 93 by @kler in #984
- ui: server key field in the Share popover (plus a longer publish reply timeout) by @mojtabajafarzadeh in #1299
- i18n: add Vietnamese (vi) interface localization by @sonth87 in #1026
- M7: don't save over a file whose images past the budget weren't loaded by @denisg0mes in #1314
- M4: CJK kinsoku completed to JIS X 4051 by @midasdf in #990
- Vector editing, property copy/paste, dev-mode assets, ArkUI codegen and shape-builder fixes by @culiulemon in #1202
- feat(plugin): add saveFile permission with host-owned save dialog by @Dubblbindong in #698
- M6: .sketch import (Sketch 48 and newer) by @sarsonj in #1021
- M7: offer the installed styles of an embedded font family (#1246) by @AganzeFelicite in #1294
- M10: Thai UI fonts and a Thai draft catalog by @watchakorn-18k in #1287
- M12: boards dot grid, re-attaching connector ends, curved connectors by @bflatastic in #1249
- M12: board timer and voting sessions by @bflatastic in #1361
- fix: fsync the files directory after creating a new files folder by @peda-cos in #1362
- Keep 8-bit alpha when printing colours with Color::to_css by @Silvertree2010 in #1359
- M12: board templates and tables by @bflatastic in #1363
- Docs: README screenshots of Boards and Dev Mode measurements by @bflatastic in #1252
- M11: widgets take text input and a property menu (plugin API 4) by @bflatastic in #1365
- M10: branches in live sessions by @bflatastic in #1367
- M7: find fonts that macOS font managers activate outside the font folders by @denisg0mes in #1309
- Add Korean support by @arksky1 in #966
- M4: truncated text fills its last line, keeps truncating when resized, and auto height takes max lines (#1375, #1376, #1377) by @muamerETS in #1378
- Save NaN or infinite numbers as 0 so the file reopens by @Silvertree2010 in #959
- fix: Issue #1338 an instance-swap property's default menu scrolls by @Ridzzz0Alam in #1373
- Capitalise title-case word after an opening apostrophe by @Silvertree2010 in #1053
- fix: Issue #1330 Save no longer overwrites changes another app made to the open file by @Ridzzz0Alam in #1374
- M7: show a magnified image's pixels on the canvas by @denisg0mes in #1371
- follow-up: server publish timeout, key-to-server binding, and "Go to main component" in the context menu by @mojtabajafarzadeh in #1369
- web: window.figcraft, the control channel for the page by @youngeuibae in #824
- engine: restore tabs closed inside a failed command group by @g1obalworlds in #1133
- Keep full precision when converting px to rem in code export by @Silvertree2010 in #1366
- Transliterate non-ASCII layer names into code-export class names by @lileeei in #1372
- M1: a selected unfilled shape drags over a filled layer stacked below it (#1370) by @muamerETS in #1384
- .fig export: files Figma imports, with component set properties by @ricardoavilesfoto-collab in #1152
- M6: a Vue code target (single-file components) by @phonedu in #664
- M5: overlay positions relative to the layer that opens them by @JimKnoxx in #650
- perf(canvas): preview cold zoom and page transitions once they run long (M8) by @tylerjenningsw in #320
- perf(render): keep glass shapes between renders, fix a glass seam (#256) by @Nael-Nathanael in #287
- M6: export variables as Dart constants for Flutter by @ijashuzain in #726
- M6: export as Android Vector Drawable (XML) by @StrajnarFilip in #840
- M1: LCH and OKLCH models in the colour picker by @mateusvillain in #827
- ci: require nextest 0.9.150 by @skylartaylor in #1395
- refactor: shared module layout (craft-contrib#20) by @aiongg in #1394
- fix(ui): dropdown menus grow back after a search with no matches by @aiongg in #1429
- Speed up raster export: faster blur and spread passes by @Silvertree2010 in #1437
- Windows installation policy: FigCraft by @Jeremy8776 in #1399
- Enforce Rust coding standards via Clippy by @dylanmtaylor in #1403
- Grant network access so update checks can reach GitHub by @dylanmtaylor in #1471
New Contributors
- @watchakorn-18k made their first contribution in #1291
- @Salah1St made their first contribution in #1218
- @SusieeTheLinuxUser made their first contribution in #1242
- @MMexicann made their first contribution in #954
- @saturngod made their first contribution in #1184
- @F3R9 made their first contribution in #1134
- @CosmoNetinfo made their first contribution in #1224
- @ahmedhosnypro made their first contribution in #623
- @timrrrr made their first contribution in #703
- @aryann2611 made their first contribution in #1209
- @mojtabajafarzadeh made their first contribution in #1299
- @sonth87 made their first contribution in #1026
- @denisg0mes made their first contribution in #1314
- @midasdf made their first contribution in #990
- @culiulemon made their first contribution in #1202
- @Dubblbindong made their first contribution in #698
- @sarsonj made their first contribution in #1021
- @peda-cos made their first contribution in #1362
- @arksky1 made their first contribution in #966
- @youngeuibae made their first contribution in #824
- @g1obalworlds made their first contribution in #1133
- @ricardoavilesfoto-collab made their first contribution in #1152
- @ijashuzain made their first contribution in #726
- @Jeremy8776 made their first contribution in #1399
Full Changelog: v0.11.2...v0.12.1