From 37098594bb939a8269a3a1f7a4c6e507ed45c2da Mon Sep 17 00:00:00 2001 From: Tim Froehlich Date: Fri, 15 Nov 2024 20:12:09 +0000 Subject: [PATCH] Refactor: Move meter data to definition package (#1782) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Based on PR #1774 ## Chain of upstream PRs as of 2024-11-14 * PR #1774: `main` ← `wb/froeht/protoconv-layout-positioning` * **PR #1782 (THIS ONE)**: `wb/froeht/protoconv-layout-positioning` ← `wb/froeht/1731-meter-data` Moves the meter data types from the legacy_definition package to the definition package. This change simplifies the codebase by removing the redundant legacy_definition package. Additionally, this change refactors the DesignCompose code to use the new meter data types. --- crates/dc_bundle/src/legacy_definition.rs | 1 - .../dc_bundle/src/legacy_definition/plugin.rs | 17 ---- .../src/legacy_definition/view/node_style.rs | 2 +- crates/figma_import/src/lib.rs | 2 +- .../src/meter_schema.rs} | 60 +++++++------ crates/figma_import/src/reflection.rs | 14 ++- crates/figma_import/src/toolkit_style.rs | 62 ------------- crates/figma_import/src/transform_flexbox.rs | 85 ++++++++++++++---- .../figma_import/tests/layout-unit-tests.dcf | Bin 27687 -> 27687 bytes crates/figma_import/tests/test_fetches.rs | 25 ++++-- ...signSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf | Bin 400548 -> 400548 bytes .../com/android/designcompose/FrameRender.kt | 44 ++++----- ...lignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf | Bin 445672 -> 445672 bytes .../BattleshipDoc_RfGl9SWnBEvdg8T1Ex6ZAR.dcf | Bin 1023147 -> 1023147 bytes ...onentReplaceDoc_bQVVy2GSZJ8veYaJUrG6Ni.dcf | Bin 19744 -> 19744 bytes ...laceRelayoutDoc_qIh0IOQTCtgeAWZFF5gYSk.dcf | Bin 3831 -> 3823 bytes ...tTapCallbackDoc_1jeKYynjk1nqYblZ66QDDK.dcf | Bin 8802 -> 8802 bytes ...lsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf | Bin 252455 -> 251958 bytes ...ancyFillTestDoc_xQ9cunHt8VUm6xqJJ2Pjb2.dcf | Bin 80809 -> 80809 bytes .../GridLayoutDoc_MBNjjSbzzKeN7nBjVoewsl.dcf | Bin 33238 -> 33238 bytes ...idLayoutTestDoc_JOSOEvsrjvMqanyQa5OpNR.dcf | Bin 167308 -> 167308 bytes ...idWidgetTestDoc_OBhNItd9i9J2LwVYuLxEIx.dcf | Bin 332463 -> 332463 bytes ...nDoc_v62Vwlxa4Bb6nopJiAxQAQ_5668177823.dcf | Bin 29874 -> 29874 bytes ...geUpdateTestDoc_oQw7kiy94fvdVouCYBC9T0.dcf | Bin 24044 -> 24044 bytes ...eractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf | Bin 315462 -> 315462 bytes ...mSpacingTestDoc_YXrHBp6C6OaW5ShcCYeGJc.dcf | Bin 37134 -> 37134 bytes ...lacementTestDoc_dwk2GF7RiNvlbbAKPjqldx.dcf | Bin 14313 -> 14313 bytes .../LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf | Bin 192960 -> 192960 bytes ...stWidgetTestDoc_9ev0MBNHFrgTqJOrAGcEpV.dcf | Bin 260090 -> 260090 bytes .../MaskTestDoc_mEmdUVEIjvBBbV0kELPy37.dcf | Bin 34618 -> 34618 bytes ...oduleExampleDoc_hPEGkrF0LUqNYEZObXqjXZ.dcf | Bin 34638 -> 34638 bytes ...OpenLinkTestDoc_r7m4tqyKv6y9DWcg7QBEDf.dcf | Bin 26003 -> 26003 bytes ...stomizationsDoc_o0GWzcqdOWEgzj4kIeIlAu.dcf | Bin 6992 -> 6992 bytes .../ShadowsTestDoc_OqK58Y46IqP4wIgKCWys48.dcf | Bin 202364 -> 202364 bytes ...tAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf | Bin 1896145 -> 1896145 bytes ...stomizationsDoc_POWyniB6moGRmhZTJyejwa.dcf | Bin 21981 -> 21981 bytes ...TelltaleTestDoc_TZgHrKWx8wvQM7UPTyEpmz.dcf | Bin 52404 -> 52404 bytes ...extElideTestDoc_oQ7nK49Ya5PJ3GpjI5iy8d.dcf | Bin 6922 -> 6922 bytes ...leBorderTestDoc_MWnVAfW3FupV4VMLNR1m67.dcf | Bin 28086 -> 28086 bytes ...ariablesTestDoc_HhGxvL4aHhP8ALsLNz56TP.dcf | Bin 58311 -> 58311 bytes ...nimationTestDoc_pghyUUhlzJNoxxSK86ngiw.dcf | Bin 1348651 -> 1348651 bytes ...TimelineTestDoc_vJRf4zxY4QX4zzSSUd1nJ5.dcf | Bin 1732689 -> 1732689 bytes ...AsteriskTestDoc_gQeYHGCSaBE4zYSFpBrhre.dcf | Bin 27303 -> 27303 bytes ...ractionsTestDoc_WcsgoLR4aDRSkZHY29Qdhq.dcf | Bin 54835 -> 54835 bytes ...opertiesTestDoc_4P7zDdrQxj7FZsKJoIQcx1.dcf | Bin 133566 -> 133566 bytes proto/definition/plugin/meter_data.proto | 8 ++ .../TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf | Bin 55727 -> 55727 bytes 47 files changed, 156 insertions(+), 164 deletions(-) delete mode 100644 crates/dc_bundle/src/legacy_definition/plugin.rs rename crates/{dc_bundle/src/legacy_definition/plugin/meter_data.rs => figma_import/src/meter_schema.rs} (55%) delete mode 100644 crates/figma_import/src/toolkit_style.rs diff --git a/crates/dc_bundle/src/legacy_definition.rs b/crates/dc_bundle/src/legacy_definition.rs index d7832432e..4d673fcc1 100644 --- a/crates/dc_bundle/src/legacy_definition.rs +++ b/crates/dc_bundle/src/legacy_definition.rs @@ -28,7 +28,6 @@ use crate::definition::element::VariableMap; use crate::legacy_definition::element::node::NodeQuery; pub mod element; -pub mod plugin; pub mod view; /// EncodedImageMap contains a mapping from ImageKey to network bytes. It can create an diff --git a/crates/dc_bundle/src/legacy_definition/plugin.rs b/crates/dc_bundle/src/legacy_definition/plugin.rs deleted file mode 100644 index 696641381..000000000 --- a/crates/dc_bundle/src/legacy_definition/plugin.rs +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -pub mod meter_data; diff --git a/crates/dc_bundle/src/legacy_definition/view/node_style.rs b/crates/dc_bundle/src/legacy_definition/view/node_style.rs index 2c2bc33b8..746cc7636 100644 --- a/crates/dc_bundle/src/legacy_definition/view/node_style.rs +++ b/crates/dc_bundle/src/legacy_definition/view/node_style.rs @@ -27,7 +27,7 @@ use crate::definition::modifier::{ BlendMode, FilterOp, TextAlign, TextAlignVertical, TextOverflow, }; use crate::definition::modifier::{BoxShadow, LayoutTransform, TextShadow}; -use crate::legacy_definition::plugin::meter_data::MeterData; +use crate::definition::plugin::meter_data::MeterData; use serde::{Deserialize, Serialize}; #[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)] diff --git a/crates/figma_import/src/lib.rs b/crates/figma_import/src/lib.rs index 84da945a2..bfe8c5908 100644 --- a/crates/figma_import/src/lib.rs +++ b/crates/figma_import/src/lib.rs @@ -26,8 +26,8 @@ mod extended_layout_schema; mod fetch; mod figma_schema; mod image_context; +pub mod meter_schema; pub mod reaction_schema; -pub mod toolkit_style; pub mod tools; mod transform_flexbox; mod variable_utils; diff --git a/crates/dc_bundle/src/legacy_definition/plugin/meter_data.rs b/crates/figma_import/src/meter_schema.rs similarity index 55% rename from crates/dc_bundle/src/legacy_definition/plugin/meter_data.rs rename to crates/figma_import/src/meter_schema.rs index 5e9cb2310..dfdf8c42e 100644 --- a/crates/dc_bundle/src/legacy_definition/plugin/meter_data.rs +++ b/crates/figma_import/src/meter_schema.rs @@ -1,24 +1,27 @@ -/* - * Copyright 2024 Google LLC - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//! `toolkit_style` contains all of the style-related types that `toolkit_schema::View` +//! uses. + +use crate::figma_schema; use serde::{Deserialize, Serialize}; #[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] #[serde(rename_all = "camelCase")] -pub struct RotationMeterData { +pub struct RotationMeterJson { pub enabled: bool, pub start: f32, pub end: f32, @@ -28,7 +31,7 @@ pub struct RotationMeterData { #[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] #[serde(rename_all = "camelCase")] -pub struct ArcMeterData { +pub struct ArcMeterJson { pub enabled: bool, pub start: f32, pub end: f32, @@ -39,7 +42,7 @@ pub struct ArcMeterData { #[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] #[serde(rename_all = "camelCase")] -pub struct ProgressBarMeterData { +pub struct ProgressBarMeterJson { pub enabled: bool, pub discrete: bool, pub discrete_value: f32, @@ -53,7 +56,7 @@ pub struct ProgressBarMeterData { #[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] #[serde(rename_all = "camelCase")] -pub struct ProgressMarkerMeterData { +pub struct ProgressMarkerMeterJson { pub enabled: bool, pub discrete: bool, pub discrete_value: f32, @@ -69,22 +72,23 @@ pub struct ProgressMarkerMeterData { pub end_y: f32, } -// Schema for progress vector data that we write to serialized data +// Schema for progress vector data that we read from Figma plugin data #[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] #[serde(rename_all = "camelCase")] -pub struct ProgressVectorMeterData { +pub struct ProgressVectorMeterJson { pub enabled: bool, pub discrete: bool, pub discrete_value: f32, + pub paths: Vec, } -// Schema for dials & gauges data that we write to serialized data +// Schema for dials & gauges Figma plugin data #[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] #[serde(rename_all = "camelCase")] -pub enum MeterData { - ArcData(ArcMeterData), - RotationData(RotationMeterData), - ProgressBarData(ProgressBarMeterData), - ProgressMarkerData(ProgressMarkerMeterData), - ProgressVectorData(ProgressVectorMeterData), +pub enum MeterJson { + ArcData(ArcMeterJson), + RotationData(RotationMeterJson), + ProgressBarData(ProgressBarMeterJson), + ProgressMarkerData(ProgressMarkerMeterJson), + ProgressVectorData(ProgressVectorMeterJson), } diff --git a/crates/figma_import/src/reflection.rs b/crates/figma_import/src/reflection.rs index 887b6f517..914be5179 100644 --- a/crates/figma_import/src/reflection.rs +++ b/crates/figma_import/src/reflection.rs @@ -95,23 +95,19 @@ pub fn registry() -> serde_reflection::Result { .trace_type::(&samples) .expect("couldn't trace GridLayoutType"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace RotationMeterData"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace ArcMeterData"); tracer - .trace_type::( - &samples, - ) + .trace_type::(&samples) .expect("couldn't trace ProgressBarMeterData"); tracer - .trace_type::( - &samples, - ) + .trace_type::(&samples) .expect("couldn't trace ProgressVectorMeterData"); tracer - .trace_type::(&samples) + .trace_type::(&samples) .expect("couldn't trace MeterData"); tracer .trace_type::(&samples) diff --git a/crates/figma_import/src/toolkit_style.rs b/crates/figma_import/src/toolkit_style.rs deleted file mode 100644 index c9ac4d3ca..000000000 --- a/crates/figma_import/src/toolkit_style.rs +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright 2023 Google LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -//! `toolkit_style` contains all of the style-related types that `toolkit_schema::View` -//! uses. - -use crate::figma_schema; -use dc_bundle::legacy_definition::plugin::meter_data::{ - ArcMeterData, MeterData, ProgressBarMeterData, ProgressMarkerMeterData, - ProgressVectorMeterData, RotationMeterData, -}; -use serde::{Deserialize, Serialize}; - -// Schema for progress vector data that we read from Figma plugin data -#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)] -#[serde(rename_all = "camelCase")] -pub struct ProgressVectorMeterDataSchema { - pub enabled: bool, - pub discrete: bool, - pub discrete_value: f32, - pub paths: Vec, -} - -// Schema for dials & gauges Figma plugin data -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)] -#[serde(rename_all = "camelCase")] -pub enum MeterDataSchema { - ArcData(ArcMeterData), - RotationData(RotationMeterData), - ProgressBarData(ProgressBarMeterData), - ProgressMarkerData(ProgressMarkerMeterData), - ProgressVectorData(ProgressVectorMeterDataSchema), -} - -impl Into for MeterDataSchema { - fn into(self) -> MeterData { - match self { - MeterDataSchema::ArcData(data) => MeterData::ArcData(data), - MeterDataSchema::RotationData(data) => MeterData::RotationData(data), - MeterDataSchema::ProgressBarData(data) => MeterData::ProgressBarData(data), - MeterDataSchema::ProgressMarkerData(data) => MeterData::ProgressMarkerData(data), - MeterDataSchema::ProgressVectorData(data) => { - MeterData::ProgressVectorData(ProgressVectorMeterData { - enabled: data.enabled, - discrete: data.discrete, - discrete_value: data.discrete_value, - }) - } - } - } -} diff --git a/crates/figma_import/src/transform_flexbox.rs b/crates/figma_import/src/transform_flexbox.rs index 4cac2ca19..688d7aa3d 100644 --- a/crates/figma_import/src/transform_flexbox.rs +++ b/crates/figma_import/src/transform_flexbox.rs @@ -18,18 +18,19 @@ use std::collections::HashMap; use std::f32::consts::PI; -use crate::toolkit_style::MeterDataSchema; +use crate::meter_schema::MeterJson; +use crate::Error; use crate::{ component_context::ComponentContext, extended_layout_schema::{ExtendedAutoLayout, LayoutType, SizePolicy}, + figma_schema, image_context::ImageContext, variable_utils::{bound_variables_color, FromFigmaVar}, }; -use crate::{figma_schema, Error}; use dc_bundle::definition::element::{ view_shape, DimensionProto, DimensionRect, DimensionRectExt, FontFeature, FontStyle, - FontWeight, Size, ViewShape, + FontWeight, Path, Size, ViewShape, }; use crate::figma_schema::LayoutPositioning; @@ -39,7 +40,6 @@ use dc_bundle::definition::element::dimension_proto::Dimension; use dc_bundle::definition::element::line_height::LineHeight; use dc_bundle::definition::element::num_or_var::NumOrVarType; use dc_bundle::definition::element::view_shape::RoundRect; -use dc_bundle::definition::element::Path; use dc_bundle::definition::element::{ background, stroke_weight, Background, StrokeAlign, StrokeWeight, }; @@ -52,8 +52,12 @@ use dc_bundle::definition::modifier::{ filter_op, BoxShadow, FilterOp, TextAlign, TextAlignVertical, TextOverflow, TextShadow, }; use dc_bundle::definition::modifier::{BlendMode, LayoutTransform}; -use dc_bundle::definition::plugin::FrameExtras; +use dc_bundle::definition::plugin::{ + ArcMeterData, FrameExtras, ProgressBarMeterData, ProgressMarkerMeterData, + ProgressVectorMeterData, RotationMeterData, +}; +use dc_bundle::definition::plugin::meter_data::MeterData; use dc_bundle::legacy_definition::view::component::ComponentInfo; use dc_bundle::legacy_definition::view::text_style::{StyledTextRun, TextStyle}; use dc_bundle::legacy_definition::view::view::{RenderMethod, ScrollInfo, View}; @@ -1562,18 +1566,67 @@ fn visit_node( // a type of meter (dials/gauges/progress bars) if let Some(vsw_data) = plugin_data { if let Some(data) = vsw_data.get("vsw-meter-data") { - let meter_data: Option = serde_json::from_str(data.as_str()).ok(); - if let Some(meter_data) = meter_data { - if let MeterDataSchema::ProgressVectorData(vector_data) = &meter_data { - // If this is a progress vector node, we read in data as a ProgressVectorMeterDataSchema, - // which contains vector drawing instructions as a string. We convert this into vector - // drawing instructions in a ProgressVectorMeterData struct and replace the normal stroke - // vector data with it. - if vector_data.enabled { - stroke_paths = vector_data.paths.iter().filter_map(parse_path).collect(); - } + let meter_data = serde_json::from_str::(data.as_str()); + match meter_data { + Ok(meter_data) => { + style.node_style.meter_data = Some(match meter_data { + MeterJson::ArcData(data) => MeterData::ArcData(ArcMeterData { + enabled: data.enabled, + start: data.start, + end: data.end, + discrete: data.discrete, + discrete_value: data.discrete_value, + corner_radius: data.corner_radius, + }), + MeterJson::RotationData(data) => { + MeterData::RotationData(RotationMeterData { + enabled: data.enabled, + start: data.start, + end: data.end, + discrete: data.discrete, + discrete_value: data.discrete_value, + }) + } + MeterJson::ProgressBarData(data) => { + MeterData::ProgressBarData(ProgressBarMeterData { + enabled: data.enabled, + discrete: data.discrete, + discrete_value: data.discrete_value, + vertical: data.vertical, + end_x: data.end_x, + end_y: data.end_y, + }) + } + MeterJson::ProgressMarkerData(data) => { + MeterData::ProgressMarkerData(ProgressMarkerMeterData { + enabled: data.enabled, + discrete: data.discrete, + discrete_value: data.discrete_value, + vertical: data.vertical, + start_x: data.start_x, + end_x: data.end_x, + start_y: data.start_y, + end_y: data.end_y, + }) + } + MeterJson::ProgressVectorData(data) => { + // ProgressVectors contain vector drawing instructions as a string. We convert this into vector + // drawing instructions in a ProgressVectorMeterData struct and replace the normal stroke + // vector data with it. + if data.enabled { + stroke_paths = data.paths.iter().filter_map(parse_path).collect(); + } + MeterData::ProgressVectorData(ProgressVectorMeterData { + enabled: data.enabled, + discrete: data.discrete, + discrete_value: data.discrete_value, + }) + } + }) + } + Err(e) => { + error!("Failed to parse meter data: {}", e); } - style.node_style.meter_data = Some(meter_data.into()); } } } diff --git a/crates/figma_import/tests/layout-unit-tests.dcf b/crates/figma_import/tests/layout-unit-tests.dcf index 24304888625e62f4bd462c1820504ff3e46212fe..a61ab2f2e3cd9138148ff828aacb67b54377dffc 100644 GIT binary patch delta 331 zcmXAlO(?^09EbP$?$2hkiEV#uY+ilQOasJ zedLORipi>XO z0F}&j#06FC>FP70np@pdM!5MDEl3ZWVqY4XXzzQ6z1g4{{^^QDBPx;XRI_td#s-!} z<$BF3WpY8|n&|;3;&92TpqQ7|ec5aC!g4n90azK9Z9yq7v=dQRx)U}&>bHQM$5l&$ zGTJ=tqC#TfK<$K}oN3>>h6+0U2O1pA22Mr&%(`J>+1x!~=4)z8P{P#wk*MsTjv8JM z-T}4T87lO={2dMnd<@1X1$EpU+t5(Y{6tzq0}rQf1WqPrJ^>f|lV<{l`tEh3ku?j2 KVSeTpTaAD2`(jW4 delta 307 zcmWO0%`1Ze90%~ezvp2yn_;t;XEw&h%(R+9BqeFmT4`3IWT{b-gL06AgM)I=o>p>k zSXsHPujC)tMU!&kC@;AHhME~yg z!$(Kx9%$!Vcw6A-Vx%DYOwP+6HEY(jgcB;`i5sAfzk?fsdgg})1SS?omIP*gjqa*w z;O0b8g@x+WxfJqVB{LbQB%go|M&(lUl+A%ouGk)dAjj+}K^G5OCKYtE=A2g$VwcCj zFt@aK6^&fzcm}K-4_=FYm2#n#x2YQ7;Az?@IBA-T3)(oG$p~CL%I>Lf)3SJ?!o$*X uRbb = QUERIES.iter().map(|s| s.to_string()).collect(); +fn run_test(doc_id: &str, queries: &[&str]) { + let queries: Vec = queries.iter().map(|s| s.to_string()).collect(); let figma_token = load_figma_token().unwrap(); let mut doc: Document = Document::new( figma_token.as_str(), - DOC_ID.to_string(), + doc_id.to_string(), String::new(), &ProxyConfig::None, None, @@ -41,3 +37,18 @@ fn fetch_variable_modes() { bincode::serialize(&dc_definition).unwrap(); } + +#[test] +#[cfg_attr(not(feature = "test_fetches"), ignore)] +fn fetch_variable_modes() { + run_test("HhGxvL4aHhP8ALsLNz56TP", &["#stage", "#Box"]); +} + +#[test] +#[cfg_attr(not(feature = "test_fetches"), ignore)] +fn fetch_dials_gauges_progress_constraints() { + run_test( + "lZj6E9GtIQQE4HNLpzgETw", + &["#stage-constraints", "#progress-bar", "#progress-indicator"], + ); +} diff --git a/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf b/designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf index 65c12c921e1b29930dc9294d5621a22241419cc6..c3019ceda0c4f42531830c99753a8111b605a31a 100644 GIT binary patch delta 5710 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 { // Progress bar discrete values are done by percentage val discretizedMeterValue = - meterValue.coerceDiscrete(progressBarData.discrete, progressBarData.discreteValue) + meterValue.coerceDiscrete(progressBarData.discrete, progressBarData.discrete_value) // Resize the progress bar by interpolating between 0 and endX or endY depending on whether it // is a horizontal or vertical progress bar @@ -178,7 +178,7 @@ private fun calculateProgressBarData( val width = style.layout_style.width.getDim().pointsAsDp(density).value // Calculate bar extents from the parent layout if it exists, or from the progress bar data // if not. - var endY = progressBarData.endY + var endY = progressBarData.end_y parent?.let { p -> val parentSize = p.computedLayout?.let { Size(it.width, it.height) } parentSize?.let { pSize -> @@ -196,7 +196,7 @@ private fun calculateProgressBarData( val height = style.layout_style.height.getDim().pointsAsDp(density).value // Calculate bar extents from the parent layout if it exists, or from the progress bar data // if not. - var endX = progressBarData.endX + var endX = progressBarData.end_x parent?.let { p -> val parentSize = p.computedLayout?.let { Size(it.width, it.height) } parentSize?.let { pSize -> @@ -219,7 +219,7 @@ private fun calculateProgressMarkerData( ): androidx.compose.ui.graphics.Matrix { // Progress marker discrete values are done by percentage val discretizedMeterValue = - meterValue.coerceDiscrete(markerData.discrete, markerData.discreteValue) + meterValue.coerceDiscrete(markerData.discrete, markerData.discrete_value) // Calculate node and parent render sizes if available. These will only be available for // squoosh, and will be used to calculate the progress sizes and extents @@ -239,14 +239,14 @@ private fun calculateProgressMarkerData( val overrideTransform = style.getTransform(density) if (markerData.vertical) { var startY = - parentSize?.let { it.height - (mySize?.height ?: 0f) / 2f } ?: markerData.startY - val endY = mySize?.let { -it.height / 2f } ?: markerData.endY + parentSize?.let { it.height - (mySize?.height ?: 0f) / 2f } ?: markerData.start_y + val endY = mySize?.let { -it.height / 2f } ?: markerData.end_y val moveY = lerp(startY, endY, discretizedMeterValue, density) val topOffset = style.layout_style.margin.top.pointsAsDp(density).value overrideTransform.setYTranslation(moveY - topOffset) } else { - var startX = mySize?.let { -it.width / 2f } ?: markerData.startX - var endX = parentSize?.let { it.width - (mySize?.width ?: 0f) / 2f } ?: markerData.endX + var startX = mySize?.let { -it.width / 2f } ?: markerData.start_x + var endX = parentSize?.let { it.width - (mySize?.width ?: 0f) / 2f } ?: markerData.end_x val moveX = lerp(startX, endX, discretizedMeterValue, density) val leftOffset = style.layout_style.margin.start.pointsAsDp(density).value overrideTransform.setXTranslation(moveX - leftOffset) @@ -266,7 +266,7 @@ private fun calculateArcData( val arcAngleMeter = (arcMeterValue / 100f * (arcData.end - arcData.start)).coerceDiscrete( arcData.discrete, - arcData.discreteValue, + arcData.discrete_value, ) if (shape.shape.get() is Shape.Arc) { val arc = (shape.shape.get() as Shape.Arc).value @@ -280,7 +280,7 @@ private fun calculateArcData( arcData.start, arcAngleMeter, arc.inner_radius, - arcData.cornerRadius, + arcData.corner_radius, arc.is_mask, ) ) @@ -302,7 +302,7 @@ private fun calculateProgressVectorData( density: Float, ) { val strokeWidth = style.node_style.stroke.stroke_weight.toUniform() * density - val discretizedMeterValue = meterValue.coerceDiscrete(data.discrete, data.discreteValue) + val discretizedMeterValue = meterValue.coerceDiscrete(data.discrete, data.discrete_value) // Get full length of path var pathLen = 0f @@ -357,14 +357,14 @@ internal fun ContentDrawScope.render( // Check if there is meter data for a dial/gauge/progress bar if (style.node_style.meter_data.isPresent) { when (val meterData = style.node_style.meter_data.get()) { - is MeterData.rotationData -> { + is MeterData.RotationData -> { val rotationData = meterData.value if (rotationData.enabled) { overrideTransform = calculateRotationData(rotationData, meterValue, style, density) } } - is MeterData.progressBarData -> { + is MeterData.ProgressBarData -> { val progressBarData = meterData.value if (progressBarData.enabled) { val progressBarSizeTransform = @@ -379,7 +379,7 @@ internal fun ContentDrawScope.render( overrideTransform = progressBarSizeTransform.second } } - is MeterData.progressMarkerData -> { + is MeterData.ProgressMarkerData -> { val progressMarkerData = meterData.value if (progressMarkerData.enabled) { overrideTransform = @@ -393,14 +393,14 @@ internal fun ContentDrawScope.render( ) } } - is MeterData.arcData -> { + is MeterData.ArcData -> { val arcData = meterData.value if (arcData.enabled) { shape = calculateArcData(arcData, meterValue, shape) customArcAngle = true } } - is MeterData.progressVectorData -> { + is MeterData.ProgressVectorData -> { // If this is a vector path progress bar, save it here so we can convert it to a // set of path instructions and render it instead of the normal stroke. if (meterData.value.enabled) progressVectorMeterData = meterData.value @@ -633,14 +633,14 @@ internal fun ContentDrawScope.squooshShapeRender( // Check if there is meter data for a dial/gauge/progress bar if (style.node_style.meter_data.isPresent) { when (val meterData = style.node_style.meter_data.get()) { - is MeterData.rotationData -> { + is MeterData.RotationData -> { val rotationData = meterData.value if (rotationData.enabled) { overrideTransform = calculateRotationData(rotationData, meterValue, style, density) } } - is MeterData.progressBarData -> { + is MeterData.ProgressBarData -> { val progressBarData = meterData.value if (progressBarData.enabled) { val progressBarSizeTransform = @@ -655,7 +655,7 @@ internal fun ContentDrawScope.squooshShapeRender( overrideTransform = progressBarSizeTransform.second } } - is MeterData.progressMarkerData -> { + is MeterData.ProgressMarkerData -> { val progressMarkerData = meterData.value if (progressMarkerData.enabled) { overrideTransform = @@ -669,14 +669,14 @@ internal fun ContentDrawScope.squooshShapeRender( ) } } - is MeterData.arcData -> { + is MeterData.ArcData -> { val arcData = meterData.value if (arcData.enabled) { shape = calculateArcData(arcData, meterValue, shape) customArcAngle = true } } - is MeterData.progressVectorData -> { + is MeterData.ProgressVectorData -> { // If this is a vector path progress bar, save it here so we can convert it to a // set of path instructions and render it instead of the normal stroke. if (meterData.value.enabled) progressVectorMeterData = meterData.value diff --git a/integration-tests/validation/src/main/assets/figma/AlignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf b/integration-tests/validation/src/main/assets/figma/AlignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf index 3a033519a6fba38937fbc7cbc6a488e85ff17fed..d6e1469b36a3f8fa9183b10a8964634758c8fa33 100644 GIT binary patch delta 5748 zcmY*dd0-A#_x|pgJ0l{=Ynd5Kkl2^j5|M=15^Isv_E9YjMXj}jqCss{8apqprDAC* zg3`f5)B3b%V+pa9T7pv2`YcsjQNDZl)i3f#&OPTm=b3ZvJ9Fop$z2qhyC`(_c&hEr z$xhsSIEE<7^#Y6=lA>MjLB0O5WQ3fTr>ggOa-s{pRfkdLWCccg-UiU6GpD)GR-pJNI5=q{a#7-o- zc{y$3Np$zZ+aHlC;~Ir{Pdn8zeLY6#cxI52i`c-`hQA6o~;|!*Tj* z?|I`VoReapmo!<25Ar5W8!yFR&z#-N5JSAye$A5Xt)HJG#Zdp|Wwy6$aUoL-^ENL_ zlj41^?dOk44EGYh(6ABS#&5QZ(c`>~LpplACysU}--MT zJt-!7O@7uvA9?+9bY_#hfJ-{Fk3I8>&TO*RJ6G2@#cO(9Lq75P-`2dT-nDxvhM4NT z`*1XgY2L-hlSxeX`aYdWVg~LDF_*+lOqF6KiCL(YPmCoo8|(9n$rLgtZx(e`p@!yi zTnG{uMabNjJZcsn;{-Y+nrDaWlrKnspr3)PZ&*C94R=zUMew%6Ie9u3;De*+G7 z;Ji1YTPMbS33`*SzX=n%Fm5vfk{I_DRCmUCsM?cpTafiG) zEFke60;VwPdrV1XmfZ-M&MbSdbSAUxMcf=QjKmMv;unia{D?LS#787DacrSTBe4%d zmoU$MX#yg)PW8< z72j7vA1FuBbqhm}A#0nMM84yBe~{=1l^kZ&!rUFA1Bny3k|F#ge!{4o;yn^4adj87 zp28=)+5a=n?$w2g)998d`WfPk($YcB0TF13v(J?$heSz3oO`a+JSw6Lk@H*`eS$sb zpDPa8dKDNF}=HstcDjRd$XDvFH~UT8lC0(lfJ-YPq7kL6=>0xF$X%`qjnJ z>!L#dHFs6Ndm>&{GpGQD-4o#?T43G-(Z>|8;ql+%yrfgMs%}tQXhOsalSYD~Yos!RqIS7}wK zEHaAHP@*fYzk5tL+LWMkLR>|)l2pdf``#vu2J*gtTZZbHYIZHkr{df z{b~qOBPN=ym2U@?#Lh`(C!xC6rb)Ed#+BMs$_)I${^wvvo9X65Qu!KCl-ggBTG9bq zb*@B>pO@aF5|tr3XyfB5TwIooW7R3fQ1u&7XWC_}+y>O{Ir4S`s>!!!xj0HR_3fG5 zjPxsQH?Fm$PYr70s$CEcnC$n>nRaUi4 zq!52tc(A{iC{Ay>2pUMA5WVGM!C=yF)GjV2zfbzL*wx*ZLX8boJ&_vvvyX?;H@1p> zV7BKMBsRTG`sV%?Mt3T02JZa-s;iSVQ;PrK>wZ+#Pz`oi1=NrURw#9JRl^{w&9g0R z8Dw>SzJ+Na)<0X=$wjkqyoGPP_zh9RwT4LQ>>}qAQU<;1V&rt1OjON;2>Ab@~VZbKd;gk4v3(YX7sjIecrzSe_VC>mW`u*ArRtB{+>6(jnyJ#cPe_e>( z)R*YGivfEnhbY2T(=#bfCGN0-pfag6iCWmUpL9vff_a5<6_PdSupHKkNHGAt=W45l=MnQuY*KMpcd2z!=?Eqsg(M=nffyM%&TQ<4} z8*?b+4_m%ybfRPU=xTx!g$*Ut&xMS1x@}`}VU43dZ4`HSamU8`qP)0kqfrT_xR-|_ zrq(kGRbi;?iR?;7ZK1Z8);#xZyc@<*4{SUr!;8OcOe@cehc-%A;>9Byo2%$W@Z-FM zYEEIJDg3V*jfwuYak4r?pV;Uh!HcIh{*KfO@h{AZ))fkYvUQF5BnaE<8H$8~whdWI zty#~HLy4>hqGwyy3*dfx)`Kv;BkREk@637# zw!X!>4=vwjy&!VB8TxE0goGX}3*+lv#vl?!P^FKt#1J<2_UHT@bRNjk#kIjKi(>3h zjxUBH!;OU`ievpq<}HD^QTm4xp*T5)?Ikf}9LrM3KauMzjb)QKE)2D&unfn(RJNBv zx9O~x#hsa~m&4RKtd~dFJk~2<>jKs*qSYeSE8)Tt)+=Lp8tYY1U+9WLX0xHnXgW4W8!lML7SQuMx2kkrArQa3e;=jg$q^SJx+0 zjqOIde$>uv=OQC9ID?C<4QnSC7lmcJSVp7HZcZi!hxT%EbVkzEf;Cmec;jx?7sYFV&RP+jjL@2c?c#pmim zoLnnaj!M&12FS-t*e;bI+v(+Qa|Pc@nZ*e z4br_T%fYzcnW=`r--W4?Q8S6{Ly_5C9wadg^Lw&3}>EJtHriqya97`!ru<%jrwEX%QYa{|k8xb+ds@t87MOO^kj z5ritKavF(=*gB0}A0c5T%SpI2TaJ|CV|1C%ax#uBVmSq^)8qpZpP=aqsc)lHocfIA zRJ^yE<+N>USxm>gba{v8q|}WpXJYJTIfCb;yPh1%b5h@JOfv`X?2u1L%tiNaWGhoo zKIz}dF+BNH-XqHzdh%)gquj`o&%=GJE0oG&eIX7WmgNkw2)B;1z8K3+uzv}@KgIf| zNIt{*Qq0R?Jq=ARGJYBQT$Y(U#niki^>ncU>wlBFKVON+|H_#>#e9E5>SyV5bo@i= zK7AD){3&%GzZxU&G42aIdBC_enDK~lYZ3lL<3iTuxtnT5sX~491lHh=EQI31tW3W2 zm)wyk)6qOC)U9r!xEk_6j#k@Dv#_3U_L-*U-hj>lrsm#=Yk}rUQhnZ+!B`w@>TTPE z;DV-3V>9LzX6RQa=V*u?a(*ak>NK~YSqb)U#le#7--a$>><6BdVgGh~Sf2emAScc#ki5!olJ}e8Ha_G)Oi(5}kA~Z*_b){Nng9hkYp+$`yL2k|>O`kJHkq6kLq=Ii~}ft6`KBH#6wBI`W+ zWaJ+=aJFilWfr9y4tiyorzPFg#T;dtTMl}kUSLc ze#y*{bl1WDT#mZu;MR4Hy6+(QHb*^hfV(>NkiYUK5aEyC75?lq4Lx-5*JF--y*lAghbVH@<&u{4sed3^GkfrzNse^|Ft@5UBsKQ)Jf3p!-Uc%BJZ3rbwTlyF? zusPfs#tl`4a+ba^O=MQE^qg%Wp|X|64b`=(ECVpLnl+mns?eI2K7RuBR}PLZfErQO zCT^%M#IQXWZ^yDd1b6DQ-G^0;*j^B28?(I-b~I&sVf1go_9D32lI=FeCa~Q>jW%p| zvA!MaMe+8(Sucjuomel9X>YP#0s&n)E)>g>*j^HC-(hi1nk{UI{(NT9pl|@A{9dP2_RP ze|BxBXVa8dWBvaPQ-KX$j6-O1)YPLyy;RE$Z1}?J?eg?s)yPHG46Bo#>TRVTmlWu+ z_MY$$2?~Zc%8WGqn|xBO+isPeyRN8ubuER`SsT?CS(Av)+1RqgN-%vndB>9o{c%E% zCuqCEsw(NcjWMgNg$7-*;jXpx2v;&)Pb%r@R=lbDZ_>-ZHdzBD{br-@R%?Nw51psm zt&jQ8`8dPUqtZSM-(~4hY(H-9u|lOPzt1Y60`)(mc4SSJoM{!K$Ve5x&nl*d?X!xj z&g@^k&x%raSv}3_qf81^#r9i|REq;v394P|8J?n})aCOHf*A)mmH8c;~44ME=M#=bY!9IWyn6bI-Z?OM~*42F;&Bc>xP@ ziBE?|$ub^cH z1=#NVieC`fw%e?7d6OL5?NMF(2HNiF*OnS&+Mc6}5i_f(@8gHjyzbb%S;c5N0%Vw}4!rhzHOyO&xol47bmrky{DX>MwKXA&Q}c?mHj zrn|u%j!E&6d#7_V(|?9zzVh#1XjFJ)sC#U}MxipNnhQJ=dN?B0_4LS<;$ydOpK7K^ zb7u~0WQdvWcSCxSnB`Uk=TY!Ma2yA+g><}hN?tUGZPnm z#3kXE^|B>1+RRi_h6o>QArU6j=Hgna@M|8Te($JmW-H8{q%xLHfb z@Za-NjE3r1uxPA?MoJ&#*A_KM>_v$X_TPsk_1J$usz-2+-{D{+=lDHhqu8E<+{SD_ zfS%1b?!m%wLn8~t?b4j%9>Ua??Dqq_+OXeYs927B1W|E9@B2|?y~*}mG-=QFWB8#X z=Y1SKJ2USD=pCN_M@;R?yp!X&mmyyq^&_ka=ftVlea0qW4hd zox{E1%sY=I$;`_`;3(!@K*kv6T}171Y`=uu32grb36t4=89z;B`xW$?&h}s7mCE+t zkebH!tMHr6_Ixa#%l6+9y+Dj4@dvhf#3v-KAz`ujki?%ju|#B$xQ^syVljyuD4HQg zlemc~nW6)UTR5>w6fwnZoLwtMkhp`m4PqIIzmUI4WRkdxv@b;piF+`<5?x5#N4IUv zdw|1PVmkRhEc`pv4^>GOje1zPLv$qZH-6hGJR}}r+%EAxiO0CQn?pXq$9viS56f#k0E;mp3S!4x5OOXZ@d8Q6P?R-(yAg@4lye1|R6%EAk>!PCoqp z`yxiwHmDdz-WS0nCL;Zz7+{J?c=C_9AgQ>m>KK#=O^G5ZVPlX2MFhs z`a3YADAG_*LaB~QtWHH#@Cgc_(T*B2&1|k;AwFvKG_#%Z-$CWDYr5H4sNkA3oyIs= zQkM2~4irPr*P9GC_+c?vc^vkxGje~tjzcGDmv>Zgu z4V8DCDyzhJ@>5NASjE(csa6mPTQ&8u5}s{BtdG^@-%ZHyv;Nxzve9ZXZ-Qa}_oJb% zV~vm`^(pR;`J(1ViZRunTl8?u78)v5|Lv9^ z?rfte1`Tyob~d%p`TJsDHtDzOFjzY&)+FCRwBJpeiTnZ~_R>Hi|3D1cPkBVc9W^_L zqE-A3%LgilDv%g~tb?SBkR+@*N(~J4^)J+#d~L|f?CED?*stVelE00ye^9FAz3faq z9MxsD`S0fSS#3Vsyz7?E~>g8me<=^5x2jedAZ}Id7y-mLasP#7~ zk@F}9_a@aPb>XBw95-&$6{!l&=waS{nl07X3#8Znm>v@a+xVb>yof5<+b0?Gi7MMD zZt$Rrja4QOs@e$mG8Ph5vytO%EGBx@MlWAu0r^$8<%@czek9*hEpW1=p@jOmgt3uo z*qBjL^QfkcGByut+1M1wgV$^{E6X8XFBBrO-m?&@TC(he-0DWSP}vo9oZ2?}Rb;O^ zHXc^uL0ucOs`4PjMuqA;2(_`brXKj#D;!WQC~35W=XIkwQJ9TWb(k7%V{j-BB5eE< zrU#-v=GE6L6p^Uh&{#yG0kRtzibO*sHf4-LezcKJq7f#xF!b%)7$sUWHo@w)tZ#~_ zb}To;k$9G)(I=7R7(D2}a&ye?#BvJ+cVW3Dw!h1AE5vqZxi#{78u}7ygSg%rRogp; zFTU$*^d@!ot{z4VFyc0E;14?8bq*Y3Euj1%gCQ5if@PZV2e z3?tDC<33}255KQw?2Rt#jAe#?Qtxi$h4e-0X2yOfyOps&zHoIM{{b(qi_oahuuxTL zlo6?-$H?Lss240$-E3o{7>Kjkyy`(1zLQry7}hRc?GUWktx?rzuk&lUm-8EnBl|hO zVd#^?I2;cTa-JhF_b|&zsFKTaGIktic_iLE$?^xda*E|qNIApuX!xIJc?>?k!17o` z{le=?!TKwV<52o4<9MY0&g-0jD%W{k6Onb3aS~$hFiys~yBuc@)LaA2H9Uk3}V92iV+>thdPXlaU)dfT1p`;TS8 z>yXn+{-E0rEb7C!0loV(ZbaQdjGOReh?ItU+spKY?{K+~#AX~%;yw8i13zHgf`ZYE zTalh3^||~CuT5Zdv1bzFHoP;HaXW5($e4xH8H_-MG{$UfpT)QXadR2}hs*Qj7^!=U zu8SDI#)+kj-=JNFe5mV*Fr7-`N}0+n#OcqZK1aLp{u;(_v(_{0LHb5{mpg^D&5Zjn zX{#K~ox(j=CUd7SFiS_$ox*!NWC3>yy}p)jn7UKg_^q5k;vj15la&qK5w!bWZsv~Q z(E*kZqx@l(kKl)+vWlTQf?LN~&c%w8Y(IuQr&&IZq_ZraKzbg_KcdAY=AXoXD>8>W zf{?3nJn4>L)9+H>cc&5dr<}_j!JZpZKQ3p`>9*7r`dK{uOX>>#9LC&d-gy)}WL_TT zJZ9bn1Q%$Y-^D_wsa}LCF+g`+P43DPC?m`ou>HOFI`y=;9x}^OdrG(dOIlgK2KQ8 z!6(CbLLUcBlFUv-z7Enyn$fzLa`4kAGgp$ogLUJ~rY044kU!b%soMw#vD3_>l1e%# zn`%}ysg#50*=Cgf9^_!cJm%OA&Mz>JNOBx}v6$Th9b8{#&XiQzK}x2XLR7}V-Bo%n zRiv9P8e>+Q$0P;mP1&GBI^`Un=QU8QE=ofp8tG3vVG$~6I>mVAAH3rURwLbJbM_OJ zcd*knTN+fsfq^R?d6OrJFs%h$K+q- zCC>)WJ|uZ251p^t9X120s)N3V%`=j!>E#~hFt0l3f6AOJsk(!!XE}))4r*WE#nsf? zc8NE#mV-Yon|YF6b8s-9ypFYYc93+3z3S*L=$=m9uWsQ4LOn6NgP(o5p%4du zKVjcc2NlU$E~%b_U6!Rw%`m_HSo(U3 z)*n9DKL&LpEZy%k$Hhq2w?OwO*0;pn#;k9J)y-Jn8kL)~z72M?WPMuf>%-QBKk z!CtX(c#hTCpdpUZ&r}L@3wvMC`_CUN&lZ2FHe_3s7j6htudmmAayc7ymRi&G*|xE5 znH6XHS15FohKK4;7y2>KuOh3Kq>45sthSaIRN98K-qOuw85@}!wHKAOabt_68=4>+ z1Gig?4SiWY&9*+`%krb0mTsi}#Hiht?tZW1<~}P(s;UR9vdUZkGs43{REdLD88!ES zRazypz6<|bbHIvF_YP>o85SSskhdy*(0Z)e9J0z%cs+J1tx9P@9ok_PRf7*%t<-@- PR*(pPX2Rt|mMQ)pLwr%J diff --git a/integration-tests/validation/src/main/assets/figma/BattleshipDoc_RfGl9SWnBEvdg8T1Ex6ZAR.dcf b/integration-tests/validation/src/main/assets/figma/BattleshipDoc_RfGl9SWnBEvdg8T1Ex6ZAR.dcf index c3b53b61f07ebc9cc1c1ecf6ae0f8745addb946f..2ab2e831be269780978dd80648be028d054bb30e 100644 GIT binary patch delta 9610 zcmY*?DNSwD#r*)r4+Z*G#f8Osie!3{~Vb z<>^AMxOq{!zr0Y$)kvm|(Su~aD#Fi_`F~YhxlG&t{rwjiVQnnyQskLLeGO8glr@U) zyF!5|(MeyT$ha_F^DQVAq~x|%7yH&GCWgq_=asTnQt8SfU{Z+sX%0k$sBdhtdJI`_ zh>BIFSr4Kb2xYoeF?x?C-URy^R%t2&XX-AiWtDIt-UeG!sx{QayI|{Ft@$?bKG^!Y zzFie#L*$bP#k6KNTq#5$Q!aKo3du5KD1;SGM+xhj#)lM9*tA;2XNiC!rv206zC2S` z;dYk3T=7k5F<;4V6=*q2CX)9OX+&wCPs!> z**)_Mneg1{mMao8w_JR|*~vG#ccd5sgM&nA)7mqb!YE@}ZAZKjb1Um^wc_Xy8R2gfkm3GDNwj-l->ir+AqdL0pA$J) z_&?hpQ6VPky~pZ0dZ!{jc&vhB>j>rlti;qEHbt?DO!{3Y!U~wWNhqqdbNV`=*sQ)Y ze-esjRi7Ov6uXt;t0okOwR`SHo8o8nPtPxWyKW`O*F_yp-`jI;97_9_ZSw9k;!vT6GKR>3E`ZIl(iJ+H!9k?#$mLe{kpgbITa zgSpRQW6?WW^Iow9**KC)leA%AVy};?d_kU8Ydv*FzMFycG(*VxQLN^qzg%AfGA-w?%tDLAV`4-Hh9# zO%BE#;58X{M9Wadoe*4raRR<7%D6LfmJ$?M7xWGn6j@iSiWC%CH#Dy(K9B6z$|73n zj$AS9)dRm&<5_wls5aw7oUPBe7xc!Ad*f6y#(m&y&A2a)w`ZILzb=fEaij-fU*0!v z1oah`&3E;Kj-UF8a+=JeDQ;0d{L}qTSx8aKEPqAE=@C5aF%&nPDdZzB<|OvS1Y(uJ zcsrFR9)cY+d7+_r7B_wgB*<5y5Uuix_U z)--Zjt*GQQY%Z~V?dlhrl7=l#l|r12=Wdlk{1!`csPvrqkdRxYCFdZ2h)NRXqC-B$ z^AJ{;u|(SvjOQbyEaL@e6~#CmW+lcMXkL}DEOVBYDo|4;0lm+YfDZLoK*=m(^EP6( z=XGM+Hf6ThAH?QqNvyII4cqZ_|A8}sr~4lDyE9$}zutsp$M@vb^lSFYs|p=C22n7w zou6d0-4ylnj66L~jaD*YAJ5aR#-YhP{Tis>FkXxOvl*}3A{nm7 zo(zT?@NNm?jo7)I@g}^^BrGg1wy#%XH5pi&G}wMnH`(Nw`oh4$ZE9Ifx*HR#>}K|4 zGh+AcXEva<(CIby@x>(f?00+%sz82LWd4(CnmpEC7&JJ0s6rp6W7jE~Ja|OSEvttL zOM?#zZaRWnK|G^?+?rz^kRk0M$92E zdivXlIqbzUotYzEbjwMM+_r+mt@YSQ-0(FdE;-Cb0dLtzY-T}bhioCXPcdS}NiQ-= zv-c@4+C{MUhJ$qXzK^!iJ?(dlT)M^DC_mPoCU!|2vq`@Y+qn+2nU{oHR0#h&*X5qZ zwlG|uD=rGz`>N1+AmSD8V7_qLx9$yWx#hJ*^xvrFwo-D%O`33Xb6cbk=e@Yo(zePb zE_mTOk(DW7heuw=2tJ= zLz%hiMT1eyT=OCzm6_{a)SE<%%on2S$T^+EXrE7Yqe&VE7h0Iuz`4w}DM4(bbY{I} ziFGd~R^0NU+A{VJu0&kGD(3EZ5xb68x$DK7O|*)PuSdSMwz6+vBeJvYw0)t82VOMU zXR9j2Loa3?;E1!msC?A+sWAFj{p9cDw8?|VXDkDzbVe?Di$GcT;)+3mR(kMFYE3okZgGxHav+*4*=Qp&w#=9L%s-ZAr< zQch?T!iRYj!k-R}LfD-_Ay_VrHs$RSVjl%DyJI=A8-kgAl}YS_Jj`xePwd+K#3~AY zEuzuOXUjICGD~V*HARIUt|e2ch|!VS7^)TVw!Ai!ibV{nsMWJ64(y24o>94ojd5B9 z@&9XI*{qgE6(c6r(yj<40A1>mx#|qj<-flVK z78TGpnrgG@JvFeIwpYm2kJSKFYoS%MDF#Njp~cj|klb=?8=7TmM=gl`21}|jsdPl$ z&f0H6$$=8xv>`&ti6uR>dP2#CJBeD7P;#SXAML47g3%yZt1T20v-)X^sZd0@!5Y1v zyy!bZ>mrm8oF2t|9(+!!DS?Y2{yG%NbtNJS}-#9Xb~zElPC9U`?;8$eMBot#iXRGiPI;w=~Pj! zX!nz*QbF1N9NR=8|7Er*FX?Kc<2AOau;SiLvWdq1TWnJi>+iEoB}rEk4RW7{g|BJ2}vR7~Es+efQZOm+{jQ_$71++`musF=)S zFs^}iLH4~|Ooj#9i*PYnE029V7n6tc+3TxROa>OR@8e?f=VClw53fqwmvS+g5n=xz zsF=(s&*Kfyu`-W0lynV7dNn&~Y(xo^P}!afRchHuYu3~ZU$(V>EvS^-*`9H8yz9ssTVQur_G>BW8jLrI_9UCyiq_cMmDU)W zWRFy-gxu7R^|Zm@!DOqpr6-~KSbJ{ZscRZnl2ymD?DnWSj-_3E5ZQ1EY^_FxsQF#ZT8#y2_+fF4l@24&Lg~NKb$(j6ZMyLHR1Y+CmKK#ojE}h)!gI0 zCFIac_D0G;9Js_Q55mN&>@XN>ZgPqYLBt*VaaG=WY;Pm7gHhv&eX0>8I1diLsuzTUfUdp6iSx8b_X@Vb>Q%K3>TCvsZPg_Hl>~{ zkkgSHO#>aL1!W9@OPn!payxz&lrg70j)8*Ok6L*g6i*{e2y@Wg{t^fBIV{eSVTB#L z1!YO4Vvg0ECBK()6#T3oPA=<+rkq(`mPebRY1F?)vntT&SI7~~qs_4^#<53G292%C zxFt%}WZVi5YBO$)`Ct6YyI>>oZi6UR`F3}mEDP~C~uZ@VQOa#QSEvlX;ky0r zo>o%1vY3 z8~tW6?t{8>8282G1&ou>;XB63`0jhgUt`cp#{KZaTEa4A7)e~P$q}h318@RNnJGkV z*g=$RJ<*}#@m|Lfn=Ctx*u#gI{dyL$juXt*nM3T=Gt5p}KoRCY?>J@MY>>k*5bqoNg$rt1$~E<)Tj)bp3qQ)4Iat`5#mvQk4(vS-Ru{$+Q+qO=k7Ioq zFTj%ijMH&r2;&T3B;$p6nZkGxPEBO|9gOLO<>eN%`tw<=F{3rDUSTe4T#B~~*y=y1 zx|pq|^dzf7%h>8@U$W}DisM_{pV*jn%w8YjXJEMHcbICFkz^3R)vuu@|4Jb?bEjW~ zptj}8ZjL7tQx5oj{!HdL>=#XK%NK`P-5TUO!RxL?!db@a5PhEUdJN5Cya8WcXS@+J z|6sfc-R?2Au>29@%^3NN@ekPXim;q~fE51cJu9q#m}LE?`jhUwCy3qV=TB^>v!w8) z+n;n-I8O$rbNJIe9Fj$>;bFGXbz*OYGW*RR#1<_`tg;K)Mg7~-c@n-T?N1Nf9!xFk zPtol~g(!czTl?^$f!wJT};oMomvce)-z3>Ir_&XkC zvB@7ObAwFeuvMfc$1T>lZ5>%PyU!YDS;Urj%8~2*o+xzI>)DL`b zcOLc+LTg(9y)Pc(d;b86CmT1N0Tj<8%nA&kcpf7@X8`GWf})-PTKrG+3}gHhRSOap z&rFOh7VwKrJU7vzbU<}Yyf85@f|=8!)lGalSs8@a|WR-#eLAcN{fUlp{3-)6!xb}X&lavN!)0)Fx?Hpzt! z``IKnzB|GuchksZ!bz50avljh@Ds_NmqBF41@`me#1*zPm($?J8v*o^Xq_2gz zUJ{|GdY1zU!`+7gpT8sqJ`RXh@*?vwubB@i&w0)K*!!As0mu)G3*w^9Nw^T!`8x?0 z#v`3^5gg3PxG3yi#>H?YjB#;<6(TI}JS2H)aVKeB^_XPUD&wTB9{ZfwkVt0tybjRO zx}uXlq~?7fvE`~b=|k#*%}FOwHJDxN?=(=iF0v6C7SODDli;+^!8h(u-!C*@%j z?zM7KbmcLxy_0TJ1+?nKdZJOL8|$fv{Ik%9uEiaSYlGV;qZxqZwDhfN_kg z!kWyu8m7)*Tph<|6P9z^I|H$Po|BTTWhWB$D8osQOX+UJ9$La|QZHid|0R~{uv3}r zTL;Dl_H8?ite$OVtBlcPRsKh|s*kt3oP+orxc>nsxDYFG*hxKSL##aNq@J@8@}F?l zqjO*xanYFzqs}<5b2ZlCobzMzI9$HJ;EbfQj7HB3D$D$`*t#j=uQ{nhZH79(lOcaa zGg$t1%SlC;q>)@GbK7~6Yxy^K*}Mg6WwUupRC?OxFoYZ2r`=OIdQKch`?oYDnismwGx#p@V=uG&I!?lTP_Y9Y-I-dz= z1-TNqcCV7lwa!Mh`+bj#n$4~-^15PGs;(Lq;PLKQQ;5fVpj~knHK{!@zYKQ_i6|85 z8X>5j`mVgIhM;=tdbDd7*HepQU4^Nhl61|DOK~nLyOTV*tj9Ir)n!IBBqk;AL>^SafR&L6`8Mz>tmmrg6a=knICZ)6<4`t@|>xt>~k&Q;_9+w zt>bYiowZIt%p%^5iFmb??It1b3f4LqOIN#&s&q2kXT9r!pvtP&CRZDwOv9qhuHWce zMx?++h4KtU{^(Lw{4bv6cT=mr0=)~lX%ki=vxu8EVHNt8bQjU)+T4Ly zTFyO)&xwP}yQx`UgH9FQ6wX={tU?x4aMiEjrbyP~UL8_F1=qd$JiZZYzvS^v__-O6 zTNvDm$2VheTQ?m{^(pBNl-Y@H2O4&A8=AVsqstqK?%X(V)85x6bC;);X*fw$wxWGs z*0v1`lik#^{|Hxq#@o?oAZy(LeHgE_Q__{rgGRgQDcMCgA#j*G7fz+R=_%O_Wg@HE zg9B69b}#PDWL5hx!^f)jW5zsEMP*l`3?4s-0ZVAtsO);N%uU_-VSKaFP04cvCo*~M zqj0TtQ)77yDeD;@$DWO>29)|1*Em{=fT+%&8{p^VWSu z6>mLqc8ZZ#rllCgewe9mRs!C6{y8F(sY&+LxHe6X6*5xOrwNZK4Z9xC-{HHF$F7$Z z!fT?TpHAQ6hnSe}*6Ftgc}(QWq0dxBgejlEQQH@n?3Rt+J3jvSAQUMt9IX`JSTV{M zKf+H$nuzh}b@|(t)G)oiphxUjKAmbaiQGkWI$@lJw#9Wi@JqwulKKN1J+?E-F+Uk+ zBlSc5cfT(8mDV?bnHRxI{LeuB60=>ch~6y;2Ui1sXH`!m+a}Q z&*86(TJ+cHaKeX-fqHk1dM{RvRat#knc9@L87XOz#nuvU#VsybDLgE z6(53S_)a}eZV1!;QE8`MkbY-?cDwa%e1^Q|fKIOt+Cr++&gi;$?U832Xkqe91Fa~k zoYm`zfH(ik4#YooP81)1LLfco_42abQN56O;*n`|#jK?`7LUuo{8)$k; zpCfF7J}l(o^LhaxO!^gxUI1z5^%sgzO-#9{uMxs#B05WdC`7O+6R+wu<@-f+7YAPb z=s|V%b-lSJ%9^t5ExpFyVMO2Jv2rHb+@aJF;U<B2E@(L^6Ml)6X=8<0p z8SyN~jW$6BCI3wirsg#0&iwAdFpojA{o%p0P=juBs3|*-v&Z9lexrjBVJ4~Xr|RGHAazvQ|N24d?j_4 z{4SOh#J_NqLEaeSsUqyARdmu#AsnXVoJxmDt7;exMW87w)->V}UDGHbs5nokO&aNF zz3~@DZB+~n!JI}$9U+E=Agi&Fpoyo!a%OWQ-j@*QMmqf?#Is;LXvun?2P2?8>wOW7 zNeR3SDIqeol~Pcqv{Fj>?i~Ng7x!!tKhAQ)A%{PmzlZiPP6^>>f)2bBgzz`zhwWPM z--p{Gzyu-sfOVRmoo;`87~3w=%g)~6lw*e(c|=hY3x^q$`^8KY8EMe{DsEyx3JWPg z2jvqCdOrRN#*`^+^D-Dg)A=sE3f_{&Ca;4rYK}3%COr!buT&NorVL+T^pZa;Fhb>m p1xAqEoo+bg!v#i&h$=5@q#Gg9kxpaP(~U4$INivDcImVY{|`}usRRH3 delta 9630 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 Is+l1EA21!#CIA2c diff --git a/integration-tests/validation/src/main/assets/figma/ComponentReplaceDoc_bQVVy2GSZJ8veYaJUrG6Ni.dcf b/integration-tests/validation/src/main/assets/figma/ComponentReplaceDoc_bQVVy2GSZJ8veYaJUrG6Ni.dcf index b7efd9e7c2647fbdbaf61f3c939c9417c5619b1a..653c4a770827f42c2bb84c32b33d1a76f4c6a617 100644 GIT binary patch delta 233 zcmXBKUn@g#90u?`kDu9WXUv<~ewm8H9rD|BJ916_m}<65By>O8A)v#tGlKHQMfB-rA|{-+iY=mF4?&$sYH#|S z7*KZRgh;71TO-m+%{PcaU6lW3MnR=YWYt(aa`5D@91}UUSMMB#R9!0(zT)*|wx2eF Td>Abx6aVJIQW#Z~+brN0Y(7Ls delta 244 zcmY+)%Su9F7=_{1;->>8NDyJ45JVw6f-EC)YiV{c)6PNTz;VuO5>e5t6vZ~BBX6PB z71R|p=o*5cizsN+JA2^mcF^sh;WKT|>2Gk^G|f|T#Z+^bju}&E;DXGW?gpP6S4~sl zGcsoih8yIXDK^q3*G+GuFXV=)I#wYz^%-pwd0ma)6I%*Rh$!fFG9b2f5^EAgeR(ya zr1O~vVn;)>x5TcRb5&wb{R?$sUyqBw=YhOrnK)EEb?tDZaQ22cRx9`JkWx7xCwv8k Y45Ph0f6XW234iIIlC6)Tr%0&}KRp;i2LJ#7 diff --git a/integration-tests/validation/src/main/assets/figma/ComponentReplaceRelayoutDoc_qIh0IOQTCtgeAWZFF5gYSk.dcf b/integration-tests/validation/src/main/assets/figma/ComponentReplaceRelayoutDoc_qIh0IOQTCtgeAWZFF5gYSk.dcf index 423690c22be1cfe8181940f2a83f39b85f10f4da..1b0f56394a7b692c489fdd7f55adeb4cc72fd3b1 100644 GIT binary patch delta 57 zcmV-90LK6K9q%2GIRQGcI>G?~JG1=(l>z}gvy%k40s%LZOb3*a#}bin1+)JLG64ZN PvoZ-q0s%R*cng06SDzCG delta 70 zcmaDa`(1W|C1dqQt3!;8HJkr3PGw@O-8`9P2NPr6WFPh^LQD)Gu)v9t5yBF4-u#N) Uo{_PBvlgc-6Jx{X0`7Wd01~VdX#fBK diff --git a/integration-tests/validation/src/main/assets/figma/ComponentTapCallbackDoc_1jeKYynjk1nqYblZ66QDDK.dcf b/integration-tests/validation/src/main/assets/figma/ComponentTapCallbackDoc_1jeKYynjk1nqYblZ66QDDK.dcf index 69d339ee7f5f13c6a0a18921aa02b93d639d5507..f5018eeb1aa91bd5dacb2d3c583c7dcecab6b4ad 100644 GIT binary patch delta 122 zcmaFl^2lX^C8OX*tE-HRLYoDc+E^HcH=mYV!8F;P(}q!Ia}6gm6Qk_r2JWLwOcK(Q z=P8P9j^%s9$SAqlOJF+_qu68tCZEj{_;xZfibJ$*5Eo$-L5PY1MNcs?Nl8yOV3OIq PS>_odqx9xkawnJp*nlMS delta 122 zcmaFl^2lX^C1dzTtE-HR5t{{=+E^GPH=mYV!8F;P(}po>a}6gm6Jzw|2JWLwObODH z=P8P9j^%s9$e6g_odWBle>awnJpwwNeq diff --git a/integration-tests/validation/src/main/assets/figma/DialsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf b/integration-tests/validation/src/main/assets/figma/DialsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf index b9bfe6021b664aa6eb886c166e6b6a0c094c33bf..aeee3fda3a9a6f0f3cfcd1a9c0d509093912b890 100644 GIT binary patch delta 1256 zcmXYweN0z%6vjKx{Q(IPW}@Nwfr=qUh=_`yK#GVkH(z4Cped@}ewun58cIUbldl z9H5ouxmX+i8_WA~*7XQWO}useoh5vj#gDR-jJVgeR}ux{7)w~X#g4N~$e0QI!SZ!x zjyu%J9ukNXEW>l+fRilwPrVGBV%htQYnKJYM97$FwSG9wa(l)&;0#Opi?0J`S+?en z0nXW;GnWGAS(X$|0sdrZDJ}vou%yl|0WPxW9OGXsL+2SUv22=e{F^1J#CVxy?IPn9 z+ibai#GVOVT>yZ5F=`#yczrJ~Q66JvRD4_et@lX7^%}zA`}kstt}D z5Q9h7))@Tcm2Kxh{*tpj6J@0l0cGpz!YM%N>TZDU7u|6f)J;ko{x^>{hEt$)HkuhE z*P7Zu56Ic(Y*4Ta*|!+dRW?y7l3+7 z?#T{Ns7yL@8q`Y?&Rem!R9vv)BT{;44k+xKD>kQ(+-%zcVyW#g%PUpar-H%-oeMw_ zvhdcE9_ssTGv$H$X}m*$4)xd3{&dkpkvcGlQa}SVFPJhxkLs5p^eQMy`}82|HBduB zX+J1hPxN;EK^oo1^&iu6uj|L?ioTTT(BpbAk|u*FgNyJVYlC zru7cRYkNG+0}a)g!)Urg3A!_p7NTr?Mt7Z@55k`5nVhXJTMte0ShjJaHc(wd#It`?H_03#*4V0#rr_*)N z6MF7>ItCh}4KL7o&{!?Vch^YQ`T{x&8mC_r(Ogi5dS|)$@!E5ao6pqtxn!3)K?~>8 zG>5XZp~O9B>*zOVh680?{TAIJY&G#V+4r@LwQ#8`zGF>%&lR<-&T@i-?W_SSs1x|! zDy6QdW4-&KD}G?@`j}<|Ke85=ll^x)SWm8UD?3@It|t34>RI=!p<5m_u=+N*;wRRo jjjm{9-L=^rv5S}as>mLwugW4@mpBI{x?%v}?7y delta 1628 zcmXYwe@xVM7{_~_FGy*GS!T)u`6JQ@@Qyp+P#}*x?l|Cnz{LS)M!<2$9o%uhfCCjQ zOtfrRWK1XJYONp6(w_2DtGQJ!YuHNLtTk)>wAEUrxm9RCKHt_KpS|9n=XvjWo_&5C zJCgP6D_MKiVGbRw_!TghxCko|Zy^q+1re7Me>yK8aRqVOH3f((iHjF>Bd#Lem)VAR zEAgeQT7;{(a?v}8dBnI_+HND(ERnX=#M4WqZ4L3o>>1UzC$}8&cH-IPg^2mYb1MUg zcMx~wNm~K&@zwuT%gA>l782iGAe$Ev?<|s4*AgGo$f_FR9G$dliBl#2RlUgo^RbwC zX|=TJh^=NnqMrCAi(74~*w)U+5@Nl(2(gsd*W82CCu?CLpKGa+hN+DFT;AY)BYk>r zy$mk6w*;}AxVkfmxQ_TW-v-3>a#sI1Vg>P7(1ln@e7ZM;SVdeJNg>`zETWPdh_wkx zBk`dD$!g-fl%$FH$q`AjoN}vV4e`{Nq=h*1en~6w#P$)yT4H5l7STrh(Jsk4;+fr& z^~9k`$p+%GMM)EE>$8)m? z&D?wF6oQ8hFG{p<`ca8iKEo1i{NynSFZaEE9$_Q9-?ZS=WNyaP!Q(k_Hy=O#2f`*6 zZ+(Jr4^N)>KY8xm9BAjccV+Tk{_Xt>2p#<0DH}p3ul;Z-1gNagb+Kv{RW|zi@%q_KHmR>42F5~rzk??QL6qv8TpjbZ-eoTWQaoYl@ zKuC$MOt2sfix;w>A7Ml+TLiM!W|6fRK0??czFeZ_w~E!v)cmNJCN)1McHaUP1-6Ng zSArAaKCvnfzC^fRq^*Gg<|?RC;6X8Nguyg;NX*s12MD{xd$lSb7LV6Mx`LOp#f$?k1767%`(1Dl@vm%A z;f6K^|IQZE9{2|FpKP(E4Px?Pi=Q{b?+75y-vgf`pg7S1Pa!BG;8TZ46Ym7zJA`!c zdbPsfrs&{PTz^ZX|K}F^C{8Ceb?$^4Hx& z;;VgXWC@AJ10es!%_Kf}0t z4F-c|`tVt$Xe>4qs|^gst#-|TR$EqPjJrmI!)8z1QJ9D%%KeF?FCHqfd(Ew#&XJf; zpQv-2oPJ-IKG9L*)fk&C^+B7{P~I@u6dv}})ekf#o6HGQv8i|{r8Cz>J$h@%*kihD zC}eRBly!SYJ7P^?V||UMHR_5q`D;yMHcf{vY^~NgTs5N+S4+)s%HasuI=yyRU5l&5 z(HTrNHniFcLxF}syvyvYE^BiqS~P=!U~RJ7)7NY->~C;+0(N6hU%(emX_FoGU7n;- zTVmC>8k!A`YOg)wFK_j?w8aLEsh~a@NyJ8b28Jx7J$_TfTITQVtm}-G`1{@cv9QkN zw1u2eV~HgcwmPfhrK1*eS=4URmX?kflJ1f2!NSgFhpE)-H`)qy$wuEmNg}L?_E;Me sex1H{*k4{&Zt?eaYg>i`?d>bqZPaNr1;rZ8rUKzOtDFa+J*%YSzcIWOq5uE@ diff --git a/integration-tests/validation/src/main/assets/figma/FancyFillTestDoc_xQ9cunHt8VUm6xqJJ2Pjb2.dcf b/integration-tests/validation/src/main/assets/figma/FancyFillTestDoc_xQ9cunHt8VUm6xqJJ2Pjb2.dcf index e43545fa0e6f8ca8754db744f24c21676ff57a32..f88d2a9acc8e5cbcf7508400490350a568589971 100644 GIT binary patch delta 377 zcmXwxPe_w-9L9OR?{64Fj2(g*A!sqINer}wP0T_NoaQv=Qm31_%0DfI!Jx1Z|6iH| z5AQ*{s6@Ni^dVmJqC*HqOlVXGK}hHzbjj18F1{W-eIEEc&yy;sR6!;0plQQ%40w4> z-V2)fRqY8{78i>CsRL`ao^LN40uMM+{72Brz{Pn5AAi|g8ro>Pw5-t1^^#e^L*BYF zDd^x<>Ab+tdu4NiPG+x~EbyZ=ql&mRqW!DD`CoKhHIWwVJ0(>@bVSnYqO@Ra$kpMqyh1x*Zc zBGe)n;(q^{V3@JUk-`Z5LrV(Jc@j+sqMR7p7QCP*CK^Ur7q@E|W8meds1diqep&Zg z;bi(%2FxA5ap;Nb$TQiw3;lN$T!ya_-z`S?2L3`f`);GD8abRzGthTx;NZvG=jrT3 IEAM@M3VdaTtN;K2 delta 380 zcmW-ZK}gea9L0Oz|8Eqc;0}RB2${@u5|Yl5hEWJXD(oUdFs9H&L=c2PDH)}?gHCPQ zU)`2EO*d2fyQlosONk&vC^)Q}V5bRQ@-(oE|9Y3tgAeZ|GAfZ#BUK2lRi6UGER+So z2!E(u!Dwjs>V>*ug+telf%k0BIunHG%?T)s@x)%HVVw5s5rq$2z41<<({<~OV1k?Z z0l_36-yRT5@%tUih3Rp;5=6Lv*AztA@7xl6;7M#F7tV zf;rCB_%zH@dvYlF#Gkb(!2;t?-zqG!wBACThQ~sJ6^&7aC8nBw2|hE?Y+;#xUxQ$U z2d(phRd&7jt?-47ZD9q2=N&=88vUKyf+VZEL<3p#GEc)gz1D6QzaAo~E-ho4 zJ=Vv~7AZJX#p`6*TLbpFG<735V2}S3C=%1>fdPgE)1 zO2=#$aK_hpT~?V`D2NJ#Y&c>pBqGO+0kh#b1Epqk(uh#zPjtmVrTKBHKcY5ux9n!d ee1h_M+>E8FP=n?WeV%71yBX(dvI_pD-!1<#igIrN delta 299 zcmXBNO(?^09LMoK-~ADZjf2u(S>&<<7Y9~GEf==5c2KrlEQiTaD=pIw%E6}pNph2m z5!ALY7IE!vNZ#oGhCC`aKS*G;*uU+am6mX;+m~3iW@dM6t}dseQLO) zrCpI_p(9cvkGe7MvNP#20h6OWtAZ!ix<7ztqIW^?!rzf8G3xu8=!o<)JD+8 dZf6?C&t!;+i4?d#rmnYW1)C#z@H_fy`2+DJdEx*7 diff --git a/integration-tests/validation/src/main/assets/figma/GridLayoutTestDoc_JOSOEvsrjvMqanyQa5OpNR.dcf b/integration-tests/validation/src/main/assets/figma/GridLayoutTestDoc_JOSOEvsrjvMqanyQa5OpNR.dcf index 8f1a77fe729ccadbc49023af083d20d083542901..df4a650302adf7475e7cdb59bd72eddb34324dd3 100644 GIT binary patch delta 1551 zcmY+Ec~F&A6u>#>eSm`8hvFK_B0(}Lpv5Dp(afooGPQ*)%VmhP6w68y1C*!Qqcfhh1kJLwZ?HkA1iHlOGD_$!y_>XeOz2z+~li2L9xTWj89misJerJ zn4|1BI|k5=j)M#|71_F_BYvl-)OQBrQe|)T46xtz45th~Zv&SpD)Ex@<%;}+bI`uS zGZ5QZbqwA0ECcYOVy_GYMSj6aXwQEt2)diz!T2f#^vVM0L5|RL1V6I%S&3-1I{Su6 zo;O8ylf3p+;wyQDk)0uzsv_MHzNea~6oemWRCFRj9#uY{gs_TU95f4IHB}7G2d_2C z)p;$K0TKP}j_NLyGh`sbS~~pFbpzH>WsG1w6^{^Xpv`Xyex$s21wYZ^v4V{>H%{;~ z&79O^z$TiS&}3LQt4F_ z*A?<Gb|{l&=SE;@~ar?3KcYQk2Kmv7b-Imexd1AUnA_MYx@fT zex)_l@d$g!js`xT=>40 zbBZ@i(DJw96(4CiuQ+?MmVXqdeWs;e@r>y(-W4w>J~0!r5ics9k^;$y4T>9PLjm9= z#kr|43GuSxHfg%o6~(RdM7;l1?hoIwsEB^i{iDoLfe>Ub%kt)gdRSoL(nZh<@T%ha zZ*^Xy;!~!UYl;u9&~jbzo;)p0ii_82X;$pmsO5&@wGJ&e6))SW*+rkmAXYs8pig3*@`hT#nh zKJjpO`Rd&j=gSc>PyzgMES4fWM&e-$XZO@kcE5+~4IVoOcY)a>4#Vtq<7^zBfIGn6 z*ka@H6U9t9wz1!*SOlhI+05ERe3}d6a4zuFD^kVmGXcZ5`J>n?$rzsFFX0kX1kNVr zz9|?^jV*F~X%dD}-8iw)Gcn9`R7L?tCkl+12piIVox z&cB;uh4R2z>w!MFwfXEE40$jwUrEOcfFGp% E54&Ga)c^nh delta 1561 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 Gr~Mo4*v5?j delta 3263 zcmZvddsvlK7RFm^?*kT>^XXW4NkbGIDLJTs+NfYw-a{>^$qMZ%N@A&%8CsfxiUu*d z$H+Skn#wWID5u?Pu^A>|_{=19~ zHhTr5)Mgf)*P$D|fj9U+U3$jGYU6e>w%O=CjO{jjFXJ26 z5Wb>#2j(H{rHW>djj)df-VB=n_LCKGL7&oO?q2+j?xN+=P7lS@B)ooExbsB*GSne(V|a) z`+1pm5{yImmAY<(*$BVUhBDXyaD|@REPj5cgspP!D&4VDc#R^y5MHMiUor6phrC~N z!Uzs|z7v5CU8xbF9Qx&$2<_01r$l%hI(%A0fJ6Jvi3oJ)^UETdI8=U>3x+p3)Lvl> z;!O_S@4Kevi# z#(u&@{E7WUifGP$qD9=yetaTsVLx#q!q`tw5iQtH9}z7b`lO$TRt~KmAfmNHg+p1R@ zP~HR)kq%`|5)tK4=1U?vIy5O$#Gf5Xn<=7`L#bIJq8%EUBjR?42Iq;m!=b*5MRazk zdjWDWWB7_?;>X7hmy4fRhrV5bR~2?~=+OJJxvN7}ABpJZ&}ZvJ#5uHyM8rF^woF6< z=d}f=dY~`0+ljX$+(p;ts-+11Xlagm1I^2o*cD&*nwm}9miRSk9tkvNq)QRB+k+B z7i zK@_7@I}J~{-kxss_DqAf95nUK)DX<}8#8Py(X^?;S!RvG4kqbM)yX8Ms?#vn^*Yb* z)dWSTSa_9sMW{{)uaS3);;;5hs*O_f0$>)k-R;&WB!A;GVP;J$6@t^eRNhKOBfjFL zx?9!Th?!oRdz+exM#rjV(4E3!RU3pJ6yH^?M||F24#VY0B=)oeV3J#t$!<-IXQ+zD zv0jtcOLe8(UMc_~jZ7bo3FD|$Uo{kAJdN$AS}IKU(wGNXz_YY;pc<>1%MX8m`|}?k z-{sDPg!%s!D8~)7zzwv}4fIB1pj-)*u8cQAh32O|)6~R7s1TT7I=`XD(~QT|W`GRp zGg>M$ksetrm3fYart!1M;ewdli7FCaG~CsR|F`BZxs9IcHu`00bT*p(V?sW&dzkje{0I~lMGz@gD4|1&!_FKmxUc+rnH+;Iaxn9TCO%W#A$!mrvWH~I zd}B&t^`QVdvJkcag?83w(Y!iSCy=+ho*F>)_aQG2x>rA~s6Jn_9+;?;JhWz@?j5kW zlJ~7C)boLSDY|DMCC!r^9}m}Cuw*k<0Ch^$rL$xRdVl;R>l?#_N(Ocfws=y+c;3_URf$ zqgHY<`4gkuSFJN8frhD=5rOl;WE^4xi6^9=K}9TiGR}YfeLG zA>O;rA^bBl;f(G`HH)MR9WLsQ_L10fFq4%h>VKO^yvUdN8`kT*j`HW&{vu!NPbayC z7aL}{w3byvlO>W(&fw@H&+RsWcM=I}eto>zZ5p(FpZ V6Af4SzfM`FIT%mHR=`Iy{{SM5y`%sD diff --git a/integration-tests/validation/src/main/assets/figma/HelloVersionDoc_v62Vwlxa4Bb6nopJiAxQAQ_5668177823.dcf b/integration-tests/validation/src/main/assets/figma/HelloVersionDoc_v62Vwlxa4Bb6nopJiAxQAQ_5668177823.dcf index e7753dfc7ee5bc03474a485b9b27f9e135bc62f1..74576104cfad48e5d9e46d84ca3017851b33f1ca 100644 GIT binary patch delta 205 zcmV;;05bow=>f9o0gyfcx3NDV0s*+QVFG*t0lBl@1ZDyOy0b+G&jbOxvlR^aP_vg_ zl>xISU2p-D$Ql^4D`2h$lL1jFlfPye0yq$pFg6#HR%IEJp(_}(WoJ_Y0T7cwZ5NaO zX)2S*X&;jrYA=(nF&~o}YZwDEG8mH&X&IA`83vOHW*C!zY7&!>91pYFYVQG(Z9kJB zEgh4GWElZ9lRs_k0Tq+(7aWrbW*7o9H05AWt=>f9o0gyfc*|9$%0s-2yVFG*t0o$|Q1ZDyO+_Oao&jbP8vlR^aP?N|S z7_*{YaRHMBS{Sn?U3~$wEMTn$0T7cgHW!mtWf=iBlL1jFlfPye0yqzokVqD@WoJ_Y zlj>$o=(UB diff --git a/integration-tests/validation/src/main/assets/figma/ImageUpdateTestDoc_oQw7kiy94fvdVouCYBC9T0.dcf b/integration-tests/validation/src/main/assets/figma/ImageUpdateTestDoc_oQw7kiy94fvdVouCYBC9T0.dcf index 7f688c3f7aa782b08f2719ce5b4fd485fcf3564e..91751cad73a03e843258785eeccb7bda5884671c 100644 GIT binary patch delta 66 zcmaE}oAJ$V#tBwTuVgmbTxMi?EwfpW=|2n88=1{Q>`~s6?ITP#_i=PHPL>Tz+uY9# WWaxw#PEO!4om>)Oym?!g89M-Klo+T0 delta 62 zcmV-E0Kxz4y8-OG0gyTZE*-Hv(*Xi69kUSv{{#Xs9kUV#T1&HF48Q@C9ab@uKUg)h UjtGkZlPpwblXO@!v$j??2d7~bQUCw| diff --git a/integration-tests/validation/src/main/assets/figma/InteractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf b/integration-tests/validation/src/main/assets/figma/InteractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf index 00c23491386ca27b0fb9d4889197fffd2a9e94f0..a28e234502846b940d5ba33461be15ed3254ca1f 100644 GIT binary patch delta 3303 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 E13E2=umAu6 delta 3308 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 delta 451 zcmYk2TSyaN6vz9Y!4Rg{L{N!FFa!y_U^1~~P(chKaD@gcq6iWWol3A|kuHmt;86DD zlcZMETl{;dX?dSrOw;V>eB{+(m2w1yD8QqdL6iZh#@|0iZrRT$$RVvvvG{emGL zPiPSgvp=y&FhX;ZTQEvrieijAhi(hT>9sTq!rVPlBA8&YRox4QQxz|1OVgHD96IU~ zyyofjGQlLfGd0#59?Vuu(U;REm}YG54Z&M>=9LO&xMA11S$a+?-VvvI1#`T6=9b_+ z)6WJ4A2{sD7kuR3f`H%?1Lv*^KGRgFZl2xeTLlqXi>?czymwLOzA&RiSM-&xGKXM+ zkIU->i?mj1&Lsw`^r2-QuD&4n#)eB;{LZBs#R{FZ>V7cd*8i>2)~Km}^8RJTFD835 v{BQO)saxZoSBvX(UsG&wu|?e`U9IZ27`~~uZ94sm9Y)*w1b^sjZ#V1%3ahKi diff --git a/integration-tests/validation/src/main/assets/figma/LayoutReplacementTestDoc_dwk2GF7RiNvlbbAKPjqldx.dcf b/integration-tests/validation/src/main/assets/figma/LayoutReplacementTestDoc_dwk2GF7RiNvlbbAKPjqldx.dcf index 6f343d3a5326c410ac284265e8b9a85e70447241..e066f5e688218f23d7d5af86a043a30a59ff0412 100644 GIT binary patch delta 213 zcmaEv|1y7q4decew(d-f+c&o|F)=aj*xbP~g^6jW+-5oU$xKYU9$!=iZ#7+rh%Pd9$~4FVo~E6RF9I zCDfU=fR$~2D-p}YxD_b1g^6+RCb{`cjQhaGh%f>zVh3Btz@VI*npcuqbYSxa6H8_Q DU3EgO delta 193 zcmaEv|1y7q4daiEw(d-f|2DTWF)=az-`v46g^7tlezP3=WFTLD^JY#U%_P6sgGZc| ziCKPgqTpU8CRX{)3L>6NOf2%7v&Af!CcEnkOpF diff --git a/integration-tests/validation/src/main/assets/figma/LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf b/integration-tests/validation/src/main/assets/figma/LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf index 6aa65e6637a0aade9be3137aa0acce0051fbcd1f..af40ad32e5051302215f31ea3249b74628cafd11 100644 GIT binary patch delta 2169 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 GFZ>7Jg6%K> diff --git a/integration-tests/validation/src/main/assets/figma/ListWidgetTestDoc_9ev0MBNHFrgTqJOrAGcEpV.dcf b/integration-tests/validation/src/main/assets/figma/ListWidgetTestDoc_9ev0MBNHFrgTqJOrAGcEpV.dcf index 77b4e32af2ef7c6defe86aed2206923b777371a7..c205e966f2382af2ebbac3aa215bb4e084f1608c 100644 GIT binary patch delta 2432 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 delta 338 zcmWNL&nv@m9LD#3K4bQiF=On<+fYlSNGUauD5Z%+E0U!7aahTjmU0_z4odD6JqOu= z9Q?>_e}U_6e$CCV_vzKs^E^FIA&){H2TAMua`4l#e%Ol)tY046%dq}<=qLj=;hw8# zUAc-O#gj_()rrdW@pE z7LEIHre38Rm7;wpn)jIc)uLC)GNAObI?d#Uo^>+~s^#S5fypCU15d*v(-6#7i;29@ znhu$KxM~?;^5d=Th-nyWwhYqxF$Hlm zAecbCM=*(uS1^Sazg&f|H0ofQ#(AL3G=tQHU>3oU!$e6O%zhCqBNf(6)QWtRnA%WS zkn48bCFG?8)}+9O(-lD{%BzAdjIGPHhTBailO6Bd^4X319f1SayK**XXq+^1E)7+& uGotW+$9Yvlb&M!g9ivbkV`@9e`anqD2B$Fj2Kg*0nLY62cyG$Zmlx-MeAF~+S*vIg*4JTK(>2q-4 zFL0Pr97u7Nl(UPsFXi++eGZ?)6A5r6z`+t43YUHo4MSsJ6piQ>R{}n4$xNeq*cgu# zdn?nJ(w=Bh8^Xq6rg61cVq}?68j7_s*49kqMpLqZrlF zj*(a_IDxZ7aEj+LxjI98MJ`hat5vT|=NPCFT%fu(*Fa7<>b{5;F;K4=$d5o1F>N5& zBG;R^ZIhQRn5=?rcsm3;cbPqao>mYQJ1|sO1 zP^XaT5AYCOM7nqBEJ4^`VCzcnI&XgOJ!%3qp}I005uF2lsk)k_M$T6^+W-@6peDd1 zS6oX1%Hr*i&Rw@dz$uZux<($|An#z1Ya{ngh;m-q6kwWfLM4P4w<9gYxJbXU#vR!& zK!RNf>yqSh>Ko}z@xds6Div+=@n?Q9n1wAMB82)teJwn{NZh2s!Rf8;E(4euEPCf|CLi z*fBr2Xk1(TLf8Mpnev&w#@|b)NQICOcKJMXiPVsN)C-5OZ04yK)VO`*2RfX+qSxg& zs93D(fMpEbDO@!xv0HgZREABd?<|@jzE&3iR=62^Mvz%c7zj}gq~;LTIhlDxQ28@k zLx^!Ye}S;UEp5sMasDXP5fZ##y+=s$&)yS)#B}h2utTc%W&qD16s^4_b1z5q6Ziu& Clxd&< diff --git a/integration-tests/validation/src/main/assets/figma/RecursiveCustomizationsDoc_o0GWzcqdOWEgzj4kIeIlAu.dcf b/integration-tests/validation/src/main/assets/figma/RecursiveCustomizationsDoc_o0GWzcqdOWEgzj4kIeIlAu.dcf index 3abba02f3cd0ce4e24178e04e4f55b9154928f7a..1f86e38a23b2e21582e499fcdd4235ed827e0b90 100644 GIT binary patch delta 110 zcmca$cEN0dJ<}n%jgA~lOo!z*doy)0ar-6arn(gYi6e5GHw(XIWI8Ihd68%w6Voxd z%}f$COp{Nrh%p_P+x&nj8riRq-==6cRpCZ$_rpa|umjFk;CUO7( delta 128 zcmca$cEN0dJrk$=Mn?`NCNBBS-b`Ig+`fsKd2U6CxvAXpn-6mvPsHO|Fx=1OS3KA$HgHrv;X$1+Hsv zy6le$B-539(rGf?IMhebJ*A+cV}6}d=wd^;$COi%ux$|f?sIJCN;H}4G*^x^KI zf;ad=9YJ579wz9=zE&3W=dJYx130qLH)IB~Z&Tx#LG0H;f^TwCE5TrH*G4deb6*v_ z#gn20L%A$kN*Kl`V+6xfwsv&Ph?H%e9W#=Xx=F$)Zr4LFnsa*z#_*&!1Y^0ZpI{ts z7$_Le%?1m8!&z?$Ch)M~Qo=-THcCpE#4W~3FqX5&3*P1t69vEJ`>}$_ynM3YcN{)d z&Yr^e;sjGuvZg!c_bFe_a!ed&&q*NfXXhz^C(c_<+QIenEJKZg-7!MWUjz2Kdc>mJ9<;~NPwn9mCmW%Dn}Wb^PXPsqH- zAxRQnz-h^X_qp5l5;A|{j;S(Q$mezn7V*?HS#u@G@#lbjYsf6-#QjqA5}tBUur%d0 zIA&Q&hYZJ4%O{9?A6`jj1)s~5r62OtY{5#VBZ5_&cucUG+vIr3tl{G)1@S!o)EP2s zx$PNp%sOuOtpwNe*Li{s{Pu-1G9I3ANk$vF^on2;Z@4N*;O5r_Ue3NL_=raqW|K+e zu%eb^HglhQcggcrj6ZjMaGg9`I{I_O;}FNQwX;7D{840EH-Da1CU;5VXU{f~=VUMc z^esl3os4FVks|+!EFWbGhWRPC$Vyt6!;#jE0 zcVS#zJ09RqjEP2Fkt2Y-H|{*@t~im7gG~g>fCTADOQx58z6K<}v0*Di0z! zTA7a2_R2%()Ika4y{`N_rgc$%ii+Kp8A$4(b$y0)y`?Vt+~PoAxd0uu=rcg&3yZ6R zR5C5*4^hdos5VUHON(72%w3{vi_N1|{$a6loC$a6pE5N;<%mU2tR^3|m@rx8m__Ln zmE#s0;#5vpG@q`LW05^m=P$BtR7_M`E?yC3yje>q!V|n^xc9{p zGtc9{%Hz$MZ)yeS{(rJ}e;n20%d6`AvH<(uGlLC%ZBgNUJ?E6gmW3jo);a#@u-Mde z=o^b6%XIFH#hn!@XDybj(z~3q*dDLhxq1HRzTU(WeP?mbV`@2+XHk@(+2<{mCaV0) zB5aGw1&j1;D&Jf5OV&1BwCK29<&s6KRNeZrOzl#+ViC7Tlk+WnK2iC>V(S5ws}@n| zD%UJ>q4IBw*bEVGQ^!mz))hVSt?H97(J|-sg!>i+7c{eR1BtDwRq17Er;C%->87;PMS4xTCGB*PRGXwJ*Ij&CkL0P|aB;?^ zjYKzHOs-EGh;F$kZ>Un>VqFvRP*9;;;pbO0Dkg#lh0Y{zXFucPO>Ie4>9&iEmYROY zMgP{4PDL)RMd+4yUCfJAx#!A{mI|b?E=t=|ZHJ0ogml!Y2QGGZQhDg2OIMXgF7mpo zJa!S+Q{{;Zr;nEZ)J0KWl^-Q%fZn6TMe&;|r7i-7YI2#2IGL z70g(#`&C87jmm1+nxL$Xwu#CbIPqtxFCfJJ_lZP%gKtpyFaHBLc+FblJ(NtLrY24$ z>!MnS-L4Ep*$(Nwsg00bIc)1~&L#F%ePT;I{Hr z^uJ3r9McvPi*+1{(uc|@tbd|xho&XUXk?Zte}$pXmF?4u96=10ILg;h*H_sA2mF*B Y(K|r-I`V^*oiMkGvNI}IcmCk~1Q^9~B>(^b delta 2522 zcmY+Fd3erO7RP(fFCxt%wp48KyGm;(vNe&|OYODP-qs){L(^IYwbo88Awu2;k!GSY z2+EOuM}|q7sV$X}TFPTADT4~JbsGuVbDrtbKJ)(b`P_5Qz4!di@4oN*B**_rj{mx7 zvvgmKKbd9RlS(Kh_HY0Kn56{yP0v!M)qkb!Boy@E%0z;JHba> z++L8z<0Ax{xH77Q%w|3rBiNFa9_N_!tgW3Lvz0TtNkRrk_7Hr`#jgo6d3+ziU%0ZL zAdA<(F4)G+2Ma#of;R-)dDw6%A)A|zk`n&PE#H#h4lW!c*vTWt33l;=ctH*?PY~?p zkV$g(9=@L_*qc=_*)gAHeLl@G`?zq1B<$xAvjof!<_He(^7(>X4p}JpjB^(YzIl=$k_)uca@x-$4HXk-?@LX;850$6vrIqo2fGR2hU3rs{VCK7t;~JDNZ{kDB*TR9x`9?@sonnJm%DCGG{pKG&$xhN1pSLCnnkW^7->g zWWMGJ7c0qgCshKIE=%A7S6r2h`dcKh`I-bSa*G=h=#wddFKN9HO=KN6I3vmZhn^9}d>uizR_sFZ@P^V6qtk^YmLVm6Ye@{p;9NV$$=Zla)y zk%U_q=A--;_k5MNu{6L)?PX|KU3mw&HO&Jucd@Lm_?Q&jD)e1?o3TI0`H*Gp=o=PdU3m4_i?(R+Xj zSzH^a;#kZcqT*#ybC^mMi=89PJtA+5O`}z+TC9BAggE3QQ)5-0wk6#mMO*)vH_Y=l=Hz4~vM22;+w?44@{8>(sHHDAxEWwB*}N^Ohq#aeHW z#gJthdBNiD3Y9t*OIGPru*J3{jnuV>O;)LAaW=)&aj3pUd8$SlSS(FbX=u@Ki%N(^ z?pBpX7X31{Nv=iQHWh2pI$L*cEK@sGUbINut;tO+s(h-_)FOSq%1agzxhgMP6hoz% zMSPx0bBm{kR9aYU%$J)&EiIN6$`zqj7THI1s0nW#TqV|G$9+>s6emym$W$fjXffk^lS0(V!tW=Q&K4g(HXjjnv50vhx0JeCoOz~G z-7FFerIG0l@}f;-UPZb$T_V#1v!AEkWO|~RKjo5n4Ogns32C2;9W}^G`&^u?MYp7V zE^=R>Z>4=MGU}2vqPdHM4M^T%3m2yw(FSRsi-g9so~V_JCrwmZyIA)!rBFZ{*X!2{ z84(l81B0iMr?Zc#;>m7BHK?tNyjGgt&PD&Wl1`y6u7~QD?On_YR|#_w7)7_Gr7kL> zsjfp2E`s88D$>QSPAX9@x^z`}#l`vVD$yFC05s3v!EkvUwYvx}%vDqUO@zp2vI#kesl-CR5#DwGhbegg^?oLNnNHtJPVWquwb!NWnM?xGGV|# z*ZH-BQ8AHRGGhvP+ODQLW)OO=);b2`Qj&5ArX=frZ=mW1NqfxnCdT-uD&`uq{gZgPejWb-4-Y8EVmYX$W5!`qo{q<(-C<=sj^-;TV059-|Bt^F6B^;kTtKxwrA>_w z>K-Ba?@7R=WAf(BpK!ED51EM4V&x=Ml;|e!VBHyIB3}Ah`7RD!Ao*i?4}<@$oQ$%| z$|+b_s+@}8>vV_AGvGG+c7gS?xBv~N5yx_SxEj-m@+rb z5A7e*YBF<>U#T;5G4z>oUT(P~n2#ln@&nZORxZGPA7RSG9A6CbbJmbqgwg<=S&W(0 Ml}k{qmh-Oj3#P$bDF6Tf diff --git a/integration-tests/validation/src/main/assets/figma/SmartAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf b/integration-tests/validation/src/main/assets/figma/SmartAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf index 1d1699d1cf5d30d880cadc1209eb8199025ecb5c..3ffa69c6fd622c3d8628e8678c383399796aa58d 100644 GIT binary patch delta 6060 zcmY*d3!F|>_ijIXpEEbc?ENyv%-T%lK4UZ)K@sfCzY7lIltv&>>wm z=*5-o2>eUas(0KR;NP02jds_<-%7I0Z7p5g&|Y%YKEO@wO;271{Gq)k9vP{`%eF%^ z)!EkgNtO0$*SRJ{KWflQ?S%Lz-FrrPyu?{oh2}RXFRpvr8ze&9@N!ajDcm$P>P4B$ z3mJN`m%IhsGWMMb&T#K;^L9$y_S&YOg1F<=Zj&z2UfViTRM6I*qSCxW?PGxsdfkVL zciK@??hIA1(?DqI^QCdYg!T`9-qvs9mI*Z&@)XT$BUcJsG~R}xe-`ehWRD7>xtH2w z3dGZ)H9h0KoXnpgT6k-ER+MOIyn}s;L$tCvt=+Dnc-!CI z0Bkqj==UQW>@ePhi9G(D@di)f@twx2kyX#Z_r~k_5s&XOUi!!Lfgg-_X;wLj-Nq|6 z=aRx6X8~}?ct^8ylss%=L-S9U z@b(?ZRXAco^N%HZdk-G~jv8Izt?o=z_M8TAA zPG3;SDfqwjT#A$@!|N9Jisrd8)VzJbt|n1NET)yQ=!57b=C2?hv{5V&i?$jFv6Qw2 z5R4GZC?^q%-B934Jnm?(`jyK9e`+r&|FXhe?ZsTb3*6J6$Nb@lhrA+p&+*i+eis`d zKwnC6PYFq1MhYHQG&@Fo4dGCySTPC0rQA3%9U_8W3kVAlNzw8CbrgM?AXY#`Q+kqr z9Ye=Ui?I+zD6^ax15uRzQ$b9Fh^5ym`|A{=yH&*}5OMVJ!~VFYYBl`l3@xoCIP?P4 z;8B15;rKRMB}&n?r~UCnI?~D?Pok{W zBFYg#JEjvava*BVATCXO5r`3G=%Wn50an(~oL+(>rJSMn`-*Eyl(*;W%ARy=fS9OI z!BF2<#U7xdp?a^2dk~duwKW(*i-w75N>rw$9$tW`LJ{jwDMD1GM>b)#i)x1YPZn^H zZ0wkPr#RKCqy_>H8{(^q5vX1`{K#xE+ZB)4+L_LK)OrCgi5kXEU&7lx{E{;VsA-6= zct)+l;oYnK8MSTBLG?0alRu-5p^S~bT-v)TNrI74M>+q4RsiZwikYI=Np6 zDN;hIJw{T-zeSc3_5aT72AtWDXlSN)c#YcS@?E5wFxH}xq0?u@b%n-;j^*(hc-&CV z6=57aVd&a#;sTJyBR538!jp#f-x1kB6GQXw3C`E1hI#U49`q1)f$bslfld5AS@UpgIy-b?9UOsM1SK`OEj&;up z8}|~&+T7Y;YUrn_^#*yuM^%vmPQ2Zk4mLml*rVxUD$XkG)zrS7WMuwP)0n2{ppdOY z$yK{h^%md{{;3eR_xZTpLD`ch+(^5 zpsYlc4%o5-RY$rp9$mlz+HMj~LX@RiQ!yK&9PPZVVDIU(>!ZSmxUEAyg8lDRu_>Li|E+%)}KX z&QPD(I1BM#yJ{Zdsn;B&L!2ePSPEO^sw`$V%|iqY`W!7G&M*3UAslhRf3^f=FGY$J z7s*+P3KCZ}C9lC~AYaom4~(|gG)1lhNAa(kYHY$~S4^eg4!jOAji&EJCx|Ti?=By- zrjy*q_c7SmhYulzk`JL7@T#FfN3cWTHA9c(@P07F(5YPCr>`3-dWKUFLpkNnqP)Z# zhNfOXC52&z)?W6#Jls(8d_D=gekh;S$gyr!kw>WkISAqsEiED0%a>_lf?Utuwx=q~ z1e@l{SbU(Vq$?FLUQ_8vnc!f8rus!CNBl%h731V_*tHFi7)r}`MJ^Tl4I1JUmA{UY zO8ke!ZQKA(8@qCZ(;@VB{$El1w$p~@?JQ(S{K6kF(zy=1&yk6?_5!7BbWPa^vyFYV zrc9>6HDy=eQ$u@dOP`;+ILeN%EL)0?Xn$qN@HmtDRg?1|EJatBcVN?!WCe^f)H6xm z68M0@p|p&2Fy2tV3bL%UBgS(8T}X1O;a5YMjpYD{-)Me0hx6@s8eP$ei3v**ySJ_k zqDp`+)Rq0g$kyjou@|Toph^v;l=g`UPLh44v#f}ZwcXTNK1>@sOFoBBG$nRrmtvNt z+ui&vw;$pZ3uWfV7wDuV+HyX235~8=hPtb@lxxdpxrf7g@@_F+98I+;40R%OU+As(ZV zFG?0%DU{hu-Y(EdHfOY~iu#%&#;~i0#v$j_tQpmd0vL9B z6>syl%A!aP(Cw}A6=swG{d2o4Cq;Lfv{SNr>|sX?bYHL|4#>Y{+3`ZCjNK#Og~*`k zKl&TXq`~_ngX@dhmQQ!O5l@+_#7h)?Sk8dxNpp`%j<4W)Ssw2d;P1NiG97sTKGcr$ zq4tw-NG69edbsFnX6DG!bnk>@N%Idw>A8{x^eZOp7RzpVicXy7-D9AkyfZ#p52E~u z?3{vtTYrg@?n4tgn%$O4UY5lmLl4TT83np1EUP{$lvOkRvHy`(_CZj!LDfS25jwme1elSeH^1Wh9_&fUQ}%drfAv_ryi5&Z){v~Rho(wSI*x zXd7QgeS2>Nr_rdJxUa*1&~!6JMM`^Omn>=bO%}1}VeFjAB3$H9Zh7@IkYT7=CG{4f zGyhhA)AOA>u3cP1mBfpNw$)JU-I=MX5*BD%yNK&^XAHGYRZW1;xp--;J_5ebR3%N7 zlsK*_t*O$iL$w{;j6ZWwGsPuHj;4mK)OWy1y{@%lfst$Pm2o@Uw41E$?pSrhm-{lx z4l3)mcmUB(X`1~kPh$*xq>@WvWQ(#pIzroWjh%qa*(Kv`R*Z6O#xN0yFN}R*4Z^OA zqG?@Kb6}yNgWc4#!2cPl-a~P+E;7`zw<^d{rpd)_BHFOaXCi3tj!@CI$YQsKZMMM) zQuYGHMOItd_Jv|xZ%6YN`6t$%ZY@y@AUe=z%hhub9qINu_ofohQl6(;Nc(GlRSFXf z#STzh`%N^&O#HBeNru`_VkLsfhH6j6ERG06d$UkVVydyDwzwTb6SBg)(LGugqSiF#s%?JNn8oL^!{tS$8)`C6k-|nzwM_j;VD{L+--nJAL zZ`i7BVpX@B9W+IS-*!#V-A@$jo^6`mPxjaTR#Wds{E9Swfl9RP^PI#`tv_P%j;5}} zpN5h8fdHMgUTs$x#o)P_orKYvp4`TzD8^{3ckmnHcKEw^m*2iieFBWtyj|xH*w?dF zdkoX|Qnso>dHw~4YkFe8A0uySa{i?b19_TG9#lhtOT50XOL19K^l`=Xe??QR(`vgb z-lt#Bs}QT|0FBR6>` z<`~NanqeDf{V&??Yb@LPMeq|4a|@|;UIDd=`82tvb6JT6G@`Cgxu4TNQk)~s^m!Fg zK0srdISlF*0(A9hCtBLcjhzbktw0+4(DFE~Z0r>Ec{;3*ab44=O`I*TdxoNG%Sm-C(HkVy8c_(a@5m4&%=zLwA=uj6a(VC9QRQ{NZkmT{zt-g_jI* z%b+LFv#?#z>wdeScVWArPhq>DZ@68+x!E?$O+r&m`QNag@f0Wj3_o|9X*z1%&Omcb zlfQK;NIb1+^>Wi`ucD~guwbDjZofNuWmaAjix zwD8}~>k8X7B^`CRuG*o)eJ$c}KB~lb-sU83#_ZH#X=zznrqiNd94-dGr`@&XUD%X7 zrzu)%%hl@;x|HX{LbS1?^PLg}6)fW_UvP=pu3#`+zZUqU>piC;I%^tv&q;v2IMgX> zmkn{^3K)^k`CG+FnK#s7M(j#I4tG|wMEIMUEK^fG8d$`gs?hB|KfMsi|kwm;FuZG^Qt)M#BTYW2MPIK)@5n>&+ddYoO38K&XxWgg7 zrucqt7Q}j5)ZaY-F`HQW^@I4dP~d%5An*!~hox$~E&8Ub#Va)D4Sqcah8vsQI&DT} z-gLQ-Fz9}Fb8umI6R&F9C?GQ}-w)FcN7idBT1zl=Vu+?m3Gyq(o+)m9u94+bm&>0O z_UboICp+ybtBtn@s&gWgIjr_bVUl-E)`a)X&#;5hCWT<-kDEs6V zcH$N8rfzXFfvfk)IR8EwUkj7*utE`fc#m71OJTLwt;nS?Rm*m7D6WFb9dJ(r=L%Gy zWfj=UW?p?z1x3=(!|pgPjD2ZXU*bb;d*ry)sC$mv3B^Kxl`xOhdyGMKO)rtMt~Fi; zX6O$xPrGapY>{kHY|(5nY(?0Lvc<9$V~b<+pEqm)w&H9h*y7nrvL&#UVoRjV(@Cp- zwapI&E82uZ!5WltDEPCmZH@#JY@H*)AoV^HyaGG;c(Ax_eVnh~J06sR8lMgB6;$O+ uFdme4KKQM$si%UqsOTmCZ>y8R-Zb}A@B>Ma=YwTXFihfN@T@@hcm5w7vL_$_ delta 6305 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 d9eTr)LOi+{2!*iZlM4G diff --git a/integration-tests/validation/src/main/assets/figma/StateCustomizationsDoc_POWyniB6moGRmhZTJyejwa.dcf b/integration-tests/validation/src/main/assets/figma/StateCustomizationsDoc_POWyniB6moGRmhZTJyejwa.dcf index 959381f4f4ac771e672a1619301a4daedd6d4a9c..2f299a2df54b1ee8d0c962f920ee157fcc0c632e 100644 GIT binary patch delta 67 zcmcb+n(^*x#tn1X7#TLtW8>yvWZb-puabq4aq=oYyUj_$@0p;?31VgXlUMTbY!-5J R;s7xw3%N;buJB7`2LJ*A7100y delta 67 zcmcb+n(^*x#tn1X7#TOuW8>yvWZ1lluabq4Ve%?IyUj_$@0p;?31VgXlUMTbY!-5J R;s7xw3%N;buJB7`2LJ)R70&9Q_jj5jCX^`@GGIrTY>|afD2+y&7|9D1LgkE_dUU)uI$p9#ohdKf z%*%e)~2@0v8E`&&2<@6^4|=zsFFf!rPN>BRHIgl_tkHn=#lHi* zrblioykW!1u;4BKm~Mp!Jc{1~9`a{`Ehypj)A<5FV~M&9a4T7trSzUVrBFs+N`au9 z@7>xS@gP-O1&h+ORkFmBBdFqd`i2Rc{;OU=HODiPT&UrER=Prvdp9mA)bc3zrl5}A zTOB6q`PCN`G%)2(wSh)Pi*(t<*}GkWW~LP=3`#}RCPWtl|T6kEdt(BD(+QMwJ zZ3AumUAt|foztN@1076gKkq^(J(0@_Pk65f@jT-(;?me#==4d3g9~7Z~8u)L9n>xifQ7;U)jgWhr@KIiq$e z^A@&%KA!pf%akF@X&JjfV|g2R$KCJxTf9g`}ed*Oei%-WMI!=*+CgXVKj|SVxmn*grG@KJYix73wt3(;lMnL z(kBvQX0sRH%G7K5n%3rOTQxIR2X)d}c-SA{K|km|{e0nqJ3gS|1M2=!`E2#JTGPQS z@P%GEsgPsG_D;bXf17TFD7Ompz#!L)Y{6q5+1V%n6p7B?Ow&!f}XnVo4-de#3`zu#Xj52u0Cm3UYb*T&EoT#Z(m|*_ceubCZsyi-t zMc;|*CMG%KZxg&`dBa5mQ|xNe?yEtg_%ySde0Ov`)!a%UKC|xjB>r);Sw1ap4=YBl{FK_;2jwOezJ^h|BuxzbK>}ut&+E#Sj5dl MG6j5RPpYcmA47nqu>b%7 diff --git a/integration-tests/validation/src/main/assets/figma/TextElideTestDoc_oQ7nK49Ya5PJ3GpjI5iy8d.dcf b/integration-tests/validation/src/main/assets/figma/TextElideTestDoc_oQ7nK49Ya5PJ3GpjI5iy8d.dcf index 94e8ab15c1ec736330cd051c00f7f4cea1c8ab45..3f9171aca50142cfcadb420a811c5828553f69a2 100644 GIT binary patch delta 68 zcmV-K0K5N+Hi|ZoIspi=JK6yO39}Xg-~s^(v-bpt0|5=Qe+Xv+0SvR}3St5Q3$scM aKLP;-vx*Pw0RaZHcM%l>0SB{<6nzG#FA}N% delta 68 zcmV-K0K5N+Hi|ZoIss3yJK6yOP_q^S-~s_rv-bpt0|8F6e+Xv+0ZFsx3St5QO|wc3 aKLP0Zg-v6nzHxrxgwW diff --git a/integration-tests/validation/src/main/assets/figma/VariableBorderTestDoc_MWnVAfW3FupV4VMLNR1m67.dcf b/integration-tests/validation/src/main/assets/figma/VariableBorderTestDoc_MWnVAfW3FupV4VMLNR1m67.dcf index 9d89867f1871bb8998e2cdcd69863b683e5239a1..e260114d94647538c4e6b7d7acf7408213aefffd 100644 GIT binary patch delta 217 zcmWN}J4=EA7zJR?L69I2B2Xfc0zrZx5D|nF0wG$O>R+hg*3{Zqn)aD?)i2HL#sP76 zFpIX(LHrLb5i~^a^lVReg6;%INfcgEW1uKM9pXgKo(56Uj@KybcjlEiRe$!AaOC)m ziZXLK;!M-|DpA$Gze&`zv|yZTxcE+7s1zC#m&z;~S4xMCYXu|5jlNfmx;|EohTOG0 z;VKZd^HztkEYZ|Yyh5~eoN$Rd#n+9trl~jLUagH0(a}NLc+l?V9`UHb)|UrQ>TUl8 F{{jA^R$u@C delta 217 zcmWN}yGud=90g#`L5M&IA}}P0f*=GTh!BDl0wG$O>c3E<&8fAq2Ek}mbW{#VyMsMw z3vYG1_OiE{86h}Czv<1Holcz-kIGIv#FLV diff --git a/integration-tests/validation/src/main/assets/figma/VariablesTestDoc_HhGxvL4aHhP8ALsLNz56TP.dcf b/integration-tests/validation/src/main/assets/figma/VariablesTestDoc_HhGxvL4aHhP8ALsLNz56TP.dcf index 0631bc0ebb5fa2db48e6ed9ed3d992d05acb3bd8..994693c2a63291d7710d5c0dddb7e93f0748786b 100644 GIT binary patch delta 444 zcmYk$J7`m39ENfJ-`8RZ*ffN5a+020y#)+vY;4q^NVbSjt0E#@3T}nsCAwHIQK4Qy z3U9$~(t;o^p89H!jao|;j*D1gn^-Clv$(msNVS85>u-4;&(of#$M(y!>4GOhYPD0z zbM~~2Xn8?rLt4uWSA0b+F73`gN?y_q^eCC-(O^YOl{M4V@``sOd8J;b_|Dc^y-D#y z{E1R?DV9?{t=^`1eM?e{!>ROdCDVMk{c{vK%i^!YY2j$;lwe@OVEo8LJN6En{Bi80 z(CyzPJbt1twoV2!<$gg&#bWjR1tBip>)_ZNAggEXF z3cLk_*_kuzJiB5_5`$9_j1@a^XfZ5Z$Q}$~?NeC%m@Jt*yZA^W&=<#@n%TA|n~%X+ z?#7N$AJ%G?^djMHrn598c$7_wxR$fq|kAk4t|3T&*fJni)8A7UrAV82q+LW4M(;v5>^+ PrlE5CkZq*7&}x^z&3LUu delta 453 zcmYk1O-NK>7=?SkFVO~^ABMSeXB_8h7il0WCP&Q#329?gCPqlBf_6e=SOl8CL8K7E zStzs!gciDpsS{2`MCszXiDc3l2Wf;^hpT?g)C;v}_Z&FzoZ~p!arER#`TnfM5&1!_ zjw$)c`uzi1elcC1(6YsXr%lUm#=N^qwiyf5EBV6_T>~tAUmz!+q zGKC*HFNs?+*mbcZ&WgSX!MVZ#H1~V?@n*B2{f#r5kZ%uqD9>U9F3{PkM3~tz3BIsSM U!R2B|QfMe0K{B74iFhuAb1pSc)A)!SN|0xzhBveFp{VlrifiL&mbIzMo$%#u}goOu!Bv8I0ZX7eUg)~i?2q^(qT8>GtX79hexJ*2z&WR80$PbD6M-zsJa1HuJUl@|G?9JmDB&D`zi~dE59^@&KWdZ(1XXs?4ILeTK+$ z7=(YsCWhKWInm};u%CO2DS7d-6oFW)7|N&<9kIRqpyVvDoO4TK329uj z`4>^GS&a40KaCPSa(Dp;e*C{Go^uF2L*ZbBYgny(Y` z`H8oWkjST7WM>PxqxC((#SPbnfpRWyryx{t<&DpTeOz+uCm~&Q4cqxocQk}0-y+gk z6$S51!kB6jZJ937UvCY;zgJkn-FI|4IK+aN;~CQk#cUjWOxVB!uiujB?VXNf5q4_V z#m*>Eer*qbSd*F&t0pxgOEjq&N#$`P!q`6rYk78mFrk1Ky!@bG zU7%Q@Rt)R8Ygld;$)05C+L0oP`~Mx-KaxX;4}60Jp7QwugjFUb{z44IIk6q{ajym zfDAvwmIaN3v-~|szH*M67Ry)8^Q+}Wgeu;=O2%E_w`=+cv3w`gmuQzs9}sqkap&HNOR*x{M|ekh@as*P3e24Q^(rBr`(h#u zIKjr)AVLv`$9*GI^HOsVd0#ZSPMKV**Q{M1A`l!Z1|kbYYj7t&O*jkGaCA~I;S%Sj z{31GN662k7`C{ryf|a|{p1C1|%dGJVGPy5HnmEK;a-@kY9>|k*)pBit6S&MJ$3_&` zIlcHLp^g`oju7hEv%Ft{5P=OU|FAuD!xde6^h7IY(50U}o6xAs8}&AV#(@pD2v@mB z>mp=x#Wh*kVQ#(gk#K~on+Ab=&S)VQ6mZt<&xE6#aQ7!+zi1zf;XfS#5P@3*MFguN zcE~8a!i=JMqgC{lgigc1UpT-W_YDRd6HDGqM9d}>vRD6e!g20<_kl!br$2TI&+>hB zZGNJparyw8!V^Y>SMN+%cz&-dA&r;38CH-! znQV`q412kKP#*4+HObWZqdO?)|2VL7G>VWrIR<$=^YbUdE*^L05_V6vJyo{-H`xqh z=M7_!ki;NSBrXzHiJN4qWSYcX;vw;rcuA&9yd^#oqhyA|FlKr$w43#62se!-Lrbku ztq!@Zffi|3-L>Reb+@CtM(u)DVOQ5VhN{#?Xfbv*jGG=kgSN3=4RXkvZjhzyFKi!8 Ax&QzG diff --git a/integration-tests/validation/src/main/assets/figma/VariantAnimationTimelineTestDoc_vJRf4zxY4QX4zzSSUd1nJ5.dcf b/integration-tests/validation/src/main/assets/figma/VariantAnimationTimelineTestDoc_vJRf4zxY4QX4zzSSUd1nJ5.dcf index 6c24da1a2cbf592c4b0d1800f2656ce8c542995c..bc6ba06a85f1452008e645b39f77ace4fa13db86 100644 GIT binary patch delta 3188 zcmaJ@d0duN7VbRv!vzF{dqwy#wVZ4$RLIHFKn$~~Ofxm35R+U$TrnndB@DwQ0sD&A zHPqZta_LsbawA(TGZjrMx1^aYm(0>k$Fw;w-}{^Cui^JQJm;Q!xZHd0bDsCsoETnn zVtCmw+-NrD!~)HYorYSVg|S0JCi&3P1PWv0?A3<*fSXJpFFuavS*k`LGd>zO*G+PR zQ?waQ*LNu-5QvUOtGYB>9lam;OVEF#iTJk|TNrx|Xl-m>{6OGVV{2}#0{&`jLCX@L zjj@rfx+vUc>?5rOZ#TBIO^iZi-So>WI zflsyFy<1ALOOCcr@H1^6Iv`u#t?k}}vgOaU?eew6_h>uisNi00w|pbGPyXMxf;HN9 zKKZz!{Z7ST8fmYelD!?!w&gk5+ZWniKQDVbsO^ypvbRIp=3bJ$eW~rX%R_zi6>rF= z)1a>%!6v+6JRJlb4h|xPB)}2PRUz~$=qT?gpc2qA&YUKQ$o^GP_6ZX9t;u;_Tg8`V{vp5(P5R1Rbq-djM@h6A`J)UAFd4+^IRpn-ff z(yiN5+(o-Mhznz+vzZdCcAY;Y=NP32 zk6Uzw66itRctt2i5AnLIa!%^OW!GJNnEks^0_Ub$GFWb$fwfYT%vw4`p({)SPaAk@ z2INH7zN4n0EB_arYiS3ZF&C*Rt>Vi+(6=IieB_LamAvhoi)(o4&-5K=Ef-&;$3Rtl z>=LblUzO~1r&H4lmjYd9ZE~uU zRIXEeFD5ukJ0k|o48PkMqvUjHXp30m?AwD|oV|N+4@dl)Dv09v_5+Zr_&MT`i}C#P zS5o|PpETC&hmnX0hPOV9dcZ`(AN9gDI3sdZba^T2J8er5v#M5zNyJrE@)ag<$$A$R zk9`wma5~OM9F=nK`3M8bjPv|L+{^_Fk?y0p{8fdU`ZB+_%*6mNS^;UZR~%U}%c&Sk zAzZc^@jiOhTf98DxD&SD4T;yU5hs|)YDfga@r&S=a_;&oD>+ZynJGnc^2%OUVbp=iUr!{Y0<~nCIFJ6I{ z;50c2KXu^5lh{G@H@@&aru*nlo^TdW)R8CugkOAg7mvA!XMJ=xpSOwE0;G`a=?4}uy!$x zn>SUnK;5`9PUS1QkDK4<#=G;=EnU2ySGIET?|izoiw|(S+tfORNrsQNRiVIS!>8K| zPcX&s=XWS!@KnQ@cPe>578s`@O~twwSPea~JKb`aYat52z> zL>?sh#=e#<@qZY5G*|FhWBsEA#~YiTm#pZy;>N3$m`^N3te#kXu?Aud#X`lx#2Sf( zi$#bw&E>kaq!sQ(`o4LOSd delta 3077 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 K0TLRpn*RWau{VGK delta 793 zcmX|9TS$~q5cdD}-?CkAXzJbv)Aes2M&Lt%}7mz}7Pd@`>kW_|xflQKl!#g06xV5HUED_5Jl1Q%9c7VUm z$FMKf$Y(QR5kVZ8Q8h4XQTWl@39dEA@p62u62&iv;&?bZ4)G+j(QV+>_-t5+Qyl4> z>^KkzkbaX>!7gG~bC=w*Xa%xJE+zSZToOyN0oX&FRhA}h`k=xY#4e@wF%^4BA~Qaz z$P4C^WXFPrCW1b3C$%Tbu}4_Iu2*ldO1*Kss?{ z=mqgsHL2JhP`w@4LDE{|SFtmo_%xJN*5#JS6^xU)Ctejsl7mmR z_b~b=irBh`RfLl)`j&vL#9s!}<@4ZUAdc8ko+dKX0yaE1!Ax>`#0M@IF~R!x{C=zu zsU+5MtueMg*tu{r2fKr#!fwi!#mO2VjihL*4cJEFf8~d=A}^-fq5P7Qv#$XnNqG~k F{|)FO4lDow diff --git a/integration-tests/validation/src/main/assets/figma/VariantPropertiesTestDoc_4P7zDdrQxj7FZsKJoIQcx1.dcf b/integration-tests/validation/src/main/assets/figma/VariantPropertiesTestDoc_4P7zDdrQxj7FZsKJoIQcx1.dcf index fc48b74da5a444ae7d64933be9871d60364e5560..98175ebc63b71ff06108a7f3944334281507404e 100644 GIT binary patch delta 1969 zcmZuy32;qU820_|zKG;yvuBa_?v2_)JV~|o7i}$}K`a@>7DN_nluGPd(pVD?Jw}Nz zmN6)L${Cf0)-Y8|BaF7AmS#|7rjiLtTJ+raQnb@I^XA?&_ni5@|NFo1KPAk&gn1Wi zLN>b?b5mAsgco@JFa(OV)EP9_U^Nz}cxLHIm?ye=Jt1-#Y+vF8Ha5YR9Z8&abSKV$ z74_)F4kp#-MH`?or)?^nqR@7T&_N6gxIy$>=S4@6FG}iP2EEW_&T*_H7UT-X+al8C zL+Ho~ZP$f8WT=LB)Dcd2_lvj*R&)|GT5zJy1{;?!UW`q+t5KI%@Zw0K&5Ew#V$6Ii zy78cmxXJ7xq0BkaR}AX%jmDZa2}Z03pyz9V_dEday8%A%0Q7nTp!a_O`gj2P{ttjP zH5g5VJ=KrURJ2R~O+&C;nT<7skd1A?*va%z9`F#pBK+E~B)ZRv2SVjKQX44DU`biA z%wFy<(z3Q_XeO)+_E8hmsZ+;C{moxQd~*7<-ZPV@ri>NU%YOvMiF3K#3CW_~is^*$ zB74;g!UXYPje1NJNd+qjDLmeV;i3l{s#zu({=7qfG?E29u~kFrp3EdzktW;s#{oh* zSIed%VCN=6hFm)cdkK@p;Js?+6j6CVwP32qJ2Y2gg*Cpy@5m_))5WD@SBY)11n`<1 z__5MO4XD6ijTbxFGmF27SR6w<)TydXUOJE1NpFosR{OGgUx(2QgH;tfL}hU&LZ)ba zV!wu&;_9hq8a@)G-|Z&M5_8Te{MkakxScdo#q&!~5rz3;|9uN#fjCrgR^u;HVG}u( zJBWQ-8iGaQdZ`kAv8X7!r(uZ0zGxxpOe zJ%znovB(kU?;a+WT-|{6sBTDq=xlbiL(Hn~MD$b_pFghD=$S5xY6^*JbP@Y}C$T-n ze!RUEA(U(IOcxw-vK8Ls^NHc*Zkl2~U<3xr^L3%joF{b~RGBMeXb^Uj?@GhJc2}J2 zFagtvRbJ4zt1;SQm7LNTyNKO>*^3_QMhkMuWU11_Ki|e zWee}b@uF>54u>j*)ovXZjy^0rHGrjM#h4aT&%V-S$7LvQSQo4#KDiYFDY`A+dIkNC zHa9=Clihv>cYg`OXt|&jMia)!;!NdMvzdHKJM=*it0>!GLaP(?J(Bb6FJa@cF4)jQ zD)&W_rRBe!*UIC(*0s)S^M>;xP3IjTelQv>se!>xaEE*vtpr6wiH@k!d>g%%OeAkl zAwIqvoIZ_T$*mlmMqG2j$!@*Wc-JAAhN$&%Z;Z0%XzxzBhp2M|Y?hb0CmLKuBTlx9 zG0UmrVToFn^qM6vO+gTJS)PJ0g5gdF|1<*;wA$dmWGD|@%K%iY<@G7Jp<%5@HRQ{F zv+xtqpE`?5UvD-*&DO1t;OQ9srOQ>>C?H;ug8=?wF&s3=;0a6Ml!KNah>#%1FT)BI zs`;=}cY{seYu}SJUjg-yqZVQZnK5)ww87(Z;pFO!zZ{thm6sSfCJ)C5AM-W0kR}2j zYy;*<#~NJJkR>0kgKj~%R0DIS1ra>31O;j|`+$dU##uC%_cr4SVK85E8XMFHMLO(k zEolsq8Q-g%nU-wADjzrGH+P^Hz2%;t>Q2Z~_dyj*#(wLm-tf(w%rud=#Yso?fPGZ!!3mGDYdLGLw=fRR#(* zSUvuSm%MV#oP~Ae!W-}>cuS>Wo`!n0`uUjp9VRti6!A&?> zwFUWk3W7h|e}AG>+Z`GL-17{9@`1Vzm3gfc%I|5U^X69C!OP9%X)A^C=T;idGriPX Nq8EkA)m{{B`5QGTpg#Zr delta 1942 zcmZuyYj90h6z;dOZ<=xCCAlTRy5mdb;o<&KdHKt6XBL*F%s{7n~i!r@F?m1`HK5Knzt?&CzG50FwUg<0G zIWG;bP*uy}34S)yPcEj`plpLb@v!qUTr$ zf#-DS!V8Ah5IM`hxV`#BN;P<-a2}H0-kk~G$UeR|2>V6$UZl(78W({gHD^E4h$mcQ zymrUhXe*m^tVY!C#hcvQdy)(Z=+DqzzbyzIc11*6&`~CY3ZhO1AK7=bjOzOvqs}iN z$vp$BTkxSQ4NtM)BjLXs6+9#$klV*tWn`PfjMuMQ4<)WjrT8O zIV`a$qoIaMtz(9V8GLARCtgzNBgZGNW*9ClGxAB?o(mfnswO2Eyjq~@embQ@4Ll!!=GJK+{T4Fat z&%DH;u%MT$zj_;?x6n^-skqKqN$4X})@~+5%Fx^_hQ8|gIOtt`Du?AyXXq!d6qGRZ zmm79pCZ1Q+kVY8%evwU96}2Kn$;JnDk&*K9k-r#5$#W+*5=P6Zr**z)*`Rc-x%~hv zkZISvi543C?}85UYT0InG!>!628VolX9>|_gO^rz zmL-+C%n~`hYA5ky=bF+ogV#SFDud3K0n3%`8BQ{+P``t=k&C0F9@OL=9@L^ZgHL&2 zlSvO+5luAY_D5BWCK)p4$r_?~Lw0(WOX6ZpbfK|^())@b8s}V5y4kEZf9wdL?+kv! zVcQc1FRGSlc)sEKDZG#M%wv_|BPy(@E!&8j469YS6&uN#W%#&{MX2V{h$miE!UX*B z9@eO){@6gmzaAne!`Yq6s)r^7uG`}-_+n%*x>4&F9O2`WyQ_{N(5h;qiL%rwDiPlZ z)v3i~k#z|@_P%2VzfkRd*2^;`XGXm-OU-D6;e@YMQ6e0~4|y>W7p8NkJ9ojamJQ$q z*OG*-HZnx-W+>tH3#}^Dj=63iySkzwB^kWeL7RHo)f~Z;mm@gP8h4oW%a_f{Ur)r4 zh>3(9Q`L${tR-jGELupBFj?si1HZ=~g!{x4C$^-Nnm-S9!U^$xHD;KTO8% zj0m@Vi6sN@411i)b@o}%Lg#LgEHuwYDtk9G`7~G3>8_+-y^_>~medUPB!LHp;Pqf zB!*moFOSOgqcMhf9)pm)&r)@=7&T}%){%HO1vc7gh#4uctCSS@6LzV^GqHd~U3Gk1W_-RHF(3N~2ZiGoj8|W$AsaZPYz~w%99H+1qJalel(xai9ylQU zik;?L4I(%bCsC~KWa1KGfJi-xW!jZB>Y$Tu)EKB@PiYC7da28+9@P>R>$DE`I?YhK zf3kM|`w+*spc#!fge@NpRY*R{fe9-3KF%=2s>(+wa1$jnR(DYKHvAxz|3(;um8#_? zo&Ucjd5O)tQ5`?141FOSQTj`9i{VGtR{}?s2CtuwnV8cE$Cbu>hv9^Y@*zPfZ4~1O z-#dN5DROh%A#~CZt1sxqt-4???v&DMSi^AIr39Q&m##y*(ONb027CzXlpf@KhV||l z=9)9yNwmS;;laBY!LZTYVV0_#vxPUkACTUwHQ=NP^#T80-2y1)_{*CJB|JKN8=;g3Uxx*_xc-St zKpEe7>JU)QWApujV%>GvWT28n6%{91xVK?E=V+U!SY=2&k?fRCd)r2-V* z+qDa5;lq!8q5upAL#B3*PTBBeI6OWyt*Q^l{rsg=L8Ogj?DrD((sRq<{c!dV``hBT^B|8HzkS3HW>@?7hQo-Ab1K|??@V`U2y#B0BKo`$LEqx1!N7-cGa~4Cxi~Ry1e9onL~E32(tv=XFTw4SUdU(!v1)b+m_7w4q_ delta 699 zcmXw$-Aj{k6vubY@6o+Dbw15zI<3vrHm$Ac=1aaHxy*qX;f-!?Dvk&;*;>KwM$j80 zsZR9jMWtjExa`==O&3uSL?nS1^Ty~8sH<+un;xI14xGC$-|v^tH^(B!;%XCJ2vvcH zABL<5UJ3=%>>Ye9(QPbcSTOs@=Pi`~+d={G+D=cJbnpU(idB4T|}TCyY?SZeIo^ zR5Hjh>%vwYmDwBEV*dfq#+mEm2<`m+hLY34owue09N-6c9RfPJ*HtN?i#P6%2r3HMFJ{# zykb