From 134fb1ab4cbf9317521cd7c9355fbe57d068bb46 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Mon, 23 Jun 2025 16:01:03 +0200 Subject: [PATCH] :wrench: Add vertical alignment for text shapes --- .../data/render-wasm/get-file-text-align.json | 2365 +++++++++++++++++ .../ui/render-wasm-specs/texts.spec.js | 13 + ...with-texts-with-different-alignments-1.png | Bin 0 -> 93902 bytes frontend/src/app/render_wasm/api.cljs | 8 + frontend/src/app/render_wasm/serializers.cljs | 4 + render-wasm/src/main.rs | 8 + render-wasm/src/render/text.rs | 11 +- render-wasm/src/shapes.rs | 28 + 8 files changed, 2436 insertions(+), 1 deletion(-) create mode 100644 frontend/playwright/data/render-wasm/get-file-text-align.json create mode 100644 frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-different-alignments-1.png diff --git a/frontend/playwright/data/render-wasm/get-file-text-align.json b/frontend/playwright/data/render-wasm/get-file-text-align.json new file mode 100644 index 0000000000..a9b41b6937 --- /dev/null +++ b/frontend/playwright/data/render-wasm/get-file-text-align.json @@ -0,0 +1,2365 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "plugins/runtime", + "design-tokens/v1", + "layout/grid", + "styles/v2", + "fdata/pointer-map", + "fdata/objects-map", + "render-wasm/v1", + "components/v2", + "fdata/shape-data-type" + ] + }, + "~:team-id": "~u6bd7c17d-4f59-815e-8006-5c1f6882469a", + "~: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_align", + "~:revn": 1, + "~:modified-at": "~m1750689458888", + "~:vern": 0, + "~:id": "~u692f368b-63ca-8141-8006-62925640b827", + "~: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": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43", + "~:created-at": "~m1750689445124", + "~:data": { + "~:pages": [ + "~u692f368b-63ca-8141-8006-62925640b828" + ], + "~:pages-index": { + "~u692f368b-63ca-8141-8006-62925640b828": { + "~: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": [ + "~ufedf3ca0-a74b-80e6-8006-6292579408ec", + "~ufedf3ca0-a74b-80e6-8006-6292579408f0", + "~ufedf3ca0-a74b-80e6-8006-6292579408f4" + ] + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f4": { + "~#shape": { + "~:y": 456, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:index": 9, + "~:name": "Group", + "~:width": 1715, + "~:type": "~:group", + "~:points": [ + { + "~#point": { + "~:x": 337, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 2052, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 2052, + "~:y": 657 + } + }, + { + "~#point": { + "~:x": 337, + "~:y": 657 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f4", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 337, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 337, + "~:y": 456, + "~:width": 1715, + "~:height": 201, + "~:x1": 337, + "~:y1": 456, + "~:x2": 2052, + "~:y2": 657 + } + }, + "~:fills": [], + "~:flip-x": false, + "~:height": 201, + "~:flip-y": false, + "~:shapes": [ + "~ufedf3ca0-a74b-80e6-8006-6292579408f5", + "~ufedf3ca0-a74b-80e6-8006-6292579408f6", + "~ufedf3ca0-a74b-80e6-8006-6292579408f7" + ] + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f5": { + "~#shape": { + "~:y": 456, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "m5baoxjmyj", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical alignment top" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "7o72h10fl4", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 509, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 337, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 846, + "~:y": 657 + } + }, + { + "~#point": { + "~:x": 337, + "~:y": 657 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f5", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408f4", + "~:position-data": [ + { + "~#rect": { + "~:y": 501.6000061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 331.29998779296875, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 337, + "~:x1": 0, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 331.29998779296875, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical alignment top" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 337, + "~:selrect": { + "~#rect": { + "~:x": 337, + "~:y": 456, + "~:width": 509, + "~:height": 201, + "~:x1": 337, + "~:y1": 456, + "~:x2": 846, + "~:y2": 657 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f6": { + "~#shape": { + "~:y": 456, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "m5baoxjmyj", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical alignment center" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "7o72h10fl4", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "center" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 509, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 940, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 1449, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 1449, + "~:y": 657 + } + }, + { + "~#point": { + "~:x": 940, + "~:y": 657 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f6", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408f4", + "~:position-data": [ + { + "~#rect": { + "~:y": 580.5, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 76.5, + "~:width": 375.33331298828125, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 940, + "~:x1": 0, + "~:y2": 124.5, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 375.33331298828125, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical alignment center" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 940, + "~:selrect": { + "~#rect": { + "~:x": 940, + "~:y": 456, + "~:width": 509, + "~:height": 201, + "~:x1": 940, + "~:y1": 456, + "~:x2": 1449, + "~:y2": 657 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f7": { + "~#shape": { + "~:y": 456, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "m5baoxjmyj", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical alignment bottom" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "7o72h10fl4", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "bottom" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 509, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1543, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 2052, + "~:y": 456 + } + }, + { + "~#point": { + "~:x": 2052, + "~:y": 657 + } + }, + { + "~#point": { + "~:x": 1543, + "~:y": 657 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f7", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408f4", + "~:position-data": [ + { + "~#rect": { + "~:y": 659.3999938964844, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 155.39999389648438, + "~:width": 392.816650390625, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1543, + "~:x1": 0, + "~:y2": 203.39999389648438, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 392.816650390625, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical alignment bottom" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1543, + "~:selrect": { + "~#rect": { + "~:x": 1543, + "~:y": 456, + "~:width": 509, + "~:height": 201, + "~:x1": 1543, + "~:y1": 456, + "~:x2": 2052, + "~:y2": 657 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f0": { + "~#shape": { + "~:y": 1059.5, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:index": 4, + "~:name": "Group", + "~:width": 1655, + "~:type": "~:group", + "~:points": [ + { + "~#point": { + "~:x": 337, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 1260.5 + } + }, + { + "~#point": { + "~:x": 337, + "~:y": 1260.5 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f0", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 337, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 337, + "~:y": 1059.5, + "~:width": 1655, + "~:height": 201, + "~:x1": 337, + "~:y1": 1059.5, + "~:x2": 1992, + "~:y2": 1260.5 + } + }, + "~:fills": [], + "~:flip-x": false, + "~:height": 201, + "~:flip-y": false, + "~:shapes": [ + "~ufedf3ca0-a74b-80e6-8006-6292579408f1", + "~ufedf3ca0-a74b-80e6-8006-6292579408f2", + "~ufedf3ca0-a74b-80e6-8006-6292579408f3" + ] + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f1": { + "~#shape": { + "~:y": 1059.5, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "591pq8tjdw", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical and text alignment with multiple lines and horizontal align" + } + ], + "~:text-transform": "none", + "~:text-align": "justify", + "~:font-id": "sourcesanspro", + "~:key": "7fglhdq8u7", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 489, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 337, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 826, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 826, + "~:y": 1260.5 + } + }, + { + "~#point": { + "~:x": 337, + "~:y": 1260.5 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f1", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408f0", + "~:position-data": [ + { + "~#rect": { + "~:y": 1105.1000061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 111.66667175292969, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 337, + "~:x1": 0, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 111.66667175292969, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical" + } + }, + { + "~#rect": { + "~:y": 1105.1000061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 58.06666564941406, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 457.0500030517578, + "~:x1": 120.05000305175781, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 178.11666870117188, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "and" + } + }, + { + "~#rect": { + "~:y": 1105.1000061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 57.633331298828125, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 523.5166625976562, + "~:x1": 186.51666259765625, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 244.14999389648438, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "text" + } + }, + { + "~#rect": { + "~:y": 1105.1000061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 153.79998779296875, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 589.5333404541016, + "~:x1": 252.53334045410156, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 406.3333282470703, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "alignment" + } + }, + { + "~#rect": { + "~:y": 1105.1000061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 66.43333435058594, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 751.7333374023438, + "~:x1": 414.73333740234375, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 481.1666717529297, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "with" + } + }, + { + "~#rect": { + "~:y": 1148.3000030517578, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 40.80000305175781, + "~:width": 126.61666870117188, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 337, + "~:x1": 0, + "~:y2": 88.80000305175781, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 126.61666870117188, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "multiple" + } + }, + { + "~#rect": { + "~:y": 1148.3000030517578, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 40.80000305175781, + "~:width": 70.64999389648438, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 485.4166717529297, + "~:x1": 148.4166717529297, + "~:y2": 88.80000305175781, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 219.06666564941406, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "lines" + } + }, + { + "~#rect": { + "~:y": 1148.3000030517578, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 40.80000305175781, + "~:width": 58.06666564941406, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 577.8833312988281, + "~:x1": 240.88333129882812, + "~:y2": 88.80000305175781, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 298.9499969482422, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "and" + } + }, + { + "~#rect": { + "~:y": 1148.3000030517578, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 40.80000305175781, + "~:width": 153.68333435058594, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 657.7666625976562, + "~:x1": 320.76666259765625, + "~:y2": 88.80000305175781, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 474.4499969482422, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "horizontal" + } + }, + { + "~#rect": { + "~:y": 1191.5, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 84, + "~:width": 74.26666259765625, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 337, + "~:x1": 0, + "~:y2": 132, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 74.26666259765625, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "align" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 337, + "~:selrect": { + "~#rect": { + "~:x": 337, + "~:y": 1059.5, + "~:width": 489, + "~:height": 201, + "~:x1": 337, + "~:y1": 1059.5, + "~:x2": 826, + "~:y2": 1260.5 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f2": { + "~#shape": { + "~:y": 1059.5, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "1px1cyplb74", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical and text alignment with multiple lines and horizontal align" + } + ], + "~:text-transform": "none", + "~:text-align": "center", + "~:font-id": "sourcesanspro", + "~:key": "19zkh07leb", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "center" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 489, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 902, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 1391, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 1391, + "~:y": 1260.5 + } + }, + { + "~#point": { + "~:x": 902, + "~:y": 1260.5 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f2", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408f0", + "~:position-data": [ + { + "~#rect": { + "~:y": 1140.8000030517578, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 33.30000305175781, + "~:width": 483.9333190917969, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 904.5333404541016, + "~:x1": 2.5333404541015625, + "~:y2": 81.30000305175781, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 486.46665954589844, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical and text alignment with " + } + }, + { + "~#rect": { + "~:y": 1184, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 76.5, + "~:width": 438.0833435058594, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 927.4499969482422, + "~:x1": 25.449996948242188, + "~:y2": 124.5, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 463.53334045410156, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "multiple lines and horizontal " + } + }, + { + "~#rect": { + "~:y": 1227.1999969482422, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 119.69999694824219, + "~:width": 74.26666259765625, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1109.3666687011719, + "~:x1": 207.36666870117188, + "~:y2": 167.6999969482422, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 281.6333312988281, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "align" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 902, + "~:selrect": { + "~#rect": { + "~:x": 902, + "~:y": 1059.5, + "~:width": 489, + "~:height": 201, + "~:x1": 902, + "~:y1": 1059.5, + "~:x2": 1391, + "~:y2": 1260.5 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408f3": { + "~#shape": { + "~:y": 1059.5, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "1byaarcwres", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical and text alignment with multiple lines and horizontal align" + } + ], + "~:text-transform": "none", + "~:text-align": "right", + "~:font-id": "sourcesanspro", + "~:key": "p20hz0wokq", + "~:font-size": "36", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "bottom" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 489, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1503, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 1059.5 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 1260.5 + } + }, + { + "~#point": { + "~:x": 1503, + "~:y": 1260.5 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408f3", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408f0", + "~:position-data": [ + { + "~#rect": { + "~:y": 1176.5, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 69, + "~:width": 483.933349609375, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1508.066665649414, + "~:x1": 5.0666656494140625, + "~:y2": 117, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 489.00001525878906, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical and text alignment with " + } + }, + { + "~#rect": { + "~:y": 1219.6999969482422, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 112.19999694824219, + "~:width": 438.08331298828125, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1553.9166717529297, + "~:x1": 50.91667175292969, + "~:y2": 160.1999969482422, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 488.99998474121094, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "multiple lines and horizontal " + } + }, + { + "~#rect": { + "~:y": 1262.8999938964844, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 155.39999389648438, + "~:width": 74.26666259765625, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1917.7333374023438, + "~:x1": 414.73333740234375, + "~:y2": 203.39999389648438, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 489, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "align" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1503, + "~:selrect": { + "~#rect": { + "~:x": 1503, + "~:y": 1059.5, + "~:width": 489, + "~:height": 201, + "~:x1": 1503, + "~:y1": 1059.5, + "~:x2": 1992, + "~:y2": 1260.5 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408ec": { + "~#shape": { + "~:y": 757.75, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:index": 5, + "~:name": "Group", + "~:width": 1655, + "~:type": "~:group", + "~:points": [ + { + "~#point": { + "~:x": 337, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 958.75 + } + }, + { + "~#point": { + "~:x": 337, + "~:y": 958.75 + } + } + ], + "~:proportion-lock": false, + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408ec", + "~:parent-id": "~u00000000-0000-0000-0000-000000000000", + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 337, + "~:proportion": 1, + "~:selrect": { + "~#rect": { + "~:x": 337, + "~:y": 757.75, + "~:width": 1655, + "~:height": 201, + "~:x1": 337, + "~:y1": 757.75, + "~:x2": 1992, + "~:y2": 958.75 + } + }, + "~:fills": [], + "~:flip-x": false, + "~:height": 201, + "~:flip-y": false, + "~:shapes": [ + "~ufedf3ca0-a74b-80e6-8006-6292579408ed", + "~ufedf3ca0-a74b-80e6-8006-6292579408ee", + "~ufedf3ca0-a74b-80e6-8006-6292579408ef" + ] + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408ed": { + "~#shape": { + "~:y": 757.75, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "591pq8tjdw", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical and text alignment with multiple lines" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "7fglhdq8u7", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "top" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 489, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 337, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 826, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 826, + "~:y": 958.75 + } + }, + { + "~#point": { + "~:x": 337, + "~:y": 958.75 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408ed", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408ec", + "~:position-data": [ + { + "~#rect": { + "~:y": 803.3500061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": -2.399993896484375, + "~:width": 483.933349609375, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 337, + "~:x1": 0, + "~:y2": 45.600006103515625, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 483.933349609375, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical and text alignment with " + } + }, + { + "~#rect": { + "~:y": 846.5500030517578, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 40.80000305175781, + "~:width": 204.53334045410156, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 337, + "~:x1": 0, + "~:y2": 88.80000305175781, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 204.53334045410156, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "multiple lines" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 337, + "~:selrect": { + "~#rect": { + "~:x": 337, + "~:y": 757.75, + "~:width": 489, + "~:height": 201, + "~:x1": 337, + "~:y1": 757.75, + "~:x2": 826, + "~:y2": 958.75 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408ee": { + "~#shape": { + "~:y": 757.75, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "591pq8tjdw", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical and text alignment with multiple lines" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "7fglhdq8u7", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "center" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 489, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 920, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 1409, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 1409, + "~:y": 958.75 + } + }, + { + "~#point": { + "~:x": 920, + "~:y": 958.75 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408ee", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408ec", + "~:position-data": [ + { + "~#rect": { + "~:y": 860.6499938964844, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 54.899993896484375, + "~:width": 483.933349609375, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 920, + "~:x1": 0, + "~:y2": 102.89999389648438, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 483.933349609375, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical and text alignment with " + } + }, + { + "~#rect": { + "~:y": 903.8500061035156, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 98.10000610351562, + "~:width": 204.53334045410156, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 920, + "~:x1": 0, + "~:y2": 146.10000610351562, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 204.53334045410156, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "multiple lines" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 920, + "~:selrect": { + "~#rect": { + "~:x": 920, + "~:y": 757.75, + "~:width": 489, + "~:height": 201, + "~:x1": 920, + "~:y1": 757.75, + "~:x2": 1409, + "~:y2": 958.75 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + }, + "~ufedf3ca0-a74b-80e6-8006-6292579408ef": { + "~#shape": { + "~:y": 757.75, + "~:transform": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:rotation": 0, + "~:grow-type": "~:fixed", + "~:content": { + "~:type": "root", + "~:key": "1a85igulykn", + "~:children": [ + { + "~:type": "paragraph-set", + "~:children": [ + { + "~:line-height": "1.2", + "~:font-style": "normal", + "~:children": [ + { + "~:line-height": "", + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-id": "sourcesanspro", + "~:key": "591pq8tjdw", + "~:font-size": "36", + "~:font-weight": "400", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro", + "~:text": "vertical and text alignment with multiple lines" + } + ], + "~:text-transform": "none", + "~:text-align": "left", + "~:font-id": "sourcesanspro", + "~:key": "7fglhdq8u7", + "~:font-size": "0", + "~:font-weight": "400", + "~:text-direction": "ltr", + "~:type": "paragraph", + "~:font-variant-id": "regular", + "~:text-decoration": "none", + "~:letter-spacing": "0", + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:font-family": "sourcesanspro" + } + ] + } + ], + "~:vertical-align": "bottom" + }, + "~:hide-in-viewer": false, + "~:name": "Text", + "~:width": 489, + "~:type": "~:text", + "~:points": [ + { + "~#point": { + "~:x": 1503, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 757.75 + } + }, + { + "~#point": { + "~:x": 1992, + "~:y": 958.75 + } + }, + { + "~#point": { + "~:x": 1503, + "~:y": 958.75 + } + } + ], + "~:transform-inverse": { + "~#matrix": { + "~:a": 1, + "~:b": 0, + "~:c": 0, + "~:d": 1, + "~:e": 0, + "~:f": 0 + } + }, + "~:id": "~ufedf3ca0-a74b-80e6-8006-6292579408ef", + "~:parent-id": "~ufedf3ca0-a74b-80e6-8006-6292579408ec", + "~:position-data": [ + { + "~#rect": { + "~:y": 917.9499969482422, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 112.19999694824219, + "~:width": 483.933349609375, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1503, + "~:x1": 0, + "~:y2": 160.1999969482422, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 483.933349609375, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "vertical and text alignment with " + } + }, + { + "~#rect": { + "~:y": 961.1499938964844, + "~:font-style": "normal", + "~:text-transform": "none", + "~:font-size": "36px", + "~:font-weight": "400", + "~:y1": 155.39999389648438, + "~:width": 204.53334045410156, + "~:text-decoration": "rgb(0, 0, 0)", + "~:letter-spacing": "normal", + "~:x": 1503, + "~:x1": 0, + "~:y2": 203.39999389648438, + "~:fills": [ + { + "~:fill-color": "#000000", + "~:fill-opacity": 1 + } + ], + "~:x2": 204.53334045410156, + "~:direction": "ltr", + "~:font-family": "\"sourcesanspro\"", + "~:height": 48, + "~:text": "multiple lines" + } + } + ], + "~:frame-id": "~u00000000-0000-0000-0000-000000000000", + "~:strokes": [], + "~:x": 1503, + "~:selrect": { + "~#rect": { + "~:x": 1503, + "~:y": 757.75, + "~:width": 489, + "~:height": 201, + "~:x1": 1503, + "~:y1": 757.75, + "~:x2": 1992, + "~:y2": 958.75 + } + }, + "~:fills": [], + "~:flip-x": null, + "~:height": 201, + "~:flip-y": null + } + } + }, + "~:id": "~u692f368b-63ca-8141-8006-62925640b828", + "~:name": "Page 1" + } + }, + "~:id": "~u692f368b-63ca-8141-8006-62925640b827", + "~:options": { + "~:components-v2": true, + "~:base-font-size": "16px" + } + } +} \ No newline at end of file diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js b/frontend/playwright/ui/render-wasm-specs/texts.spec.js index 26088c3d62..9827661f4d 100644 --- a/frontend/playwright/ui/render-wasm-specs/texts.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/texts.spec.js @@ -162,3 +162,16 @@ test("Renders a file with multiple emoji", async ({ page }) => { await workspace.waitForFirstRender(); await expect(workspace.canvas).toHaveScreenshot(); }); + +test("Renders a file with texts with different alignments", async ({ page }) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("render-wasm/get-file-text-align.json"); + + await workspace.goToWorkspace({ + id: "692f368b-63ca-8141-8006-62925640b827", + pageId: "692f368b-63ca-8141-8006-62925640b828", + }); + await workspace.waitForFirstRender(); + await expect(workspace.canvas).toHaveScreenshot(); +}); diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-different-alignments-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-different-alignments-1.png new file mode 100644 index 0000000000000000000000000000000000000000..19b96e23753439cd229455e0023def871afd216e GIT binary patch literal 93902 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 |_;Q#!j&I(g+ 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 paragraphs @@ -357,6 +358,10 @@ ;; https://rust-skia.github.io/doc/skia_safe/enum.BlendMode.html (h/call wasm/internal-module "_set_shape_blend_mode" (sr/translate-blend-mode blend-mode))) +(defn set-shape-vertical-align + [vertical-align] + (h/call wasm/internal-module "_set_shape_vertical_align" (sr/serialize-vertical-align vertical-align))) + (defn set-shape-opacity [opacity] (h/call wasm/internal-module "_set_shape_opacity" (or opacity 1))) @@ -630,6 +635,8 @@ (defn set-shape-text-content [shape-id content] (h/call wasm/internal-module "_clear_shape_text") + (set-shape-vertical-align (dm/get-prop content :vertical-align)) + (let [paragraph-set (first (dm/get-prop content :children)) paragraphs (dm/get-prop paragraph-set :children) fonts (fonts/get-content-fonts content) @@ -752,6 +759,7 @@ (when (some? shadows) (set-shape-shadows shadows)) (when (= type :text) (set-shape-grow-type grow-type)) + (when (or (ctl/any-layout? shape) (ctl/any-layout-immediate-child? objects shape)) (set-layout-child shape)) diff --git a/frontend/src/app/render_wasm/serializers.cljs b/frontend/src/app/render_wasm/serializers.cljs index f7dd449e00..779e35b01c 100644 --- a/frontend/src/app/render_wasm/serializers.cljs +++ b/frontend/src/app/render_wasm/serializers.cljs @@ -295,6 +295,10 @@ [value enum-map] (get enum-map value 0)) +(defn serialize-vertical-align + [vertical-align] + (serialize-enum vertical-align {"top" 0 "center" 1 "bottom" 2})) + (defn serialize-text-align [text-align] (serialize-enum text-align {"left" 0 "center" 1 "right" 2 "justify" 3})) diff --git a/render-wasm/src/main.rs b/render-wasm/src/main.rs index e3a486e62d..5cba381bb5 100644 --- a/render-wasm/src/main.rs +++ b/render-wasm/src/main.rs @@ -19,6 +19,7 @@ use math::{Bounds, Matrix}; use mem::SerializableResult; use shapes::{ BoolType, ConstraintH, ConstraintV, StructureEntry, StructureEntryType, TransformEntry, Type, + VerticalAlign, }; use skia_safe as skia; use state::State; @@ -346,6 +347,13 @@ pub extern "C" fn set_shape_blend_mode(mode: i32) { }); } +#[no_mangle] +pub extern "C" fn set_shape_vertical_align(align: u8) { + with_current_shape!(state, |shape: &mut Shape| { + shape.set_vertical_align(VerticalAlign::from(align)); + }); +} + #[no_mangle] pub extern "C" fn set_shape_opacity(opacity: f32) { with_current_shape!(state, |shape: &mut Shape| { diff --git a/render-wasm/src/render/text.rs b/render-wasm/src/render/text.rs index 4b081d9735..a935a906a6 100644 --- a/render-wasm/src/render/text.rs +++ b/render-wasm/src/render/text.rs @@ -1,4 +1,5 @@ use super::{RenderState, Shape, SurfaceId}; +use crate::shapes::VerticalAlign; use skia_safe::{textlayout::Paragraph, Paint, Path}; pub fn render( @@ -11,8 +12,16 @@ pub fn render( .surfaces .canvas(surface_id.unwrap_or(SurfaceId::Fills)); + let container_height = shape.selrect().height(); for group in paragraphs { - let mut offset_y = 0.0; + let total_paragraphs_height: f32 = group.iter().map(|p| p.height()).sum(); + + let mut offset_y = match shape.vertical_align() { + VerticalAlign::Center => (container_height - total_paragraphs_height) / 2.0, + VerticalAlign::Bottom => container_height - total_paragraphs_height, + _ => 0.0, + }; + for skia_paragraph in group { let xy = (shape.selrect().x(), shape.selrect.y() + offset_y); skia_paragraph.paint(canvas, xy); diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 27e21047e3..4e1f88b031 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -156,6 +156,24 @@ impl ConstraintH { } } +#[derive(Debug, Clone, PartialEq, Copy)] +pub enum VerticalAlign { + Top, + Center, + Bottom, +} + +impl VerticalAlign { + pub fn from(value: u8) -> Self { + match value { + 0 => Self::Top, + 1 => Self::Center, + 2 => Self::Bottom, + _ => Self::Top, + } + } +} + #[derive(Debug, Clone, PartialEq, Copy)] pub enum ConstraintV { Top, @@ -195,6 +213,7 @@ pub struct Shape { pub fills: Vec, pub strokes: Vec, pub blend_mode: BlendMode, + pub vertical_align: VerticalAlign, pub blur: Blur, pub opacity: f32, pub hidden: bool, @@ -221,6 +240,7 @@ impl Shape { fills: Vec::with_capacity(1), strokes: Vec::with_capacity(1), blend_mode: BlendMode::default(), + vertical_align: VerticalAlign::Top, opacity: 1., hidden: false, blur: Blur::default(), @@ -312,6 +332,14 @@ impl Shape { self.opacity = opacity; } + pub fn set_vertical_align(&mut self, align: VerticalAlign) { + self.vertical_align = align; + } + + pub fn vertical_align(&self) -> VerticalAlign { + self.vertical_align + } + pub fn set_constraint_h(&mut self, constraint: Option) { self.constraint_h = constraint; }