What's Changed
- Reject exponent notation in the pica form of Unit::parse by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4126
- Refuse signs, exponents and non-numeric text in Export for Screens sizes by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4123
- Reject misplaced or excess '=' padding in base64_decode by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4131
- Shortcuts: the Cmd+Escape test expects no binding on Windows by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4096
- Shortcuts: the Ctrl+Alt chord test presses Cmd on a Mac by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4073
- MCP docs: export's EPS row names its one-file default and rect refuses artboards by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4102
- Docs: the Image Trace page describes the background line between Abutting colors by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4061
- Threaded text: Rasterize on a frame no longer duplicates its text by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4047
- Type: a recovered document keeps continued paragraphs in threaded frames by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4072
- Properties and Transform: X, Y, W and H of a compound path's member set only that path by @marcoarnulfo in https://github.com/storytold/vectorcraft/pull/4056
- Threaded text: New Symbol on a frame no longer duplicates its text by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4059
- Color management: loading the working RGB profile again under its name takes effect at once by @marcoarnulfo in https://github.com/storytold/vectorcraft/pull/4053
- Pencil: a path-continuation cursor shows over an end a straight line continues by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4064
- Pen cursors: a fountain-pen nib on the selection arrow's axis by @zsoltmar in https://github.com/storytold/vectorcraft/pull/4117
- Image Trace: Flat Logo finds a bar two pixels wide and three pixels long in its own color by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4081
- Export for Screens: <filename> takes the saved document's file name by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4050
- CLI: --help after a subcommand prints the usage by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4063
- Commands: an unknown command id is answered with the nearest command id by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4060
- MCP: headless file tools pass relative paths to the engine as given by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4108
- MCP: set_paint reports how many objects it painted by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4069
- Image Trace: Flat Logo counts only the outlines it keeps toward the anchor limit by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4066
- Image Trace: a color with no traced paths is left out of the palette by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4077
- EPS: the help text says no central file is written when no art shows by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4068
- Protect Windows device names followed by a space in safe_file_name by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4125
- Direct Selection: an anchor of type on a path's path drags and the type reflows along it by @marcoarnulfo in https://github.com/storytold/vectorcraft/pull/4070
- Recolor Artwork: double-click a new color to pick it in the Color Picker, in the model it was picked in by @marcoarnulfo in https://github.com/storytold/vectorcraft/pull/4090
- Security: EPS and legacy Illustrator bounds (operator recursion, bind, copy, cvn, previews, writer output, ink name) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/3883
- Security: document model bounds (id hashing, page ranges, overprint migration, auto slices, nested Repeat bounds) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/3888
- Migrate VectorCraft input, text and capture to egui 0.37 by @skylartaylor in https://github.com/storytold/vectorcraft/pull/4113
- Docking: panels on craft-ui's shared docking, floating panels in OS windows by @aiongg in https://github.com/storytold/vectorcraft/pull/4135
- feat: startup update prompt modal and direct self-updating by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/4138
- Security: planar map budgets for booleans, Live Paint, Offset Path and 3D effects by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/3937
- build: pin craft-update to craft-libs main (495e597) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/4183
- chore(deps): refresh muda, webbrowser and weezl by @skylartaylor in https://github.com/storytold/vectorcraft/pull/4189
- Tests: two control server line-deadline tests pass on a loaded machine by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4194
- Tests: the Paintbrush closing cursor follows the point a release keeps by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4197
- Appearance: Add New Fill and Add New Stroke are off with nothing selected by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4193
- Symbol Stainer: stained type keeps no link to a global swatch by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4185
- Character: Character Direction is off at a caret with no characters selected by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4184
- Plug-ins: compiling a plug-in's code takes none of a run's instructions by @KaboomFox in https://github.com/storytold/vectorcraft/pull/4190
- .ai import: the -- placeholder in a gradient highlight and the XC operator no longer send the file to its PDF part (fixes [#4176]) by @youwishgames in https://github.com/storytold/vectorcraft/pull/4179
- .ai import: editing data up to 512 MiB opens on 64-bit builds, so a card file with embedded rasters keeps its layers and text (part of [#3510]) by @youwishgames in https://github.com/storytold/vectorcraft/pull/4177
- Reset stroke weight to zero when the stroke colour is removed by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4132
- Join the selected end points of two paths with Ctrl+J by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4187
- lint: method references and elided const lifetimes (S1612, S8863) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/4204
- G1: Reshape readouts follow Measurement Labels pref by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4161
- G1: Artboard resize honors Transform Tools readouts by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4160
- G1: Slice Selection resize honors Transform Tools by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4168
- G1: Shear tool Shift locks width or height by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4164
- lint: shell helper, local params and lossless float conversion (S1192, S7679, S4325) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/4205
- G1: Star tool shows inner and outer radii in measurement labels by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4148
- Fix [#3627]: convert to PDF omits editing data by default by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4147
- MCP: doc_inspect reports opacityPct in the percent scale the drawing tools take by @acosimati in https://github.com/storytold/vectorcraft/pull/4149
- Live Paint: a plain group named "Live Paint..." is not a Live Paint group by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4078
- G11: Shape Builder's edge-source grid holds a bounded number of references (#4080) by @bflatastic in https://github.com/storytold/vectorcraft/pull/4211
- Shape Builder: a click merges over the map the tool built for the hover by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4062
- i18n(ka): shorter Georgian for 15 labels that were cut off by @devius in https://github.com/storytold/vectorcraft/pull/4158
- Shape Builder: erasing picks a region narrower than twice the tolerance by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4065
- Shape Builder: a merge across an overlap thinner than the precision gives one path by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4079
- Image Trace: the eye button's hold ends on release, and the panel uses any selected trace or image by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4076
- Image Trace: Overlapping layers reach only under areas that hold their own color by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4054
- Image Trace: Document Library keeps neutral tones off saturated library colors by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4048
- Image Trace: the blended edge of a cut-out image adds no color to the palette by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4075
- Image Trace: changes that wait with Preview off stay with their object by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4105
- Undo: canceling an undo group keeps a batch's steps in other documents by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4103
- Dialogs: ui.dialog.set returns an error for a field the open dialog does not read by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4049
- MCP: screenshot and render_preview can draw the Image Trace view by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4055
- MCP: answer_dialog sets the fields of the app's open dialog and confirms or cancels it by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4057
- Type: typing "1. ", "A) " or "* " at the start of a paragraph starts a list by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4192
- Pencil: Live curve fitting in Pencil Tool Options shows the stroke's points until the release fits them by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4182
- Brushes: Art Brush Options' Width can follow the pen pressure by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4181
- Eraser: Angle and Roundness in Eraser Tool Options shape the tip by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4180
- Fix [#1732]: Transform Each opens on the values it was last confirmed with and has a Copy button by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4175
- Pencil: the cursor shows a star before a press that draws a new path by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4152
- Pencil: a stroke from an end of one selected path to an end of another connects them by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4095
- Fix [#3328]: Pencil Fidelity down to 0.01 pt, with a logarithmic slider and key steps that fit the range by @ncic in https://github.com/storytold/vectorcraft/pull/4196
- Type on a path: joined scripts bend along the path so their joins stay connected by @ham9zah in https://github.com/storytold/vectorcraft/pull/4119
- Pen tablets: a pen's eraser end selects the Eraser on Windows by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4097
- Pen tablets: a pen's eraser end selects the Eraser in the web build by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4104
- Type: Highlight Substituted Fonts moves to Preferences › Type and applies to every document by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4099
- Web: shortcuts the browser also has run only in the app by @addibble in https://github.com/storytold/vectorcraft/pull/4106
- G12: General › Corner Radius is the Rounded Rectangle tool's radius (#4074) by @bflatastic in https://github.com/storytold/vectorcraft/pull/4212
- Artboards: canvas menu to lock and unlock artboards (#2531) by @vangel76 in https://github.com/storytold/vectorcraft/pull/2532
- Image Trace: Document Library traces with a color group from the Swatches panel by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/3975
- lint(engine): explicit imports in engine modules and tests (S2208) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/4200
- lint: explicit imports in remaining test and module files (S2208) by @dylanmtaylor in https://github.com/storytold/vectorcraft/pull/4203
- Revert [#4200] and [#4203]: their explicit imports don't compile by @bflatastic in https://github.com/storytold/vectorcraft/pull/4214
- Transform panel: the menu's Transform Object Only, Pattern Only, Both and Use Registration Point for Symbol act by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4146
- Metafile import: a file's bitmaps share one decoded-pixel budget (#3600) by @ashokram-si in https://github.com/storytold/vectorcraft/pull/4215
- Image Trace: a cut-edge blend past the rare-color budget traces as its kept color by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4216
- Finish recolor widget IDs and migration documentation after [#4113] by @skylartaylor in https://github.com/storytold/vectorcraft/pull/4173
- Tab overflow list scrolls to every open document (#4017) by @HEOJUNFO in https://github.com/storytold/vectorcraft/pull/4218
- Pencil: Edit Selected Paths redraws a selected compound path by @ncic in https://github.com/storytold/vectorcraft/pull/4220
- Fix [#3837]: unit fields read a decimal comma as a decimal point by @DCaioP in https://github.com/storytold/vectorcraft/pull/4213
- i18n: the message scan skips comments and reads EngineError::Disabled's reason by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4222
- Pencil: Live preview option in Pencil Tool Options by @ncic in https://github.com/storytold/vectorcraft/pull/4225
- G4: draw loaded-text cursor for threaded overflow by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4229
- Canvas: a mouse's moves between frames reach the tool too by @ncic in https://github.com/storytold/vectorcraft/pull/4227
- PDF tests: exports compared byte for byte are dated alike by @KaboomFox in https://github.com/storytold/vectorcraft/pull/4210
- Respect quotes and parentheses when splitting SVG CSS declarations by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4230
- Repeat: a selected Grid Repeat has on-canvas handles for its rows, columns and spacing (part of [#2691]) by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4166
- Artboards: the Artboards panel's Delete Empty Artboards deletes every artboard with no artwork in one undo step by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4142
- Import: Illustrator blends come in as live blends by @ham9zah in https://github.com/storytold/vectorcraft/pull/4127
- Import: live blend check follow-ups by @ham9zah in https://github.com/storytold/vectorcraft/pull/4234
- Brushes: Window › Brush Libraries opens brush libraries whose brushes click or drag into the document's Brushes by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4020
- macOS: declare the UI languages so the open and save panels are translated by @Atalantis in https://github.com/storytold/vectorcraft/pull/4235
- Fix [#3426]: the Pathfinder panel's Pathfinder Options… sets Precision, Remove Redundant Points and Divide and Outline Will Remove Unpainted Artwork by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4141
- Toolbar: double-clicking the Type on a Path tool opens Type on a Path Options by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4236
- Type: a double-click on a threaded port breaks the thread there by @Taha-Mahmoodi in https://github.com/storytold/vectorcraft/pull/4144
- G8: EPS import regression tests for operator type checks by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4238
- Render: brush art is made again when a symbol or pattern it shows is renamed by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4240
- Undo: a canceled undo scope drops the journal entries it cut from open undo groups by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4243
- View: all 25 saved views in the View menu; Edit Views… lists them by @ashokram-si in https://github.com/storytold/vectorcraft/pull/4247
- Windows fonts: list the fonts only GDI has loaded, such as Creative Cloud's Adobe Fonts (#1258) by @xbirks in https://github.com/storytold/vectorcraft/pull/4130
- Fix [#4128]: text.create and text.setStyle store a font style the family has by @DCaioP in https://github.com/storytold/vectorcraft/pull/4250
- Part of [#2384]: imported PDF text keeps its place beside a drawn no-break or thin space by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4251
- G1: Blob Brush drag shows scrub path length when Measurement Labels on by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4252
- Clippy: bool and range checks after egui 0.37 merge by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4253
- G11: Anchor Point tool Space moves anchor mid-drag by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4254
- Render: an image that can't be decoded shows as a crossed box and isn't decoded again by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4255
- Type: Convert to Text makes a list's bullets and numbers characters of its text by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4093
- Clippy fixes after upstream merge by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4258
- G4: mixed Small Caps and super/subscript in Character panel by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4260
- Render: the decoded-image cache sizes from installed memory on Windows, macOS and FreeBSD by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4261
- Tests: the --help tests wait for the app to exit on a loaded machine by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4266
- G10: skip kashida test when PDF text import is empty by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4264
- [#4122]: File → Open starts in the last opened file's folder by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4263
- Render: cropped shadow and blur rasters are kept across pans within a margin by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4265
- PDF: list markers export as selectable text by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4098
- Images: an image past the 2 GiB decode allowance draws at reduced size instead of a crossed box by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4269
- Placed documents: a ready bitmap redraws only its objects, and bitmaps on screen are not made again by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4270
- G11: Join tool connects endpoints near scrub line ends by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4272
- ci: require nextest 0.9.150 by @skylartaylor in https://github.com/storytold/vectorcraft/pull/4286
- refactor: shared module layout (craft-contrib#20) by @aiongg in https://github.com/storytold/vectorcraft/pull/4294
- fix(format): cap a compressed file's JSON at 256 MB on wasm32 (#3587) by @rahul05ranjan in https://github.com/storytold/vectorcraft/pull/4310
- fix(doc): decode the linked-image proxy within MAX_RASTER_ALLOC (#3597) by @rahul05ranjan in https://github.com/storytold/vectorcraft/pull/4308
- Accept whole-number floats and reject invalid counts for polygon, star and spiral by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4304
- Only treat % plus two hex digits as an escape in MCP resource URIs by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4288
- G4: Optical margin menu uses shared text flag by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4309
- Brushes: New Brush makes the brush from the art its options opened with by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4195
- G2: Scribble effect Settings presets by @nrq6993-a11y in https://github.com/storytold/vectorcraft/pull/4274
- Docs: cite the public thread help for outlining a threaded frame by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4275
- Windows: a maximized window stays clear of a taskbar on the top or a side by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4279
- Windows: a maximized window stops a pixel short of an auto-hidden taskbar by @dotCooCoo in https://github.com/storytold/vectorcraft/pull/4282
- Appearance: a mixed selection lists the attributes its objects share (#4174) by @ham9zah in https://github.com/storytold/vectorcraft/pull/4301
- Dropdowns: menus grow back after a search with no matches by @aiongg in https://github.com/storytold/vectorcraft/pull/4337
- ci(deps): split Dependabot cargo group into lockstep families by @skylartaylor in https://github.com/storytold/vectorcraft/pull/4223
- Make SVG export def ids linear instead of quadratic by @Silvertree2010 in https://github.com/storytold/vectorcraft/pull/4359
- M2.1: allow Pen tool and path.join to continue, close, and join compound paths (#3274, [#3276], [#3379], [#3380]) by @el-j in https://github.com/storytold/vectorcraft/pull/3283
- Windows installation policy: VectorCraft by @Jeremy8776 in https://github.com/storytold/vectorcraft/pull/4295
- ci: run the printps tests under their moved path by @aiongg in https://github.com/storytold/vectorcraft/pull/4305
New Contributors
- @zsoltmar made their first contribution in https://github.com/storytold/vectorcraft/pull/4117
- @youwishgames made their first contribution in https://github.com/storytold/vectorcraft/pull/4179
- @acosimati made their first contribution in https://github.com/storytold/vectorcraft/pull/4149
- @ncic made their first contribution in https://github.com/storytold/vectorcraft/pull/4196
- @ashokram-si made their first contribution in https://github.com/storytold/vectorcraft/pull/4215
- @DCaioP made their first contribution in https://github.com/storytold/vectorcraft/pull/4213
- @xbirks made their first contribution in https://github.com/storytold/vectorcraft/pull/4130
- @Jeremy8776 made their first contribution in https://github.com/storytold/vectorcraft/pull/4295
Full Changelog: https://github.com/storytold/vectorcraft/compare/v0.17.0...v0.18.0