@useinsider/guido 3.21.0-beta.c433290 → 3.21.0-beta.db22471

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 (68) hide show
  1. package/README.md +0 -1
  2. package/dist/@types/config/schemas.js +10 -11
  3. package/dist/components/Guido.vue.js +2 -2
  4. package/dist/components/Guido.vue2.js +106 -117
  5. package/dist/components/organisms/AutoSaveController.vue2.js +10 -20
  6. package/dist/components/organisms/header/AutoSaveToggle.vue.js +22 -0
  7. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +19 -0
  8. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  9. package/dist/components/organisms/header/EditorActions.vue2.js +73 -58
  10. package/dist/components/organisms/header/HeaderWrapper.vue.js +6 -6
  11. package/dist/components/organisms/header/HeaderWrapper.vue2.js +17 -9
  12. package/dist/components/organisms/header/LeftSlot.vue.js +1 -1
  13. package/dist/components/organisms/header/LeftSlot.vue2.js +23 -28
  14. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  15. package/dist/components/organisms/header/MiddleSlot.vue2.js +7 -8
  16. package/dist/components/organisms/header/RightSlot.vue.js +10 -11
  17. package/dist/components/organisms/header/RightSlot.vue2.js +18 -13
  18. package/dist/components/organisms/onboarding/OnboardingWrapper.vue.js +12 -12
  19. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +35 -60
  20. package/dist/composables/useCustomInterfaceAppearance.js +41 -42
  21. package/dist/config/compiler/utils/recommendationCompilerUtils.js +55 -53
  22. package/dist/config/i18n/en/labels.json.js +4 -36
  23. package/dist/config/i18n/en/tooltips.json.js +1 -2
  24. package/dist/extensions/Blocks/Recommendation/block.js +223 -138
  25. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +76 -16
  26. package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +16 -15
  27. package/dist/extensions/Blocks/Recommendation/utils/strategyCommit.js +52 -31
  28. package/dist/guido.css +1 -1
  29. package/dist/sprite.svg +0 -10
  30. package/dist/src/@types/config/schemas.d.ts +0 -2
  31. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +1 -19
  32. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +19 -1
  33. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +19 -1
  34. package/dist/src/composables/useActionsApi.d.ts +2 -2
  35. package/dist/src/composables/useConfig.d.ts +0 -2
  36. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +25 -7
  37. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +31 -17
  38. package/dist/src/extensions/Blocks/Recommendation/utils/strategyCommit.d.ts +11 -0
  39. package/dist/src/stores/autosave.d.ts +1 -73
  40. package/dist/src/stores/config.d.ts +0 -20
  41. package/dist/src/stores/editor.d.ts +0 -109
  42. package/dist/src/stores/onboarding.d.ts +33 -964
  43. package/dist/src/stores/version-history.d.ts +1 -1
  44. package/dist/src/utils/timeUtil.d.ts +8 -5
  45. package/dist/static/styles/variables.css.js +0 -2
  46. package/dist/stores/autosave.js +7 -12
  47. package/dist/stores/editor.js +3 -8
  48. package/dist/stores/onboarding.js +22 -48
  49. package/dist/utils/timeUtil.js +17 -6
  50. package/package.json +1 -1
  51. package/dist/components/organisms/header/AutoSaveStatus.vue.js +0 -17
  52. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +0 -25
  53. package/dist/components/organisms/header/EditorActionsMenu.vue.js +0 -20
  54. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +0 -98
  55. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +0 -18
  56. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +0 -37
  57. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +0 -22
  58. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +0 -48
  59. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +0 -19
  60. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +0 -90
  61. package/dist/composables/useAccessibilityApi.js +0 -51
  62. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +0 -2
  63. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +0 -2
  64. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +0 -2
  65. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +0 -2
  66. package/dist/src/composables/useAccessibilityApi.d.ts +0 -13
  67. package/dist/static/styles/components/accessibility.css.js +0 -234
  68. /package/dist/src/components/organisms/header/{AutoSaveStatus.vue.d.ts → AutoSaveToggle.vue.d.ts} +0 -0
@@ -1,10 +1,10 @@
1
1
  import { extractWrapperTags as A } from "../../../../utils/preserveTextStyles.js";
2
2
  import { RecommendationBlockId as c } from "../constants/blockIds.js";
3
- import { DESKTOP_CONTAINER_SELECTOR as b, ATTR_PRODUCT_NAME as k, ATTR_PRODUCT_PRICE as y, ATTR_PRODUCT_OLD_PRICE as p, ATTR_PRODUCT_OMNIBUS_PRICE as R, ATTR_PRODUCT_OMNIBUS_DISCOUNT as _, ATTR_PRODUCT_BUTTON as x, ATTR_PRODUCT_IMAGE as q, ATTR_PRODUCT_ATTR as v } from "../constants/selectors.js";
3
+ import { DESKTOP_CONTAINER_SELECTOR as g, ATTR_PRODUCT_NAME as k, ATTR_PRODUCT_PRICE as y, ATTR_PRODUCT_OLD_PRICE as p, ATTR_PRODUCT_OMNIBUS_PRICE as R, ATTR_PRODUCT_OMNIBUS_DISCOUNT as _, ATTR_PRODUCT_BUTTON as x, ATTR_PRODUCT_IMAGE as q, ATTR_PRODUCT_ATTR as v } from "../constants/selectors.js";
4
4
  import { CSS_CLASS_TEXT_TRIM as B } from "../controls/shared/textTrimCssRules.js";
5
5
  import { toCustomCompositionKey as U } from "../templates/utils.js";
6
6
  import { resolveRowVisibilityKeys as N, isMergedInlinePriceRow as C } from "./compositionKeys.js";
7
- import { hasQuerySelectorAll as I, hasGetAttribute as l, hasGetStyle as O, hasGetComputedStyle as M } from "./tagName.js";
7
+ import { hasQuerySelectorAll as I, hasGetAttribute as l, hasGetStyle as h, hasGetComputedStyle as M } from "./tagName.js";
8
8
  const s = [
9
9
  "font-size",
10
10
  "font-family",
@@ -37,9 +37,10 @@ const s = [
37
37
  "width",
38
38
  "height",
39
39
  "max-width",
40
+ "max-height",
40
41
  "border-radius",
41
42
  "margin"
42
- ], g = /* @__PURE__ */ new Set(["transparent", "rgba(0, 0, 0, 0)"]), L = [
43
+ ], b = /* @__PURE__ */ new Set(["transparent", "rgba(0, 0, 0, 0)"]), L = [
43
44
  { attrKey: k, blockId: c.NAME, kind: "text" },
44
45
  { attrKey: y, blockId: c.PRICE, kind: "text" },
45
46
  { attrKey: p, blockId: c.OLD_PRICE, kind: "text" },
@@ -48,14 +49,14 @@ const s = [
48
49
  { attrKey: x, blockId: c.BUTTON, kind: "button" },
49
50
  { attrKey: q, blockId: c.IMAGE, kind: "image" }
50
51
  ];
51
- function h(t) {
52
+ function O(t) {
52
53
  return t && "getInnerHTML" in t && typeof t.getInnerHTML == "function" ? t.getInnerHTML().trim() : "";
53
54
  }
54
55
  function K(t) {
55
56
  return t && "getInnerText" in t && typeof t.getInnerText == "function" ? t.getInnerText().trim() : "";
56
57
  }
57
58
  function a(t, e, r) {
58
- !e || !O(e) || r.forEach((n) => {
59
+ !e || !h(e) || r.forEach((n) => {
59
60
  const o = e.getStyle(n);
60
61
  o && o !== "inherit" && o !== "initial" && (t[n] = o);
61
62
  });
@@ -64,10 +65,10 @@ function E(t) {
64
65
  return Object.entries(t).map(([e, r]) => `${e}: ${r};`).join(" ");
65
66
  }
66
67
  function P(t) {
67
- if (!t || !O(t))
68
+ if (!t || !h(t))
68
69
  return;
69
70
  const e = t.getStyle("background-color") || t.getStyle("background");
70
- return e && !g.has(e) ? e : void 0;
71
+ return e && !b.has(e) ? e : void 0;
71
72
  }
72
73
  function S(t, e) {
73
74
  const r = {};
@@ -76,11 +77,11 @@ function S(t, e) {
76
77
  function $(t) {
77
78
  const e = t.querySelector("p"), r = {};
78
79
  a(r, t, s), a(r, e, s), a(r, t.querySelector("strong"), s), a(r, t.querySelector("em"), s), a(r, t.querySelector("s"), s);
79
- const n = E(r), { openTags: o, closeTags: i } = A(h(e));
80
+ const n = E(r), { openTags: o, closeTags: i } = A(O(e));
80
81
  return !n && !o ? null : { pStyle: n || void 0, openTags: o, closeTags: i };
81
82
  }
82
83
  function H(t) {
83
- const e = t.querySelector(".es-button-border"), r = t.querySelector("a.es-button") ?? t.querySelector("a"), n = S(e, D), o = S(r, w), i = e && "getAttribute" in e ? e.getAttribute("class") ?? "" : "", u = /\bes-fw\b/.test(i), { openTags: T, closeTags: d } = A(h(r)), m = K(r);
84
+ const e = t.querySelector(".es-button-border"), r = t.querySelector("a.es-button") ?? t.querySelector("a"), n = S(e, D), o = S(r, w), i = e && "getAttribute" in e ? e.getAttribute("class") ?? "" : "", u = /\bes-fw\b/.test(i), { openTags: T, closeTags: d } = A(O(r)), m = K(r);
84
85
  return !n && !o && !u && !T && !m ? null : {
85
86
  buttonBorderStyle: n || void 0,
86
87
  buttonAnchorStyle: o || void 0,
@@ -100,7 +101,7 @@ function j(t, e) {
100
101
  function f(t, e) {
101
102
  if (!t || !("querySelector" in t))
102
103
  return;
103
- const r = t.querySelector(b) ?? t;
104
+ const r = t.querySelector(g) ?? t;
104
105
  if (L.forEach(({ attrKey: i, blockId: u, kind: T }) => {
105
106
  const d = r.querySelector(`[esd-extension-block-id="${u}"]`);
106
107
  d && e(d, i, T);
@@ -126,20 +127,20 @@ function V(t) {
126
127
  function X(t) {
127
128
  if (!t || !("querySelector" in t))
128
129
  return;
129
- const e = t.querySelector(b) ?? t, r = e.querySelector(".product-card-segment") ?? e.querySelector(".product-card-wrapper");
130
+ const e = t.querySelector(g) ?? t, r = e.querySelector(".product-card-segment") ?? e.querySelector(".product-card-wrapper");
130
131
  return P(r);
131
132
  }
132
133
  function z(t) {
133
134
  if (!t)
134
135
  return;
135
136
  const e = l(t) ? t.getAttribute("bgcolor") : null;
136
- if (e && !g.has(e))
137
+ if (e && !b.has(e))
137
138
  return e;
138
139
  const r = P(t);
139
140
  if (r)
140
141
  return r;
141
142
  const n = M(t) ? t.getComputedStyle("background-color") : void 0;
142
- return n && !g.has(n) ? n : void 0;
143
+ return n && !b.has(n) ? n : void 0;
143
144
  }
144
145
  function Q(t) {
145
146
  const e = {};
@@ -170,7 +171,7 @@ function J(t) {
170
171
  function Z(t) {
171
172
  if (!t || !("querySelector" in t))
172
173
  return !1;
173
- const e = t.querySelector(b) ?? t;
174
+ const e = t.querySelector(g) ?? t;
174
175
  return C(e.querySelector(`[data-attribute-type="${y}"]`)) || C(e.querySelector(`[data-attribute-type="${p}"]`));
175
176
  }
176
177
  function tt(t) {
@@ -195,7 +196,7 @@ function rt(t) {
195
196
  const e = {};
196
197
  if (!t || !("querySelector" in t))
197
198
  return e;
198
- const r = t.querySelector(b) ?? t;
199
+ const r = t.querySelector(g) ?? t;
199
200
  return I(r) && r.querySelectorAll(".recommendation-attribute-row").forEach((n) => {
200
201
  if (!l(n))
201
202
  return;
@@ -1,43 +1,64 @@
1
- import { useRecommendationExtensionStore as g } from "../store/recommendation.js";
2
- import { refreshBlockOutsidePanel as y } from "./blockRefresh.js";
3
- import { toBlockUrlConfig as a } from "./blockUrlConfig.js";
4
- import { commitBlockChangeOutsidePanel as l, readBlockNodeConfigs as S } from "./nodeConfigWriter.js";
5
- function d(e, t) {
6
- const r = JSON.stringify(a(t));
7
- return S(e).find((o) => JSON.stringify(a(o)) !== r) ?? t;
1
+ import { useRecommendationExtensionStore as f } from "../store/recommendation.js";
2
+ import { refreshBlockOutsidePanel as l } from "./blockRefresh.js";
3
+ import { toBlockUrlConfig as c } from "./blockUrlConfig.js";
4
+ import { readBlockNodeConfigs as m, commitBlockChangeOutsidePanel as d } from "./nodeConfigWriter.js";
5
+ function u(n, t) {
6
+ const r = JSON.stringify(c(t));
7
+ return m(n).find((s) => JSON.stringify(c(s)) !== r) ?? t;
8
8
  }
9
- async function p(e, t, r) {
10
- const o = g(), s = [e, t];
11
- (/* @__PURE__ */ new Map([[e, d(e, r)], [t, r]])).forEach((n, i) => {
12
- var m;
13
- (!!n.strategyId || i === t) && ((m = o.blockStates[i]) == null ? void 0 : m.recommendationConfigs.strategyId) !== n.strategyId && o.seedBlockUrlConfig(i, a(n));
14
- }), o.resetArrivedBlock(t), await Promise.all(s.map(async (n) => {
15
- if (!await o.refreshStrategyBlock(n))
9
+ async function y(n, t, r = () => !0) {
10
+ const s = f();
11
+ await Promise.all(n.map(async (e) => {
12
+ if (!await s.refreshStrategyBlock(e))
16
13
  return;
17
- const { recommendationConfigs: i, recommendationProducts: f } = o.blockStates[n];
18
- l(
19
- n,
20
- { size: i.size },
21
- f,
22
- "Refresh duplicated recommendation strategy"
14
+ const { recommendationConfigs: a, recommendationProducts: o } = s.blockStates[e];
15
+ r(e, a.size) && d(
16
+ e,
17
+ { size: a.size },
18
+ o,
19
+ t
23
20
  );
24
21
  }));
25
22
  }
26
- async function k(e, t) {
27
- if (!g().blockStates[e])
23
+ async function w(n, t, r) {
24
+ const s = f(), e = [n, t];
25
+ (/* @__PURE__ */ new Map([[n, u(n, r)], [t, r]])).forEach((o, i) => {
26
+ var g;
27
+ (!!o.strategyId || i === t) && ((g = s.blockStates[i]) == null ? void 0 : g.recommendationConfigs.strategyId) !== o.strategyId && s.seedBlockUrlConfig(i, c(o));
28
+ }), s.resetArrivedBlock(t), await y(e, "Refresh duplicated recommendation strategy");
29
+ }
30
+ async function k(n) {
31
+ const t = f(), r = n.filter(({ config: e }) => !!e.strategyId);
32
+ if (!r.length)
33
+ return;
34
+ r.forEach(({ id: e, config: a }) => t.seedBlockUrlConfig(e, c(a))), t.invalidateStrategies();
35
+ const s = new Map(r.map(({ id: e, config: a }) => [e, a]));
36
+ await y(
37
+ r.map(({ id: e }) => e),
38
+ "Refresh recommendation strategy",
39
+ (e, a) => {
40
+ const o = s.get(e);
41
+ return a !== (o == null ? void 0 : o.size) && m(e).some((i) => i.strategyId === (o == null ? void 0 : o.strategyId));
42
+ }
43
+ );
44
+ }
45
+ async function O(n, t) {
46
+ if (!f().blockStates[n])
28
47
  return !1;
29
- const r = await y(e, {
30
- pickUpdates: ({ strategyId: o, strategy: s, size: c, nodeConfigVersion: n }) => ({
31
- strategyId: o,
32
- strategy: s,
33
- size: c,
34
- configVersion: n
48
+ const r = await l(n, {
49
+ pickUpdates: ({ strategyId: s, strategy: e, size: a, nodeConfigVersion: o }) => ({
50
+ strategyId: s,
51
+ strategy: e,
52
+ size: a,
53
+ configVersion: o
35
54
  }),
36
55
  description: t
37
56
  });
38
- return r || console.error("[recommendation] strategy change did not reach a node", { blockId: e }), r;
57
+ return r || console.error("[recommendation] strategy change did not reach a node", { blockId: n }), r;
39
58
  }
40
59
  export {
41
- k as commitStrategyChange,
42
- p as refreshDuplicatedStrategyBlocks
60
+ O as commitStrategyChange,
61
+ k as refreshArrivedStrategyBlocks,
62
+ w as refreshDuplicatedStrategyBlocks,
63
+ u as resolveSourceConfig
43
64
  };
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-9d988e4b] .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-9a028d08]{gap:16px}.editor-actions__divider[data-v-9a028d08]{width:1px;height:40px;background-color:#e1e1e1}.right-slot[data-v-77451c9a]{gap:16px}.header-wrapper[data-v-3c713746]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.validation-error-list[data-v-e48cebe9]{gap:16px}.validation-error-row[data-v-e48cebe9]{gap:8px;padding:24px;border:1px solid #E1E1E1;border-radius:8px}.validation-error-row__icon[data-v-e48cebe9]{flex-shrink:0;font-size:24px;line-height:0}.validation-error-row__text[data-v-e48cebe9]{font-size:13px;line-height:16px;color:#292929;word-break:break-word}.guido-editor__wrapper[data-v-f0ba01bc]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-f0ba01bc]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-f0ba01bc]{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-219b4f7c]{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}
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-b8f24f34] .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-baf7a5dd]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.validation-error-list[data-v-e48cebe9]{gap:16px}.validation-error-row[data-v-e48cebe9]{gap:8px;padding:24px;border:1px solid #E1E1E1;border-radius:8px}.validation-error-row__icon[data-v-e48cebe9]{flex-shrink:0;font-size:24px;line-height:0}.validation-error-row__text[data-v-e48cebe9]{font-size:13px;line-height:16px;color:#292929;word-break:break-word}.guido-editor__wrapper[data-v-c5146fc5]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-c5146fc5]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-c5146fc5]{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}
package/dist/sprite.svg CHANGED
@@ -3107,12 +3107,6 @@
3107
3107
  <symbol viewBox="0 0 24 24" data-token-name="line-replace-dynamic-content" id="line-replace-dynamic-content">
3108
3108
  <path fill-rule="evenodd" clip-rule="evenodd" d="M10.8327 5.42341C11.2222 5.81502 11.221 6.44877 10.8301 6.83894C10.8013 6.86765 10.7712 6.89425 10.74 6.91873L8.70549 8.95706C8.31533 9.34795 7.68275 9.34795 7.29259 8.95706C6.90243 8.56617 6.90243 7.93242 7.29259 7.54153L7.73664 7.09666L7.00053 7.09662C6.44823 7.0966 6.00049 7.54432 6.00049 8.09662V10.0001C6.00049 10.5524 5.55277 11.0001 5.00049 11.0001C4.4482 11.0001 4.00049 10.5524 4.00049 10.0001V8.09662C4.00049 6.43972 5.34372 5.09655 7.00062 5.09662L7.6872 5.09665L7.30179 4.70909C6.91235 4.31748 6.91353 3.68372 7.30442 3.29356C7.69531 2.9034 8.32788 2.90458 8.71732 3.29619L10.8327 5.42341ZM12 6.00024C12 4.89567 12.8954 4.00024 14 4.00024H18C19.1046 4.00024 20 4.89567 20 6.00024V10.0002C20 11.1048 19.1046 12.0002 18 12.0002H14C12.8954 12.0002 12 11.1048 12 10.0002V6.00024ZM14 6.00024H18V10.0002H14V6.00024ZM4 14.0002C4 12.8957 4.89543 12.0002 6 12.0002H10C11.1046 12.0002 12 12.8957 12 14.0002V18.0002C12 19.1048 11.1046 20.0002 10 20.0002H6C4.89543 20.0002 4 19.1048 4 18.0002V14.0002ZM6 14.0002H10V18.0002H6V14.0002ZM13.2939 17.1612C12.9031 17.5513 12.9019 18.1851 13.2913 18.5767L15.4067 20.7039C15.7961 21.0955 16.4287 21.0967 16.8196 20.7065C17.2105 20.3164 17.2117 19.6826 16.8222 19.291L16.4368 18.9034L17.1234 18.9035C18.7803 18.9035 20.1235 17.5604 20.1235 15.9035V14C20.1235 13.4477 19.6758 13 19.1235 13C18.5713 13 18.1235 13.4477 18.1235 14L18.1235 15.9035C18.1235 16.4558 17.6758 16.9035 17.1235 16.9035L16.3874 16.9034L16.8314 16.4586C17.2216 16.0677 17.2216 15.4339 16.8314 15.043C16.4413 14.6522 15.8087 14.6522 15.4185 15.043L13.384 17.0814C13.3528 17.1058 13.3227 17.1324 13.2939 17.1612Z"/>
3109
3109
  </symbol>
3110
- <symbol viewBox="0 0 24 24" id="line-accessibility">
3111
- <g transform="translate(2 2)">
3112
- <rect x="1" y="1" width="18" height="18" rx="9" fill="none" stroke="currentColor" stroke-width="2"/>
3113
- <path fill="currentColor" d="M14.8125 6.08473C15.332 5.94828 15.6875 6.47668 15.6875 6.95875C15.6873 7.44052 15.2498 7.66778 14.8125 7.8318C14.798 7.83727 14.7826 7.84147 14.7676 7.84547L12.3262 8.69898C12.013 8.81663 11.8784 8.93913 11.8486 8.99391C11.848 8.99533 11.8475 8.9975 11.8467 8.99879C11.8153 9.05489 11.7235 9.29227 11.8379 10.0076L11.9961 11.238L12.8887 16.0154C12.8969 16.0521 12.9036 16.0895 12.9092 16.1267C12.9741 16.5696 12.6498 16.9997 12.0342 16.9998C11.4983 16.9998 11.2617 16.63 11.1592 16.1267C11.1592 16.1267 10.3701 11.8181 9.9873 11.8181C9.60444 11.8205 8.94137 15.6235 8.83887 16.1267C8.7363 16.63 8.49971 16.9998 7.96387 16.9998C7.34999 16.9996 7.02548 16.5711 7.08887 16.1296L7.0957 16.0955C7.09789 16.0818 7.09981 16.0676 7.10254 16.0545L7.9834 11.2371L8.1416 10.0066C8.17359 9.80644 8.26392 9.23379 8.15137 8.9441C8.11665 8.85389 8.0452 8.7492 7.7793 8.64723L5.17962 7.83495C5.17734 7.83424 5.17578 7.83212 5.17578 7.82972C5.17578 7.82745 5.17437 7.82541 5.17224 7.8246C4.74007 7.66146 4.31254 7.43412 4.3125 6.95777C4.31258 6.47553 4.66813 5.9482 5.1875 6.08473C5.26161 6.10405 5.33481 6.12744 5.40625 6.15504C6.12486 6.3593 8.37146 6.9607 9.98828 6.9607C11.7281 6.96068 14.1981 6.26431 14.707 6.115C14.7342 6.10658 14.7619 6.09917 14.7891 6.09156L14.7998 6.08766L14.8125 6.08473ZM9.70117 3.02906C9.99821 2.96998 10.3061 3.00106 10.5859 3.11695C10.8657 3.23286 11.1052 3.42866 11.2734 3.68043C11.4416 3.93217 11.5312 4.22828 11.5312 4.53101C11.5308 4.93693 11.369 5.326 11.082 5.61305C10.795 5.9001 10.406 6.06183 10 6.06226C9.69721 6.06226 9.40119 5.97264 9.14941 5.80445C8.89762 5.63621 8.70086 5.39673 8.58496 5.11695C8.46918 4.83725 8.439 4.52909 8.49805 4.23219C8.55716 3.93526 8.70292 3.6621 8.91699 3.44801C9.13112 3.23391 9.4042 3.08814 9.70117 3.02906Z"/>
3114
- </g>
3115
- </symbol>
3116
3110
  <svg viewBox="0 0 24 24" data-token-name="line-advanced-settings" id="line-advanced-settings">
3117
3111
  <path fill-rule="evenodd" clip-rule="evenodd" d="M16 3C15.4477 3 15 3.44772 15 4V6V8C15 8.55228 15.4477 9 16 9C16.5523 9 17 8.55228 17 8V7H20C20.5523 7 21 6.55228 21 6C21 5.44772 20.5523 5 20 5H17V4C17 3.44772 16.5523 3 16 3ZM3 6C3 5.44772 3.44772 5 4 5H12C12.5523 5 13 5.44772 13 6C13 6.55228 12.5523 7 12 7H4C3.44772 7 3 6.55228 3 6ZM16 15C15.4477 15 15 15.4477 15 16V18V20C15 20.5523 15.4477 21 16 21C16.5523 21 17 20.5523 17 20V19H20C20.5523 19 21 18.5523 21 18C21 17.4477 20.5523 17 20 17H17V16C17 15.4477 16.5523 15 16 15ZM3 18C3 17.4477 3.44772 17 4 17H12C12.5523 17 13 17.4477 13 18C13 18.5523 12.5523 19 12 19H4C3.44772 19 3 18.5523 3 18ZM7 10C7 9.44772 7.44772 9 8 9C8.55228 9 9 9.44772 9 10V12V14C9 14.5523 8.55228 15 8 15C7.44772 15 7 14.5523 7 14V13H4C3.44772 13 3 12.5523 3 12C3 11.4477 3.44772 11 4 11H7V10ZM12 11C11.4477 11 11 11.4477 11 12C11 12.5523 11.4477 13 12 13H20C20.5523 13 21 12.5523 21 12C21 11.4477 20.5523 11 20 11H12Z"/>
3118
3112
  </svg>
@@ -3136,8 +3130,4 @@
3136
3130
  </clipPath>
3137
3131
  </defs>
3138
3132
  </svg>
3139
- <symbol viewBox="0 0 24 24" id="line-no-image-v2">
3140
- <path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M19.9062 4.1875C20.1565 3.9376 20.5624 3.93741 20.8125 4.1875C21.0626 4.4376 21.0624 4.84353 20.8125 5.09375L19.9062 6L20.8125 6.90625C21.0624 7.15645 21.0626 7.56238 20.8125 7.8125C20.5624 8.06262 20.1565 8.06246 19.9062 7.8125L19 6.90625L18.0938 7.8125C17.8435 8.06241 17.4376 8.0626 17.1875 7.8125C16.9374 7.5624 16.9376 7.15647 17.1875 6.90625L18.0938 6L17.1875 5.09375C16.9376 4.84352 16.9374 4.43759 17.1875 4.1875C17.4376 3.93746 17.8435 3.93766 18.0938 4.1875L19 5.09375L19.9062 4.1875ZM14 4C14.5523 4 15 4.44772 15 5C15 5.55228 14.5523 6 14 6C13.4477 6 13 5.55228 13 5C13 4.44772 13.4477 4 14 4Z"/>
3141
- <path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M14 6H5V18H6.43652L10.2764 12.6182C10.8633 11.8405 11.9837 11.7886 12.6357 12.5088L14.6504 14.7734L18.3545 10.3965L18.4424 10.3008C19.3653 9.37025 21 10.0117 21 11.3652V18C21 19.1046 20.1046 20 19 20H5C3.89543 20 3 19.1046 3 18V6C3 4.89543 3.89543 4 5 4H14V6ZM9.00098 18H14.7109L11.5371 14.4268L9.00098 18ZM15.9932 16.2822L17.5205 18H19V12.7295L15.9932 16.2822ZM8.5 8C9.32843 8 10 8.67157 10 9.5C10 10.3284 9.32843 11 8.5 11C7.67157 11 7 10.3284 7 9.5C7 8.67157 7.67157 8 8.5 8Z"/>
3142
- </symbol>
3143
3133
  </svg>
@@ -407,7 +407,6 @@ export declare const FeaturesSchema: v.ObjectSchema<{
407
407
  readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
408
408
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
409
409
  readonly autosave: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
410
- readonly accessibilityTesting: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
411
410
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
412
411
  readonly allowlistEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
413
412
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
@@ -826,7 +825,6 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
826
825
  readonly liquidSyntax: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
827
826
  /** Enable autosave (3-min interval + tab-hide). User toggles on/off from the header. */
828
827
  readonly autosave: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
829
- readonly accessibilityTesting: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
830
828
  /** Enable pre-save domain-allowlist validation (opt-in; Guido self-serves the block toaster) */
831
829
  readonly allowlistEnabled: v.OptionalSchema<v.BooleanSchema<undefined>, false>;
832
830
  /** Enable persistent link tracking-id assignment for the click heatmap (opt-in) */
@@ -1,20 +1,2 @@
1
- declare const _default: import("vue").DefineComponent<{}, {
2
- saveSilent: () => Promise<{
3
- dynamicContentList: import("../../@types/generic").DynamicContent[];
4
- compiledHtml: string;
5
- rawHtml: string;
6
- css: string;
7
- ampHtml: string;
8
- ampErrors: string[];
9
- modules: number[];
10
- recommendation: {
11
- campaignUrls?: Record<string, import("../../@types/recommendation").RecommendationCampaignUrlValue>;
12
- configs: Record<string, string>;
13
- };
14
- unsubscribe: {
15
- status: boolean;
16
- config: number[];
17
- };
18
- } | undefined>;
19
- }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
20
2
  export default _default;
@@ -1,2 +1,20 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
1
+ declare const _default: import("vue").DefineComponent<{}, {
2
+ handleSave: (isSilent: boolean) => Promise<{
3
+ dynamicContentList: import("../../../@types/generic.js").DynamicContent[];
4
+ compiledHtml: string;
5
+ rawHtml: string;
6
+ css: string;
7
+ ampHtml: string;
8
+ ampErrors: string[];
9
+ modules: number[];
10
+ recommendation: {
11
+ campaignUrls?: Record<string, import("../../../@types/recommendation.js").RecommendationCampaignUrlValue>;
12
+ configs: Record<string, string>;
13
+ };
14
+ unsubscribe: {
15
+ status: boolean;
16
+ config: number[];
17
+ };
18
+ } | undefined> | undefined;
19
+ }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
20
  export default _default;
@@ -1,2 +1,20 @@
1
- declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
1
+ declare const _default: import("vue").DefineComponent<{}, {
2
+ handleSave: (isSilent: boolean) => Promise<{
3
+ dynamicContentList: import("../../../@types/generic.js").DynamicContent[];
4
+ compiledHtml: string;
5
+ rawHtml: string;
6
+ css: string;
7
+ ampHtml: string;
8
+ ampErrors: string[];
9
+ modules: number[];
10
+ recommendation: {
11
+ campaignUrls?: Record<string, import("../../../@types/recommendation.js").RecommendationCampaignUrlValue>;
12
+ configs: Record<string, string>;
13
+ };
14
+ unsubscribe: {
15
+ status: boolean;
16
+ config: number[];
17
+ };
18
+ } | undefined> | undefined;
19
+ }, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
20
  export default _default;
@@ -1,5 +1,5 @@
1
- import type { CompileEmailOptions } from '@@/Types/api/actions-api';
2
- import { GetCompiledEmailOptions, CompiledEmailResult, TemplateData } from '@@/Types/api/actions-api';
1
+ import type { CompileEmailOptions } from '@@/Types/actions-api';
2
+ import { GetCompiledEmailOptions, CompiledEmailResult, TemplateData } from '@@/Types/actions-api';
3
3
  export declare const useActionsApi: () => {
4
4
  getCompiledEmail: (options?: GetCompiledEmailOptions) => Promise<CompiledEmailResult>;
5
5
  getTemplateData: () => Promise<TemplateData>;
@@ -100,7 +100,6 @@ export declare const useConfig: () => {
100
100
  modulesDisabled: boolean;
101
101
  liquidSyntax: boolean;
102
102
  autosave: boolean;
103
- accessibilityTesting: boolean;
104
103
  allowlistEnabled: boolean;
105
104
  linkTrackingIds: boolean;
106
105
  allowSaveWithErrors: boolean;
@@ -240,7 +239,6 @@ export declare const useConfig: () => {
240
239
  modulesDisabled: boolean;
241
240
  liquidSyntax: boolean;
242
241
  autosave: boolean;
243
- accessibilityTesting: boolean;
244
242
  allowlistEnabled: boolean;
245
243
  linkTrackingIds: boolean;
246
244
  allowSaveWithErrors: boolean;
@@ -19,6 +19,9 @@ export declare class RecommendationBlock extends Block {
19
19
  private _resetSourceIds;
20
20
  /** Ids handed to duplicates the document root does not show yet: a copied module renames all its blocks at once. */
21
21
  private _unsettledDuplicateIds;
22
+ private _arrivedBlocks;
23
+ /** Strategy each in-flight arrival or duplicate refresh is fetching, by block id, so a second one does not race it. */
24
+ private _refreshClaims;
22
25
  constructor();
23
26
  getId(): string;
24
27
  getIcon(): string;
@@ -44,6 +47,8 @@ export declare class RecommendationBlock extends Block {
44
47
  * @param node - The newly created block node
45
48
  */
46
49
  onCreated(node: ImmutableHtmlNode): void;
50
+ /** Refreshes every block of an opened template: Stripo restores a stored document without `onCreated`. */
51
+ onDocumentInit(): void;
47
52
  /**
48
53
  * Called when the document changes or template is loaded
49
54
  *
@@ -59,6 +64,8 @@ export declare class RecommendationBlock extends Block {
59
64
  * @param node - The block node being deleted
60
65
  */
61
66
  onDelete(node: ImmutableHtmlNode): void;
67
+ private _ensureMobileFitRule;
68
+ private _syncHeightBound;
62
69
  /**
63
70
  * Warns (dark advisory toaster) when the design holds more than one live
64
71
  * recommendation block. Triggered from the user-add paths only (fresh drop
@@ -85,15 +92,26 @@ export declare class RecommendationBlock extends Block {
85
92
  * the renamed one depending on where the module was dropped (SD-149916).
86
93
  */
87
94
  private _scheduleArrivalReset;
95
+ /**
96
+ * Re-reads the strategy of a block that arrived with saved cards, without waiting for a click.
97
+ * Blocks of one opened template or dropped module arrive in one tick and refresh together.
98
+ */
99
+ private _queueArrivalRefresh;
100
+ private _refreshArrivedBlocks;
101
+ /**
102
+ * A new document reports each block to onCreated and onDocumentInit, not always in one batch, so a
103
+ * claimed block refreshes again only once the document shows it under another strategy (a restored version).
104
+ */
105
+ private _canClaimRefresh;
106
+ private _releaseRefreshClaim;
88
107
  /**
89
108
  * Heals a duplicate that slipped past the create-time `_detectDuplicate`
90
109
  * scan (or that was persisted by an older template before SD-142352).
91
110
  * When two blocks share a `recommendation-id`, the first occurrence in DOM
92
111
  * order is treated as the source and any later sibling is reassigned a
93
- * fresh id. The store entry and active-block focus are intentionally not
94
- * touched here: each block's persisted `esd-ext-config` carries its own
95
- * truth and the regular save-time hydration (`hydrateRecommendationStore`)
96
- * will seed the new id from that. Skipping `setCurrentBlock` avoids
112
+ * fresh id and queued for the arrival refresh, which seeds the new id's
113
+ * store entry from its persisted `esd-ext-config`. The source's store
114
+ * entry is not cloned and focus is not moved. Skipping `setCurrentBlock` avoids
97
115
  * yanking the user's current selection mid-edit when the heal fires from
98
116
  * `onDocumentChanged`.
99
117
  */
@@ -109,9 +127,9 @@ export declare class RecommendationBlock extends Block {
109
127
  *
110
128
  * Used by `_handleDuplicate` at create-time (which additionally clones the
111
129
  * store entry and focuses the new block) and by `_healLingeringDuplicate`
112
- * at document-change time (which intentionally skips store/focus side
113
- * effects so older bug-affected templates can self-repair without
114
- * disturbing the user's current selection).
130
+ * at document-change time (which skips the clone and focus change so older
131
+ * bug-affected templates can self-repair without disturbing the user's
132
+ * current selection, and queues the arrival refresh for the new id).
115
133
  */
116
134
  private _reassignDuplicateId;
117
135
  /**
@@ -3,35 +3,49 @@
3
3
  *
4
4
  * Controls for styling the product image element in recommendation cards.
5
5
  */
6
+ import type { CssNodeModifier, HtmlNodeModifier, ImmutableCssNode, ImmutableHtmlNode, TemplateModifier } from '@stripoinc/ui-editor-extensions';
7
+ import { ModificationDescription } from '@stripoinc/ui-editor-extensions';
8
+ interface FitRuleApi {
9
+ getDocumentRootCssNode: () => ImmutableCssNode | null;
10
+ getDocumentModifier: () => TemplateModifier<HtmlNodeModifier, CssNodeModifier>;
11
+ }
12
+ export declare function ensureMobileFitRule(api: FitRuleApi, block: ImmutableHtmlNode): void;
13
+ export declare function syncHeightBound(api: Pick<FitRuleApi, 'getDocumentModifier'>, block: ImmutableHtmlNode): void;
14
+ declare const SizeControl_base: {
15
+ new (): {
16
+ getId(): string;
17
+ getTargetNodes(root: ImmutableHtmlNode): ImmutableHtmlNode[];
18
+ getParentControlId(): string;
19
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
20
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
21
+ getModificationDescription(): ModificationDescription | undefined;
22
+ getAdditionalModifications(_root: ImmutableHtmlNode): TemplateModifier<HtmlNodeModifier, CssNodeModifier> | undefined;
23
+ isVisible(_node: ImmutableHtmlNode): boolean;
24
+ getElementLockCategory(): import("@stripoinc/ui-editor-extensions").ElementLockCategory | undefined;
25
+ };
26
+ };
27
+ declare class SizeControl extends SizeControl_base {
28
+ getAdditionalModifications(root: ImmutableHtmlNode): TemplateModifier<HtmlNodeModifier, CssNodeModifier> | undefined;
29
+ private getFitStyles;
30
+ }
6
31
  /**
7
32
  * Grouped Image Controls
8
33
  * Use this object for cleaner imports in extension.ts
9
34
  */
10
35
  export declare const ImageControls: {
11
- readonly size: {
12
- new (): {
13
- getId(): string;
14
- getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
15
- getParentControlId(): string;
16
- api: import("@stripoinc/ui-editor-extensions").ControlApi;
17
- getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
18
- getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
19
- getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
20
- isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
21
- getElementLockCategory(): import("@stripoinc/ui-editor-extensions").ElementLockCategory | undefined;
22
- };
23
- };
36
+ readonly size: typeof SizeControl;
24
37
  readonly margins: {
25
38
  new (): {
26
39
  getId(): string;
27
- getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
40
+ getTargetNodes(root: ImmutableHtmlNode): ImmutableHtmlNode[];
28
41
  getParentControlId(): string;
29
42
  api: import("@stripoinc/ui-editor-extensions").ControlApi;
30
43
  getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
31
- getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
32
- getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
33
- isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
44
+ getModificationDescription(): ModificationDescription | undefined;
45
+ getAdditionalModifications(_root: ImmutableHtmlNode): TemplateModifier<HtmlNodeModifier, CssNodeModifier> | undefined;
46
+ isVisible(_node: ImmutableHtmlNode): boolean;
34
47
  getElementLockCategory(): import("@stripoinc/ui-editor-extensions").ElementLockCategory | undefined;
35
48
  };
36
49
  };
37
50
  };
51
+ export {};
@@ -1,10 +1,21 @@
1
1
  import type { RecommendationNodeConfig } from '../types/nodeConfig';
2
+ /** A saved module keeps the id it was saved with, so it can arrive sharing the id of an unrelated block. */
3
+ export declare function resolveSourceConfig(sourceId: number, arrived: RecommendationNodeConfig): RecommendationNodeConfig;
2
4
  /**
3
5
  * Re-reads the strategy of a duplicated block and its source and redraws both: the clone copies the
4
6
  * cards the source last drew, so a strategy edited since then only reached a block once selected (SD-153266).
5
7
  * @param config - the arriving block's persisted config; seeds either block its store entry does not match
6
8
  */
7
9
  export declare function refreshDuplicatedStrategyBlocks(sourceId: number, duplicateId: number, config: RecommendationNodeConfig): Promise<void>;
10
+ /**
11
+ * Re-reads the strategy of blocks that arrived from a saved template or module, so the panel and
12
+ * preview show a strategy edited since the design was saved without selecting the block.
13
+ * @param blocks - each block's id with its persisted config, the truth its store entry is seeded from
14
+ */
15
+ export declare function refreshArrivedStrategyBlocks(blocks: {
16
+ id: number;
17
+ config: RecommendationNodeConfig;
18
+ }[]): Promise<void>;
8
19
  /**
9
20
  * Writes a strategy change and its products straight to the document, without the settings panel.
10
21
  *
@@ -9,76 +9,4 @@ export declare const useAutosaveStore: import("pinia").StoreDefinition<"guidoAut
9
9
  isOn: boolean;
10
10
  lastSavedAt: Date | null;
11
11
  status: AutosaveStatus;
12
- }, {
13
- hasStatusLabel: (state: {
14
- isOn: boolean;
15
- lastSavedAt: {
16
- toString: () => string;
17
- toDateString: () => string;
18
- toTimeString: () => string;
19
- toLocaleString: {
20
- (): string;
21
- (locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;
22
- (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
23
- };
24
- toLocaleDateString: {
25
- (): string;
26
- (locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;
27
- (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
28
- };
29
- toLocaleTimeString: {
30
- (): string;
31
- (locales?: string | string[], options?: Intl.DateTimeFormatOptions): string;
32
- (locales?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions): string;
33
- };
34
- valueOf: () => number;
35
- getTime: () => number;
36
- getFullYear: () => number;
37
- getUTCFullYear: () => number;
38
- getMonth: () => number;
39
- getUTCMonth: () => number;
40
- getDate: () => number;
41
- getUTCDate: () => number;
42
- getDay: () => number;
43
- getUTCDay: () => number;
44
- getHours: () => number;
45
- getUTCHours: () => number;
46
- getMinutes: () => number;
47
- getUTCMinutes: () => number;
48
- getSeconds: () => number;
49
- getUTCSeconds: () => number;
50
- getMilliseconds: () => number;
51
- getUTCMilliseconds: () => number;
52
- getTimezoneOffset: () => number;
53
- setTime: (time: number) => number;
54
- setMilliseconds: (ms: number) => number;
55
- setUTCMilliseconds: (ms: number) => number;
56
- setSeconds: (sec: number, ms?: number) => number;
57
- setUTCSeconds: (sec: number, ms?: number) => number;
58
- setMinutes: (min: number, sec?: number, ms?: number) => number;
59
- setUTCMinutes: (min: number, sec?: number, ms?: number) => number;
60
- setHours: (hours: number, min?: number, sec?: number, ms?: number) => number;
61
- setUTCHours: (hours: number, min?: number, sec?: number, ms?: number) => number;
62
- setDate: (date: number) => number;
63
- setUTCDate: (date: number) => number;
64
- setMonth: (month: number, date?: number) => number;
65
- setUTCMonth: (month: number, date?: number) => number;
66
- setFullYear: (year: number, month?: number, date?: number) => number;
67
- setUTCFullYear: (year: number, month?: number, date?: number) => number;
68
- toUTCString: () => string;
69
- toISOString: () => string;
70
- toJSON: (key?: any) => string;
71
- [Symbol.toPrimitive]: {
72
- (hint: "default"): string;
73
- (hint: "string"): string;
74
- (hint: "number"): number;
75
- (hint: string): string | number;
76
- };
77
- } | null;
78
- status: AutosaveStatus;
79
- } & import("pinia").PiniaCustomStateProperties<{
80
- isOn: boolean;
81
- lastSavedAt: Date | null;
82
- status: AutosaveStatus;
83
- }>) => boolean;
84
- }, {}>;
12
+ }, {}, {}>;