@useinsider/guido 3.19.0-beta.7d287ab → 3.19.0-beta.84c97db

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/@types/config/schemas.js +9 -8
  2. package/dist/components/Guido.vue.js +2 -2
  3. package/dist/components/Guido.vue2.js +80 -67
  4. package/dist/components/organisms/AutoSaveController.vue2.js +18 -8
  5. package/dist/components/organisms/header/AutoSaveStatus.vue.js +17 -0
  6. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +25 -0
  7. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  8. package/dist/components/organisms/header/EditorActions.vue2.js +37 -52
  9. package/dist/components/organisms/header/EditorActionsMenu.vue.js +20 -0
  10. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +98 -0
  11. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  12. package/dist/components/organisms/header/HeaderWrapper.vue2.js +9 -17
  13. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  14. package/dist/components/organisms/header/LeftSlot.vue2.js +32 -23
  15. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  16. package/dist/components/organisms/header/MiddleSlot.vue2.js +8 -7
  17. package/dist/components/organisms/header/RightSlot.vue.js +9 -8
  18. package/dist/components/organisms/header/RightSlot.vue2.js +13 -18
  19. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +18 -0
  20. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +37 -0
  21. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +22 -0
  22. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +48 -0
  23. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +19 -0
  24. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +90 -0
  25. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
  26. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +56 -38
  27. package/dist/composables/useAccessibilityApi.js +45 -0
  28. package/dist/composables/useCortexBlueprintBridge.js +122 -54
  29. package/dist/composables/useCustomInterfaceAppearance.js +42 -41
  30. package/dist/composables/useEmailTemplateApplier.js +111 -50
  31. package/dist/config/i18n/en/labels.json.js +36 -4
  32. package/dist/config/i18n/en/tooltips.json.js +2 -1
  33. package/dist/config/migrator/itemsBlockMigrator.js +236 -248
  34. package/dist/extensions/Blocks/Items/constants/cardLayout.js +20 -0
  35. package/dist/extensions/Blocks/Items/controls/name/trimming.js +18 -17
  36. package/dist/extensions/Blocks/Items/controls/settingsControl.js +114 -105
  37. package/dist/extensions/Blocks/Items/enums/productEnums.js +14 -9
  38. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +11 -9
  39. package/dist/extensions/Blocks/Items/template.js +219 -204
  40. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +189 -226
  41. package/dist/guido.css +1 -1
  42. package/dist/sprite.svg +10 -0
  43. package/dist/src/@types/config/schemas.d.ts +2 -0
  44. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +3 -1
  45. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +2 -0
  46. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -3
  47. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -3
  48. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +2 -0
  49. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +2 -0
  50. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +2 -0
  51. package/dist/src/composables/useAccessibilityApi.d.ts +13 -0
  52. package/dist/src/composables/useActionsApi.d.ts +2 -2
  53. package/dist/src/composables/useConfig.d.ts +2 -0
  54. package/dist/src/composables/useCortexBlueprintBridge.d.ts +2 -3
  55. package/dist/src/composables/useEmailTemplateApplier.d.ts +18 -5
  56. package/dist/src/extensions/Blocks/Items/constants/cardLayout.d.ts +44 -0
  57. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +3 -0
  58. package/dist/src/extensions/Blocks/Items/template.d.ts +19 -0
  59. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -8
  60. package/dist/src/stores/autosave.d.ts +73 -1
  61. package/dist/src/stores/config.d.ts +20 -0
  62. package/dist/src/stores/editor.d.ts +109 -0
  63. package/dist/src/stores/guido-email-editor.d.ts +20 -10
  64. package/dist/src/stores/onboarding.d.ts +952 -21
  65. package/dist/src/stores/version-history.d.ts +1 -1
  66. package/dist/src/utils/timeUtil.d.ts +5 -0
  67. package/dist/static/styles/components/accessibility.css.js +234 -0
  68. package/dist/static/styles/components/version-history.css.js +2 -6
  69. package/dist/static/styles/variables.css.js +2 -0
  70. package/dist/stores/autosave.js +12 -7
  71. package/dist/stores/editor.js +7 -4
  72. package/dist/stores/guido-email-editor.js +3 -1
  73. package/dist/stores/onboarding.js +43 -21
  74. package/dist/utils/pairProductVariables.js +71 -71
  75. package/dist/utils/timeUtil.js +6 -17
  76. package/package.json +1 -1
  77. package/dist/components/organisms/header/AutoSaveToggle.vue.js +0 -22
  78. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +0 -19
  79. /package/dist/src/components/organisms/header/{AutoSaveToggle.vue.d.ts → AutoSaveStatus.vue.d.ts} +0 -0
@@ -1,72 +1,66 @@
1
- var m = Object.defineProperty;
2
- var C = (g, l, e) => l in g ? m(g, l, { enumerable: !0, configurable: !0, writable: !0, value: e }) : g[l] = e;
3
- var r = (g, l, e) => C(g, typeof l != "symbol" ? l + "" : l, e);
1
+ var C = Object.defineProperty;
2
+ var p = (g, u, t) => u in g ? C(g, u, { enumerable: !0, configurable: !0, writable: !0, value: t }) : g[u] = t;
3
+ var i = (g, u, t) => p(g, typeof u != "symbol" ? u + "" : u, t);
4
4
  import { useConfig as h } from "../../../../../composables/useConfig.js";
5
- import { ModificationDescription as p } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
- import { CommonControl as y } from "../../../common-control.js";
7
- import { RRS_CONFIG_VERSION as N, DEFAULT_NODE_CONFIG as a } from "../../constants/defaultConfig.js";
8
- import { RECOMMENDATION_ID_ATTR as _ } from "../../constants/selectors.js";
5
+ import { ModificationDescription as y } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
+ import { CommonControl as N } from "../../../common-control.js";
7
+ import { RRS_CONFIG_VERSION as _, DEFAULT_NODE_CONFIG as a } from "../../constants/defaultConfig.js";
8
+ import { RECOMMENDATION_ID_ATTR as I } from "../../constants/selectors.js";
9
9
  import { RecommendationConfigService as c } from "../../services/configService.js";
10
- import { useRecommendationExtensionStore as I } from "../../store/recommendation.js";
11
- import { registerNodeConfigWriter as R, commitBlockChangeOutsidePanel as b } from "../../utils/nodeConfigWriter.js";
12
- import { AlgorithmControl as P } from "./algorithm.js";
13
- import { ALGORITHM_CONTROL_ID as de } from "./algorithm.js";
14
- import { CurrencyControl as T } from "./currency.js";
15
- import { CURRENCY_CONTROL_ID as ge } from "./currency.js";
10
+ import { useRecommendationExtensionStore as R } from "../../store/recommendation.js";
11
+ import { registerNodeConfigWriter as b } from "../../utils/nodeConfigWriter.js";
12
+ import { AlgorithmControl as T } from "./algorithm.js";
13
+ import { ALGORITHM_CONTROL_ID as ut } from "./algorithm.js";
14
+ import { CurrencyControl as P } from "./currency.js";
15
+ import { CURRENCY_CONTROL_ID as gt } from "./currency.js";
16
16
  import { FiltersControl as S } from "./filters.js";
17
- import { FILTERS_CONTROL_ID as fe } from "./filters.js";
17
+ import { FILTERS_CONTROL_ID as ft } from "./filters.js";
18
18
  import { LayoutOrientationControl as O } from "./layoutOrientation.js";
19
- import { LAYOUT_ORIENTATION_CONTROL_ID as Ce } from "./layoutOrientation.js";
20
- import { LocaleControl as k } from "./locale.js";
21
- import { LOCALE_CONTROL_ID as ye } from "./locale.js";
22
- import { PricePlacementControl as L } from "./pricePlacement.js";
23
- import { PRICE_PLACEMENT_CONTROL_ID as _e } from "./pricePlacement.js";
19
+ import { LAYOUT_ORIENTATION_CONTROL_ID as Ct } from "./layoutOrientation.js";
20
+ import { LocaleControl as L } from "./locale.js";
21
+ import { LOCALE_CONTROL_ID as yt } from "./locale.js";
22
+ import { PricePlacementControl as k } from "./pricePlacement.js";
23
+ import { PRICE_PLACEMENT_CONTROL_ID as _t } from "./pricePlacement.js";
24
24
  import { ProductCountControl as E } from "./productCount.js";
25
- import { PRODUCT_COUNT_CONTROL_ID as Re } from "./productCount.js";
25
+ import { PRODUCT_COUNT_CONTROL_ID as Rt } from "./productCount.js";
26
26
  import { ProductLayoutControl as F } from "./productLayout.js";
27
- import { PRODUCT_LAYOUT_CONTROL_ID as Pe } from "./productLayout.js";
27
+ import { PRODUCT_LAYOUT_CONTROL_ID as Tt } from "./productLayout.js";
28
28
  import { ShuffleControl as D } from "./shuffle.js";
29
- import { SHUFFLE_CONTROL_ID as Se } from "./shuffle.js";
29
+ import { SHUFFLE_CONTROL_ID as St } from "./shuffle.js";
30
30
  import { StrategyControl as w } from "./strategy.js";
31
- import { STRATEGY_CONTROL_ID as ke } from "./strategy.js";
32
- import { setCurrencyAttributes as U, getBlockElement as v, isPartnerManagedBlock as B, updateProductContentInPlace as A, regenerateProductRowsWithStyles as x } from "./utils.js";
33
- import { adjustProductsToSize as Ee, formatProductPrice as Fe, getCardComposition as De, getCurrentLayout as we, getMainContainerTbody as Ue, regenerateMobileProductRows as ve, updatePricesInPlace as Be, updateSingleProductContent as Ae } from "./utils.js";
31
+ import { STRATEGY_CONTROL_ID as Lt } from "./strategy.js";
32
+ import { setCurrencyAttributes as v, getBlockElement as A, isPartnerManagedBlock as B, updateProductContentInPlace as x, regenerateProductRowsWithStyles as U } from "./utils.js";
33
+ import { adjustProductsToSize as Et, formatProductPrice as Ft, getCardComposition as Dt, getCurrentLayout as wt, getMainContainerTbody as vt, regenerateMobileProductRows as At, updatePricesInPlace as Bt, updateSingleProductContent as xt } from "./utils.js";
34
34
  import { useDebounceFn as f } from "../../../../../node_modules/@vueuse/shared/index.js";
35
- const V = "ui-elements-recommendation-block";
36
- class ae extends y {
35
+ const W = "ui-elements-recommendation-block";
36
+ class at extends N {
37
37
  constructor() {
38
38
  super(...arguments);
39
- r(this, "store", I());
40
- r(this, "storeUnsubscription", () => {
39
+ i(this, "store", R());
40
+ i(this, "storeUnsubscription", () => {
41
41
  });
42
42
  // A config change waiting to reach the node config. Deferred so it can ride the
43
43
  // re-render's single apply() — one user action must cost one undo press.
44
- r(this, "pendingNodeConfigWrite", null);
45
- r(this, "pendingConfigFlushTimer", null);
46
- // Last configVersion the subscription handled, and whether its products still
47
- // have to reach the canvas — both read on destroy to finish that work.
48
- r(this, "seenConfigVersion", 0);
49
- r(this, "fetchedConfigVersion", 0);
50
- r(this, "hasUnappliedConfigChange", !1);
44
+ i(this, "pendingNodeConfigWrite", null);
45
+ i(this, "pendingConfigFlushTimer", null);
51
46
  // Sub-control instances for lifecycle management
52
- r(this, "algorithmControl", null);
53
- r(this, "localeControl", null);
54
- r(this, "currencyControl", null);
55
- r(this, "productCountControl", null);
56
- r(this, "productLayoutControl", null);
57
- r(this, "filtersControl", null);
58
- r(this, "shuffleControl", null);
59
- r(this, "pricePlacementControl", null);
60
- r(this, "layoutOrientationControl", null);
61
- r(this, "strategyControl", null);
62
- r(this, "rrsEnabled", !1);
47
+ i(this, "algorithmControl", null);
48
+ i(this, "localeControl", null);
49
+ i(this, "currencyControl", null);
50
+ i(this, "productCountControl", null);
51
+ i(this, "productLayoutControl", null);
52
+ i(this, "filtersControl", null);
53
+ i(this, "shuffleControl", null);
54
+ i(this, "pricePlacementControl", null);
55
+ i(this, "layoutOrientationControl", null);
56
+ i(this, "strategyControl", null);
57
+ i(this, "rrsEnabled", !1);
63
58
  /**
64
59
  * Debounced product fetch to prevent rapid API calls during config changes
65
60
  */
66
- r(this, "_debouncedFetchProducts", f(async () => {
67
- const { configVersion: e } = this.store.$state;
61
+ i(this, "_debouncedFetchProducts", f(async () => {
68
62
  try {
69
- await this.store.fetchRecommendationProducts(), this.fetchedConfigVersion = e;
63
+ await this.store.fetchRecommendationProducts();
70
64
  } finally {
71
65
  this._scheduleConfigFlush();
72
66
  }
@@ -82,29 +76,28 @@ class ae extends y {
82
76
  * count. The store pads products to the configured size, so in-place only
83
77
  * fails when the size actually changed.
84
78
  */
85
- r(this, "_debouncedRegenerateWithProducts", f(() => {
86
- const e = this.store.recommendationProducts;
79
+ i(this, "_debouncedRegenerateWithProducts", f(() => {
80
+ const t = this.store.recommendationProducts;
87
81
  if (!this.currentNode || !this.api)
88
82
  return;
89
- this.fetchedConfigVersion === this.seenConfigVersion && (this.hasUnappliedConfigChange = !1);
90
- const t = this.api.getDocumentModifier(), o = this._stagePendingNodeConfig(t);
83
+ const e = this.api.getDocumentModifier(), o = this._stagePendingNodeConfig(e);
91
84
  if (B(this.currentNode)) {
92
- o && (t.apply(new p("Update recommendation configuration")), this.pendingNodeConfigWrite = null, this._clearConfigFlush());
85
+ o && (e.apply(new y("Update recommendation configuration")), this.pendingNodeConfigWrite = null, this._clearConfigFlush());
93
86
  return;
94
87
  }
95
- A({
88
+ x({
96
89
  currentNode: this.currentNode,
97
- documentModifier: t,
98
- products: e
99
- }) || x({
90
+ documentModifier: e,
91
+ products: t
92
+ }) || U({
100
93
  currentNode: this.currentNode,
101
- documentModifier: t,
102
- products: e
94
+ documentModifier: e,
95
+ products: t
103
96
  });
104
97
  }, 100));
105
98
  }
106
99
  getId() {
107
- return V;
100
+ return W;
108
101
  }
109
102
  get _subControls() {
110
103
  return [
@@ -121,15 +114,15 @@ class ae extends y {
121
114
  ];
122
115
  }
123
116
  getTemplate() {
124
- var e;
125
- return this.rrsEnabled = h().isFeatureEnabled("reusableRecommendationStrategy"), this._subControls.forEach((t) => {
117
+ var t;
118
+ return this.rrsEnabled = h().isFeatureEnabled("reusableRecommendationStrategy"), this._subControls.forEach((e) => {
126
119
  var o;
127
- return (o = t == null ? void 0 : t.onDestroy) == null ? void 0 : o.call(t);
128
- }), this.algorithmControl = new P(), this.localeControl = new k(), this.currencyControl = new T(), this.productCountControl = new E(), this.productLayoutControl = new F(), this.filtersControl = new S(), this.shuffleControl = new D(), this.pricePlacementControl = new L(), this.layoutOrientationControl = new O(), this.strategyControl = this.rrsEnabled ? new w() : null, this._subControls.forEach((t) => {
129
- t && (t.api = this.api);
120
+ return (o = e == null ? void 0 : e.onDestroy) == null ? void 0 : o.call(e);
121
+ }), this.algorithmControl = new T(), this.localeControl = new L(), this.currencyControl = new P(), this.productCountControl = new E(), this.productLayoutControl = new F(), this.filtersControl = new S(), this.shuffleControl = new D(), this.pricePlacementControl = new k(), this.layoutOrientationControl = new O(), this.strategyControl = this.rrsEnabled ? new w() : null, this._subControls.forEach((e) => {
122
+ e && (e.api = this.api);
130
123
  }), `
131
124
  <div class="recommendation-controls-container">
132
- ${((e = this.strategyControl) == null ? void 0 : e.getTemplate()) ?? ""}
125
+ ${((t = this.strategyControl) == null ? void 0 : t.getTemplate()) ?? ""}
133
126
  ${this.layoutOrientationControl.getTemplate()}
134
127
  ${this.productCountControl.getTemplate()}
135
128
  ${this.productLayoutControl.getTemplate()}
@@ -142,40 +135,39 @@ class ae extends y {
142
135
  </div>
143
136
  `;
144
137
  }
145
- _showControlsForBlock(e) {
146
- var i;
147
- const t = (i = this.getContainer()) == null ? void 0 : i.querySelector(".recommendation-controls-container");
148
- if (!t)
138
+ _showControlsForBlock(t) {
139
+ var r;
140
+ const e = (r = this.getContainer()) == null ? void 0 : r.querySelector(".recommendation-controls-container");
141
+ if (!e)
149
142
  return;
150
- const o = this._getRecommendationIdFromNode(e) === null ? null : c.getConfig(e), n = this.rrsEnabled && !!o && (!!(o != null && o.strategyId) || ((o == null ? void 0 : o.configVersion) ?? 0) >= N), s = this.rrsEnabled && !!o && !n;
151
- t.classList.toggle("strategy-block", n), t.classList.toggle("legacy-strategy-block", s);
143
+ const o = this._getRecommendationIdFromNode(t) === null ? null : c.getConfig(t), n = this.rrsEnabled && !!o && (!!(o != null && o.strategyId) || ((o == null ? void 0 : o.configVersion) ?? 0) >= _), s = this.rrsEnabled && !!o && !n;
144
+ e.classList.toggle("strategy-block", n), e.classList.toggle("legacy-strategy-block", s);
152
145
  }
153
146
  async onRender() {
154
147
  var o;
155
- R(this.api);
156
- const e = this._getRecommendationIdFromNode(this.currentNode), t = e ?? this.store.currentRecommendationId;
157
- if (t !== null && this.store.setCurrentBlock(t), e !== null && this._syncNodeConfigIfChanged(e), this._listenStateUpdates(), this._showControlsForBlock(this.currentNode), e !== null && this.strategyControl && (this.strategyControl.api = this.api, this.strategyControl.currentNode = this.currentNode, this.strategyControl.onRender()), t !== null && ((o = this.store.blockStates[t]) != null && o.isInitialized)) {
148
+ b(this.api);
149
+ const t = this._getRecommendationIdFromNode(this.currentNode), e = t ?? this.store.currentRecommendationId;
150
+ if (e !== null && this.store.setCurrentBlock(e), t !== null && this._syncNodeConfigIfChanged(t), this._listenStateUpdates(), this._showControlsForBlock(this.currentNode), t !== null && this.strategyControl && (this.strategyControl.api = this.api, this.strategyControl.currentNode = this.currentNode, this.strategyControl.onRender()), e !== null && ((o = this.store.blockStates[e]) != null && o.isInitialized)) {
158
151
  this._initializeSubControls();
159
152
  return;
160
153
  }
161
- await this._fetchBlockData(t), this._initializeSubControls();
154
+ await this._fetchBlockData(e), this._initializeSubControls();
162
155
  }
163
- onTemplateNodeUpdated(e) {
156
+ onTemplateNodeUpdated(t) {
164
157
  var o;
165
- super.onTemplateNodeUpdated(e);
166
- const t = this._getRecommendationIdFromNode(e);
167
- t !== null && t !== this.store.currentRecommendationId && this.store.setCurrentBlock(t), t !== null && this._syncNodeConfigIfChanged(t), this._showControlsForBlock(e), t !== null && !((o = this.store.blockStates[t]) != null && o.isInitialized) && this._fetchBlockData(t).then(() => {
158
+ super.onTemplateNodeUpdated(t);
159
+ const e = this._getRecommendationIdFromNode(t);
160
+ e !== null && e !== this.store.currentRecommendationId && this.store.setCurrentBlock(e), e !== null && this._syncNodeConfigIfChanged(e), this._showControlsForBlock(t), e !== null && !((o = this.store.blockStates[e]) != null && o.isInitialized) && this._fetchBlockData(e).then(() => {
168
161
  this._initializeSubControls();
169
162
  }), this._subControls.forEach((n) => {
170
163
  var s;
171
- n != null && n.api && (n.currentNode = e, (s = n.onTemplateNodeUpdated) == null || s.call(n, e));
164
+ n != null && n.api && (n.currentNode = t, (s = n.onTemplateNodeUpdated) == null || s.call(n, t));
172
165
  });
173
166
  }
174
167
  onDestroy() {
175
- const e = this.hasUnappliedConfigChange || this.store.$state.configVersion !== this.seenConfigVersion;
176
- this.storeUnsubscription(), e ? this._refreshProductsOutsidePanel() : this._flushPendingNodeConfig(), this._subControls.forEach((t) => {
177
- var o;
178
- return (o = t == null ? void 0 : t.onDestroy) == null ? void 0 : o.call(t);
168
+ this.storeUnsubscription(), this._flushPendingNodeConfig(), this._subControls.forEach((t) => {
169
+ var e;
170
+ return (e = t == null ? void 0 : t.onDestroy) == null ? void 0 : e.call(t);
179
171
  });
180
172
  }
181
173
  /**
@@ -183,9 +175,9 @@ class ae extends y {
183
175
  * Each sub-control manages its own form values and event listeners
184
176
  */
185
177
  _initializeSubControls() {
186
- this._subControls.forEach((e) => {
187
- var t;
188
- e && (e.api = this.api, e.currentNode = this.currentNode, (t = e.onRender) == null || t.call(e));
178
+ this._subControls.forEach((t) => {
179
+ var e;
180
+ t && (t.api = this.api, t.currentNode = this.currentNode, (e = t.onRender) == null || e.call(t));
189
181
  });
190
182
  }
191
183
  /**
@@ -212,34 +204,34 @@ class ae extends y {
212
204
  * that state and made a re-dropped saved module keep the defaults its wiped
213
205
  * state was rebuilt with (SD-150347).
214
206
  */
215
- _syncNodeConfigIfChanged(e) {
216
- this.pendingNodeConfigWrite && this.pendingNodeConfigWrite.blockId !== e && this._flushPendingNodeConfig();
217
- const t = this.store.blockStates[e];
218
- if (!t)
207
+ _syncNodeConfigIfChanged(t) {
208
+ this.pendingNodeConfigWrite && this.pendingNodeConfigWrite.blockId !== t && this._flushPendingNodeConfig();
209
+ const e = this.store.blockStates[t];
210
+ if (!e)
219
211
  return;
220
- const o = JSON.stringify(c.getConfig(this.currentNode)), n = t.syncedConfigFingerprint;
221
- t.syncedConfigFingerprint = o, n !== o && (this.pendingNodeConfigWrite || this._syncNodeConfigToStore());
212
+ const o = JSON.stringify(c.getConfig(this.currentNode)), n = e.syncedConfigFingerprint;
213
+ e.syncedConfigFingerprint = o, n !== o && (this.pendingNodeConfigWrite || this._syncNodeConfigToStore());
222
214
  }
223
215
  /** Whether the deferred write would move the node's strategyId — see the caller (SD-149916). */
224
216
  _isPendingStrategyIdChange() {
225
- const e = this.pendingNodeConfigWrite;
226
- return e ? c.getConfig(this.currentNode).strategyId !== e.updates.strategyId : !1;
217
+ const t = this.pendingNodeConfigWrite;
218
+ return t ? c.getConfig(this.currentNode).strategyId !== t.updates.strategyId : !1;
227
219
  }
228
220
  _capturePendingNodeConfigWrite() {
229
- const e = this.store.currentRecommendationId;
230
- if (!this.currentNode || !this.api || e === null)
221
+ const t = this.store.currentRecommendationId;
222
+ if (!this.currentNode || !this.api || t === null)
231
223
  return;
232
- const { filters: t, strategy: o, strategyId: n, size: s, nodeConfigVersion: i } = this.store.recommendationConfigs, { partnerName: d } = h();
224
+ const { filters: e, strategy: o, strategyId: n, size: s, nodeConfigVersion: r } = this.store.recommendationConfigs, { partnerName: l } = h();
233
225
  this.pendingNodeConfigWrite = {
234
- blockId: e,
226
+ blockId: t,
235
227
  node: this.currentNode,
236
228
  updates: {
237
- filters: t,
229
+ filters: e,
238
230
  strategy: o,
239
231
  strategyId: n,
240
232
  size: s,
241
- configVersion: i,
242
- ...d.value ? { partnerName: d.value } : {}
233
+ configVersion: r,
234
+ ...l.value ? { partnerName: l.value } : {}
243
235
  }
244
236
  };
245
237
  }
@@ -253,9 +245,9 @@ class ae extends y {
253
245
  * @param documentModifier - The batch to accumulate into
254
246
  * @returns Whether anything was staged
255
247
  */
256
- _stagePendingNodeConfig(e) {
257
- const t = this.pendingNodeConfigWrite;
258
- return !t || !this.currentNode ? !1 : (c.stageConfig(e, this.currentNode, t.updates), !0);
248
+ _stagePendingNodeConfig(t) {
249
+ const e = this.pendingNodeConfigWrite;
250
+ return !e || !this.currentNode ? !1 : (c.stageConfig(t, this.currentNode, e.updates), !0);
259
251
  }
260
252
  /**
261
253
  * Arms the guaranteed fallback write, once the product fetch has settled. The
@@ -276,41 +268,41 @@ class ae extends y {
276
268
  * snapshot the intervening re-render staled, and saveConfig swallows that failure.
277
269
  */
278
270
  _flushPendingNodeConfig() {
279
- const e = this.pendingNodeConfigWrite;
280
- if (this.pendingNodeConfigWrite = null, this._clearConfigFlush(), !e || !this.api)
271
+ const t = this.pendingNodeConfigWrite;
272
+ if (this.pendingNodeConfigWrite = null, this._clearConfigFlush(), !t || !this.api)
281
273
  return;
282
- const t = e.blockId === this.store.currentRecommendationId && this.currentNode ? this.currentNode : e.node, o = c.getConfig(t);
283
- JSON.stringify(o.filters) === JSON.stringify(e.updates.filters) && o.strategy === e.updates.strategy && o.strategyId === e.updates.strategyId && o.size === e.updates.size || c.updateConfig(this.api, t, e.updates, "Update recommendation filters");
274
+ const e = t.blockId === this.store.currentRecommendationId && this.currentNode ? this.currentNode : t.node, o = c.getConfig(e);
275
+ JSON.stringify(o.filters) === JSON.stringify(t.updates.filters) && o.strategy === t.updates.strategy && o.strategyId === t.updates.strategyId && o.size === t.updates.size || c.updateConfig(this.api, e, t.updates, "Update recommendation filters");
284
276
  }
285
277
  _syncNodeConfigToStore() {
286
278
  var n;
287
- const e = c.getConfig(this.currentNode), t = this.store.currentRecommendationId, o = t !== null && ((n = this.store.blockStates[t]) == null ? void 0 : n.isInitialized);
279
+ const t = c.getConfig(this.currentNode), e = this.store.currentRecommendationId, o = e !== null && ((n = this.store.blockStates[e]) == null ? void 0 : n.isInitialized);
288
280
  this.store.patchCurrentBlockConfig({
289
- strategy: e.strategy,
290
- strategyId: e.strategyId,
291
- nodeConfigVersion: e.configVersion,
292
- language: e.language,
293
- size: e.size,
294
- productIds: e.productIds,
295
- cardsInRow: e.cardsInRow,
296
- mobileCardsInRow: e.mobileCardsInRow,
297
- mobileLayoutEnabled: e.mobileLayoutEnabled,
298
- orientation: e.layout,
281
+ strategy: t.strategy,
282
+ strategyId: t.strategyId,
283
+ nodeConfigVersion: t.configVersion,
284
+ language: t.language,
285
+ size: t.size,
286
+ productIds: t.productIds,
287
+ cardsInRow: t.cardsInRow,
288
+ mobileCardsInRow: t.mobileCardsInRow,
289
+ mobileLayoutEnabled: t.mobileLayoutEnabled,
290
+ orientation: t.layout,
299
291
  // Only sync filters from node config during initial load.
300
292
  // After initialization, the Pinia store is the source of truth
301
293
  // for filters (edited via the filter drawer).
302
- ...o ? {} : { filters: e.filters },
303
- shuffleProducts: e.shuffleProducts,
304
- priceMovedToNextLine: e.priceMovedToNextLine,
305
- priceHideIfSameAsDiscounted: e.priceHideIfSameAsDiscounted,
294
+ ...o ? {} : { filters: t.filters },
295
+ shuffleProducts: t.shuffleProducts,
296
+ priceMovedToNextLine: t.priceMovedToNextLine,
297
+ priceHideIfSameAsDiscounted: t.priceHideIfSameAsDiscounted,
306
298
  currencySettings: {
307
- name: e.currency.code,
308
- value: e.currency.code,
309
- symbol: e.currency.symbol,
310
- alignment: e.currency.alignment === "before" ? "0" : "1",
311
- decimalCount: e.currency.decimalCount.toString(),
312
- decimalSeparator: e.currency.decimalSeparator,
313
- thousandSeparator: e.currency.thousandSeparator
299
+ name: t.currency.code,
300
+ value: t.currency.code,
301
+ symbol: t.currency.symbol,
302
+ alignment: t.currency.alignment === "before" ? "0" : "1",
303
+ decimalCount: t.currency.decimalCount.toString(),
304
+ decimalSeparator: t.currency.decimalSeparator,
305
+ thousandSeparator: t.currency.thousandSeparator
314
306
  }
315
307
  }, { triggerRefetch: !1 });
316
308
  }
@@ -323,8 +315,8 @@ class ae extends y {
323
315
  * Shared by onRender() and onTemplateNodeUpdated() to avoid duplication.
324
316
  * Marks the block as initialized to prevent redundant fetches on re-selection.
325
317
  */
326
- async _fetchBlockData(e) {
327
- e !== null && this.store.markBlockInitialized(e), (await Promise.allSettled([
318
+ async _fetchBlockData(t) {
319
+ t !== null && this.store.markBlockInitialized(t), (await Promise.allSettled([
328
320
  this.store.fetchRecommendationCreateData(),
329
321
  this.store.fetchRecommendationFilters()
330
322
  ])).forEach((o, n) => {
@@ -349,39 +341,39 @@ class ae extends y {
349
341
  _applySmartDefaults() {
350
342
  if (!this.currentNode || !this.api)
351
343
  return;
352
- const e = c.getConfig(this.currentNode), t = {};
344
+ const t = c.getConfig(this.currentNode), e = {};
353
345
  let o = null, n = null, s = null;
354
- if (e.currency.code === a.currency.code) {
355
- const { currencyList: i } = this.store;
356
- i.length > 0 && (i.some(
357
- (u) => u.value === `price.${a.currency.code}`
358
- ) || (o = i[0].value.replace("price.", ""), t.currency = {
346
+ if (t.currency.code === a.currency.code) {
347
+ const { currencyList: r } = this.store;
348
+ r.length > 0 && (r.some(
349
+ (d) => d.value === `price.${a.currency.code}`
350
+ ) || (o = r[0].value.replace("price.", ""), e.currency = {
359
351
  ...a.currency,
360
352
  code: o,
361
353
  symbol: o
362
354
  }));
363
355
  }
364
- if (e.strategy === a.strategy) {
365
- const i = this.store.getActivePredictiveAlgorithms;
366
- i.length > 0 && (i.some(
367
- (u) => u.value === a.strategy
368
- ) || (n = i[0].value, t.strategy = n));
356
+ if (t.strategy === a.strategy) {
357
+ const r = this.store.getActivePredictiveAlgorithms;
358
+ r.length > 0 && (r.some(
359
+ (d) => d.value === a.strategy
360
+ ) || (n = r[0].value, e.strategy = n));
369
361
  }
370
- if (e.language === a.language) {
371
- const i = this.store.getLanguages;
372
- i.length > 0 && (i.some(
373
- (u) => u.value === a.language
374
- ) || (s = i[0].value, t.language = s));
362
+ if (t.language === a.language) {
363
+ const r = this.store.getLanguages;
364
+ r.length > 0 && (r.some(
365
+ (d) => d.value === a.language
366
+ ) || (s = r[0].value, e.language = s));
375
367
  }
376
368
  !o && !n && !s || (c.updateConfig(
377
369
  this.api,
378
370
  this.currentNode,
379
- t,
371
+ e,
380
372
  "Applied smart defaults"
381
- ), o && t.currency && U({
373
+ ), o && e.currency && v({
382
374
  currentNode: this.currentNode,
383
375
  documentModifier: this.api.getDocumentModifier(),
384
- currency: t.currency
376
+ currency: e.currency
385
377
  }), this.store.patchCurrentBlockConfig({
386
378
  ...o ? {
387
379
  currencySettings: {
@@ -401,45 +393,16 @@ class ae extends y {
401
393
  /**
402
394
  * Reads the recommendation-id attribute from the block element within the node
403
395
  */
404
- _getRecommendationIdFromNode(e) {
405
- const t = v(e);
406
- if (!t || !("getAttribute" in t))
396
+ _getRecommendationIdFromNode(t) {
397
+ const e = A(t);
398
+ if (!e || !("getAttribute" in e))
407
399
  return null;
408
- const o = t.getAttribute(_);
400
+ const o = e.getAttribute(I);
409
401
  if (!o)
410
402
  return null;
411
403
  const n = parseInt(o);
412
404
  return Number.isNaN(n) ? null : n;
413
405
  }
414
- /**
415
- * Fetches and renders the block's products without the panel, carrying the
416
- * deferred config write so both still land as one undo entry.
417
- */
418
- async _refreshProductsOutsidePanel() {
419
- const e = this.store.currentRecommendationId;
420
- if (e === null)
421
- return;
422
- this.hasUnappliedConfigChange = !1, this.pendingNodeConfigWrite || this._capturePendingNodeConfigWrite();
423
- const t = this.pendingNodeConfigWrite, o = (t == null ? void 0 : t.blockId) === e ? t.updates : {};
424
- try {
425
- await this.store.fetchRecommendationProducts();
426
- } catch (s) {
427
- console.warn("Recommendation block: fetchRecommendationProducts failed", s);
428
- }
429
- const n = this.store.blockStates[e];
430
- if (n) {
431
- if (b(
432
- e,
433
- o,
434
- n.recommendationProducts,
435
- "Update recommendation configuration"
436
- )) {
437
- this.pendingNodeConfigWrite = null, this._clearConfigFlush();
438
- return;
439
- }
440
- this._flushPendingNodeConfig();
441
- }
442
- }
443
406
  /**
444
407
  * Listen to store changes that require product refresh or regeneration.
445
408
  *
@@ -454,55 +417,55 @@ class ae extends y {
454
417
  * We skip that tick and update tracking references instead.
455
418
  */
456
419
  _listenStateUpdates() {
457
- const { store: e } = this;
458
- let t = e.recommendationProducts, o = e.currentRecommendationId;
459
- this.seenConfigVersion = e.$state.configVersion, this.hasUnappliedConfigChange = !1, this.storeUnsubscription = e.$subscribe(() => {
460
- const n = e.currentRecommendationId;
461
- if (n !== o) {
462
- o = n, t = e.recommendationProducts, this.seenConfigVersion = e.$state.configVersion;
420
+ const { store: t } = this;
421
+ let e = t.recommendationProducts, o = t.$state.configVersion, n = t.currentRecommendationId;
422
+ this.storeUnsubscription = t.$subscribe(() => {
423
+ const s = t.currentRecommendationId;
424
+ if (s !== n) {
425
+ n = s, e = t.recommendationProducts, o = t.$state.configVersion;
463
426
  return;
464
427
  }
465
- const s = e.$state.configVersion;
466
- s !== this.seenConfigVersion && (this.seenConfigVersion = s, this.hasUnappliedConfigChange = !0, this._capturePendingNodeConfigWrite(), this._isPendingStrategyIdChange() && this._flushPendingNodeConfig(), this._debouncedFetchProducts());
467
- const i = e.recommendationProducts, d = i !== t, u = Array.isArray(i) && i.length > 0;
468
- d && u && (t = i, this._debouncedRegenerateWithProducts());
428
+ const r = t.$state.configVersion;
429
+ r !== o && (o = r, this._capturePendingNodeConfigWrite(), this._isPendingStrategyIdChange() && this._flushPendingNodeConfig(), this._debouncedFetchProducts());
430
+ const l = t.recommendationProducts, d = l !== e, m = Array.isArray(l) && l.length > 0;
431
+ d && m && (e = l, this._debouncedRegenerateWithProducts());
469
432
  });
470
433
  }
471
434
  }
472
435
  export {
473
- de as ALGORITHM_CONTROL_ID,
474
- P as AlgorithmControl,
475
- V as CONTROL_BLOCK_ID,
476
- ge as CURRENCY_CONTROL_ID,
477
- T as CurrencyControl,
478
- fe as FILTERS_CONTROL_ID,
436
+ ut as ALGORITHM_CONTROL_ID,
437
+ T as AlgorithmControl,
438
+ W as CONTROL_BLOCK_ID,
439
+ gt as CURRENCY_CONTROL_ID,
440
+ P as CurrencyControl,
441
+ ft as FILTERS_CONTROL_ID,
479
442
  S as FiltersControl,
480
- Ce as LAYOUT_ORIENTATION_CONTROL_ID,
481
- ye as LOCALE_CONTROL_ID,
443
+ Ct as LAYOUT_ORIENTATION_CONTROL_ID,
444
+ yt as LOCALE_CONTROL_ID,
482
445
  O as LayoutOrientationControl,
483
- k as LocaleControl,
484
- _e as PRICE_PLACEMENT_CONTROL_ID,
485
- Re as PRODUCT_COUNT_CONTROL_ID,
486
- Pe as PRODUCT_LAYOUT_CONTROL_ID,
487
- L as PricePlacementControl,
446
+ L as LocaleControl,
447
+ _t as PRICE_PLACEMENT_CONTROL_ID,
448
+ Rt as PRODUCT_COUNT_CONTROL_ID,
449
+ Tt as PRODUCT_LAYOUT_CONTROL_ID,
450
+ k as PricePlacementControl,
488
451
  E as ProductCountControl,
489
452
  F as ProductLayoutControl,
490
- ae as RecommendationBlockControl,
491
- Se as SHUFFLE_CONTROL_ID,
492
- ke as STRATEGY_CONTROL_ID,
453
+ at as RecommendationBlockControl,
454
+ St as SHUFFLE_CONTROL_ID,
455
+ Lt as STRATEGY_CONTROL_ID,
493
456
  D as ShuffleControl,
494
457
  w as StrategyControl,
495
- Ee as adjustProductsToSize,
496
- Fe as formatProductPrice,
497
- v as getBlockElement,
498
- De as getCardComposition,
499
- we as getCurrentLayout,
500
- Ue as getMainContainerTbody,
458
+ Et as adjustProductsToSize,
459
+ Ft as formatProductPrice,
460
+ A as getBlockElement,
461
+ Dt as getCardComposition,
462
+ wt as getCurrentLayout,
463
+ vt as getMainContainerTbody,
501
464
  B as isPartnerManagedBlock,
502
- ve as regenerateMobileProductRows,
503
- x as regenerateProductRowsWithStyles,
504
- U as setCurrencyAttributes,
505
- Be as updatePricesInPlace,
506
- A as updateProductContentInPlace,
507
- Ae as updateSingleProductContent
465
+ At as regenerateMobileProductRows,
466
+ U as regenerateProductRowsWithStyles,
467
+ v as setCurrencyAttributes,
468
+ Bt as updatePricesInPlace,
469
+ x as updateProductContentInPlace,
470
+ xt as updateSingleProductContent
508
471
  };
package/dist/guido.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-c61cc8ea]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-926b01f5]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-926b01f5]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-926b01f5]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
1
+ @charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-15610de9] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.color-vision-select__dropdown[data-v-64cb50da]{z-index:20;width:387px}.accessibility-toolbar[data-v-391019bc]{gap:16px}.accessibility-toolbar[data-v-391019bc] .in-segments-wrapper__button svg{margin-right:0}.accessibility-toolbar[data-v-391019bc] .in-segments-wrapper__button .clearfix:after{content:none}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-actions-menu__dropdown[data-v-d0e6b57a]{z-index:20;width:222px}.editor-actions[data-v-23b54db0]{gap:16px}.editor-actions__divider[data-v-23b54db0]{width:1px;height:40px;background-color:#e1e1e1}.right-slot[data-v-efc32e0d]{gap:16px}.header-wrapper[data-v-3c713746]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-ecfaf815]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-ecfaf815]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-ecfaf815]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.guido-tab-bar-onboarding[data-v-42f02a1f]{z-index:21}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}