Skip to content

VectorCraft v0.23.0

Latest

Choose a tag to compare

@github-actions github-actions released this 09 Nov 12:10
5d0e892

What's Changed

  • Path booleans: check the windings against the operands' areas and resolve the operands when they don't add up (#5478) by @mockydevs in #5917
  • Drop Shadow: a swatch beside Color opens the Color Picker (#5364) by @mockydevs in #5918
  • Find and Replace: type inside a locked or hidden group is left alone (#5900) by @Hamza0101 in #5921
  • Find Whole Word: a change of style inside a word is not a word boundary (#5901) by @Hamza0101 in #5922
  • fix(text): a gutter too huge to step past no longer stalls area type layout by @jayzed80 in #5924
  • Effects: a Transform effect's copies of a filled and stroked path stack one above another by @mockydevs in #5927
  • Don't copy a library on every save when its format keeps no title by @adikshan11 in #5928
  • Perspective grid: a grid dragged off its preset reports no preset name by @mockydevs in #5931
  • Type: pin that a Type-range paste into new point type keeps its formatting (#5929) by @Hamza0101 in #5932
  • Snap to Glyph: each glyph's bounding-box corners are snap points, and the box turns with rotated type by @mockydevs in #5937
  • 3D effects: Extrude & Bevel, Inflate and Rotate apply to groups, turned about one shared axis by @mockydevs in #5938
  • Type: Alt + numeric-keypad codes (Alt+0176 → °) type their character on Windows; type.insert takes a code by @mockydevs in #5939
  • Appearance and Eyedropper: reading an object's paint does not measure its bounds by @dotCooCoo in #5940
  • Paste: cells copied from a spreadsheet paste as a table of type over gridlines by @mockydevs in #5942
  • Direct Selection: with Snap to Grid, a dragged straight segment lands its anchors on the grid by @mockydevs in #5947
  • Languages: Bulgarian, with its quote marks and the fonts' Bulgarian forms (#5945) by @Hamza0101 in #5948
  • Opening a slow file shows a progress window with Cancel and Continue in Background by @mockydevs in #5950
  • .ai save: the editing copy names the active artboard by @dotCooCoo in #5951
  • .ai import: the other Effect › Pathfinder operations open as live effects on a group by @dotCooCoo in #5952
  • Legacy .ai export: a flattened transparent image's clip follows its edge smoothly by @mockydevs in #5953
  • Type: layout keeps each font face's shaping plans by @dotCooCoo in #5955
  • UI: centre the Home screen and use the accent for the Discord button (#4684) by @SofiaAFigueredo in #4732
  • Transform fields: Tab moves from one field to the next, one press each by @FractalEncrypt in #5957
  • Shape tools: move the selection from its centre point and turn it outside a corner by @FractalEncrypt in #5958
  • .ai import: ASCII85 data in a section does not hide the section's end by @dotCooCoo in #5959
  • PDF export: members of a plain group or layer are measured once to leave out off-page art, and the link walk measures only what it reads by @dotCooCoo in #5963
  • .ai import: envelopes map from their stroked box when the file saves its size by @dotCooCoo in #5966
  • .ai import: paths with an Art brush open with the brush on their stroke by @dotCooCoo in #5967
  • Fix #5714: widths run smoothly between width points by @slafebre in #5968
  • Type: switching to the Eyedropper keeps a whole-story selection by @dotCooCoo in #5969
  • Part of #5964: stroke gradients cover an arrowhead to the end of its reach by @slafebre in #5971
  • Canvas: selection outlines and anchors are reused between frames by @dotCooCoo in #5972
  • .ai save: the editing copy keeps type as type by @dotCooCoo in #5965
  • Add hyphenation for eleven Indian languages by @ruchirguitar in #5946
  • SVG: centred and right-aligned type on a path keeps its place by @kylekanouse in #5977
  • .ai import: images, meshes, blends and styled objects keep the knockout shape flag by @dotCooCoo in #5978
  • Links: a link check whose worker ends without a result no longer stops later checks by @dotCooCoo in #5982
  • Artboards: the panel menu's New Artboard makes the new artboard active by @dotCooCoo in #5986
  • Docs: PDF password export says when the file ID and the bytes vary by @dotCooCoo in #5989
  • .ai import: opacity mask art of one object opens as that object by @dotCooCoo in #5990
  • Save: notes on unread save options name the legacy or non-PDF-compatible .ai, in every save command by @dotCooCoo in #5993
  • EPS import: bind leaves the procedures it already bound alone (Ghostscript eps2write files open) by @mockydevs in #6000
  • EPS import: SubFileDecode reads counts past 4 MiB (eps2write files with long streams open) by @mockydevs in #6001
  • EPS import: cvi and cvr read radix numbers (eps2write spot colours with spaces) by @mockydevs in #6002
  • EPS import: an image too large to read skips its data instead of failing the file by @mockydevs in #6003
  • Image Trace: the logo fitter keeps no piece over its tolerance by @dotCooCoo in #6008
  • Artboards: the Artboard tool's canvas menu cuts, copies, pastes, renames, rearranges and exports artboards by @dotCooCoo in #5983
  • Offset Path: the spurious-contour check tests only the source segments near each contour by @dotCooCoo in #5988
  • Dialogs: a held Enter or Escape stops at the dialog it opened or closed by @dotCooCoo in #6004
  • Preferences: prefs.set refuses a missing or unusable recovery or plug-ins folder by @dotCooCoo in #6005
  • EPS/.ai editing data: symbols defined before the art styles take them by @mockydevs in #5992
  • EPS/.ai editing data: blends with no spine written come in live by @mockydevs in #6011
  • EPS/.ai editing data: a transparency set inside a clipping group stays after it by @mockydevs in #6014
  • .ai import: drawn looks in pattern and brush art count in the note by @dotCooCoo in #6017
  • Type: story-wide panel changes follow the story's current thread by @dotCooCoo in #5985
  • .ai import: legacy type keeps its writing direction, Tate-chu-yoko runs and upright Roman characters by @dotCooCoo in #6012
  • vectorcraft-web: window.vectorcraft takes its request functions from craft-web-api by @helenkwok in #6015
  • Release: refresh contributor credits for each release (#5997) by @Luis-0508 in #5998
  • #5980: macOS save sheet uses alloc/init instead of +savePanel by @BOXELS in #5984
  • Engine: execute refuses keys a command doesn't name, in every build by @dotCooCoo in #5890
  • .ai save: a reopened file opens on the artboard active when it was saved by @dotCooCoo in #5975
  • Artboards: duplicate, copy, cut, move and rearrange journal whether locked and hidden art goes by @dotCooCoo in #5994
  • Simplify: fitted curves stay within the tolerance of the path, and serpentines simplify faster by @dotCooCoo in #5995
  • .ai import: type on a path keeps its effect, alignment and flip by @dotCooCoo in #5996
  • .ai import: spot colors in a kept brush's art become swatches by @dotCooCoo in #6006
  • .ai save: the editing copy keeps variables, data sets and bindings by @dotCooCoo in #6024
  • Actions: Insert Stop pauses playback and shows a message by @dotCooCoo in #6028
  • Color fields: a pasted hex code replaces the field's digits by @dotCooCoo in #6030
  • .ai import: a filled clipping path keeps its fill by @dotCooCoo in #6032
  • Dimension tool: Expand keeps a dimension as plain art after it moves by @dotCooCoo in #6033
  • .ai import: legacy overflow breaks keep the direction and paragraph attributes they were read with by @dotCooCoo in #6034
  • Fix #5347: a floating panel's menu scrolls inside its window by @dotCooCoo in #6036
  • Menus: Delete Empty Artboards' enabled check does not walk the document every frame by @dotCooCoo in #6037
  • Panels: floating panels reopen on the monitor where they were left by @dotCooCoo in #6038
  • Paste: skips relinking copies with no renames, global swatches or styles, and finds type in one walk by @dotCooCoo in #6044
  • i18n: the Turkish params and effect errors name their own keys by @dotCooCoo in #6045
  • Tests: the Mac menu bar tests do not depend on fonts other tests install by @dotCooCoo in #6046
  • Fix #5813: floating panels hide while a tool group's flyout is open by @dotCooCoo in #6049
  • Panels: long swatch, preset and Add New Effect popups scroll inside a short window by @dotCooCoo in #6050
  • Docs: the stroke outline reuse line is listed once by @dotCooCoo in #6051
  • Menus: the wasm build has no unused import warning for menu_open by @dotCooCoo in #6053
  • Open: the first frame drawn after the open uses the layouts it made for type objects by @dotCooCoo in #6054
  • i18n: Turkish error messages keep the parameter keys they name by @dotCooCoo in #6055
  • Tests: the shape builder and large edit guards count work instead of timing it by @dotCooCoo in #6056
  • PDF export: warn when a PDF/X file leaves out the document's bleed by @dotCooCoo in #6057
  • Font menu: the wasm build has no unread wheel-field warnings by @dotCooCoo in #6058
  • Keyboard Shortcuts: Export Text saves the shortcut list as a text file by @dotCooCoo in #6068
  • Graphs: Appearance commands and the Eyedropper update a series' stored paint by @dotCooCoo in #6069
  • Canvas: a pan by whole pixels copies the pixels that stay on screen by @dotCooCoo in #6070
  • Selection: a group dragged with Real-time Drawing off shows each member's outline by @dotCooCoo in #6073
  • History: the New Document button makes a document from the selected state by @dotCooCoo in #6074
  • Tests: the CSS, glow and .ai Zstandard guards count work instead of timing it by @dotCooCoo in #6075
  • Symbols: Reset Transformation returns an instance to its symbol's scale, rotation and shear by @dotCooCoo in #6076
  • Fix #5816: CJK and other fallback faces in the interface sit on the Latin baseline by @dotCooCoo in #6079
  • Type: Cmd+Enter (Ctrl+Enter) ends text editing and keeps the text by @dotCooCoo in #6080
  • i18n: error messages keep the keys and values they name without backticks by @dotCooCoo in #6081
  • Type: layout looks up each style run's face once by @dotCooCoo in #6082
  • Smart Guides: Snap to Last Location puts a moved selection back where it began by @dotCooCoo in #6086
  • Shortcuts: export, import, set, list and preset reject a param of the wrong type by @dotCooCoo in #6087
  • Preferences: a search field finds a setting and goes to its category by @dotCooCoo in #6088
  • .ai import: type on a later page of a PDF of some artboards goes to its artboard by @dotCooCoo in #6091
  • Canvas: moving anchors of a long path redraws only around them by @dotCooCoo in #6092
  • Object: Reset Bounding Box also squares the objects inside the selection by @dotCooCoo in #6095
  • Path ops: stroke outlining and unions sweep long, low paths along their length by @dotCooCoo in #6097
  • Tests: huge-selection vertex counts leave out the art's raster by @dotCooCoo in #6102
  • SVG import: each linked file keeps image keys of its own by @dotCooCoo in #6103
  • Control bar: the panel menu and the gripper dock it to the top or the bottom of the window by @dotCooCoo in #6090
  • Color: Recent Colors keeps the last 30 colors used, across documents by @dotCooCoo in #6108
  • .ai import: legacy type in CJK fonts decodes by the font's CMap by @dotCooCoo in #6114
  • Type: find and replace and Type menu commands reject a param of the wrong type by @dotCooCoo in #6116
  • Artboard Options: Fade Region Outside Artboard darkens the area outside the artboards by @dotCooCoo in #6118
  • Image Trace: buttons above the Preset menu choose the Auto Color, High Color, Low Color, Grayscale, Black and White and Outline presets by @dotCooCoo in #6119
  • Links: links inside symbols, patterns and masks follow a moved folder and are updated like links in the layers by @dotCooCoo in #6120
  • Build: linesweeper from craft-libs' vendored copy at 481f66d by @dotCooCoo in #6122
  • Envelopes: commands reject a style, orientation or preserveShape of the wrong type by @dotCooCoo in #6124
  • Fix #6110: pattern brush corner tiles line up with the side tiles by @dotCooCoo in #6126
  • Flattening: stop building a group's regions at the first one past the region limit by @dotCooCoo in #6127
  • Color management: commands reject a param of the wrong type by @dotCooCoo in #6129
  • Blend: Smooth Color counts a step per level of color change by @dotCooCoo in #6130
  • .ai import: warped type that draws differently from the file opens as its drawn art by @dotCooCoo in #6133
  • Text styles: load character and paragraph styles from another document by @dotCooCoo in #6141
  • PDF import: cropTo, password, colorMode and textAs reject a value of the wrong type by @dotCooCoo in #6142
  • .ai save: the editing copy keeps live effects by @dotCooCoo in #6150
  • Fields: Tab moves from a field to the next past its spinner and preset chevron by @dotCooCoo in #6151
  • 3D and Materials: Window › 3D and Materials edits the selection's 3D effect in place by @dotCooCoo in #6153
  • JavaScript: vectorcraft-js parses ES5 scripts into a syntax tree, checked with cargo xtask test262 by @dotCooCoo in #6155
  • Reference point: the locator is one Tab stop, and the arrow keys move the point by @dotCooCoo in #6159
  • Commands: an id that is not an object id is refused by commands that otherwise use the selection by @dotCooCoo in #6163
  • Shortcuts: holding a tool's single-key shortcut uses the tool until the key is let go by @dotCooCoo in #6172
  • Envelopes: type maps from its glyph outline bounds by @dotCooCoo in #6173
  • Plug-ins: manifests list permissions, the user grants them at install, and the host enforces the grant by @dotCooCoo in #6176
  • Swatches: Add Used Colors, Select All Unused and new swatch naming use hash lookups for colors and names by @dotCooCoo in #6177
  • Links: Relink can replace all instances, the folder's missing links or each link separately by @dotCooCoo in #6182
  • .ai import: legacy binding punctuation opens as Burasagari's Force setting by @dotCooCoo in #6183
  • Plug-ins: API level 2 lets a plug-in report progress, see Cancel and write log lines by @dotCooCoo in #6184
  • Dialogs: New Workspace and New Toolbar fit their contents instead of opening 420 pt tall by @dotCooCoo in #6186
  • Color: Generic CMYK separates nearby colors alike when an ink sits at 0 or 100% by @dotCooCoo in #6187
  • .ai import: Scatter brushes in Tints open in Tints, and brush art drops its frame by @dotCooCoo in #6188
  • Plug-ins: a run keeps the fuel left in a slice at a bulk memory instruction by @dotCooCoo in #6190
  • Fix #2786: the web build uses WebAssembly SIMD, so the canvas renders about 2.5x faster by @vangel76 in #5284
  • SVG: keep CSS classes of imported elements on export (#2414) by @vangel76 in #2480
  • Variables: a second text variable on one type object is refused by @dotCooCoo in #2642
  • Image Trace: Flat Logo can trace only the named colors, without a white of its own by @dotCooCoo in #3946
  • Document: document.compare measures how far an artboard's render is from an image by @dotCooCoo in #3995
  • Image Trace: Expand can group the traced paths by color by @dotCooCoo in #4058
  • Actions: Batch over data sets keeps Save and Close and warns when each data set saves over one file by @dotCooCoo in #5015
  • Canvas: a General option makes Cmd/Ctrl-wheel scroll the canvas sideways
    by @dotCooCoo in #5023
  • Paragraph: Reset Panel also resets the Mojikumi Set and tab stops
    by @dotCooCoo in #5025
  • Type: Type Orientation is a setting of the whole thread
    by @dotCooCoo in #5027
  • Render: the decoded-image cache can grow to a quarter of installed memory on every desktop OS
    by @dotCooCoo in #5034
  • Type: add a VectorCraft preference for typed list detection
    by @dotCooCoo in #5039
  • Type: typed +, # and > start lists with a hollow circle, square and dash
    by @dotCooCoo in #5040
  • Shortcuts: F2, F3 and F4 also cut, copy and paste on Windows and Linux
    by @dotCooCoo in #5041
  • Perspective grid: Snap to Grid moves objects at every depth by one plane offset by @dotCooCoo in #5196
  • Drawing tools: Escape on an arc, spiral or grid drag puts back the options it changed by @dotCooCoo in #5202
  • Title bar: the app bar shows no brand mark under the desktop's own frame by @dotCooCoo in #5211
  • Document Info: Pattern Objects lists the objects painted with patterns by @dotCooCoo in #5220
  • Selection QoL: marquee modes with visible feedback by @dotCooCoo in #5313
  • Workspace: add an option to keep Tools beside the canvas with left-side panels by @dotCooCoo in #5395
  • File formats: HEIC and HEIF images open and place by @dotCooCoo in #5518
  • Type: upright glyphs on a vertical path face the path's start, so ligatures read in order by @dotCooCoo in #5557
  • .ai import: Bas Relief opens with its settings by @dotCooCoo in #5227
  • Save: include a PDF in new native files by default by @dotCooCoo in #5320
  • DXF: a CNC / CAM preset sets the export options for cutting software by @dotCooCoo in #5500
  • Layers: a document opened after a close keeps its thumbnail jobs by @dotCooCoo in #5814
  • Symbols: Direct Selection sets the solid fill and stroke of one object in a dynamic instance by @dotCooCoo in #5962
  • .ai import: placed PDF and .ai pages open as placed documents by @dotCooCoo in #6083
  • Graphs: graphic styles and Default and Swap Fill and Stroke update a series' stored paint by @dotCooCoo in #6094
  • i18n: error messages in every catalog keep true, false, null and the keys they name by @dotCooCoo in #6100
  • Title bar: a Linux and BSD preference uses the app bar where the desktop draws the frame by @dotCooCoo in #6101
  • Artboard tool: buttons on the selected artboard's edges add an artboard beside it by @dotCooCoo in #6111
  • .ai save: the editing copy keeps symbols and their instances by @dotCooCoo in #6136
  • Path ops: region building lists the shapes covering each region instead of a flag per shape by @dotCooCoo in #6144
  • Actions: Load Actions… reads action sets saved as .aia files by @dotCooCoo in #6149
  • Asset Export: 3D objects export as USDA, USDZ, glTF or OBJ meshes by @dotCooCoo in #6168
  • Transform: Align to Pixel Grid keeps an object's horizontal and vertical edges on the pixel grid by @dotCooCoo in #6169
  • JavaScript: vectorcraft-js runs ES5 scripts with a garbage-collected heap and execution limits by @dotCooCoo in #6178
  • Plug-ins: Safe Mode starts without plug-ins, offered after a launch stops while one loads by @dotCooCoo in #6185
  • Path ops: Merge finds every fill's faces in a few contour passes instead of one per fill by @dotCooCoo in #6191
  • Envelopes: a top object's sides share the content by control polygon length by @dotCooCoo in #6195
  • Plug-ins: the fuzz test generates bulk memory operations by @dotCooCoo in #6198
  • Effects: placed gradients move with Transform and Free Distort effects by @dotCooCoo in #6199
  • Effects: Effect › SVG Filters applies the document's SVG filters as live effects by @dotCooCoo in #6200
  • .ai import: the editing-copy paragraph in the file-format doc appears once by @dotCooCoo in #6202
  • Panels: tests pin the palette windows staying shown for torn-off strips and new toolbars by @dotCooCoo in #6203
  • SVG export: type on a path with Skew, 3D Ribbon, Stair Step or Gravity keeps its look by @dotCooCoo in #6206
  • Legacy .ai: the type attributes warning covers kerning, margins, Align to Path and end brackets by @dotCooCoo in #6207
  • Type: docs say Escape returns to the tool that double-clicked into the type by @dotCooCoo in #6208
  • Docs: the Reset Transformation entry is listed once in the evidence list by @dotCooCoo in #6216
  • .ai import: type keeps Standard Vertical Roman Alignment from its editing data by @dotCooCoo in #6217
  • Tests: workspace and toolbar dialog test checks the gap above OK and Cancel's place by @dotCooCoo in #6218
  • .ai import: a palette gradient swatch's paint is not linked to itself by @dotCooCoo in #6219
  • Swatches: a new swatch holds no link or placement from the paint it is made from by @dotCooCoo in #6222
  • .ai save: the editing copy keeps Standard Vertical Roman Alignment by @dotCooCoo in #6226
  • .ai import: objects in pattern and brush art take the file's art styles by @dotCooCoo in #6230
  • Scale the EPS operation budget with the program's length by @Silvertree2010 in #5423
  • Typographer's Quotes: a lone typed ” opens like a straight quote by @VladimirCeric in #5459
  • Affinity import: one shared work and name budget across repeated links by @dylanmtaylor in #5491
  • Select Text by Font: limit it to artboards or layers (#5529) by @ruchirguitar in #5578
  • EPS/.ai editing data: art-style strokes aligned inside or outside keep their alignment by @mockydevs in #6010
  • .ai import: opacity mask art without its own paint takes the paint before its dictionary by @magyarb in #6021
  • i18n(ka): Georgian for 1 new string by @devius in #6062
  • Fix #5960: a narrow part of a variable-width stroke paints over a wide part only where they overlap by @slafebre in #6093
  • Cut PSD Unicode layer names on a character boundary by @Silvertree2010 in #6096
  • Alt + keypad codes: with NumLock off the keypad keys count as digits and don't move the caret by @mockydevs in #6105
  • Fix #5188: a Shift-click on a corner widget of a whole path picks its corner by @slafebre in #6106
  • Strip CSS comments from style attributes and rule declarations by @Silvertree2010 in #6128
  • Pen: Copy and Cut take the anchors a Cmd-lent Direct Selection picked (#6123) by @slafebre in #6132
  • UI tests: gradient and rotation controls are found in release builds by @thisisgomaa in #6156
  • Preferences: inputs expose their labels to accessibility tools by @thisisgomaa in #6157
  • Ignore non-digit suffixes in next_asset_name by @Silvertree2010 in #6167
  • Text styles: double-click opens Character/Paragraph Style Options, and the dialog scrolls in a fixed width by @sadkotheguest in #6171
  • Layers: Delete clears the selection after the last row is deleted (#5870) by @alosslessdev in #6175
  • Export for Screens: an artboard name keeps its dots (fixes #6143) by @SBaksa in #6180
  • Canvas: a document opens at the zoom of the settled window by @KaboomFox in #6196
  • Reject a plus sign in Windows GPU PCI id hex digits by @Silvertree2010 in #6197
  • Don't treat a pattern named "Name +N" as a numbered copy on import by @Silvertree2010 in #6213
  • Fix #6205: support Registration and named swatches in AI art styles by @el-j in #6214
  • Fix #6135: opening a .ai with editing data skips the Import PDF dialog by @slafebre in #6225
  • 3D effects: resolve overlapping contours before building a solid by @addibble in #6229
  • Reject a plus sign in type.insert unicode hex digits by @Silvertree2010 in #6240
  • EPS import: composite fonts draw their Type 42 glyphs (pdftops EPS shows its type) by @mockydevs in #5999
  • .ai import: images past 2^25 pixels in the editing data keep the layers by @dotCooCoo in #5143
  • Commands: an ids list with an entry that is not an id is refused instead of dropping the entry by @dotCooCoo in #6179
  • Plug-ins: a plug-in keeps settings and a cache of its own by @dotCooCoo in #6228
  • Links: a missing linked file keeps its relative folder when a moved document is saved by @dotCooCoo in #6231
  • Asset Export: the 3D mesh triangle limit bounds memory across all exported objects by @dotCooCoo in #6241
  • Type: Composite Fonts… sets each class of character in a font of its own by @dotCooCoo in #6244
  • Color: Generic CMYK tints gain as CGATS TR 001 gives for SWOP printing by @dotCooCoo in #6245
  • Keyboard Shortcuts: each Object › Plug-ins filter has a row of its own by @dotCooCoo in #6246
  • Type: Align to Path moves each character by its own font's metrics by @dotCooCoo in #6247
  • .ai import: the editing-copy paragraph in the file-format doc appears once again by @dotCooCoo in #6249
  • Effects: hidden layer children and edited freeform gradients follow the Transform and Free Distort effects by @dotCooCoo in #6250
  • Image Trace: Ignore Color can leave out only the background by @dotCooCoo in #3952
  • Type: Tab and Shift+Tab move a list item down and up a level
    by @dotCooCoo in #5037
  • Exit isolation on empty double-click with Direct Selection (#4466) by @onion3130 in #4595
  • Symbols: symbol.instance.setAppearance refuses a fill or stroke an object does not draw by @dotCooCoo in #6232
  • Preferences: the settings filter builds without a clippy warning on macOS by @dotCooCoo in #6235
  • 3D export: Revolve mesh normals are unit length and short walls face out by @dotCooCoo in #6251
  • SVG export: outlined type keeps its text as an accessible name by @dotCooCoo in #6255
  • SVG Filters: export writes a filter live only when import can read it back by @dotCooCoo in #6256
  • M2.1: blend Align-to-Path smooth on curved spines by @adambelis in #6254
  • Type: docs say Escape returns to the tool whose double-click chose the Type tool by @dotCooCoo in #6257
  • Image Trace: keepColors traces only the listed palette colors by @dotCooCoo in #3968
  • Plug-ins: clearing every plug-in's cache is tested in a binary of its own by @dotCooCoo in #6258
  • .ai import: opacity mask art in pattern and brush art takes document ids by @dotCooCoo in #6259
  • Spiral: Decay applies once per full wind by @dotCooCoo in #5475
  • Fix #3748: in isolation mode, art outside a clip group's mask can be selected and dragged
    by @dotCooCoo in #5030
  • Artboards: a Cut or Copy with the Artboard tool replays on its artboards by @dotCooCoo in #6052
  • Effects: placed gradients move and scale with the Warp effects by @dotCooCoo in #6236
  • Export: the export commands refuse an unknown option key by @dotCooCoo in #6061
  • Outline Stroke: geometry effects reshape the path that is outlined, as on the canvas
    by @dotCooCoo in #5024
  • Graphs: a series keeps the object opacity and blend modes set on one of its marks by @dotCooCoo in #6104
  • .ai import: symbol libraries open with their symbols by @dotCooCoo in #6109
  • Actions: Batch's Override Export sends Export for Screens files to the destination folder
    by @dotCooCoo in #5029
  • Plug-ins: a plug-in adds menu commands of its own under Object › Plug-ins by @dotCooCoo in #6193
  • Character: Anti-aliasing Method sets how a type object's edges are drawn as pixels by @dotCooCoo in #5058
  • .ai save: the editing copy keeps graphic styles and links to them by @dotCooCoo in #6161
  • JavaScript: a realm has the String, Number, RegExp and Date built-ins by @dotCooCoo in #6194
  • Reject non-digit object ids in MCP object resource URIs by @Silvertree2010 in #6253
  • EPS import: gradients drawn as abutting strips come in as one gradient, without seams by @mockydevs in #5991
  • Numeric fields: step on wheel hover without taking focus by @ruchirguitar in #6113
  • UI: show or hide the Help Bar independently by @dotCooCoo in #5355
  • Path ops: boolean contour passes test the shapes covering each face instead of a flag per shape by @dotCooCoo in #6152
  • Tests: the filter plug-in shortcut test accepts the macOS chord text by @dotCooCoo in #6261
  • i18n(ka): update the Georgian catalog (59 strings) by @devius in #6262
  • Type: type in a composite font is measured in its own document's definition by @dotCooCoo in #6260
  • 3D (Classic): Extrude & Bevel (Classic) extrudes art with Wireframe, No Shading, Diffuse and Plastic surfaces by @dotCooCoo in #6174
  • Plug-ins: a permission grant covers only the module that was approved by @dotCooCoo in #6263
  • Effects: fitted gradients turn with the Transform effect by @dotCooCoo in #6233
  • Blend: a pending pick starts over when the document's history changes by @dotCooCoo in #4599
  • Paragraph: Kinsoku Shori Type chooses Push In First, Push Out First or Push Out Only by @dotCooCoo in #5070
  • Fix #6252: selecting an object gives new art its fill, stroke and weight by @slafebre in #6267
  • Plug-ins: importer plug-ins open file types VectorCraft does not read by @dotCooCoo in #6264
  • JavaScript: vectorcraft-js adds ES5 Object, Array, Math, JSON and Function.prototype.bind by @dotCooCoo in #6189
  • .ai save: the editing copy stops at the reader's object limit by @dotCooCoo in #6220
  • .ai import: Art brushes in the older form of their objects come into the Brushes panel by @mockydevs in #6007
  • Drawing tools: Escape on a polygon, star or rounded rectangle drag puts back the option it changed by @dotCooCoo in #5213
  • Gradients: freeform points that share a color model mix in that model by @dotCooCoo in #6268
  • Recolor: report the locked and hidden art a recolor of everything left out by @dotCooCoo in #4536
  • Variables: a visibility variable shows and hides locked art by @dotCooCoo in #2780
  • Fix #3526: the bounding box follows a resize drag by @dotCooCoo in #5042
  • Plug-ins: live effects at API level 2 can paint the pieces they return by @dotCooCoo in #6265
  • File formats: JPEG XL (.jxl) images open and place by @dotCooCoo in #2606
  • Linux: VECTORCRAFT_TITLEBAR takes precedence over System Title Bar for the run it is set in by @dotCooCoo in #5036
  • Updates: the updater reports installing, ready, installed and failed, and installs at exit by @dotCooCoo in #6271
  • Plug-ins: settings and the cache total stay in memory between storage calls by @dotCooCoo in #6269
  • Print: Copies per Sheet prints as many copies of each artboard as fit the sheet by @dotCooCoo in #2552
  • Type: a pushed-in line leaves the gap after inline art open by @dotCooCoo in #6274
  • Docs: a plug-in with no permissions list needs no grant by @dotCooCoo in #6270
  • Part of #978: Window › Color Wheel picks colors on a hue ring and a saturation and brightness square by @dotCooCoo in #2279
  • Tools: setting another tool's option leaves a drag's options alone by @dotCooCoo in #6273
  • Plug-ins: removing a plug-in moves the revision while it holds the set by @dotCooCoo in #6272
  • Plug-ins: filters can ask to read type, images and symbol instances by @dotCooCoo in #6223
  • EPS/.ai editing data: paths keep art styles of several fills and strokes live by @mockydevs in #6016
  • Plug-ins: lastError keeps a failed run's error, and hit tests follow swatch changes by @dotCooCoo in #6276
  • Updates: take craft-update from craft-libs main at 1b34eba41 by @dotCooCoo in #6275
  • .ai import: names that aren't UTF-8 can be read in a legacy code page by @dotCooCoo in #5158
  • Save: the save commands and Export for Screens refuse an unknown option key by @dotCooCoo in #6234
  • Linux: docs say which VECTORCRAFT_TITLEBAR values take precedence by @dotCooCoo in #6277
  • Shape Builder: a large selection merges on another thread by @dotCooCoo in #4379
  • .ai/EPS import: type keeps its tab stops, and right-aligned lines with tabs lay out as the file's page by @magyarb in #6148
  • Workspace: the Tools panel docks on the right too, left of the panels by @vecteza in #6280
  • Docs: docs/mcp.md lists save_file once by @dotCooCoo in #6279
  • .ai import: objects with a centered variable-width stroke come in as their drawn outline by @dotCooCoo in #5200
  • Plug-ins: docs say when pixelsOmitted is set by @dotCooCoo in #6283
  • New Document: the name field is labeled Document Name by @dotCooCoo in #6284
  • Add collapse-to-icons arrows to floating panels and rail flyouts by @ruchirguitar in #6215
  • EPS import: sampled functions interpolate between their samples (function shadings no longer come in as flat blocks) by @mockydevs in #6018
  • M2.1: split ordinary path objects after deletion by @ruchirguitar in #6078
  • Workspace: window.panel.dock rejects a Tools side that isn't text by @vecteza in #6287
  • Plug-ins: a filter's read-only objects stay in its input and failed decodes count by @dotCooCoo in #6282
  • Plug-ins: docs limit the 64 MiB decoder note to non-CMYK images by @dotCooCoo in #6288
  • Plug-ins: replacing a granted plug-in with one that lists no permissions removes the grant by @dotCooCoo in #6286
  • EPS import: an image's transient data stops counting against the memory budget by @mockydevs in #6019
  • New Document: screen readers hear each Preset Details field's name by @dotCooCoo in #6289
  • Part of #4936: text.spelling.check lists unknown words, text.spelling.suggest suggests by @Hassan1305 in #6212
  • Updates: the update dialogs hold the keyboard and floating windows, and updates wait for running work by @dotCooCoo in #6291
  • Plug-ins: permissions and a heavy budget need a person's approval or a start-up flag by @dotCooCoo in #6285
  • Follow-up to #6252: a selected colorized image gives new art its fill by @slafebre in #6293
  • EPS import: CID-keyed fonts draw the glyphs of the CIDFonts the file carries by @mockydevs in #6031
  • EPS import: Type 42 fonts take their characters and widths from the font they carry; show spacing kept as tracking by @mockydevs in #6023
  • Show 0 instead of -0 for tiny negative graph labels by @Silvertree2010 in #6294
  • EPS import: kshow runs its procedure between the characters of live type by @mockydevs in #6064
  • EPS import: embedded Type 1 fonts draw and space their type with their own glyphs by @mockydevs in #6035
  • EPS import: CMap mappings to base fonts' codes and glyph names draw their glyphs by @mockydevs in #6066
  • EPS import: CID-keyed fonts in a FontSet's CFF data draw their glyphs by @mockydevs in #6065
  • EPS import: CIDFonts only named, over a Unicode CMap, set their characters as live type by @mockydevs in #6067
  • Follow-up to #6254: the blend spine keeps only the subpath it samples by @adambelis in #6297
  • EPS/.ai editing data: a ligature glyph named by a private-use character matches its text object by @mockydevs in #6047
  • Part of #4936: custom dictionary and Ignore All commands by @Hassan1305 in #6296

New Contributors

Full Changelog: v0.22.0...v0.23.0