github storytold/figcraft v0.17.0
FigCraft v0.17.0

49 minutes ago

What's Changed

  • fix(collab): place keyed-list puts through an index within a batch by @dylanmtaylor in #1893
  • Reject fractional index in proto.interaction.remove and set by @Silvertree2010 in #1874
  • Reject fractional index in layout.setTrack by @Silvertree2010 in #1892
  • Reject invalid dashes in node.set instead of dropping entries by @Silvertree2010 in #1899
  • perf(color): sort gradient stops once per diamond texture by @dylanmtaylor in #1894
  • perf(format): drop dangling Penpot token aliases with a worklist by @dylanmtaylor in #1897
  • M8: an ellipse whose start has gone round many turns keeps its sweep in .fig by @samhyun in #1891
  • M7: a file tab's menu and the board bar's shape menu read in the light theme by @aleksei-suholita in #1890
  • M8: a click with the Bend tool curves a sharp point, its handles along the line between its neighbours (#1875) by @TrevorBrown-dev in #1877
  • M4: wrap style on a text layer: Auto, Balance and Pretty decide where its lines break (#1827) by @TrevorBrown-dev in #1871
  • fix(format): index kiwi field lookups and bound schema and empty-array growth by @dylanmtaylor in #1896
  • fix(pathops): sanitize a brush's width profile once before sampling by @dylanmtaylor in #1948
  • perf(text): compute each glyph's cluster end once per run by @dylanmtaylor in #1963
  • perf(doc,engine): rebuild a widget by removing its children in one pass by @dylanmtaylor in #1967
  • perf(engine): look up a component's asset root once per usage report, and skip mode migration without instances by @dylanmtaylor in #1966
  • perf(collab): check a replaced list's entries against sets, not a scan per entry by @dylanmtaylor in #1962
  • fix(format): a saved file replaces its predecessor with the same permissions by @dylanmtaylor in #1957
  • fix(engine): never let document text close the generated HTML style element by @dylanmtaylor in #1955
  • perf(engine): keep each events.poll topic once by @dylanmtaylor in #1935
  • fix(doc): list a page once however often a file lists it by @dylanmtaylor in #1927
  • fix(layout): end the fill distribution loop when no child can freeze by @dylanmtaylor in #1926
  • fix(svg): refuse a document compressed twice and charge a refused embedded one by @dylanmtaylor in #1924
  • fix(mcp): render prompt placeholders in one pass over the template by @dylanmtaylor in #1922
  • fix(render): check the nesting limit for mask content and bound GIF frame buffers by @dylanmtaylor in #1925
  • perf(engine): list a few step names in a missing-reference error by @dylanmtaylor in #1941
  • perf(svg): hash an embedded image's bytes once per import by @dylanmtaylor in #1945
  • fix(doc): bound the string bytes an expression holds and stop concatenating at the cap by @dylanmtaylor in #1950
  • fix(engine): hold a plugin's text.preview to the permissions of the command it previews by @dylanmtaylor in #1959
  • fix(ui): write a plugin's offered file through the confined file helper by @dylanmtaylor in #1960
  • perf(collab): memoise layer depths in diff and skip the sibling scan for a new child by @dylanmtaylor in #1961
  • perf(vectordrawable): resume each repeated name's suffix search where it stopped by @dylanmtaylor in #1964
  • perf(pdf): collect each text style's outlines and decorations in one pass by @dylanmtaylor in #1965
  • perf(engine): index variables once when following a library's alias chains by @dylanmtaylor in #1968
  • fix(format): import a Sketch page once however often the file lists it by @dylanmtaylor in #1973
  • fix(engine): count each id Shape Builder is given once by @dylanmtaylor in #1974
  • perf(engine): replace linear scans that made document-sized inputs quadratic by @dylanmtaylor in #1921
  • fix: create test and benchmark temp directories fresh, never adopt an existing one by @dylanmtaylor in #1977
  • fix(server): clean a published file's name when it is taken from the file by @dylanmtaylor in #1978
  • fix(collab): build no repair for a batch refused for lack of permission by @dylanmtaylor in #1980
  • Pass the Linux signing key to the release workflow by @dylanmtaylor in #2001
  • feat(web): a host bridge for embedding pages, ?host=parent and data-host="page" (#1356) by @helenkwok in #1358
  • figcraft-web: a Save of a host-opened document goes out under the host's file name (builds on #1358) by @helenkwok in #1806
  • fix(ui): About credits table columns can be dragged wider or narrower by @FredApps in #1969
  • Colour picker: dragging a gradient handle on the canvas keeps the picker and the handles up (#1852) by @TrevorBrown-dev in #1985
  • M3: glass effects take variables, and their frost stays within 0–100 by @aleksei-suholita in #1886
  • M3: glass bends with the reference tool's thick-lens profile and splits its colours over 8 steps by @aleksei-suholita in #1887
  • M3: glass's light is a line on its bevel, and splay turns the bend towards the centre by @aleksei-suholita in #1888
  • M3: glass bends towards its core, and rounded rectangles work it out in closed form by @aleksei-suholita in #1889
  • Copy the shared house rules into AGENTS.md by @FredApps in #2040
  • M3: glass's docs say which centre splay bends away from and where a shape gets no core by @aleksei-suholita in #2058
  • M9: share a file on the local network read-only, with a view-only code by @StrajnarFilip in #2052
  • M8: glass takes one sample where its colours split under 1/256 px by @aleksei-suholita in #2057
  • Minimize: a click that shows the right sidebar no longer moves the frame it selects (#2051) by @TrevorBrown-dev in #2053
  • M7: #1360 follow-up: decode a clipboard PNG before pasting it by @denisg0mes in #2038
  • M3: Go to main component opens the library file of a library component by @denisg0mes in #2037
  • Keep object snapping when Snap to Pixel Grid is on by @Silvertree2010 in #2031
  • Reject negative and fractional index in variable.moveMode by @Silvertree2010 in #1787
  • Release: refresh contributor credits for each release (#2059) by @Luis-0508 in #2060
  • Styles: the style and variable pickers grow back to their full height (#2043) by @ZIDAN44 in #2056
  • Reject negative or fractional index in page.move by @Silvertree2010 in #1783
  • M1: the boolean operation buttons carry original icons (#2003) by @TrevorBrown-dev in #2024
  • Reject invalid entries in vector.create points instead of dropping them by @Silvertree2010 in #1778
  • M8: unify Selection colors input and align sidebar icons by @Carbocode in #2011
  • M7: FIGCRAFT_WEB_FONTS embeds more craft-fonts families in the web build by @Salah1St in #1213
  • M4, #1747: a text layer's name follows the characters typed into it by @Hamza0101 in #1900
  • Reject negative and fractional indexes in node.reorder by @Silvertree2010 in #1777
  • fix(format): import a .fig blob once however many hashes name it by @bflatastic in #2063
  • fix(format): import a .fig blob once however many hashes name it by @dylanmtaylor in #1895
  • docs: credit Hamza Naveed in contributor names by @Hamza0101 in #1901
  • Boards: connectors attached to a side start 4 pt outside the border, as FigJam's do (#1916) by @TrevorBrown-dev in #1971
  • fix(doc): stop frame_relative on a looping parent chain by @bflatastic in #2062
  • fix(doc): stop frame_relative on a looping parent chain by @dylanmtaylor in #1943
  • M9: one auto layout edit on each side of a branch is one conflict (#2026) by @StrajnarFilip in #2046
  • fix(engine): an unknown stroke cap lists the caps node.set takes (#2005) by @JonRC in #2007
  • perf(format): index the lookups that made style-heavy files quadratic by @bflatastic in #2064
  • perf(format): index the lookups that made style-heavy files quadratic by @dylanmtaylor in #1932
  • M6: JPG exports take a quality and embed the sRGB profile (#2004) by @JonRC in #2006
  • Make undo while drawing with the pen remove only the last anchor by @Silvertree2010 in #1760
  • M3: a layer binds an effect's field only when its effect has it, and a bound glass light angle turns round by @aleksei-suholita in #2055
  • M6: SVG import: a dash offset on a closed outline is kept by @TrevorBrown-dev in #1789
  • M10: translate German text-wrap controls and tooltips by @markx77 in #1992
  • M4: a paragraph's base direction can be forced: Text ▸ Text direction ▸ Left to right / Right to left (#1830) by @TrevorBrown-dev in #2012
  • M8: joining the ends of a path broken open closes its fill loop through the new segment (#1951) by @TrevorBrown-dev in #1991
  • M3: importing a file keeps its own variables and styles when their ids are already taken by @MortenHusted in #1958
  • M9: a slow join in a busy room isn't dropped for other people's cursors by @cheyras in #2000
  • M6: correct architecture guide for existing .fig support by @MMexicann in #1996
  • M8: a minimised window under Wayland answers control requests (#1906) by @StrajnarFilip in #2047
  • M7: a click on a page opens it after a rename that changed nothing by @cheyras in #1994
  • Reject duplicate Kiwi field IDs by @TheGalitube in #1798
  • feat(ui): mouse buttons 4 and 5 pan the canvas like the middle button (#1758) by @ashokram-si in #2009
  • M10: the UI takes a system face for Ethiopic, the Indic scripts and the other scripts its fonts lack (#2014) by @TrevorBrown-dev in #2018
  • i18n(fi): translate the 43 labels Finnish lacks by @Janiz-zzz in #1993
  • M6: the arrows show and move a placement crosshair with a shape or frame tool chosen, and Enter places there (#1839) by @TrevorBrown-dev in #1869
  • fix(format): bound the characters Sketch text runs write in all by @dylanmtaylor in #1984
  • M4: justified Chinese, Japanese and Korean text spreads the room between its characters (#1970) by @TrevorBrown-dev in #1989
  • M4: closed vectors take corner smoothing by @dotCooCoo in #1756
  • M3: text styles carry paragraph spacing and indent, the list style and the OpenType features (#1829) by @TrevorBrown-dev in #1876
  • fix(pdf): drop an oversized hyperlink before it is copied once per line by @dylanmtaylor in #1931
  • M7: closing a tab with unsaved changes asks Don't Save / Cancel / Save (#2032) by @StrajnarFilip in #2048
  • M8: CSS colours take none and every hue unit, refuse nan and inf, and to_css keeps the 8-bit alpha by @TrevorBrown-dev in #1773
  • Auto layout: baseline alignment puts a layer without text with its bottom on the baseline (#1825) by @TrevorBrown-dev in #1907
  • fix(format): cap the bytes copied to fill a variable's missing modes by @dylanmtaylor in #1983
  • fix(doc): give render bounds a visit budget so a repeating child list ends by @dylanmtaylor in #1982
  • M8: draw continuous rounded highlights in the layers tree by @Carbocode in #2010
  • fix(pathops): cap an arrowhead's weight like a stroke's width by @dylanmtaylor in #1981
  • fix(server): a refused batch counts toward a log's size, not toward a snapshot rewrite by @dylanmtaylor in #1979
  • M5: proto.settings refuses an unknown device and answers the settings (#2027) by @StrajnarFilip in #2049
  • fix(engine): escape Vue attribute values that follow literal text in a Code Connect template by @dylanmtaylor in #1956
  • Number fields: Alt held over the field scrubs it, as the label does by @TrevorBrown-dev in #1855
  • i18n(ka): Georgian for the 6 text-wrap strings by @devius in #1954
  • Boards: drag a "+" handle to drop the next shape anywhere, or onto another object to join them (#1919) by @TrevorBrown-dev in #1947
  • fix(engine): check the opened file, not the looked-up path, before reading it by @dylanmtaylor in #1930
  • fix(collab-net): give a management request one deadline for its answer by @dylanmtaylor in #1944
  • fix(engine): install a directory plugin only with the permissions that were shown by @dylanmtaylor in #1946
  • M1: Set default properties gives new shapes and text the layer's properties (#2028) by @StrajnarFilip in #2050
  • fix(engine): bound the keys an effect object is probed for by @dylanmtaylor in #1940
  • fix(text): load at most 64 faces from a font collection given as bytes by @dylanmtaylor in #1938
  • fix(format): charge an archive member's unpacking even when the read fails by @dylanmtaylor in #1937
  • M3: the Local variables window selects several variables with Shift and Cmd/Ctrl, and acts on them at once (#2002) by @TrevorBrown-dev in #2025
  • Web fonts: FIGCRAFT_EMBED_SCRIPTS embeds other scripts' craft-fonts faces, so Persian and Arabic draw (#1902) by @TrevorBrown-dev in #1908
  • fix(engine): refuse document URLs with shell syntax or a malformed authority by @dylanmtaylor in #1936
  • M1: the Fill section shows a text's characters' fills, mixed when they differ, and a layer fill edit reaches every character by @TrevorBrown-dev in #1857
  • fix(figcraft): write the recovery copy's online note owner-only by @dylanmtaylor in #1934
  • perf(vectordrawable): keep warning names in a set by @dylanmtaylor in #1933
  • fix(collab-net): hold a health check's header read to the handshake deadline by @dylanmtaylor in #1929
  • fix(engine): compare online servers' paths with their case by @dylanmtaylor in #1928
  • FigJam import: an elbow connector saved with its path keeps it instead of being routed again (#1910) by @TrevorBrown-dev in #1987
  • fix(engine): keep plugins out of branches, saved versions and library links by @dylanmtaylor in #1920
  • M4: Increase and decrease font weight step through the styles the family has (#1831) by @ljkx in #1884
  • M8: a spread round a stroke with corners keeps its whole shadow by @samhyun in #1847
  • docs: add a combined browser and collaboration Caddy example by @michaelgiraldo in #1818
  • M2: Suggest auto layout adds nested auto layout frames by rows and columns and keeps the placement (#1823) by @TrevorBrown-dev in #2020
  • Reject overflowing u32 varints by @TheGalitube in #1800
  • Preserve finite values at large rounding precision by @TheGalitube in #1797
  • M8: dots halfway between pixels stay put across pans, bands and patches by @samhyun in #1796
  • M9: a joined live session keeps reconnecting and says when it's disconnected by @cheyras in #1997
  • fix(vectordrawable): M2.1: use inclusive range checks by @AxylumRust in #1782
  • fix(engine): refuse linked files when publishing a plugin folder by @bflatastic in #2066
  • fix(engine): refuse linked files when publishing a plugin folder by @dylanmtaylor in #1939
  • fix(geom): keep arc subdivision bounded whatever the radius by @bflatastic in #2067
  • fix(geom): keep arc subdivision bounded whatever the radius by @dylanmtaylor in #1942
  • FigJam import: a connector end with an AUTO or CENTER magnet leaves the side facing the other end (#1909) by @TrevorBrown-dev in #1914
  • M8: grains stay in their cells whatever origin a render starts from by @samhyun in #1795
  • M3: Selection colors rows apply library color styles and create a style by @dotCooCoo in #1762
  • fix(text): M2.1: simplify font file filter by @AxylumRust in #1781
  • M8: a stroke's square dash ends and brush shapes paint within its bounds by @samhyun in #1849
  • fix(pathops): M2.1: keep Fenwick indices Rust 1.95 compatible by @AxylumRust in #1780
  • M1: the page background opacity can be edited in the Page section (#1748) by @TrevorBrown-dev in #1770
  • Control channel: ui.key arrows pan the view when nothing is selected, as the window does by @TrevorBrown-dev in #1854
  • M4: the Pencil draws white on a dark page or frame, and previews in that colour (#1741) by @TrevorBrown-dev in #1775
  • M8: a fill per region: the Fill section and the fill commands edit the regions selected in vector edit mode (#1875) by @TrevorBrown-dev in #1878
  • M7: a gap between Import and Export in the Local variables window (#1754) by @TrevorBrown-dev in #1769
  • M8: posting a comment in the browser no longer stops the app (#1764) by @TrevorBrown-dev in #1766
  • .fig import: resolve library variables and collections by asset key (newest copy) by @mortezanaeemi-ops in #1801
  • M9: joining a live session again merges what you did while disconnected by @cheyras in #1998
  • Layers panel: the list is as wide as its widest name and scrolls sideways (#1904) by @TrevorBrown-dev in #1912
  • M2: a Cmd/Ctrl-click on a padding field sets all four sides with the value typed by @TrevorBrown-dev in #1858
  • M10: Traditional Chinese (Taiwan) interface draft by @tommy1616 in #1913
  • Export: each export setting chooses a color profile by @dotCooCoo in #1759
  • Fix Tailwind export breaking JSX when font family has quotes or brackets by @Silvertree2010 in #2068
  • figcraft-web: window.figcraft takes its request functions from craft-web-api by @helenkwok in #2065
  • M8: shape builders cap sizes, radii and angles at 1e9, so an absurd value cannot build millions of segments by @TrevorBrown-dev in #1774
  • M10: a right-to-left UI language mirrors the window by @SoldierPePe in #1772
  • Layers panel: component rows in the theme's component tint, at AA contrast (#1903) by @TrevorBrown-dev in #1911
  • fix(cli,ui): escape control characters in document and plugin text sent to the terminal by @bflatastic in #2061
  • fix(cli,ui): escape control characters in document and plugin text sent to the terminal by @dylanmtaylor in #1952
  • M1: scrubbing a field faster or slower by the pointer's height, with a notice of the speed (#1837) by @TrevorBrown-dev in #1873
  • M1: pick select: Tab while the keyboard selection box shows walks the layer tree with a pink outline, Space selects (#1836) by @TrevorBrown-dev in #1879
  • M7: the left rail and tab strip use larger icons (#553) by @avhn in #1729
  • M6: .fig import draws a scaled instance's layers at its scale factor (#2091) by @TrevorBrown-dev in #2100
  • M6: scale per-point vector radii in scaled instances by @FredApps in #2123
  • Updates: the updater reports installing, ready, installed and failed, and installs at exit by @dotCooCoo in #2130
  • Updates: take craft-update from craft-libs main at 1b34eba41 by @dotCooCoo in #2136
  • fix(naming): use direct FigCraft feature descriptions by @FredApps in #2131
  • Naming: use Developer Mode instead of Figma's Dev Mode by @skylartaylor in #2135
  • fix(web): allow up to Cloudflare 25 MiB cap in package.sh by @dylanmtaylor in #2155

New Contributors

Full Changelog: v0.15.0...v0.17.0

Don't miss a new figcraft release

NewReleases is sending notifications on new releases.