From 70dd46f8cec9c9fd085a47b5f9dd13d10853b9f5 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Tue, 10 Mar 2026 16:08:55 +0100 Subject: [PATCH] :bug: Fix inner stroke intersection on paths --- .../get-file-inner-stroke-overlap-seam.json | 769 ++++++++++++++++++ .../ui/render-wasm-specs/shapes.spec.js | 28 + ...verlapping-shapes-with-inner-strokes-1.png | Bin 0 -> 50794 bytes render-wasm/src/render/surfaces.rs | 24 +- 4 files changed, 812 insertions(+), 9 deletions(-) create mode 100644 frontend/playwright/data/render-wasm/get-file-inner-stroke-overlap-seam.json create mode 100644 frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/No-white-seam-at-intersections-of-overlapping-shapes-with-inner-strokes-1.png diff --git a/frontend/playwright/data/render-wasm/get-file-inner-stroke-overlap-seam.json b/frontend/playwright/data/render-wasm/get-file-inner-stroke-overlap-seam.json new file mode 100644 index 0000000000..e499f027dc --- /dev/null +++ b/frontend/playwright/data/render-wasm/get-file-inner-stroke-overlap-seam.json @@ -0,0 +1,769 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "variants/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "render-wasm/v1", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:team-id": "~uaaa00001-0001-0001-8007-000000000003", + "~:permissions": { + "~:type": "~:membership", + "~:is-owner": true, + "~:is-admin": true, + "~:can-edit": true, + "~:can-read": true, + "~:is-logged": true + }, + "~:has-media-trimmed": false, + "~:comment-thread-seqn": 0, + "~:name": "inner-stroke-overlap-seam", + "~:revn": 1, + "~:modified-at": "~m1771855365377", + "~:vern": 0, + "~:id": "~uaaa00001-0001-0001-8007-000000000001", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content-v2", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content-v2", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0008-fix-library-colors-v4", + "0009-clean-library-colors", + "0009-add-partial-text-touched-flags", + "0010-fix-swap-slots-pointing-non-existent-shapes", + "0011-fix-invalid-text-touched-flags", + "0012-fix-position-data", + "0013-fix-component-path", + "0013-clear-invalid-strokes-and-fills", + "0014-fix-tokens-lib-duplicate-ids", + "0014-clear-components-nil-objects", + "0015-fix-text-attrs-blank-strings", + "0015-clean-shadow-color", + "0016-copy-fills-from-position-data-to-text-node" + ] + }, + "~:version": 67, + "~:project-id": "~uaaa00001-0001-0001-8007-000000000004", + "~:created-at": "~m1771591980210", + "~:backend": "legacy-db", + "~:data": { + "~:pages": [ + "~uaaa00001-0001-0001-8007-000000000002" + ], + "~:pages-index": { + "~uaaa00001-0001-0001-8007-000000000002": { + "~:objects": { + "~u00000000-0000-0000-0000-000000000000": { + "~#shape": { + "~:y": 0, + "~:hide-fill-on-export": false, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "Root Frame", + "~:width": 0.01, + "~:type": "~:frame", + "~:points": [ + {"~#point": {"~:x": 0, "~:y": 0}}, + {"~#point": {"~:x": 0.01, "~:y": 0}}, + {"~#point": {"~:x": 0.01, "~:y": 0.01}}, + {"~#point": {"~:x": 0, "~:y": 0.01}} + ], + "~:r2": 0, + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:r3": 0, + "~:r1": 0, + "~:id": "~u00000000-0000-0000-0000-000000000000", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 0, + "~:proportion": 1, + "~:r4": 0, + "~:selrect": {"~#rect": {"~:x": 0, "~:y": 0, "~:width": 0.01, "~:height": 0.01, "~:x1": 0, "~:y1": 0, "~:x2": 0.01, "~:y2": 0.01}}, + "~:fills": [{"~:fill-color": "#FFFFFF", "~:fill-opacity": 1}], + "~:flip-x": null, + "~:height": 0.01, + "~:flip-y": null, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b146992e4ab5"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146992e4ab5": { + "~#shape": { + "~:y": -237, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg", + "~:width": 86.215, + "~:type": "~:group", + "~:svg-attrs": {"~:width": "86.215", "~:height": "50"}, + "~:points": [ + {"~#point": {"~:x": 1079, "~:y": -237}}, + {"~#point": {"~:x": 1165.215, "~:y": -237}}, + {"~#point": {"~:x": 1165.215, "~:y": -187}}, + {"~#point": {"~:x": 1079, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146992e4ab5", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1079, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1079, "~:y": -237, "~:width": 86.215, "~:height": 50, "~:x1": 1079, "~:y1": -237, "~:x2": 1165.215, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": false, + "~:height": 50, + "~:flip-y": false, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b146992f0a36"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146992f0a36": { + "~#shape": { + "~:y": -237, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg-g", + "~:width": 86.215, + "~:type": "~:group", + "~:svg-attrs": {}, + "~:points": [ + {"~#point": {"~:x": 1079, "~:y": -237}}, + {"~#point": {"~:x": 1165.215, "~:y": -237}}, + {"~#point": {"~:x": 1165.215, "~:y": -187}}, + {"~#point": {"~:x": 1079, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992e4ab5", + "~:svg-viewbox": {"~#rect": {"~:x": -0.000034146222333220067, "~:y": -0.000003814697265625, "~:width": 86.21503414622225, "~:height": 50.000003814697266, "~:x1": 0, "~:y1": 0, "~:x2": 86.215, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1079, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1079, "~:y": -237, "~:width": 86.215, "~:height": 50, "~:x1": 1079, "~:y1": -237, "~:x2": 1165.215, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": 50, + "~:flip-y": null, + "~:shapes": [ + "~u8f89d4e8-0efd-804d-8007-b146992fbb39", + "~u8f89d4e8-0efd-804d-8007-b146992fde2e", + "~u8f89d4e8-0efd-804d-8007-b14699303fd3", + "~u8f89d4e8-0efd-804d-8007-b1469930583b", + "~u8f89d4e8-0efd-804d-8007-b146993083e1", + "~u8f89d4e8-0efd-804d-8007-b1469930dc39", + "~u8f89d4e8-0efd-804d-8007-b146993141e4", + "~u8f89d4e8-0efd-804d-8007-b146993141e5", + "~u8f89d4e8-0efd-804d-8007-b1469931a9d0", + "~u8f89d4e8-0efd-804d-8007-b1469931a9d1" + ] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146992fbb39": { + "~#shape": { + "~:y": null, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAADGGIhEq6p9wxpukESrqn3DcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:className": "fills"}, + "~:points": [ + {"~#point": {"~:x": 1112.4849232616168, "~:y": -237.00000381469727}}, + {"~#point": {"~:x": 1131.7299204883832, "~:y": -237.00000381469727}}, + {"~#point": {"~:x": 1131.7299204883832, "~:y": -187}}, + {"~#point": {"~:x": 1112.4849232616168, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146992fbb39", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 33.484923261616885, "~:y": -0.000003814697265625, "~:width": 19.24499722676625, "~:height": 50.000003814697266, "~:x1": 33.484923261616885, "~:y1": -0.000003814697265625, "~:x2": 52.72992048838314, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1112.4849232616168, "~:y": -237.00000381469727, "~:width": 19.24499722676625, "~:height": 50.000003814697266, "~:x1": 1112.4849232616168, "~:y1": -237.00000381469727, "~:x2": 1131.729920488383, "~:y2": -187}}, + "~:fills": [{"~:fill-color": "#70d19d", "~:fill-opacity": 1}], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b146992fde2e": { + "~#shape": { + "~:y": -237, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg-g", + "~:width": 19.244997226766372, + "~:type": "~:group", + "~:svg-attrs": {"~:className": "strokes"}, + "~:points": [ + {"~#point": {"~:x": 1112.4849232616168, "~:y": -237.00000381469727}}, + {"~#point": {"~:x": 1131.7299204883832, "~:y": -237.00000381469727}}, + {"~#point": {"~:x": 1131.7299204883832, "~:y": -187}}, + {"~#point": {"~:x": 1112.4849232616168, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146992fde2e", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 33.484923261616814, "~:y": -0.000003814697265625, "~:width": 19.244997226766372, "~:height": 50.000003814697266, "~:x1": 0, "~:y1": 0, "~:x2": 86.215, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1112.4849232616168, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1112.4849232616168, "~:y": -237.00000381469727, "~:width": 19.244997226766372, "~:height": 50.000003814697266, "~:x1": 1112.4849232616168, "~:y1": -237.00000381469727, "~:x2": 1131.7299204883832, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": 50, + "~:flip-y": null, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b146992fde2f"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146992fde2f": { + "~#shape": { + "~:y": null, + "~:stroke-cap-start": "~:round", + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAADGGIhEq6p9wxpukESrqn3DcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:fill": "none", "~:style": {"~:fill": "none"}, "~:strokeLinecap": "round", "~:strokeMiterlimit": "10", "~:className": "stroke-shape"}, + "~:points": [ + {"~#point": {"~:x": 1112.4849232616168, "~:y": -237.00000381469727}}, + {"~#point": {"~:x": 1131.7299204883832, "~:y": -237.00000381469727}}, + {"~#point": {"~:x": 1131.7299204883832, "~:y": -187}}, + {"~#point": {"~:x": 1112.4849232616168, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:stroke-cap-end": "~:round", + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:stroke-linecap": "~:round", + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146992fde2f", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992fde2e", + "~:svg-viewbox": {"~#rect": {"~:x": 33.484923261616885, "~:y": -0.000003814697265625, "~:width": 19.24499722676625, "~:height": 50.000003814697266, "~:x1": 33.484923261616885, "~:y1": -0.000003814697265625, "~:x2": 52.72992048838314, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1112.4849232616168, "~:y": -237.00000381469727, "~:width": 19.24499722676625, "~:height": 50.000003814697266, "~:x1": 1112.4849232616168, "~:y1": -237.00000381469727, "~:x2": 1131.729920488383, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b14699303fd3": { + "~#shape": { + "~:y": null, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAABBBpFEthF7w+aGlUSc+ELDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:className": "fills"}, + "~:points": [ + {"~#point": {"~:x": 1122.107421875, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1165.2148778962223, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1165.2148778962223, "~:y": -187}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b14699303fd3", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 43.107421875, "~:y": 19.66923798963697, "~:width": 43.107456021222276, "~:height": 30.33076201036303, "~:x1": 43.107421875, "~:y1": 19.66923798963697, "~:x2": 86.21487789622228, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1122.107421875, "~:y": -217.33076201036303, "~:width": 43.107456021222276, "~:height": 30.33076201036303, "~:x1": 1122.107421875, "~:y1": -217.33076201036303, "~:x2": 1165.2148778962223, "~:y2": -187}}, + "~:fills": [{"~:fill-color": "#3c49ff", "~:fill-opacity": 1}], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b1469930583b": { + "~#shape": { + "~:y": -217.33076201036303, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg-g", + "~:width": 43.10745602122233, + "~:type": "~:group", + "~:svg-attrs": {"~:className": "strokes"}, + "~:points": [ + {"~#point": {"~:x": 1122.107421875, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1165.2148778962223, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1165.2148778962223, "~:y": -187}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b1469930583b", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 43.107421875, "~:y": 19.66923798963697, "~:width": 43.10745602122233, "~:height": 30.33076201036303, "~:x1": 0, "~:y1": 0, "~:x2": 86.215, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1122.107421875, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1122.107421875, "~:y": -217.33076201036303, "~:width": 43.10745602122233, "~:height": 30.33076201036303, "~:x1": 1122.107421875, "~:y1": -217.33076201036303, "~:x2": 1165.2148778962223, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": 30.33076201036303, + "~:flip-y": null, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b146993083e0"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146993083e0": { + "~#shape": { + "~:y": null, + "~:stroke-cap-start": "~:round", + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAABBBpFEthF7w+aGlUSc+ELDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:fill": "none", "~:style": {"~:fill": "none"}, "~:strokeLinecap": "round", "~:strokeMiterlimit": "10", "~:className": "stroke-shape"}, + "~:points": [ + {"~#point": {"~:x": 1122.107421875, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1165.2148778962223, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1165.2148778962223, "~:y": -187}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:stroke-cap-end": "~:round", + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:stroke-linecap": "~:round", + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146993083e0", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b1469930583b", + "~:svg-viewbox": {"~#rect": {"~:x": 43.107421875, "~:y": 19.66923798963697, "~:width": 43.107456021222276, "~:height": 30.33076201036303, "~:x1": 43.107421875, "~:y1": 19.66923798963697, "~:x2": 86.21487789622228, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1122.107421875, "~:y": -217.33076201036303, "~:width": 43.107456021222276, "~:height": 30.33076201036303, "~:x1": 1122.107421875, "~:y1": -217.33076201036303, "~:x2": 1165.2148778962223, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b146993083e1": { + "~#shape": { + "~:y": null, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAAD6/4JEnPhCw5+Ah0S2EXvDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:className": "fills"}, + "~:points": [ + {"~#point": {"~:x": 1078.9999658537777, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}}, + {"~#point": {"~:x": 1078.9999658537777, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146993083e1", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": -0.00003414622229014341, "~:y": 19.669237989636976, "~:width": 43.10745602122229, "~:height": 30.330762010363024, "~:x1": -0.00003414622229014341, "~:y1": 19.669237989636976, "~:x2": 43.107421875, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1078.9999658537777, "~:y": -217.33076201036303, "~:width": 43.10745602122229, "~:height": 30.330762010363024, "~:x1": 1078.9999658537777, "~:y1": -217.33076201036303, "~:x2": 1122.107421875, "~:y2": -187}}, + "~:fills": [{"~:fill-color": "#3c49ff", "~:fill-opacity": 1}], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b1469930dc39": { + "~#shape": { + "~:y": -217.33076201036303, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg-g", + "~:width": 43.10745602122233, + "~:type": "~:group", + "~:svg-attrs": {"~:className": "strokes"}, + "~:points": [ + {"~#point": {"~:x": 1078.9999658537777, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}}, + {"~#point": {"~:x": 1078.9999658537777, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b1469930dc39", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": -0.000034146222333220067, "~:y": 19.66923798963697, "~:width": 43.10745602122233, "~:height": 30.33076201036303, "~:x1": 0, "~:y1": 0, "~:x2": 86.215, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1079, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1078.9999658537777, "~:y": -217.33076201036303, "~:width": 43.10745602122233, "~:height": 30.33076201036303, "~:x1": 1078.9999658537777, "~:y1": -217.33076201036303, "~:x2": 1122.107421875, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": 30.33076201036303, + "~:flip-y": null, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b146993110ec"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146993110ec": { + "~#shape": { + "~:y": null, + "~:stroke-cap-start": "~:round", + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAAD6/4JEnPhCw5+Ah0S2EXvDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:fill": "none", "~:style": {"~:fill": "none"}, "~:strokeLinecap": "round", "~:strokeMiterlimit": "10", "~:className": "stroke-shape"}, + "~:points": [ + {"~#point": {"~:x": 1078.9999658537777, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -217.33076201036303}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}}, + {"~#point": {"~:x": 1078.9999658537777, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:stroke-cap-end": "~:round", + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:stroke-linecap": "~:round", + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146993110ec", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b1469930dc39", + "~:svg-viewbox": {"~#rect": {"~:x": -0.00003414622229014341, "~:y": 19.669237989636976, "~:width": 43.10745602122229, "~:height": 30.330762010363024, "~:x1": -0.00003414622229014341, "~:y1": 19.669237989636976, "~:x2": 43.107421875, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1078.9999658537777, "~:y": -217.33076201036303, "~:width": 43.10745602122229, "~:height": 30.330762010363024, "~:x1": 1078.9999658537777, "~:y1": -217.33076201036303, "~:x2": 1122.107421875, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b146993141e4": { + "~#shape": { + "~:y": null, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAAAgmoxEQb6Cw03qk0RQhmXDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:className": "fills"}, + "~:points": [ + {"~#point": {"~:x": 1122.107421875, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1149.9259006903171, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1149.9259006903171, "~:y": -187}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146993141e4", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 43.107421875, "~:y": 5.330620727377042, "~:width": 27.818478815317206, "~:height": 44.66937927262296, "~:x1": 43.107421875, "~:y1": 5.330620727377042, "~:x2": 70.9259006903172, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1122.107421875, "~:y": -231.66937927262296, "~:width": 27.818478815317206, "~:height": 44.66937927262296, "~:x1": 1122.107421875, "~:y1": -231.66937927262296, "~:x2": 1149.9259006903171, "~:y2": -187}}, + "~:fills": [{"~:fill-color": "#434cc2", "~:fill-opacity": 1}], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b146993141e5": { + "~#shape": { + "~:y": -231.66937927262296, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg-g", + "~:width": 27.81847881531712, + "~:type": "~:group", + "~:svg-attrs": {"~:className": "strokes"}, + "~:points": [ + {"~#point": {"~:x": 1122.107421875, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1149.9259006903171, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1149.9259006903171, "~:y": -187}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146993141e5", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 43.107421875, "~:y": 5.330620727377038, "~:width": 27.81847881531712, "~:height": 44.66937927262296, "~:x1": 0, "~:y1": 0, "~:x2": 86.215, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1122.107421875, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1122.107421875, "~:y": -231.66937927262296, "~:width": 27.81847881531712, "~:height": 44.66937927262296, "~:x1": 1122.107421875, "~:y1": -231.66937927262296, "~:x2": 1149.9259006903171, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": 44.66937927262296, + "~:flip-y": null, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b146993141e6"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b146993141e6": { + "~#shape": { + "~:y": null, + "~:stroke-cap-start": "~:round", + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAAAgmoxEQb6Cw03qk0RQhmXDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:fill": "none", "~:style": {"~:fill": "none"}, "~:strokeLinecap": "round", "~:strokeMiterlimit": "10", "~:className": "stroke-shape"}, + "~:points": [ + {"~#point": {"~:x": 1122.107421875, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1149.9259006903171, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1149.9259006903171, "~:y": -187}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:stroke-cap-end": "~:round", + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:stroke-linecap": "~:round", + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b146993141e6", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146993141e5", + "~:svg-viewbox": {"~#rect": {"~:x": 43.107421875, "~:y": 5.330620727377042, "~:width": 27.818478815317206, "~:height": 44.66937927262296, "~:x1": 43.107421875, "~:y1": 5.330620727377042, "~:x2": 70.9259006903172, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1122.107421875, "~:y": -231.66937927262296, "~:width": 27.818478815317206, "~:height": 44.66937927262296, "~:x1": 1122.107421875, "~:y1": -231.66937927262296, "~:x2": 1149.9259006903171, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b1469931a9d0": { + "~#shape": { + "~:y": null, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAACTnIREUIZlw8Dsi0RBvoLDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:className": "fills"}, + "~:points": [ + {"~#point": {"~:x": 1094.2889430596829, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}}, + {"~#point": {"~:x": 1094.2889430596829, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b1469931a9d0", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 15.28894305968281, "~:y": 5.330620727377026, "~:width": 27.818478815317192, "~:height": 44.669379272622976, "~:x1": 15.28894305968281, "~:y1": 5.330620727377026, "~:x2": 43.107421875, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1094.2889430596829, "~:y": -231.66937927262296, "~:width": 27.818478815317192, "~:height": 44.669379272622976, "~:x1": 1094.2889430596829, "~:y1": -231.66937927262296, "~:x2": 1122.107421875, "~:y2": -187}}, + "~:fills": [{"~:fill-color": "#434cc2", "~:fill-opacity": 1}], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + }, + "~u8f89d4e8-0efd-804d-8007-b1469931a9d1": { + "~#shape": { + "~:y": -231.66937927262296, + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:name": "svg-g", + "~:width": 27.81847881531712, + "~:type": "~:group", + "~:svg-attrs": {"~:className": "strokes"}, + "~:points": [ + {"~#point": {"~:x": 1094.2889430596829, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}}, + {"~#point": {"~:x": 1094.2889430596829, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b1469931a9d1", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b146992f0a36", + "~:svg-viewbox": {"~#rect": {"~:x": 15.288943059682879, "~:y": 5.330620727377038, "~:width": 27.81847881531712, "~:height": 44.66937927262296, "~:x1": 0, "~:y1": 0, "~:x2": 86.215, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1094.2889430596829, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1094.2889430596829, "~:y": -231.66937927262296, "~:width": 27.81847881531712, "~:height": 44.66937927262296, "~:x1": 1094.2889430596829, "~:y1": -231.66937927262296, "~:x2": 1122.107421875, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": 44.66937927262296, + "~:flip-y": null, + "~:shapes": ["~u8f89d4e8-0efd-804d-8007-b1469931e08c"] + } + }, + "~u8f89d4e8-0efd-804d-8007-b1469931e08c": { + "~#shape": { + "~:y": null, + "~:stroke-cap-start": "~:round", + "~:transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:rotation": 0, + "~:content": {"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAABwQ4xEAAA7wwMAAACTnIREUIZlw8Dsi0RBvoLDcEOMRAAAO8M="}, + "~:name": "svg-path", + "~:width": null, + "~:type": "~:path", + "~:svg-attrs": {"~:fill": "none", "~:style": {"~:fill": "none"}, "~:strokeLinecap": "round", "~:strokeMiterlimit": "10", "~:className": "stroke-shape"}, + "~:points": [ + {"~#point": {"~:x": 1094.2889430596829, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -231.66937927262296}}, + {"~#point": {"~:x": 1122.107421875, "~:y": -187}}, + {"~#point": {"~:x": 1094.2889430596829, "~:y": -187}} + ], + "~:proportion-lock": false, + "~:stroke-cap-end": "~:round", + "~:transform-inverse": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:stroke-linecap": "~:round", + "~:svg-transform": {"~#matrix": {"~:a": 1, "~:b": 0, "~:c": 0, "~:d": 1, "~:e": 0, "~:f": 0}}, + "~:id": "~u8f89d4e8-0efd-804d-8007-b1469931e08c", + "~:parent-id": "~u8f89d4e8-0efd-804d-8007-b1469931a9d1", + "~:svg-viewbox": {"~#rect": {"~:x": 15.28894305968281, "~:y": 5.330620727377026, "~:width": 27.818478815317192, "~:height": 44.669379272622976, "~:x1": 15.28894305968281, "~:y1": 5.330620727377026, "~:x2": 43.107421875, "~:y2": 50}}, + "~:svg-defs": {}, + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [{"~:stroke-alignment": "~:inner", "~:stroke-style": "~:solid", "~:stroke-color": "#000000", "~:stroke-opacity": 1, "~:stroke-width": 1}], + "~:x": null, + "~:proportion": 1, + "~:selrect": {"~#rect": {"~:x": 1094.2889430596829, "~:y": -231.66937927262296, "~:width": 27.818478815317192, "~:height": 44.669379272622976, "~:x1": 1094.2889430596829, "~:y1": -231.66937927262296, "~:x2": 1122.107421875, "~:y2": -187}}, + "~:fills": [], + "~:flip-x": null, + "~:height": null, + "~:flip-y": null + } + } + }, + "~:id": "~uaaa00001-0001-0001-8007-000000000002", + "~:name": "Page 1" + } + }, + "~:id": "~uaaa00001-0001-0001-8007-000000000001", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js index f61afbfda4..742da692b1 100644 --- a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js @@ -457,6 +457,34 @@ test("Check inner stroke artifacts", async ({ }); }); +test("No white seam at intersections of overlapping shapes with inner strokes", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("render-wasm/get-file-inner-stroke-overlap-seam.json"); + + await workspace.goToWorkspace({ + id: "aaa00001-0001-0001-8007-000000000001", + pageId: "aaa00001-0001-0001-8007-000000000002", + }); + await workspace.waitForFirstRender(); + + await workspace.viewport.click(); + await page.keyboard.press("ControlOrMeta+A"); + const previousRenderCount = await workspace.getRenderCount(); + await page.keyboard.press("f"); + await workspace.waitForNextRender(previousRenderCount); + + await workspace.hideUI(); + + // Stricter comparison: white seam artifacts are very subtle + await expect(workspace.canvas).toHaveScreenshot({ + maxDiffPixelRatio: 0, + threshold: 0.1, + }); +}); + test("BUG 13551 - Blurs affecting other elements", async ({ page, }) => { diff --git a/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/No-white-seam-at-intersections-of-overlapping-shapes-with-inner-strokes-1.png b/frontend/playwright/ui/render-wasm-specs/shapes.spec.js-snapshots/No-white-seam-at-intersections-of-overlapping-shapes-with-inner-strokes-1.png new file mode 100644 index 0000000000000000000000000000000000000000..171b678f26040414ef3389fb42a2120ce6dbb5a5 GIT binary patch literal 50794 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 literal 0 HcmV?d00001 diff --git a/render-wasm/src/render/surfaces.rs b/render-wasm/src/render/surfaces.rs index 5bb227ab04..11239c2007 100644 --- a/render-wasm/src/render/surfaces.rs +++ b/render-wasm/src/render/surfaces.rs @@ -427,17 +427,23 @@ impl Surfaces { let mut stroke_paint = paint.clone(); stroke_paint.set_stroke_width(s * 2.0); canvas.draw_path(&path, &stroke_paint); + } else if let Some(eps) = inset.filter(|&e| e > 0.0) { + // Wrap fill + clear in a save_layer so the BlendMode::Clear + // only erases the current shape's fill, not other shapes + // already drawn on this surface (avoids white seams at + // intersections of shapes with inner strokes). + let layer_rec = skia::canvas::SaveLayerRec::default(); + canvas.save_layer(&layer_rec); + canvas.draw_path(&path, paint); + let mut clear_paint = skia::Paint::default(); + clear_paint.set_style(skia::PaintStyle::Stroke); + clear_paint.set_stroke_width(eps * 2.0); + clear_paint.set_blend_mode(skia::BlendMode::Clear); + clear_paint.set_anti_alias(paint.is_anti_alias()); + canvas.draw_path(&path, &clear_paint); + canvas.restore(); } else { canvas.draw_path(&path, paint); - // Inset: avoid seam with inner strokes by clearing a thin border from the fill - if let Some(eps) = inset.filter(|&e| e > 0.0) { - let mut clear_paint = skia::Paint::default(); - clear_paint.set_style(skia::PaintStyle::Stroke); - clear_paint.set_stroke_width(eps * 2.0); - clear_paint.set_blend_mode(skia::BlendMode::Clear); - clear_paint.set_anti_alias(paint.is_anti_alias()); - canvas.draw_path(&path, &clear_paint); - } } } }