From b76bfa2197e85068f0d9a9bc1726658c0a726239 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Mon, 3 Nov 2025 16:37:17 +0100 Subject: [PATCH 1/4] :bug: Fix width on rotation --- render-wasm/src/render/text.rs | 7 +++---- render-wasm/src/shapes.rs | 2 +- render-wasm/src/shapes/text.rs | 7 ++++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/render-wasm/src/render/text.rs b/render-wasm/src/render/text.rs index da6974eaa3..5ca7a4cfdf 100644 --- a/render-wasm/src/render/text.rs +++ b/render-wasm/src/render/text.rs @@ -205,10 +205,9 @@ fn draw_text( paragraph_builder_groups: &mut [Vec], ) { let text_content = shape.get_text_content(); - // FIXME: this does not always return the height we need - // let text_height = text_content.size.height; - let text_width = text_content.get_width(); - let text_height = text_content.get_height(text_width); + let selrect_width = shape.selrect().width(); + let text_width = text_content.get_width(selrect_width); + let text_height = text_content.get_height(selrect_width); let selrect_height = shape.selrect().height(); let mut global_offset_y = match shape.vertical_align() { VerticalAlign::Center => (selrect_height - text_height) / 2.0, diff --git a/render-wasm/src/shapes.rs b/render-wasm/src/shapes.rs index 6cac94b620..25902c8d96 100644 --- a/render-wasm/src/shapes.rs +++ b/render-wasm/src/shapes.rs @@ -330,7 +330,7 @@ impl Shape { self.selrect.set_ltrb(left, top, right, bottom); if let Type::Text(ref mut text) = self.shape_type { text.update_layout(self.selrect); - text.set_xywh(left, top, right - left, bottom - top); + text.set_xywh(left, top, self.selrect.width(), self.selrect.height()); } } diff --git a/render-wasm/src/shapes/text.rs b/render-wasm/src/shapes/text.rs index 1e28bdf5ca..4633355a82 100644 --- a/render-wasm/src/shapes/text.rs +++ b/render-wasm/src/shapes/text.rs @@ -403,13 +403,14 @@ impl TextContent { let mut paragraph_builders = self.paragraph_builder_group_from_text(None); let paragraphs = self.build_paragraphs_from_paragraph_builders(&mut paragraph_builders, f32::MAX); + let (width, height) = paragraphs .iter() .flatten() .fold((0.0, 0.0), |(auto_width, auto_height), paragraph| { ( - f32::max(paragraph.max_intrinsic_width(), auto_width), + f32::max(paragraph.longest_line(), auto_width), auto_height + paragraph.height(), ) }); @@ -452,11 +453,11 @@ impl TextContent { TextContentLayoutResult(paragraph_builders, paragraphs, size) } - pub fn get_width(&self) -> f32 { + pub fn get_width(&self, width: f32) -> f32 { if self.grow_type() == GrowType::AutoWidth { self.size.width } else { - self.bounds.width() + width } } From 87fc71b55d5ae2a7b14f778c1fbdca8e95d4c74d Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Mon, 3 Nov 2025 16:48:25 +0100 Subject: [PATCH 2/4] :bug: Ignore non-frequent chars --- render-wasm/src/shapes/text.rs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/render-wasm/src/shapes/text.rs b/render-wasm/src/shapes/text.rs index 4633355a82..a7db77c8f8 100644 --- a/render-wasm/src/shapes/text.rs +++ b/render-wasm/src/shapes/text.rs @@ -754,12 +754,18 @@ impl TextSpan { format!("{}", self.font_family) } + fn remove_ignored_chars(text: &str) -> String { + text.chars() + .filter(|&c| c >= '\u{0020}' && c != '\u{2028}' && c != '\u{2029}') + .collect() + } + pub fn apply_text_transform(&self) -> String { + let text = Self::remove_ignored_chars(&self.text); match self.text_transform { - Some(TextTransform::Uppercase) => self.text.to_uppercase(), - Some(TextTransform::Lowercase) => self.text.to_lowercase(), - Some(TextTransform::Capitalize) => self - .text + Some(TextTransform::Uppercase) => text.to_uppercase(), + Some(TextTransform::Lowercase) => text.to_lowercase(), + Some(TextTransform::Capitalize) => text .split_whitespace() .map(|word| { let mut chars = word.chars(); @@ -770,7 +776,7 @@ impl TextSpan { }) .collect::>() .join(" "), - None => self.text.clone(), + None => text, } } From e673035817808d2b8476211372c02675310cec8c Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Tue, 4 Nov 2025 09:31:28 +0100 Subject: [PATCH 3/4] :wrench: Filter out empty paragraph content --- .../ui/workspace/shapes/text/v2_editor.scss | 2 +- .../src/app/util/text/content/to_dom.cljs | 27 +++++++++++++++---- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.scss b/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.scss index f1ba49ac36..bf89d6093f 100644 --- a/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.scss +++ b/frontend/src/app/main/ui/workspace/shapes/text/v2_editor.scss @@ -35,7 +35,7 @@ } [data-itype="inline"] { - display: inline-block; + display: inline; line-break: auto; line-height: inherit; caret-color: var(--text-editor-caret-color); diff --git a/frontend/src/app/util/text/content/to_dom.cljs b/frontend/src/app/util/text/content/to_dom.cljs index 9b38939aa9..7c7b8af6b7 100644 --- a/frontend/src/app/util/text/content/to_dom.cljs +++ b/frontend/src/app/util/text/content/to_dom.cljs @@ -99,8 +99,9 @@ (dissoc styles :line-height))) (defn get-inline-children - [inline] - [(if (= "" (:text inline)) + [inline paragraph] + [(if (and (= "" (:text inline)) + (= 1 (count (:children paragraph)))) (dom/create-element "br") (dom/create-text (:text inline)))]) @@ -108,6 +109,17 @@ [] (.toString (.floor js/Math (* (.random js/Math) (.-MAX_SAFE_INTEGER js/Number))) 36)) +(defn has-content? + [paragraph] + (some #(not= "" (:text % "")) (:children paragraph))) + +(defn should-filter-empty-paragraph? + [paragraphs index] + (and (not (has-content? (nth paragraphs index))) + (< index (count paragraphs)) + (some has-content? (drop (inc index) paragraphs)) + (every? #(not (has-content? %)) (take (inc index) paragraphs)))) + (defn create-inline [inline paragraph] (create-element @@ -115,7 +127,7 @@ {:id (or (:key inline) (create-random-key)) :data {:itype "inline"} :style (get-inline-styles inline paragraph)} - (get-inline-children inline))) + (get-inline-children inline paragraph))) (defn create-paragraph [paragraph] @@ -128,10 +140,15 @@ (defn create-root [root] - (let [root-styles (get-root-styles root)] + (let [root-styles (get-root-styles root) + paragraphs (get-in root [:children 0 :children]) + filtered-paragraphs (->> paragraphs + (map-indexed vector) + (remove (fn [[index _]] (should-filter-empty-paragraph? paragraphs index))) + (mapv second))] (create-element "div" {:id (or (:key root) (create-random-key)) :data {:itype "root"} :style root-styles} - (mapv create-paragraph (get-in root [:children 0 :children]))))) + (mapv create-paragraph filtered-paragraphs)))) From 24e4ece3233ca2fdbf3aacef1bd84117693ba171 Mon Sep 17 00:00:00 2001 From: Elena Torro Date: Tue, 4 Nov 2025 11:25:14 +0100 Subject: [PATCH 4/4] :bug: Fix line-height rendering on empty lines --- .../render-wasm/get-file-empty-lines.json | 134 ++++++++++++++++++ .../ui/render-wasm-specs/texts.spec.js | 20 +++ ...s-a-file-with-texts-with-empty-lines-1.png | Bin 0 -> 44835 bytes .../ui/workspace/shapes/text/v2_editor.scss | 5 - render-wasm/src/shapes/text.rs | 3 +- 5 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 frontend/playwright/data/render-wasm/get-file-empty-lines.json create mode 100644 frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-empty-lines-1.png diff --git a/frontend/playwright/data/render-wasm/get-file-empty-lines.json b/frontend/playwright/data/render-wasm/get-file-empty-lines.json new file mode 100644 index 0000000000..94eeaa8fbb --- /dev/null +++ b/frontend/playwright/data/render-wasm/get-file-empty-lines.json @@ -0,0 +1,134 @@ +{ + "~:features": { + "~#set": [ + "fdata/path-data", + "design-tokens/v1", + "variants/v1", + "layout/grid", + "fdata/objects-map", + "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": "get-file-empty-lines", + "~:revn": 42, + "~:modified-at": "~m1762249418607", + "~:vern": 0, + "~:id": "~u58c5cc60-d124-81bd-8007-0ecbaf9da983", + "~:is-shared": false, + "~:migrations": { + "~#ordered-set": [ + "legacy-2", + "legacy-3", + "legacy-5", + "legacy-6", + "legacy-7", + "legacy-8", + "legacy-9", + "legacy-10", + "legacy-11", + "legacy-12", + "legacy-13", + "legacy-14", + "legacy-16", + "legacy-17", + "legacy-18", + "legacy-19", + "legacy-25", + "legacy-26", + "legacy-27", + "legacy-28", + "legacy-29", + "legacy-31", + "legacy-32", + "legacy-33", + "legacy-34", + "legacy-36", + "legacy-37", + "legacy-38", + "legacy-39", + "legacy-40", + "legacy-41", + "legacy-42", + "legacy-43", + "legacy-44", + "legacy-45", + "legacy-46", + "legacy-47", + "legacy-48", + "legacy-49", + "legacy-50", + "legacy-51", + "legacy-52", + "legacy-53", + "legacy-54", + "legacy-55", + "legacy-56", + "legacy-57", + "legacy-59", + "legacy-62", + "legacy-65", + "legacy-66", + "legacy-67", + "0001-remove-tokens-from-groups", + "0002-normalize-bool-content-v2", + "0002-clean-shape-interactions", + "0003-fix-root-shape", + "0003-convert-path-content-v2", + "0004-clean-shadow-color", + "0005-deprecate-image-type", + "0006-fix-old-texts-fills", + "0008-fix-library-colors-v4", + "0009-clean-library-colors", + "0009-add-partial-text-touched-flags", + "0010-fix-swap-slots-pointing-non-existent-shapes", + "0011-fix-invalid-text-touched-flags", + "0012-fix-position-data", + "0013-fix-component-path", + "0013-clear-invalid-strokes-and-fills", + "0014-fix-tokens-lib-duplicate-ids", + "0014-clear-components-nil-objects", + "0015-fix-text-attrs-blank-strings", + "0016-copy-fills-from-position-data-to-text-node" + ] + }, + "~:version": 67, + "~:project-id": "~u6bd7c17d-4f59-815e-8006-5c1f68846e43", + "~:created-at": "~m1762247203445", + "~:backend": "legacy-db", + "~:data": { + "~:pages": [ + "~u15222a7a-d3bc-80f1-8007-0d8e166e650f" + ], + "~:pages-index": { + "~u15222a7a-d3bc-80f1-8007-0d8e166e650f": { + "~:id": "~u15222a7a-d3bc-80f1-8007-0d8e166e650f", + "~:name": "Page 1", + "~:objects": { + "~#penpot/objects-map/v2": { + "~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]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.0]],[\"^:\",[\"^ \",\"~:x\",0.01,\"~:y\",0.01]],[\"^:\",[\"^ \",\"~:x\",0.0,\"~:y\",0.01]]],\"~:r2\",0,\"~:proportion-lock\",false,\"~:transform-inverse\",[\"^3\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:page-id\",\"~u15222a7a-d3bc-80f1-8007-0d8e166e650f\",\"~: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,\"^6\",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,\"^I\",0.01,\"~:flip-y\",null,\"~:shapes\",[\"~u956aea6c-4e59-80cd-8007-0ed28aaab090\",\"~u956aea6c-4e59-80cd-8007-0ed28aaab08f\",\"~u956aea6c-4e59-80cd-8007-0ed28aaab08e\"]]]", + "~u956aea6c-4e59-80cd-8007-0ed28aaab08e": "[\"~#shape\",[\"^ \",\"~:y\",599.000012199947,\"~: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-height\",\"~:content\",[\"^ \",\"~:type\",\"root\",\"~:key\",\"81sn4kpbwm\",\"~:children\",[[\"^ \",\"^7\",\"paragraph-set\",\"^9\",[[\"^ \",\"~:line-height\",\"1.2\",\"~:font-style\",\"normal\",\"^9\",[[\"^ \",\"^:\",\"\",\"^;\",\"normal\",\"~:typography-ref-id\",null,\"~:text-transform\",\"none\",\"~:font-id\",\"sourcesanspro\",\"^8\",\"19xnuot3lpp\",\"~:font-size\",\"14\",\"~:font-weight\",\"400\",\"~:typography-ref-file\",null,\"~:font-variant-id\",\"regular\",\"~:text-decoration\",\"none\",\"~:letter-spacing\",\"0\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#565251\",\"~:fill-opacity\",1]],\"~:font-family\",\"sourcesanspro\",\"~:text\",\"Select any object on the canvas or choose a layer from the list of \"],[\"^ \",\"^:\",\"\",\"^;\",\"normal\",\"^<\",null,\"^=\",\"uppercase\",\"^>\",\"sourcesanspro\",\"^8\",\"6nyk1x5695\",\"^?\",\"14\",\"^@\",\"400\",\"^A\",null,\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^H\",\"sourcesanspro\",\"^I\",\"Layers\"],[\"^ \",\"^:\",\"\",\"^;\",\"normal\",\"^<\",null,\"^=\",\"uppercase\",\"^>\",\"sourcesanspro\",\"^8\",\"z7cm9xwf1\",\"^?\",\"14\",\"^@\",\"400\",\"^A\",null,\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^H\",\"sourcesanspro\",\"^I\",\" \"],[\"^ \",\"^:\",\"\",\"^;\",\"normal\",\"^<\",null,\"^=\",\"none\",\"^>\",\"sourcesanspro\",\"^8\",\"2kkq1gh843\",\"^?\",\"14\",\"^@\",\"400\",\"^A\",null,\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^H\",\"sourcesanspro\",\"^I\",\"in the \"],[\"^ \",\"^:\",\"\",\"^;\",\"normal\",\"^<\",null,\"^=\",\"none\",\"^>\",\"sourcesanspro\",\"^8\",\"22pap590a8p\",\"^?\",\"14\",\"^@\",\"400\",\"^A\",null,\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^H\",\"sourcesanspro\",\"^I\",\"←\"],[\"^ \",\"^:\",\"\",\"^;\",\"normal\",\"^<\",null,\"^=\",\"none\",\"^>\",\"sourcesanspro\",\"^8\",\"hgie5tzklf\",\"^?\",\"14\",\"^@\",\"400\",\"^A\",null,\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^H\",\"sourcesanspro\",\"^I\",\" left sidebar. \"]],\"^<\",null,\"^=\",\"none\",\"~:text-align\",\"left\",\"^>\",\"sourcesanspro\",\"^8\",\"b48lv\",\"^?\",\"0\",\"^@\",\"400\",\"^A\",null,\"~:text-direction\",\"ltr\",\"^7\",\"paragraph\",\"^B\",\"regular\",\"^C\",\"none\",\"^D\",\"0\",\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^H\",\"sourcesanspro\"]]]],\"~:vertical-align\",\"\"],\"~:name\",\"text-with-empty-lines\",\"~:width\",179.99999284744285,\"^7\",\"^I\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",785.9999587189424,\"~:y\",599.000012199947]],[\"^P\",[\"^ \",\"~:x\",965.9999515663852,\"~:y\",599.000012199947]],[\"^P\",[\"^ \",\"~:x\",965.9999515663852,\"~:y\",669.0000129290239]],[\"^P\",[\"^ \",\"~:x\",785.9999587189424,\"~:y\",669.0000129290239]]],\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:page-id\",\"~u15222a7a-d3bc-80f1-8007-0d8e166e650f\",\"~:id\",\"~u956aea6c-4e59-80cd-8007-0ed28aaab08e\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:applied-tokens\",[\"^ \"],\"~:position-data\",[[\"^ \",\"~:y\",616.4999978374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"~:y1\",-1,\"^N\",156.859375,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",785.9999919000137,\"~:x1\",0,\"~:y2\",17.5,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"~:x2\",156.859375,\"~:direction\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"~:height\",18.5,\"^I\",\"Select any object on the \"],[\"^ \",\"~:y\",633.2968728374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"^W\",15.796875,\"^N\",158.34375,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",785.9999919000137,\"^X\",0,\"^Y\",34.296875,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",158.34375,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\"canvas or choose a layer \"],[\"^ \",\"~:y\",650.0937478374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"^W\",32.59375,\"^N\",95.1953125,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",785.9999919000137,\"^X\",0,\"^Y\",51.09375,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",95.1953125,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\"from the list of \"],[\"^ \",\"~:y\",650.0937478374983,\"^;\",\"normal\",\"^=\",\"uppercase\",\"^?\",\"14px\",\"^@\",\"700\",\"^W\",32.59375,\"^N\",49.7265625,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",881.1953044000137,\"^X\",95.1953125,\"^Y\",51.09375,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",144.921875,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\"Layers\"],[\"^ \",\"~:y\",650.0937478374983,\"^;\",\"normal\",\"^=\",\"uppercase\",\"^?\",\"14px\",\"^@\",\"400\",\"^W\",32.59375,\"^N\",3.53125,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",930.9218669000137,\"^X\",144.921875,\"^Y\",51.09375,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",148.453125,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\" \"],[\"^ \",\"~:y\",650.0937478374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"^W\",32.59375,\"^N\",14.5234375,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",934.4531169000137,\"^X\",148.453125,\"^Y\",51.09375,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",162.9765625,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\"in \"],[\"^ \",\"~:y\",666.8906228374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"^W\",49.390625,\"^N\",24.4140625,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",785.9999919000137,\"^X\",0,\"^Y\",67.890625,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",24.4140625,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\"the \"],[\"^ \",\"~:y\",666.8906228374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"700\",\"^W\",49.390625,\"^N\",13.8046875,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",810.4140544000137,\"^X\",24.4140625,\"^Y\",67.890625,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",38.21875,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\"←\"],[\"^ \",\"~:y\",666.8906228374983,\"^;\",\"normal\",\"^=\",\"none\",\"^?\",\"14px\",\"^@\",\"400\",\"^W\",49.390625,\"^N\",80.3984375,\"^C\",\"none solid rgb(86, 82, 81)\",\"^D\",\"-0.2px\",\"~:x\",824.2187419000137,\"^X\",38.21875,\"^Y\",67.890625,\"^E\",[[\"^ \",\"^F\",\"#565251\",\"^G\",1]],\"^Z\",118.6171875,\"^[\",\"ltr\",\"^H\",\"\\\"DM Sans\\\"\",\"^10\",18.5,\"^I\",\" left sidebar. \"]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",785.9999587189424,\"~:blocked\",false,\"~:selrect\",[\"~#rect\",[\"^ \",\"~:x\",785.9999587189424,\"~:y\",599.000012199947,\"^N\",179.99999284744285,\"^10\",70.00000072907687,\"^X\",785.9999587189424,\"^W\",599.000012199947,\"^Z\",965.9999515663852,\"^Y\",669.0000129290239]],\"^E\",[],\"~:flip-x\",null,\"^10\",70.00000072907687,\"~:flip-y\",null]]", + "~u956aea6c-4e59-80cd-8007-0ed28aaab08f": "[\"~#shape\",[\"^ \",\"~:y\",702.000011765276,\"~: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-height\",\"~:content\",[\"^ \",\"~:type\",\"root\",\"~:children\",[[\"^ \",\"^7\",\"paragraph-set\",\"^8\",[[\"^ \",\"~:font-style\",\"normal\",\"^8\",[[\"^ \",\"~:text\",\"\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#565251\",\"~:fill-opacity\",1]],\"~:font-id\",\"sourcesanspro\",\"~:font-family\",\"sourcesanspro\",\"~:font-variant-id\",\"regular\",\"~:font-weight\",\"400\",\"^9\",\"normal\",\"~:letter-spacing\",\"0\"]],\"^>\",\"sourcesanspro\",\"~:key\",\"rakh\",\"^A\",\"400\",\"^7\",\"paragraph\",\"^@\",\"regular\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\"],[\"^ \",\"^9\",\"normal\",\"^8\",[[\"^ \",\"^:\",\"\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^>\",\"sourcesanspro\",\"^?\",\"sourcesanspro\",\"^@\",\"regular\",\"^A\",\"400\",\"^9\",\"normal\",\"^B\",\"0\"]],\"^>\",\"sourcesanspro\",\"^C\",\"3n2nr\",\"^A\",\"400\",\"^7\",\"paragraph\",\"^@\",\"regular\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\"],[\"^ \",\"~:line-height\",\"1.2\",\"^9\",\"normal\",\"^8\",[[\"^ \",\"^D\",\"1.2\",\"^9\",\"normal\",\"~:text-transform\",\"none\",\"^>\",\"sourcesanspro\",\"~:font-size\",\"14\",\"^A\",\"400\",\"^@\",\"regular\",\"~:text-decoration\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\",\"^:\",\"In the \"],[\"^ \",\"^D\",\"1.2\",\"^9\",\"normal\",\"^E\",\"uppercase\",\"^>\",\"sourcesanspro\",\"^F\",\"14\",\"^A\",\"400\",\"^@\",\"regular\",\"^G\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\",\"^:\",\"TOKENS\"],[\"^ \",\"^D\",\"1.2\",\"^9\",\"normal\",\"^E\",\"uppercase\",\"^>\",\"sourcesanspro\",\"^F\",\"14\",\"^A\",\"400\",\"^@\",\"regular\",\"^G\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\",\"^:\",\" \"],[\"^ \",\"^D\",\"1.2\",\"^9\",\"normal\",\"^E\",\"none\",\"^>\",\"sourcesanspro\",\"^F\",\"14\",\"^A\",\"400\",\"^@\",\"regular\",\"^G\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\",\"^:\",\"tab, right click any design token to show the token menu. There you can see how the token can be applied to your selected layer.\"]],\"^E\",\"none\",\"^>\",\"sourcesanspro\",\"^C\",\"7usjj\",\"^F\",\"14\",\"^A\",\"400\",\"^7\",\"paragraph\",\"^@\",\"regular\",\"^G\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\"]]]],\"^;\",[]],\"~:name\",\"text-with-empty-lines-2\",\"~:width\",179.99999284744263,\"^7\",\"^:\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",785.9999587189404,\"~:y\",702.000011765276]],[\"^K\",[\"^ \",\"~:x\",965.9999515663831,\"~:y\",702.000011765276]],[\"^K\",[\"^ \",\"~:x\",965.9999515663831,\"~:y\",804.0000067346009]],[\"^K\",[\"^ \",\"~:x\",785.9999587189404,\"~:y\",804.0000067346009]]],\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:page-id\",\"~u15222a7a-d3bc-80f1-8007-0d8e166e650f\",\"~:id\",\"~u956aea6c-4e59-80cd-8007-0ed28aaab08f\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:applied-tokens\",[\"^ \",\"~:fill\",\"layerBase.text\"],\"~:position-data\",[[\"~#rect\",[\"^ \",\"~:y\",719.5036141705059,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"~:y1\",-0.5333404541015625,\"^I\",38.81666564941406,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"~:x1\",0,\"~:y2\",17.333328247070312,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"~:x2\",38.81666564941406,\"~:direction\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"~:height\",17.866668701171875,\"^:\",\"In the \"]],[\"^S\",[\"^ \",\"~:y\",719.5036141705059,\"^9\",\"normal\",\"^E\",\"uppercase\",\"^F\",\"14px\",\"^A\",\"700\",\"^T\",-0.5333404541015625,\"^I\",54.93333435058594,\"^G\",\"none\",\"^B\",\"normal\",\"~:x\",825.303229815053,\"^U\",38.81666564941406,\"^V\",17.333328247070312,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",93.75,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"TOKENS\"]],[\"^S\",[\"^ \",\"~:y\",719.5036141705059,\"^9\",\"normal\",\"^E\",\"uppercase\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",-0.5333404541015625,\"^I\",3.51666259765625,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",880.2365641656389,\"^U\",93.75,\"^V\",17.333328247070312,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",97.26666259765625,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\" \"]],[\"^S\",[\"^ \",\"~:y\",736.3036172222637,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",16.26666259765625,\"^I\",162.96665954589844,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"^U\",0,\"^V\",34.133331298828125,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",162.96665954589844,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"tab, right click any design \"]],[\"^S\",[\"^ \",\"~:y\",753.1036202740215,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",33.06666564941406,\"^I\",154.86666870117188,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"^U\",0,\"^V\",50.93333435058594,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",154.86666870117188,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"token to show the token \"]],[\"^S\",[\"^ \",\"~:y\",769.9036233257793,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",49.866668701171875,\"^I\",159.73333740234375,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"^U\",0,\"^V\",67.73333740234375,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",159.73333740234375,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"menu. There you can see \"]],[\"^S\",[\"^ \",\"~:y\",786.7036263775371,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",66.66667175292969,\"^I\",139.11666870117188,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"^U\",0,\"^V\",84.53334045410156,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",139.11666870117188,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"how the token can be \"]],[\"^S\",[\"^ \",\"~:y\",803.5036141705059,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",83.46665954589844,\"^I\",156.25,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"^U\",0,\"^V\",101.33332824707031,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",156.25,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"applied to your selected \"]],[\"^S\",[\"^ \",\"~:y\",820.3036172222637,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^T\",100.26666259765625,\"^I\",31.76666259765625,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.4865641656389,\"^U\",0,\"^V\",118.13333129882812,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^W\",31.76666259765625,\"^X\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^Y\",17.866668701171875,\"^:\",\"layer.\"]]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",785.9999587189404,\"~:blocked\",false,\"~:selrect\",[\"^S\",[\"^ \",\"~:x\",785.9999587189404,\"~:y\",702.000011765276,\"^I\",179.99999284744263,\"^Y\",101.99999496932492,\"^U\",785.9999587189404,\"^T\",702.000011765276,\"^W\",965.9999515663831,\"^V\",804.0000067346009]],\"^;\",[],\"~:flip-x\",null,\"^Y\",101.99999496932492,\"~:flip-y\",null]]", + "~u956aea6c-4e59-80cd-8007-0ed28aaab090": "[\"~#shape\",[\"^ \",\"~:y\",841.000011432478,\"~: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-height\",\"~:content\",[\"^ \",\"~:type\",\"root\",\"~:children\",[[\"^ \",\"^7\",\"paragraph-set\",\"^8\",[[\"^ \",\"~:font-style\",\"normal\",\"^8\",[[\"^ \",\"~:text\",\"\",\"~:fills\",[[\"^ \",\"~:fill-color\",\"#565251\",\"~:fill-opacity\",1]],\"~:font-id\",\"sourcesanspro\",\"~:font-family\",\"sourcesanspro\",\"~:font-variant-id\",\"regular\",\"~:font-weight\",\"400\",\"^9\",\"normal\",\"~:letter-spacing\",\"0\"]],\"^>\",\"sourcesanspro\",\"~:key\",\"rakh\",\"^A\",\"400\",\"^7\",\"paragraph\",\"^@\",\"regular\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\"],[\"^ \",\"^9\",\"normal\",\"^8\",[[\"^ \",\"^:\",\"\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^>\",\"sourcesanspro\",\"^?\",\"sourcesanspro\",\"^@\",\"regular\",\"^A\",\"400\",\"^9\",\"normal\",\"^B\",\"0\"]],\"^>\",\"sourcesanspro\",\"^C\",\"3n2nr\",\"^A\",\"400\",\"^7\",\"paragraph\",\"^@\",\"regular\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\"],[\"^ \",\"~:line-height\",\"1.2\",\"^9\",\"normal\",\"^8\",[[\"^ \",\"^D\",\"1.2\",\"^9\",\"normal\",\"~:text-transform\",\"none\",\"^>\",\"sourcesanspro\",\"~:font-size\",\"14\",\"^A\",\"400\",\"^@\",\"regular\",\"~:text-decoration\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\",\"^:\",\"Check/uncheck the property names to apply/remove the token from the properties of your selected layer.\"]],\"^E\",\"none\",\"^>\",\"sourcesanspro\",\"^C\",\"7usjj\",\"^F\",\"14\",\"^A\",\"400\",\"^7\",\"paragraph\",\"^@\",\"regular\",\"^G\",\"none\",\"^B\",\"0\",\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^?\",\"sourcesanspro\"]]]],\"^;\",[]],\"~:name\",\"text-with-empty-lines-3\",\"~:width\",179.99999284744263,\"^7\",\"^:\",\"~:points\",[[\"~#point\",[\"^ \",\"~:x\",785.9999587189404,\"~:y\",841.000011432478]],[\"^K\",[\"^ \",\"~:x\",965.9999515663831,\"~:y\",841.000011432478]],[\"^K\",[\"^ \",\"~:x\",965.9999515663831,\"~:y\",909.0000123861524]],[\"^K\",[\"^ \",\"~:x\",785.9999587189404,\"~:y\",909.0000123861524]]],\"~:layout-item-h-sizing\",\"~:fill\",\"~:transform-inverse\",[\"^2\",[\"^ \",\"~:a\",1.0,\"~:b\",0.0,\"~:c\",0.0,\"~:d\",1.0,\"~:e\",0.0,\"~:f\",0.0]],\"~:page-id\",\"~u15222a7a-d3bc-80f1-8007-0d8e166e650f\",\"~:constraints-v\",\"~:top\",\"~:constraints-h\",\"~:left\",\"~:id\",\"~u956aea6c-4e59-80cd-8007-0ed28aaab090\",\"~:parent-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:applied-tokens\",[\"^ \",\"^M\",\"layerBase.text\"],\"~:position-data\",[[\"~#rect\",[\"^ \",\"~:y\",858.0036384892012,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"~:y1\",-0.5333404541015625,\"^I\",126.98333740234375,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.8198161187639,\"~:x1\",0,\"~:y2\",17.333328247070312,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"~:x2\",126.98333740234375,\"~:direction\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"~:height\",17.866668701171875,\"^:\",\"Check/uncheck the \"]],[\"^X\",[\"^ \",\"~:y\",874.803641540959,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^Y\",16.26666259765625,\"^I\",160.88333129882812,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.8198161187639,\"^Z\",0,\"^[\",34.133331298828125,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^10\",160.88333129882812,\"^11\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^12\",17.866668701171875,\"^:\",\"property names to apply/\"]],[\"^X\",[\"^ \",\"~:y\",891.6036445927168,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^Y\",33.06666564941406,\"^I\",171.14999389648438,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.8198161187639,\"^Z\",0,\"^[\",50.93333435058594,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^10\",171.14999389648438,\"^11\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^12\",17.866668701171875,\"^:\",\"remove the token from the \"]],[\"^X\",[\"^ \",\"~:y\",908.4036476444746,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^Y\",49.866668701171875,\"^I\",116.71665954589844,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.8198161187639,\"^Z\",0,\"^[\",67.73333740234375,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^10\",116.71665954589844,\"^11\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^12\",17.866668701171875,\"^:\",\"properties of your \"]],[\"^X\",[\"^ \",\"~:y\",925.2036506962324,\"^9\",\"normal\",\"^E\",\"none\",\"^F\",\"14px\",\"^A\",\"400\",\"^Y\",66.66667175292969,\"^I\",89.51666259765625,\"^G\",\"none\",\"^B\",\"-0.2px\",\"~:x\",786.8198161187639,\"^Z\",0,\"^[\",84.53334045410156,\"^;\",[[\"^ \",\"^<\",\"#565251\",\"^=\",1]],\"^10\",89.51666259765625,\"^11\",\"ltr\",\"^?\",\"\\\"DM Sans\\\"\",\"^12\",17.866668701171875,\"^:\",\"selected layer.\"]]],\"~:frame-id\",\"~u00000000-0000-0000-0000-000000000000\",\"~:strokes\",[],\"~:x\",785.9999587189404,\"~:blocked\",false,\"~:selrect\",[\"^X\",[\"^ \",\"~:x\",785.9999587189404,\"~:y\",841.000011432478,\"^I\",179.99999284744263,\"^12\",68.00000095367443,\"^Z\",785.9999587189404,\"^Y\",841.000011432478,\"^10\",965.9999515663831,\"^[\",909.0000123861524]],\"^;\",[],\"~:flip-x\",null,\"^12\",68.00000095367443,\"~:flip-y\",null]]" + } + } + } + }, + "~:id": "~u58c5cc60-d124-81bd-8007-0ecbaf9da983", + "~: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 7c7f33da29..56f593104f 100644 --- a/frontend/playwright/ui/render-wasm-specs/texts.spec.js +++ b/frontend/playwright/ui/render-wasm-specs/texts.spec.js @@ -367,6 +367,26 @@ test("Renders a file with texts with tabs", async ({ await expect(workspace.canvas).toHaveScreenshot(); }); +test("Renders a file with texts with empty lines", async ({ + page, +}) => { + const workspace = new WasmWorkspacePage(page); + await workspace.setupEmptyFile(); + await workspace.mockGetFile("render-wasm/get-file-empty-lines.json"); + + await workspace.goToWorkspace({ + id: "58c5cc60-d124-81bd-8007-0ecbaf9da983", + pageId: "15222a7a-d3bc-80f1-8007-0d8e166e650f", + }); + + await workspace.waitForFirstRender({ hideUI: false }); + await workspace.clickLeafLayer("text-with-empty-lines-2"); + await workspace.hideUI(); + await workspace.page.keyboard.press("Enter"); + + await expect(workspace.canvas).toHaveScreenshot(); +}); + test.skip("Updates text alignment edition - part 1", async ({ page }) => { const workspace = new WasmWorkspacePage(page); await workspace.setupEmptyFile(); diff --git a/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-empty-lines-1.png b/frontend/playwright/ui/render-wasm-specs/texts.spec.js-snapshots/Renders-a-file-with-texts-with-empty-lines-1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca87b055467ebc33b846d6b0861887ea436c5e0d GIT binary patch literal 44835 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 qxp?Mv&`>DD0smRhEI{=d ParagraphStyle { let mut style = ParagraphStyle::default(); @@ -712,7 +711,7 @@ impl TextSpan { style.set_font_families(&font_families); style.set_font_size(self.font_size); style.set_letter_spacing(self.letter_spacing); - style.set_half_leading(true); + style.set_half_leading(false); style }