FredApps and Claude Opus 5.5
654749c16e
Release 0.22.0
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
v0.22.0
2026-11-06 20:32:31 +01:00
FredApps and Claude Opus 5.5
96a21d1ea0
Merge main into release
...
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-06 20:32:31 +01:00
FredApps
36ef34dfdd
Merge pull request #5923 from storytold/house-rules
...
Copy the shared house rules into AGENTS.md
2026-11-06 14:58:56 +01:00
FredApps
aabefa3a20
Copy the shared house rules into AGENTS.md.
...
The blocks come from craft-contrib at dde09ea31e2e457f5b4653a6e76f7cdf55944bdf. CLAUDE.md imports AGENTS.md. The house-rules workflow checks the copy.
2026-11-06 11:50:02 +01:00
BFlat
f3d9970f69
Merge pull request #5916 from mockydevs/feat/effect-dialog-spinners
...
Drop Shadow and Outer Glow: spinner arrows step Opacity, the offsets, Blur and Darkness (#5367 , #5368 )
2026-11-06 18:27:56 +08:00
BFlat
278c8de572
Merge pull request #5915 from Silvertree2010/fix/5902-cross-document-paste-loses-a-sym
...
Keep a symbol's options when pasting it into another document
2026-11-06 18:27:41 +08:00
Don Omondi
f7135db6e9
Drop Shadow and Outer Glow: spinner arrows step Opacity, the offsets, Blur and Darkness ( #5367 , #5368 )
2026-11-06 17:09:24 +07:00
NetterSilver and Claude Opus 5.5
a76e157de7
Keep a symbol's options when pasting it into another document
...
Fixes #5902
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-06 17:08:54 +07:00
BFlat
e83bfa5fa1
Merge pull request #5914 from adikshan11/fix/library-file-name-collision
...
Keep the other library when two names share a file name
2026-11-06 18:04:04 +08:00
Adithya Shankaran
0864db9494
Keep the other library when two names share a file name
...
A library called COM¹ is saved as COM¹-, which can be the file of a library
really called COM¹-, and the numbered file one of them then gets can be asked
for by a third name. Saving one replaced the other. Each now gets a free file
name, and saving it again goes back to that file.
2026-11-06 16:52:05 +07:00
BFlat
85978cc2e4
Merge pull request #5913 from mockydevs/fix/svg-filter-mask-regions-5876-5875
...
SVG import: filter and mask regions clip what they declare (#5876 , #5875 )
2026-11-06 17:51:53 +08:00
Don Omondi
f08381df8d
SVG import: filter and mask regions clip what they declare ( #5876 , #5875 )
...
Squashed from #5913 onto main.
2026-11-06 16:39:04 +07:00
BFlat
9195f43901
Merge pull request #5910 from mockydevs/feat/stroke-weight-shortcuts
...
Stroke Weight Up and Down: Cmd/Ctrl+Alt+. and , step the selected strokes' weight (#5797 )
2026-11-06 17:31:49 +08:00
Don Omondi
74b5966bbd
Stroke Weight Up and Down: Cmd/Ctrl+Alt+. and , step the selected strokes' weight ( #5797 )
2026-11-06 16:19:37 +07:00
BFlat
f4b56474d4
Merge pull request #5909 from mockydevs/fix/svg-blur-linearrgb-5877
...
SVG import: Gaussian blurs keep color-interpolation-filters; Gaussian Blur can blur in linear light (#5877 )
2026-11-06 17:19:02 +08:00
Don Omondi
41ceaadc7e
SVG import: Gaussian blurs keep color-interpolation-filters; Gaussian Blur can blur in linear light ( #5877 )
2026-11-06 16:05:55 +07:00
BFlat
702f4100fd
Merge pull request #5908 from mockydevs/feat/pdf-export-url-links-5785
...
PDF and .ai export: objects' URLs become clickable links (#5785 )
2026-11-06 17:01:56 +08:00
Don Omondi
dbbe8a9298
PDF and .ai export: objects' URLs become clickable links ( #5785 )
...
Each visible object with a URL (Attributes panel) is written as a Link
annotation with a URI action over its bounds on the page, trimmed to its
clipping groups. Hidden objects, non-printing layers and printed sheets get
none; PDF/X files leave them out with a warning. URIs are percent-encoded
to 7-bit ASCII.
2026-11-06 15:48:02 +07:00
BFlat
a0d496251a
Merge pull request #5906 from dotCooCoo/fix/legacy-ai-colorized-images
...
Legacy .ai export: black-and-white colorized images save as image masks
2026-11-06 16:47:09 +08:00
BFlat
8dc5da6d1f
Merge pull request #5905 from mockydevs/fix/svg-gradient-linearrgb-5878
...
SVG import: gradients with color-interpolation="linearRGB" mix their stops in linear light (#5878 )
2026-11-06 16:46:52 +08:00
BFlat
54c975a085
Merge pull request #5903 from dotCooCoo/fix/ai-swatch-name-collisions
...
.ai import: a pattern or color named as another swatch keeps its swatch
2026-11-06 16:46:34 +08:00
BFlat
543762c599
Merge pull request #5904 from mockydevs/fix/blend-spine-review
...
Blend spine: moveAnchor refuses `with` alongside `handle`; spine built once per overlay and drag
2026-11-06 16:46:18 +08:00
dotCooCoo
d58d47312f
Legacy .ai export: black-and-white colorized images save as image masks
...
A colorized image whose pixels are all black or white (or clear) is
written as a 1-bit image mask (ImageMask 1): its color as the fill, a 0
bit for each black pixel and a 1 bit for each white or clear one. The
legacy reader opens it colorized again with the same clear pixels, so
the engine no longer flattens or omits it. Other colorized images are
written with their color in their pixels, over white, with the note
for transparent images.
2026-11-06 15:33:35 +07:00
Don Omondi
427ec0017c
SVG import: gradients with color-interpolation="linearRGB" mix their stops in linear light ( #5878 )
2026-11-06 15:33:02 +07:00
dotCooCoo
968bf1dc48
.ai import: a pattern or color named as another swatch keeps its swatch
...
Squashed from #5903 onto main.
2026-11-06 15:33:00 +07:00
Don Omondi
149eee2c70
Blend spine: moveAnchor refuses with alongside handle; spine built once per overlay and drag
...
object.blend.spine.moveAnchor now refuses any supplied `with` (even an
empty list) together with `handle`. Direct Selection builds the blend
spine once when drawing the picked points and once per drag preview,
instead of once per picked point. Part of #5285 .
2026-11-06 15:32:52 +07:00
BFlat
07c814597d
Merge pull request #5899 from dotCooCoo/fix/tab-stops-string-params
...
Reject invalid Tab Stop string parameters
2026-11-06 16:32:38 +08:00
BFlat
5788e043d9
Merge pull request #5828 from mockydevs/feat/f2-rename-5324
...
Layers: F2 renames the selected layer, group or object (#5324 )
2026-11-06 16:32:21 +08:00
dotCooCoo
8f81e142a5
Reject invalid Tab Stop string parameters
2026-11-06 15:20:17 +07:00
Don Omondi
00b09002cf
Layers: Rename opens the selected layer, group or object's name field ( #5324 )
2026-11-06 15:14:20 +07:00
BFlat
683ccdf8dc
Merge pull request #5897 from dotCooCoo/fix/restyled-empty-frame-keeps-style
...
Text: a restyled empty frame keeps its style before an unedited empty frame
2026-11-06 16:09:53 +08:00
dotCooCoo
f48ac15d08
Text: a restyled empty frame keeps its style before an unedited empty frame
...
When a frame's text ends with a paragraph break and the next frame is empty, restyling that empty frame was undone on reflow: an unedited empty frame after it gave the story's last paragraph its own style again. A restyled empty frame now keeps its style against unedited empty frames that follow it. Unedited empty frames before it, later frames with text and later restyled frames still give the paragraph their style, as before.
2026-11-06 14:56:28 +07:00
BFlat
5e7c331745
Merge pull request #5896 from adikshan11/fix/automation-superscript-device-names
...
Automation roots: refuse COM¹ to LPT³ as Windows device names
2026-11-06 15:46:42 +08:00
Adithya Shankaran
a455e72bf8
Automation roots: refuse COM¹ to LPT³ as Windows device names
2026-11-06 14:34:58 +07:00
BFlat
91efec6cec
Merge pull request #5895 from kler/swedish-ui-2026-11-06
...
i18n(sv): translate 1432 new strings, use the agreed terms in 2
2026-11-06 15:34:21 +08:00
BFlat
267ea8a852
Merge pull request #5894 from jayzed80/fix/eps-bitshift-min
...
fix(eps): bitshift by the most negative integer no longer overflows on negation
2026-11-06 15:34:06 +08:00
Patrik Lermon and Claude Opus 5.5
d98e8e44c7
i18n(sv): translate 1432 new strings, use the agreed terms in 2
...
Brings the Swedish catalog up to date with upstream main (4fc4c6576 ).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-11-06 14:21:42 +07:00
jayzed80
543b0de0b4
fix(eps): bitshift by the most negative integer no longer overflows on negation
...
Negating i64::MIN panicked in debug builds. Use saturating_neg, as Op::Neg already does.
2026-11-06 14:21:38 +07:00
BFlat
ab95d51b1f
Merge pull request #5893 from dotCooCoo/fix/empty-thread-frame-style
...
Text: empty later frames preserve an edited paragraph style
2026-11-06 15:21:27 +08:00
dotCooCoo
b0f383a1ab
Text: empty later frames preserve an edited paragraph style
2026-11-06 14:08:37 +07:00
BFlat
1444ce9e0f
Merge pull request #5892 from dotCooCoo/docs/ai-symbols-need-layers
...
Docs: .ai symbols are read with the file's layers
2026-11-06 15:04:23 +08:00
dotCooCoo
def29d0f97
Docs: .ai symbols are read with the file's layers
...
A .ai that comes in as its page or PDF part (editing data with no layers, layers that can't be read, or a page fallback) gets none of the editing data's symbols: layered_ai_from fills symbols only from build_from. The editing-data paragraph now says so.
2026-11-06 14:04:04 +07:00
BFlat
c7b717d801
Merge pull request #5888 from dotCooCoo/fix/flag-params-switch-or
...
Commands: true/false flags reject other values everywhere
2026-11-06 14:48:04 +08:00
BFlat
804c3b09d8
Merge pull request #5886 from dotCooCoo/fix/ai-no-layers-active-artboard
...
.ai import: a file whose editing data has no layers also opens on its active artboard
2026-11-06 14:47:49 +08:00
dotCooCoo
b5da39d7b5
Commands: true/false flags reject other values everywhere
...
The remaining flags under crates/engine/src/cmd that read a boolean with
get(..).and_then(Value::as_bool).unwrap_or(..) now go through switch_or,
so a value such as "false" or 1 is an error instead of the default.
Omitting a flag or giving null keeps the old behavior.
- effect.move: copy
- aligned on the appearance.*, stroke.set, transparency.set and effect.*
commands, checked before any early return
- transparency.viewOpacityMask: on
- view.printTiling: on
- plugin.install: replace and allowHeavy, checked for every plug-in
- edit.clear: guides, and path.deleteAnchors' read of it
- text.create and text.createInPath: vertical (already refused by
check_switches, so their behavior is unchanged)
2026-11-06 13:47:16 +07:00
dotCooCoo
31456a0cec
.ai import: a file whose editing data has no layers also opens on its active artboard
2026-11-06 13:47:16 +07:00
BFlat
4fc4c65763
Merge pull request #5885 from dotCooCoo/fix/ai-tab-stops-shared
...
.ai import: legacy type keeps one copy of tab stops its paragraphs share
2026-11-06 14:34:55 +08:00
dotCooCoo
aac21aa076
.ai import: legacy type keeps one copy of tab stops its paragraphs share
2026-11-06 13:22:36 +07:00
BFlat
08be8b2d7c
Merge pull request #5883 from dotCooCoo/fix/profile-stroke-crop
...
Rendering: open width-profile strokes outline only near the view
2026-11-06 13:56:09 +08:00
BFlat
8585fd28c2
Merge pull request #5884 from dotCooCoo/test/fitted-text-scale-changes-fit
...
Tests: a fitted text test changes its fit scale
2026-11-06 13:55:59 +08:00