Are more visual regression tests for wasm (#6702)

This commit is contained in:
Belén Albeza 2025-06-17 12:39:38 +02:00 committed by GitHub
parent 8c6a80829f
commit b92e108205
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
20 changed files with 6935 additions and 10 deletions

View file

@ -64,7 +64,7 @@ export default defineConfig({
snapshotPathTemplate: "{testDir}/{testFilePath}-snapshots/{arg}.png",
expect: {
toHaveScreenshot: {
maxDiffPixelRatio: 0.005,
maxDiffPixelRatio: 0.001,
},
},
},

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,633 @@
{
"~: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": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~: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": "Multiple fills",
"~:revn": 19,
"~:modified-at": "~m1749564220299",
"~:vern": 0,
"~:id": "~uc0939f58-37bc-805d-8006-51cd3a51c255",
"~: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",
"0002-clean-shape-interactions",
"0003-fix-root-shape",
"0003-convert-path-content",
"0004-add-partial-text-touched-flags",
"0005-deprecate-image-type",
"0006-fix-old-texts-fills",
"0004-clean-shadow-and-colors",
"0007-clear-invalid-strokes-and-fills-v2",
"0008-fix-library-colors-opacity",
"0009-add-partial-text-touched-flags"
]
},
"~:version": 67,
"~:project-id": "~u53a7ff09-2228-81d3-8006-4b5ea964593b",
"~:created-at": "~m1749564032332",
"~:data": {
"~:pages": [
"~uc0939f58-37bc-805d-8006-51cd3a51c256"
],
"~:pages-index": {
"~uc0939f58-37bc-805d-8006-51cd3a51c256": {
"~:objects": {
"~u00000000-0000-0000-0000-000000000000": {
"~#shape": {
"~:y": 0,
"~:hide-fill-on-export": false,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:name": "Root Frame",
"~:width": 0.01,
"~:type": "~:frame",
"~:points": [
{
"~#point": {
"~:x": 0.0,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.01
}
},
{
"~#point": {
"~:x": 0.0,
"~:y": 0.01
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.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.0,
"~: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": [
"~ub688a894-3697-80d3-8006-51cd477981bc",
"~ub688a894-3697-80d3-8006-51cd5504e381",
"~ub688a894-3697-80d3-8006-51cd5de7c5f3",
"~ub688a894-3697-80d3-8006-51cd67bc1de9"
]
}
},
"~ub688a894-3697-80d3-8006-51cd477981bc": {
"~#shape": {
"~:y": 297,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:hide-in-viewer": false,
"~:name": "Rectangle",
"~:width": 153,
"~:type": "~:rect",
"~:points": [
{
"~#point": {
"~:x": 239,
"~:y": 297
}
},
{
"~#point": {
"~:x": 392,
"~:y": 297
}
},
{
"~#point": {
"~:x": 392,
"~:y": 441
}
},
{
"~#point": {
"~:x": 239,
"~:y": 441
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:r3": 0,
"~:r1": 0,
"~:id": "~ub688a894-3697-80d3-8006-51cd477981bc",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [],
"~:x": 239,
"~:proportion": 1,
"~:r4": 0,
"~:selrect": {
"~#rect": {
"~:x": 239,
"~:y": 297,
"~:width": 153,
"~:height": 144,
"~:x1": 239,
"~:y1": 297,
"~:x2": 392,
"~:y2": 441
}
},
"~:fills": [
{
"~:fill-color": "#ff0000",
"~:fill-opacity": 1
},
{
"~:fill-color": "#003fff",
"~:fill-opacity": 1
}
],
"~:flip-x": null,
"~:height": 144,
"~:flip-y": null
}
},
"~ub688a894-3697-80d3-8006-51cd5504e381": {
"~#shape": {
"~:y": 297,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:hide-in-viewer": false,
"~:name": "Rectangle",
"~:width": 153,
"~:type": "~:rect",
"~:points": [
{
"~#point": {
"~:x": 442,
"~:y": 297
}
},
{
"~#point": {
"~:x": 595,
"~:y": 297
}
},
{
"~#point": {
"~:x": 595,
"~:y": 441
}
},
{
"~#point": {
"~:x": 442,
"~:y": 441
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:r3": 0,
"~:r1": 0,
"~:id": "~ub688a894-3697-80d3-8006-51cd5504e381",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [],
"~:x": 442,
"~:proportion": 1,
"~:r4": 0,
"~:selrect": {
"~#rect": {
"~:x": 442,
"~:y": 297,
"~:width": 153,
"~:height": 144,
"~:x1": 442,
"~:y1": 297,
"~:x2": 595,
"~:y2": 441
}
},
"~:fills": [
{
"~:fill-color": "#ff0000",
"~:fill-opacity": 0.5
},
{
"~:fill-color": "#003fff",
"~:fill-opacity": 1
}
],
"~:flip-x": null,
"~:height": 144,
"~:flip-y": null
}
},
"~ub688a894-3697-80d3-8006-51cd5de7c5f3": {
"~#shape": {
"~:y": 476.99998474121094,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:hide-in-viewer": false,
"~:name": "Rectangle",
"~:width": 153,
"~:type": "~:rect",
"~:points": [
{
"~#point": {
"~:x": 239,
"~:y": 476.99998474121094
}
},
{
"~#point": {
"~:x": 392,
"~:y": 476.99998474121094
}
},
{
"~#point": {
"~:x": 392,
"~:y": 620.9999847412109
}
},
{
"~#point": {
"~:x": 239,
"~:y": 620.9999847412109
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:r3": 0,
"~:r1": 0,
"~:id": "~ub688a894-3697-80d3-8006-51cd5de7c5f3",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [],
"~:x": 239,
"~:proportion": 1,
"~:r4": 0,
"~:selrect": {
"~#rect": {
"~:x": 239,
"~:y": 476.99998474121094,
"~:width": 153,
"~:height": 144,
"~:x1": 239,
"~:y1": 476.99998474121094,
"~:x2": 392,
"~:y2": 620.9999847412109
}
},
"~:fills": [
{
"~:fill-color": "#ff0000",
"~:fill-opacity": 0.5
},
{
"~:fill-color-gradient": {
"~:stops": [
{
"~:color": "#003fff",
"~:offset": 0,
"~:opacity": 1
},
{
"~:color": "#003fff",
"~:offset": 1,
"~:opacity": 0
}
],
"~:width": 1,
"~:type": "~:linear",
"~:start-x": 0.5,
"~:end-y": 1,
"~:end-x": 0.5,
"~:start-y": 0
}
}
],
"~:flip-x": null,
"~:height": 144,
"~:flip-y": null
}
},
"~ub688a894-3697-80d3-8006-51cd67bc1de9": {
"~#shape": {
"~:y": 476.99998474121094,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:hide-in-viewer": false,
"~:name": "Rectangle",
"~:width": 153,
"~:type": "~:rect",
"~:points": [
{
"~#point": {
"~:x": 442,
"~:y": 476.99998474121094
}
},
{
"~#point": {
"~:x": 595,
"~:y": 476.99998474121094
}
},
{
"~#point": {
"~:x": 595,
"~:y": 620.9999847412109
}
},
{
"~#point": {
"~:x": 442,
"~:y": 620.9999847412109
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:r3": 0,
"~:r1": 0,
"~:id": "~ub688a894-3697-80d3-8006-51cd67bc1de9",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [],
"~:x": 442,
"~:proportion": 1,
"~:r4": 0,
"~:selrect": {
"~#rect": {
"~:x": 442,
"~:y": 476.99998474121094,
"~:width": 153,
"~:height": 144,
"~:x1": 442,
"~:y1": 476.99998474121094,
"~:x2": 595,
"~:y2": 620.9999847412109
}
},
"~:fills": [
{
"~:fill-color-gradient": {
"~:stops": [
{
"~:color": "#010512",
"~:offset": 0,
"~:opacity": 0
},
{
"~:color": "#010512",
"~:offset": 1,
"~:opacity": 1
}
],
"~:width": 1,
"~:type": "~:radial",
"~:start-x": 0.5,
"~:end-y": 1,
"~:end-x": 0.5,
"~:start-y": 0.5
},
"~:fill-opacity": 0.5
},
{
"~:fill-image": {
"~:mtype": "image/jpeg",
"~:name": "Aptenodytes_forsteri_-Snow_Hill_Island,_Antarctica_-adults_and_juvenile-8.jpg",
"~:keep-aspect-ratio": true,
"~:width": 872,
"~:id": "~uc0939f58-37bc-805d-8006-51cda84a405a",
"~:height": 1400
},
"~:fill-opacity": 1
}
],
"~:flip-x": null,
"~:height": 144,
"~:flip-y": null
}
}
},
"~:id": "~uc0939f58-37bc-805d-8006-51cd3a51c256",
"~:name": "Page 1"
}
},
"~:id": "~uc0939f58-37bc-805d-8006-51cd3a51c255",
"~:options": {
"~:components-v2": true,
"~:base-font-size": "16px"
}
}
}

View file

@ -0,0 +1,538 @@
{
"~: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": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~: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": "Multiple strokes",
"~:revn": 16,
"~:modified-at": "~m1749564011553",
"~:vern": 0,
"~:id": "~uc0939f58-37bc-805d-8006-51cc78297208",
"~: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",
"0002-clean-shape-interactions",
"0003-fix-root-shape",
"0003-convert-path-content",
"0004-add-partial-text-touched-flags",
"0005-deprecate-image-type",
"0006-fix-old-texts-fills",
"0004-clean-shadow-and-colors",
"0007-clear-invalid-strokes-and-fills-v2",
"0008-fix-library-colors-opacity",
"0009-add-partial-text-touched-flags"
]
},
"~:version": 67,
"~:project-id": "~u53a7ff09-2228-81d3-8006-4b5ea964593b",
"~:created-at": "~m1749563833517",
"~:data": {
"~:pages": [
"~uc0939f58-37bc-805d-8006-51cc78297209"
],
"~:pages-index": {
"~uc0939f58-37bc-805d-8006-51cc78297209": {
"~:objects": {
"~u00000000-0000-0000-0000-000000000000": {
"~#shape": {
"~:y": 0,
"~:hide-fill-on-export": false,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:name": "Root Frame",
"~:width": 0.01,
"~:type": "~:frame",
"~:points": [
{
"~#point": {
"~:x": 0.0,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.01
}
},
{
"~#point": {
"~:x": 0.0,
"~:y": 0.01
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.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.0,
"~: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": [
"~ub688a894-3697-80d3-8006-51cc8a55c2fd",
"~ub688a894-3697-80d3-8006-51ccce062cb3",
"~ub688a894-3697-80d3-8006-51ccfa2e6eeb"
]
}
},
"~ub688a894-3697-80d3-8006-51cc8a55c2fd": {
"~#shape": {
"~:y": 334,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:hide-in-viewer": false,
"~:name": "Rectangle",
"~:width": 147,
"~:type": "~:rect",
"~:points": [
{
"~#point": {
"~:x": 199,
"~:y": 334
}
},
{
"~#point": {
"~:x": 346,
"~:y": 334
}
},
{
"~#point": {
"~:x": 346,
"~:y": 464
}
},
{
"~#point": {
"~:x": 199,
"~:y": 464
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:r3": 0,
"~:r1": 0,
"~:id": "~ub688a894-3697-80d3-8006-51cc8a55c2fd",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#0000ff",
"~:stroke-opacity": 0.5,
"~:stroke-alignment": "~:outer",
"~:stroke-width": 20
},
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#ff0000",
"~:stroke-opacity": 1,
"~:stroke-alignment": "~:center",
"~:stroke-width": 5
},
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#000000",
"~:stroke-opacity": 1,
"~:stroke-alignment": "~:inner",
"~:stroke-width": 10
}
],
"~:x": 199,
"~:proportion": 1,
"~:r4": 0,
"~:selrect": {
"~#rect": {
"~:x": 199,
"~:y": 334,
"~:width": 147,
"~:height": 130,
"~:x1": 199,
"~:y1": 334,
"~:x2": 346,
"~:y2": 464
}
},
"~:fills": [
{
"~:fill-color": "#B1B2B5",
"~:fill-opacity": 1
}
],
"~:flip-x": null,
"~:height": 130,
"~:flip-y": null
}
},
"~ub688a894-3697-80d3-8006-51ccce062cb3": {
"~#shape": {
"~:y": 334,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:hide-in-viewer": false,
"~:name": "Ellipse",
"~:width": 130,
"~:type": "~:circle",
"~:points": [
{
"~#point": {
"~:x": 512.9999961853027,
"~:y": 334
}
},
{
"~#point": {
"~:x": 642.9999961853027,
"~:y": 334
}
},
{
"~#point": {
"~:x": 642.9999961853027,
"~:y": 459
}
},
{
"~#point": {
"~:x": 512.9999961853027,
"~:y": 459
}
}
],
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:id": "~ub688a894-3697-80d3-8006-51ccce062cb3",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#0000ff",
"~:stroke-opacity": 0.5,
"~:stroke-alignment": "~:outer",
"~:stroke-width": 20
},
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#ff0000",
"~:stroke-opacity": 1,
"~:stroke-alignment": "~:center",
"~:stroke-width": 5
},
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#000000",
"~:stroke-opacity": 1,
"~:stroke-alignment": "~:inner",
"~:stroke-width": 10
}
],
"~:x": 512.9999961853027,
"~:proportion": 1,
"~:selrect": {
"~#rect": {
"~:x": 512.9999961853027,
"~:y": 334,
"~:width": 130,
"~:height": 125,
"~:x1": 512.9999961853027,
"~:y1": 334,
"~:x2": 642.9999961853027,
"~:y2": 459
}
},
"~:fills": [
{
"~:fill-color": "#B1B2B5",
"~:fill-opacity": 1
}
],
"~:flip-x": null,
"~:height": 125,
"~:flip-y": null
}
},
"~ub688a894-3697-80d3-8006-51ccfa2e6eeb": {
"~#shape": {
"~:y": null,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:content": {
"~#penpot/path-data": "~bAQAAAAAAAAAAAAAAAAAAAAAAAACm6Y9DAAAJRAMAAADAyXlD4wIQRCW0I0NPCiJE9sBWQzqOK0QDAAAA4+aEQyUSNUS++9dDuQojRDj3xUPoxhlEAwAAALLys0MYgxBEpumPQwAACUSm6Y9DAAAJRA=="
},
"~:name": "Path",
"~:width": null,
"~:type": "~:path",
"~:points": [
{
"~#point": {
"~:x": 198.9999999038273,
"~:y": 547.9999675750732
}
},
{
"~#point": {
"~:x": 401.00001319474995,
"~:y": 547.9999675750732
}
},
{
"~#point": {
"~:x": 401.00001319474995,
"~:y": 696.9999543199095
}
},
{
"~#point": {
"~:x": 198.9999999038273,
"~:y": 696.9999543199095
}
}
],
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:id": "~ub688a894-3697-80d3-8006-51ccfa2e6eeb",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:strokes": [
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#0000ff",
"~:stroke-opacity": 0.5,
"~:stroke-alignment": "~:outer",
"~:stroke-width": 20
},
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#ff0000",
"~:stroke-opacity": 1,
"~:stroke-alignment": "~:center",
"~:stroke-width": 5
},
{
"~:stroke-style": "~:solid",
"~:stroke-color": "#000000",
"~:stroke-opacity": 1,
"~:stroke-alignment": "~:inner",
"~:stroke-width": 10
}
],
"~:x": null,
"~:proportion": 1,
"~:selrect": {
"~#rect": {
"~:x": 198.9999999038273,
"~:y": 547.9999675750732,
"~:width": 202.00001329092265,
"~:height": 148.9999867448363,
"~:x1": 198.9999999038273,
"~:y1": 547.9999675750732,
"~:x2": 401.00001319474995,
"~:y2": 696.9999543199095
}
},
"~:fills": [],
"~:flip-x": null,
"~:height": null,
"~:flip-y": null
}
}
},
"~:id": "~uc0939f58-37bc-805d-8006-51cc78297209",
"~:name": "Page 1"
}
},
"~:id": "~uc0939f58-37bc-805d-8006-51cc78297208",
"~:options": {
"~:components-v2": true,
"~:base-font-size": "16px"
}
}
}

View file

@ -0,0 +1,486 @@
{
"~: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": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~: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": "Text: Custom Fonts",
"~:revn": 13,
"~:modified-at": "~m1750151641034",
"~:vern": 0,
"~:id": "~u434b0541-fa2f-802f-8006-59827d964a9b",
"~: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",
"0002-clean-shape-interactions",
"0003-fix-root-shape",
"0003-convert-path-content",
"0004-clean-shadow-and-colors",
"0005-deprecate-image-type",
"0006-fix-old-texts-fills",
"0007-clear-invalid-strokes-and-fills-v2",
"0008-fix-library-colors-opacity",
"0009-add-partial-text-touched-flags"
]
},
"~:version": 67,
"~:project-id": "~u53a7ff09-2228-81d3-8006-4b5ea964593b",
"~:created-at": "~m1750081311326",
"~:data": {
"~:pages": [
"~u434b0541-fa2f-802f-8006-59827d964a9c"
],
"~:pages-index": {
"~u434b0541-fa2f-802f-8006-59827d964a9c": {
"~:objects": {
"~u00000000-0000-0000-0000-000000000000": {
"~#shape": {
"~:y": 0,
"~:hide-fill-on-export": false,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:name": "Root Frame",
"~:width": 0.01,
"~:type": "~:frame",
"~:points": [
{
"~#point": {
"~:x": 0.0,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.01
}
},
{
"~#point": {
"~:x": 0.0,
"~:y": 0.01
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.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.0,
"~: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": [
"~u7d85a63e-18e7-809f-8006-59827fe8501e",
"~u7d85a63e-18e7-809f-8006-59833ef5fcef"
]
}
},
"~u7d85a63e-18e7-809f-8006-59827fe8501e": {
"~#shape": {
"~:y": 451.9999962296588,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:auto-width",
"~:content": {
"~:type": "root",
"~:key": "xgmgu1frox",
"~:children": [
{
"~:type": "paragraph-set",
"~:children": [
{
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
{
"~:line-height": "",
"~:font-style": "normal",
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:font-id": "custom-7d85a63e-18e7-809f-8006-5983057a9b7c",
"~:key": "ee7vl7klqs",
"~:font-size": "72",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:font-variant-id": "normal-400",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"Nodesto Caps Condensed\"",
"~:text": "Penpot & Dragons"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "center",
"~:font-id": "custom-7d85a63e-18e7-809f-8006-5983057a9b7c",
"~:key": "17bt2f4evfs",
"~:font-size": "72",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
"~:type": "paragraph",
"~:font-variant-id": "normal-400",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"Nodesto Caps Condensed\""
}
]
}
],
"~:vertical-align": "top"
},
"~:hide-in-viewer": false,
"~:name": "Penpot & Dragons",
"~:width": 403.99995992417394,
"~:type": "~:text",
"~:points": [
{
"~#point": {
"~:x": 744.0000211580308,
"~:y": 451.9999962296588
}
},
{
"~#point": {
"~:x": 1147.9999810822046,
"~:y": 451.9999962296588
}
},
{
"~#point": {
"~:x": 1147.9999810822046,
"~:y": 537.9999971833331
}
},
{
"~#point": {
"~:x": 744.0000211580308,
"~:y": 537.9999971833331
}
}
],
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:id": "~u7d85a63e-18e7-809f-8006-59827fe8501e",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:x": 744.0000211580307,
"~:selrect": {
"~#rect": {
"~:x": 744.0000211580307,
"~:y": 451.9999962296588,
"~:width": 403.99995992417394,
"~:height": 86.00000095367432,
"~:x1": 744.0000211580307,
"~:y1": 451.9999962296588,
"~:x2": 1147.9999810822046,
"~:y2": 537.9999971833331
}
},
"~:flip-x": null,
"~:height": 86.00000095367432,
"~:flip-y": null
}
},
"~u7d85a63e-18e7-809f-8006-59833ef5fcef": {
"~#shape": {
"~:y": 537.9999971833331,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:auto-width",
"~:content": {
"~:type": "root",
"~:key": "xgmgu1frox",
"~:children": [
{
"~:type": "paragraph-set",
"~:children": [
{
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
{
"~:line-height": "",
"~:font-style": "normal",
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:font-id": "custom-7d85a63e-18e7-809f-8006-59832d696634",
"~:key": "ee7vl7klqs",
"~:font-size": "36",
"~:font-weight": "500",
"~:typography-ref-file": null,
"~:font-variant-id": "normal-500",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"Mr Eaves SC Remake\"",
"~:text": "Lorem Ipsum Dolors Sit Amet"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "center",
"~:font-id": "custom-7d85a63e-18e7-809f-8006-59832d696634",
"~:key": "17bt2f4evfs",
"~:font-size": "0",
"~:font-weight": "500",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
"~:type": "paragraph",
"~:font-variant-id": "normal-500",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"Mr Eaves SC Remake\""
}
]
}
],
"~:vertical-align": "top"
},
"~:hide-in-viewer": false,
"~:name": "Penpot & Dragons",
"~:width": 466.0000131576671,
"~:type": "~:text",
"~:points": [
{
"~#point": {
"~:x": 712.9999941849438,
"~:y": 537.9999971833331
}
},
{
"~#point": {
"~:x": 1179.0000073426108,
"~:y": 537.9999971833331
}
},
{
"~#point": {
"~:x": 1179.0000073426108,
"~:y": 580.9999976601703
}
},
{
"~#point": {
"~:x": 712.9999941849438,
"~:y": 580.9999976601703
}
}
],
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:id": "~u7d85a63e-18e7-809f-8006-59833ef5fcef",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:x": 712.9999941849437,
"~:selrect": {
"~#rect": {
"~:x": 712.9999941849437,
"~:y": 537.9999971833331,
"~:width": 466.0000131576671,
"~:height": 43.00000047683716,
"~:x1": 712.9999941849437,
"~:y1": 537.9999971833331,
"~:x2": 1179.0000073426108,
"~:y2": 580.9999976601703
}
},
"~:flip-x": null,
"~:height": 43.00000047683716,
"~:flip-y": null
}
}
},
"~:id": "~u434b0541-fa2f-802f-8006-59827d964a9c",
"~:name": "Page 1"
}
},
"~:id": "~u434b0541-fa2f-802f-8006-59827d964a9b",
"~:options": {
"~:components-v2": true,
"~:base-font-size": "16px"
}
}
}

View file

@ -0,0 +1,420 @@
{
"~: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": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~: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": "Text: Google Fonts",
"~:revn": 9,
"~:modified-at": "~m1750150559868",
"~:vern": 0,
"~:id": "~u434b0541-fa2f-802f-8006-5981e47bd732",
"~: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",
"0002-clean-shape-interactions",
"0003-fix-root-shape",
"0003-convert-path-content",
"0004-clean-shadow-and-colors",
"0005-deprecate-image-type",
"0006-fix-old-texts-fills",
"0007-clear-invalid-strokes-and-fills-v2",
"0008-fix-library-colors-opacity",
"0009-add-partial-text-touched-flags"
]
},
"~:version": 67,
"~:project-id": "~u53a7ff09-2228-81d3-8006-4b5ea964593b",
"~:created-at": "~m1750081154582",
"~:data": {
"~:pages": [
"~u434b0541-fa2f-802f-8006-5981e47bd733"
],
"~:pages-index": {
"~u434b0541-fa2f-802f-8006-5981e47bd733": {
"~:objects": {
"~u00000000-0000-0000-0000-000000000000": {
"~#shape": {
"~:y": 0,
"~:hide-fill-on-export": false,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:name": "Root Frame",
"~:width": 0.01,
"~:type": "~:frame",
"~:points": [
{
"~#point": {
"~:x": 0.0,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.0
}
},
{
"~#point": {
"~:x": 0.01,
"~:y": 0.01
}
},
{
"~#point": {
"~:x": 0.0,
"~:y": 0.01
}
}
],
"~:r2": 0,
"~:proportion-lock": false,
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.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.0,
"~: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": [
"~u83b40135-4e19-8020-8006-598226885685"
]
}
},
"~u83b40135-4e19-8020-8006-598226885685": {
"~#shape": {
"~:y": 399.99997901916055,
"~:transform": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:rotation": 0,
"~:grow-type": "~:fixed",
"~:content": {
"~:type": "root",
"~:key": "u3udm63y8h",
"~:children": [
{
"~:type": "paragraph-set",
"~:children": [
{
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
{
"~:line-height": "",
"~:font-style": "normal",
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:font-id": "gfont-eb-garamond",
"~:key": "hjb7822r9z",
"~:font-size": "36",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"EB Garamond\"",
"~:text": "This is an example text"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "left",
"~:font-id": "gfont-eb-garamond",
"~:key": "2dka2139qgl",
"~:font-size": "36",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
"~:type": "paragraph",
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"EB Garamond\""
},
{
"~:line-height": "1.2",
"~:font-style": "normal",
"~:children": [
{
"~:line-height": "",
"~:font-style": "normal",
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:font-id": "gfont-eb-garamond",
"~:key": "26bngh5on3d",
"~:font-size": "36",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"EB Garamond\"",
"~:text": "with "
},
{
"~:line-height": "",
"~:font-style": "normal",
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:font-id": "gfont-fira-code",
"~:key": "23oemgkf8le",
"~:font-size": "36",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"Fira Code\"",
"~:text": "Google Fonts"
}
],
"~:typography-ref-id": null,
"~:text-transform": "none",
"~:text-align": "left",
"~:font-id": "gfont-fira-code",
"~:key": "1dxk7oihnqh",
"~:font-size": "36",
"~:font-weight": "400",
"~:typography-ref-file": null,
"~:text-direction": "ltr",
"~:type": "paragraph",
"~:font-variant-id": "regular",
"~:text-decoration": "none",
"~:letter-spacing": "0",
"~:fills": [
{
"~:fill-color": "#000000",
"~:fill-opacity": 1
}
],
"~:font-family": "\"Fira Code\""
}
]
}
],
"~:vertical-align": "top"
},
"~:hide-in-viewer": false,
"~:name": "This is an example textwith Google Fonts",
"~:width": 325.00011493483566,
"~:type": "~:text",
"~:points": [
{
"~#point": {
"~:x": 680.9999634764606,
"~:y": 399.9999790191605
}
},
{
"~#point": {
"~:x": 1006.0000784112963,
"~:y": 399.9999790191605
}
},
{
"~#point": {
"~:x": 1006.0000784112963,
"~:y": 658.0000126361805
}
},
{
"~#point": {
"~:x": 680.9999634764606,
"~:y": 658.0000126361805
}
}
],
"~:layout-item-h-sizing": "~:fix",
"~:transform-inverse": {
"~#matrix": {
"~:a": 1.0,
"~:b": 0.0,
"~:c": 0.0,
"~:d": 1.0,
"~:e": 0.0,
"~:f": 0.0
}
},
"~:id": "~u83b40135-4e19-8020-8006-598226885685",
"~:parent-id": "~u00000000-0000-0000-0000-000000000000",
"~:frame-id": "~u00000000-0000-0000-0000-000000000000",
"~:x": 680.9999634764606,
"~:selrect": {
"~#rect": {
"~:x": 680.9999634764606,
"~:y": 399.99997901916055,
"~:width": 325.00011493483566,
"~:height": 258.00003361702,
"~:x1": 680.9999634764606,
"~:y1": 399.99997901916055,
"~:x2": 1006.0000784112963,
"~:y2": 658.0000126361806
}
},
"~:flip-x": null,
"~:height": 258.00003361702,
"~:flip-y": null
}
}
},
"~:id": "~u434b0541-fa2f-802f-8006-5981e47bd733",
"~:name": "Page 1"
}
},
"~:id": "~u434b0541-fa2f-802f-8006-5981e47bd732",
"~:options": {
"~:components-v2": true,
"~:base-font-size": "16px"
}
}
}

View file

@ -0,0 +1,106 @@
[
{
"~:font-style": "normal",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-5983057a9b7c",
"~:font-weight": 400,
"~:ttf-file-id": "~u69e76833-0816-49fa-8c7b-4b97c71c6f1a",
"~:modified-at": "~m1750081452108",
"~:otf-file-id": "~uf7ea405b-73be-40d7-8ce4-fbf734696997",
"~:id": "~u434b0541-fa2f-802f-8006-5983078ad50e",
"~:woff1-file-id": "~uaef0b0c5-56de-47c7-bd99-fb5e249ccef9",
"~:created-at": "~m1750081452108",
"~:font-family": "Nodesto Caps Condensed"
},
{
"~:font-style": "italic",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-5983057a9b7c",
"~:font-weight": 400,
"~:ttf-file-id": "~uc45955ee-8c16-47ce-a89e-1a2faadb4178",
"~:modified-at": "~m1750081452589",
"~:otf-file-id": "~ucc0a799d-34ed-4829-a0de-6d7efec8202c",
"~:id": "~u434b0541-fa2f-802f-8006-59830795b436",
"~:woff1-file-id": "~u9940a178-833e-4a4c-8bc3-64ee09472ea6",
"~:created-at": "~m1750081452589",
"~:font-family": "Nodesto Caps Condensed"
},
{
"~:font-style": "normal",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-5983057a9b7c",
"~:font-weight": 700,
"~:ttf-file-id": "~u5c59fbdc-46de-456f-8da6-0dcd916e95c1",
"~:modified-at": "~m1750081452631",
"~:otf-file-id": "~uadde63b1-c9f4-484a-bf1c-1121b77d751d",
"~:id": "~u434b0541-fa2f-802f-8006-598307a05c77",
"~:woff1-file-id": "~ucea20394-48af-41a0-8d0f-ada497a5ffe3",
"~:created-at": "~m1750081452631",
"~:font-family": "Nodesto Caps Condensed"
},
{
"~:font-style": "italic",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-5983057a9b7c",
"~:font-weight": 700,
"~:ttf-file-id": "~u5060a5c4-c7c3-44ea-aa0e-5797d6647ec0",
"~:modified-at": "~m1750081452674",
"~:otf-file-id": "~u1646d986-88d1-4904-910d-663da9e35eef",
"~:id": "~u434b0541-fa2f-802f-8006-598307a94233",
"~:woff1-file-id": "~ue7691712-70d1-49d9-a596-7b4ac495ff15",
"~:created-at": "~m1750081452674",
"~:font-family": "Nodesto Caps Condensed"
},
{
"~:font-style": "normal",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-59831351af03",
"~:font-weight": 700,
"~:ttf-file-id": "~u3ccf58ee-731c-402f-8b26-5b5049abbe7f",
"~:modified-at": "~m1750081469706",
"~:otf-file-id": "~u96293106-78ff-4683-b819-c1c4c1e44705",
"~:id": "~u434b0541-fa2f-802f-8006-5983185366a8",
"~:woff1-file-id": "~uaf7a782a-c96b-4926-a08a-c6a81a1726dc",
"~:created-at": "~m1750081469706",
"~:font-family": "Bookinsanity Remake"
},
{
"~:font-style": "normal",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-59831351af03",
"~:font-weight": 400,
"~:ttf-file-id": "~u78583622-dc5d-4780-990f-85afb4ad59e9",
"~:modified-at": "~m1750081469774",
"~:otf-file-id": "~ua5eb4175-91d0-4c61-a471-2d5d0648f8a6",
"~:id": "~u434b0541-fa2f-802f-8006-5983185cde2d",
"~:woff1-file-id": "~u0fcf15c2-59c5-4566-9dc9-9acaf280a518",
"~:created-at": "~m1750081469774",
"~:font-family": "Bookinsanity Remake"
},
{
"~:font-style": "italic",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-59831351af03",
"~:font-weight": 400,
"~:ttf-file-id": "~u517f4e27-b83f-4a6f-8753-8acaabc49ee9",
"~:modified-at": "~m1750081469812",
"~:otf-file-id": "~u12fe845f-afd2-453d-9ac6-6a899487ba9f",
"~:id": "~u434b0541-fa2f-802f-8006-598318671138",
"~:woff1-file-id": "~u53e0cb17-788e-4dae-aa7c-28f090f87968",
"~:created-at": "~m1750081469812",
"~:font-family": "Bookinsanity Remake"
},
{
"~:font-style": "normal",
"~:team-id": "~u04868522-3ebf-81e8-8006-306b0c9b5f59",
"~:font-id": "~u7d85a63e-18e7-809f-8006-59832d696634",
"~:font-weight": 500,
"~:ttf-file-id": "~u2d1ffeb6-e70b-4027-bbcc-910248ba45f8",
"~:modified-at": "~m1750081492609",
"~:otf-file-id": "~ubcc136ac-da48-4335-af5c-52abc4613490",
"~:id": "~u434b0541-fa2f-802f-8006-59832eb23bb4",
"~:woff1-file-id": "~u01338648-afcc-47aa-8aa7-600c9022bd9f",
"~:created-at": "~m1750081492609",
"~:font-family": "Mr Eaves SC Remake"
}
]

View file

@ -23,9 +23,41 @@ export class BasePage {
);
}
static async mockFileMediaAsset(page, assetId, assetFilename, options) {
const ids = Array.isArray(assetId) ? assetId : [assetId];
for (const id of ids) {
const url = `**/assets/by-file-media-id/${id}`;
await page.route(url, (route) =>
route.fulfill({
path: `playwright/data/${assetFilename}`,
status: 200,
...options,
}),
);
}
}
static async mockAsset(page, assetId, assetFilename, options) {
const ids = Array.isArray(assetId) ? assetId : [assetId];
for (const id of ids) {
const url = `**/assets/by-id/${id}`;
await page.route(url, (route) =>
route.fulfill({
path: `playwright/data/${assetFilename}`,
status: 200,
...options,
}),
);
}
}
static async mockFileMediaAsset(page, assetId, assetFilename, options) {
const ids = Array.isArray(assetId) ? assetId : [assetId];
for (const id of ids) {
const url = `**/assets/by-file-media-id/${id}`;
@ -68,6 +100,15 @@ export class BasePage {
return BasePage.mockConfigFlags(this.page, flags);
}
async mockFileMediaAsset(assetId, assetFilename, options) {
return BasePage.mockFileMediaAsset(
this.page,
assetId,
assetFilename,
options,
);
}
async mockAsset(assetId, assetFilename, options) {
return BasePage.mockAsset(this.page, assetId, assetFilename, options);
}

View file

@ -28,4 +28,25 @@ export class WasmWorkspacePage extends WorkspacePage {
return window.wasmSetObjectsFinished;
});
}
static async mockGoogleFont(page, fontSlug, assetFilename, options = {}) {
const url = new RegExp(`/internal/gfonts/font/${fontSlug}`);
return await page.route(url, (route) =>
route.fulfill({
status: 200,
path: `playwright/data/${assetFilename}`,
contentType: "application/font-ttf",
...options,
}),
);
}
async mockGoogleFont(fontSlug, assetFilename, options) {
return WasmWorkspacePage.mockGoogleFont(
this.page,
fontSlug,
assetFilename,
options,
);
}
}

View file

@ -30,7 +30,7 @@ test("Renders a file with solid, gradient and image fills", async ({
}) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockAsset(
await workspace.mockFileMediaAsset(
[
"1ebcea38-f1bf-8101-8006-4c8fd68e7c84",
"1ebcea38-f1bf-8101-8006-4c8f579da49c",
@ -51,7 +51,7 @@ test("Renders a file with solid, gradient and image fills", async ({
test("Renders a file with strokes", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockAsset(
await workspace.mockFileMediaAsset(
[
"202c1104-9385-81d3-8006-5074e4682cac",
"202c1104-9385-81d3-8006-5074c50339b6",
@ -69,3 +69,47 @@ test("Renders a file with strokes", async ({ page }) => {
await expect(workspace.canvas).toHaveScreenshot();
});
test("Renders a file with mutliple strokes", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-multiple-strokes.json");
await workspace.goToWorkspace({
id: "c0939f58-37bc-805d-8006-51cc78297208",
pageId: "c0939f58-37bc-805d-8006-51cc78297209",
});
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});
test("Renders a file with shapes with multiple fills", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-multiple-fills.json");
await workspace.goToWorkspace({
id: "c0939f58-37bc-805d-8006-51cd3a51c255",
pageId: "c0939f58-37bc-805d-8006-51cd3a51c256",
});
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});
// TODO: update the screenshots for this test once Taiga #11325 is fixed
// https://tree.taiga.io/project/penpot/task/11325
test("Renders shapes taking into account blend modes", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-blend-modes.json");
await workspace.goToWorkspace({
id: "c0939f58-37bc-805d-8006-51cdf8e18e76",
pageId: "c0939f58-37bc-805d-8006-51cdf8e18e77",
});
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

View file

@ -9,9 +9,7 @@ test.beforeEach(async ({ page }) => {
]);
});
test("Renders a file with texts", async ({
page,
}) => {
test("Renders a file with texts", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-text.json");
@ -24,9 +22,7 @@ test("Renders a file with texts", async ({
await expect(workspace.canvas).toHaveScreenshot();
});
test("Updates a text font", async ({
page,
}) => {
test("Updates a text font", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-text.json");
@ -42,4 +38,49 @@ test("Updates a text font", async ({
const boldOption = fontStyle.getByText("bold").first();
await boldOption.click();
await expect(workspace.canvas).toHaveScreenshot();
});
});
test("Renders a file with texts that use google fonts", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-text-google-fonts.json");
await workspace.mockGoogleFont(
"ebgaramond",
"render-wasm/assets/ebgaramond.ttf",
);
await workspace.mockGoogleFont("firacode", "render-wasm/assets/firacode.ttf");
await workspace.goToWorkspace({
id: "434b0541-fa2f-802f-8006-5981e47bd732",
pageId: "434b0541-fa2f-802f-8006-5981e47bd733",
});
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});
test("Renders a file with texts that use custom fonts", async ({ page }) => {
const workspace = new WasmWorkspacePage(page);
await workspace.setupEmptyFile();
await workspace.mockGetFile("render-wasm/get-file-text-custom-fonts.json");
await workspace.mockRPC(
"get-font-variants?team-id=*",
"render-wasm/get-font-variants-custom-fonts.json",
);
await workspace.mockAsset(
"2d1ffeb6-e70b-4027-bbcc-910248ba45f8",
"render-wasm/assets/mreaves.ttf",
);
await workspace.mockAsset(
"69e76833-0816-49fa-8c7b-4b97c71c6f1a",
"render-wasm/assets/nodesto-condensed.ttf",
);
await workspace.goToWorkspace({
id: "434b0541-fa2f-802f-8006-59827d964a9b",
pageId: "434b0541-fa2f-802f-8006-59827d964a9c",
});
await workspace.waitForFirstRender();
await expect(workspace.canvas).toHaveScreenshot();
});