@useinsider/guido 1.0.3-beta.99394e8 → 1.0.3-beta.9d0ef3f

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 (162) hide show
  1. package/README.md +3 -0
  2. package/dist/components/Guido.vue.js +1 -1
  3. package/dist/components/Guido.vue2.js +49 -48
  4. package/dist/components/organisms/onboarding/ItemsOnboarding.vue.js +21 -0
  5. package/dist/components/organisms/onboarding/ItemsOnboarding.vue2.js +99 -0
  6. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -18
  7. package/dist/composables/useActionsApi.js +33 -24
  8. package/dist/composables/useBlocksConfig.js +1 -2
  9. package/dist/composables/useHtmlCompiler.js +15 -13
  10. package/dist/composables/useHtmlValidator.js +36 -35
  11. package/dist/composables/useStripo.js +48 -46
  12. package/dist/composables/useTimerClone.js +52 -0
  13. package/dist/config/compiler/itemsCompilerRules.js +14 -0
  14. package/dist/enums/extensions/recommendationBlock.js +2 -2
  15. package/dist/enums/onboarding.js +7 -3
  16. package/dist/extensions/Blocks/Checkbox/block.js +5 -2
  17. package/dist/extensions/Blocks/Checkbox/control.js +15 -14
  18. package/dist/extensions/Blocks/Checkbox/template.js +14 -9
  19. package/dist/extensions/Blocks/Items/block.js +67 -0
  20. package/dist/extensions/Blocks/Items/controls/button/link.js +68 -0
  21. package/dist/extensions/Blocks/Items/controls/cardComposition.js +193 -0
  22. package/dist/extensions/Blocks/Items/controls/image/link.js +68 -0
  23. package/dist/extensions/Blocks/Items/controls/index.js +217 -0
  24. package/dist/extensions/Blocks/Items/controls/name/trimming.js +70 -0
  25. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +107 -0
  26. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +123 -0
  27. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +76 -0
  28. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +61 -0
  29. package/dist/extensions/Blocks/Items/controls/settingsControl.js +312 -0
  30. package/dist/extensions/Blocks/Items/enums/controlEnums.js +5 -0
  31. package/dist/extensions/Blocks/Items/enums/productEnums.js +273 -0
  32. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +76 -0
  33. package/dist/extensions/Blocks/Items/extension.js +19 -0
  34. package/dist/extensions/Blocks/Items/iconsRegistry.js +32 -0
  35. package/dist/extensions/Blocks/Items/items.css.js +23 -0
  36. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +62 -0
  37. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +60 -0
  38. package/dist/extensions/Blocks/Items/settingsPanel.js +131 -0
  39. package/dist/extensions/Blocks/Items/store/items-block.js +71 -0
  40. package/dist/extensions/Blocks/Items/template.js +189 -0
  41. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +17 -0
  42. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +28 -0
  43. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +67 -0
  44. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +44 -0
  45. package/dist/extensions/Blocks/RadioButton/block.js +5 -2
  46. package/dist/extensions/Blocks/RadioButton/control.js +18 -17
  47. package/dist/extensions/Blocks/RadioButton/template.js +18 -9
  48. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +43 -43
  49. package/dist/extensions/Blocks/Unsubscribe/block.js +27 -27
  50. package/dist/extensions/Blocks/common-control.js +174 -110
  51. package/dist/extensions/Blocks/controlFactories.js +223 -0
  52. package/dist/guido.css +1 -1
  53. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +81 -74
  54. package/dist/node_modules/lodash-es/_DataView.js +6 -0
  55. package/dist/node_modules/lodash-es/_Promise.js +6 -0
  56. package/dist/node_modules/lodash-es/_Set.js +6 -0
  57. package/dist/node_modules/lodash-es/_SetCache.js +13 -0
  58. package/dist/node_modules/lodash-es/_WeakMap.js +6 -0
  59. package/dist/node_modules/lodash-es/_arrayFilter.js +10 -0
  60. package/dist/node_modules/lodash-es/_arrayLikeKeys.js +13 -12
  61. package/dist/node_modules/lodash-es/_arrayMap.js +8 -0
  62. package/dist/node_modules/lodash-es/_arrayPush.js +8 -0
  63. package/dist/node_modules/lodash-es/_arraySome.js +9 -0
  64. package/dist/node_modules/lodash-es/_baseEach.js +6 -0
  65. package/dist/node_modules/lodash-es/_baseFlatten.js +13 -0
  66. package/dist/node_modules/lodash-es/_baseForOwn.js +8 -0
  67. package/dist/node_modules/lodash-es/_baseGet.js +11 -0
  68. package/dist/node_modules/lodash-es/_baseGetAllKeys.js +9 -0
  69. package/dist/node_modules/lodash-es/_baseHasIn.js +6 -0
  70. package/dist/node_modules/lodash-es/_baseIsEqual.js +8 -0
  71. package/dist/node_modules/lodash-es/_baseIsEqualDeep.js +32 -0
  72. package/dist/node_modules/lodash-es/_baseIsMatch.js +29 -0
  73. package/dist/node_modules/lodash-es/_baseIteratee.js +11 -0
  74. package/dist/node_modules/lodash-es/_baseKeys.js +14 -0
  75. package/dist/node_modules/lodash-es/_baseMap.js +11 -0
  76. package/dist/node_modules/lodash-es/_baseMatches.js +12 -0
  77. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +17 -0
  78. package/dist/node_modules/lodash-es/_baseProperty.js +8 -0
  79. package/dist/node_modules/lodash-es/_basePropertyDeep.js +9 -0
  80. package/dist/node_modules/lodash-es/_baseRange.js +9 -0
  81. package/dist/node_modules/lodash-es/_baseToString.js +18 -0
  82. package/dist/node_modules/lodash-es/_baseTrim.js +8 -0
  83. package/dist/node_modules/lodash-es/_cacheHas.js +6 -0
  84. package/dist/node_modules/lodash-es/_castPath.js +10 -0
  85. package/dist/node_modules/lodash-es/_createBaseEach.js +15 -0
  86. package/dist/node_modules/lodash-es/_createRange.js +11 -0
  87. package/dist/node_modules/lodash-es/_equalArrays.js +40 -0
  88. package/dist/node_modules/lodash-es/_equalByTag.js +45 -0
  89. package/dist/node_modules/lodash-es/_equalObjects.js +36 -0
  90. package/dist/node_modules/lodash-es/_getAllKeys.js +9 -0
  91. package/dist/node_modules/lodash-es/_getMatchData.js +12 -0
  92. package/dist/node_modules/lodash-es/_getSymbols.js +10 -0
  93. package/dist/node_modules/lodash-es/_getTag.js +28 -0
  94. package/dist/node_modules/lodash-es/_hasPath.js +19 -0
  95. package/dist/node_modules/lodash-es/_isFlattenable.js +10 -0
  96. package/dist/node_modules/lodash-es/_isKey.js +12 -0
  97. package/dist/node_modules/lodash-es/_isStrictComparable.js +7 -0
  98. package/dist/node_modules/lodash-es/_mapToArray.js +9 -0
  99. package/dist/node_modules/lodash-es/_matchesStrictComparable.js +8 -0
  100. package/dist/node_modules/lodash-es/_memoizeCapped.js +11 -0
  101. package/dist/node_modules/lodash-es/_nativeKeys.js +5 -0
  102. package/dist/node_modules/lodash-es/_setCacheAdd.js +7 -0
  103. package/dist/node_modules/lodash-es/_setCacheHas.js +6 -0
  104. package/dist/node_modules/lodash-es/_setToArray.js +9 -0
  105. package/dist/node_modules/lodash-es/_stringToPath.js +10 -0
  106. package/dist/node_modules/lodash-es/_toKey.js +10 -0
  107. package/dist/node_modules/lodash-es/_trimmedEndIndex.js +9 -0
  108. package/dist/node_modules/lodash-es/flatMap.js +8 -0
  109. package/dist/node_modules/lodash-es/get.js +8 -0
  110. package/dist/node_modules/lodash-es/hasIn.js +8 -0
  111. package/dist/node_modules/lodash-es/isSymbol.js +9 -0
  112. package/dist/node_modules/lodash-es/keys.js +9 -0
  113. package/dist/node_modules/lodash-es/keysIn.js +3 -3
  114. package/dist/node_modules/lodash-es/map.js +11 -0
  115. package/dist/node_modules/lodash-es/property.js +10 -0
  116. package/dist/node_modules/lodash-es/range.js +5 -0
  117. package/dist/node_modules/lodash-es/stubArray.js +6 -0
  118. package/dist/node_modules/lodash-es/toFinite.js +14 -0
  119. package/dist/node_modules/lodash-es/toNumber.js +22 -0
  120. package/dist/node_modules/lodash-es/toString.js +7 -0
  121. package/dist/services/recommendationApi.js +13 -19
  122. package/dist/src/components/organisms/onboarding/ItemsOnboarding.vue.d.ts +2 -0
  123. package/dist/src/composables/useActionsApi.d.ts +1 -0
  124. package/dist/src/composables/useTimerClone.d.ts +6 -0
  125. package/dist/src/config/compiler/itemsCompilerRules.d.ts +2 -0
  126. package/dist/src/enums/onboarding.d.ts +4 -0
  127. package/dist/src/extensions/Blocks/Checkbox/block.d.ts +1 -0
  128. package/dist/src/extensions/Blocks/Checkbox/template.d.ts +1 -1
  129. package/dist/src/extensions/Blocks/Items/block.d.ts +27 -0
  130. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +14 -0
  131. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +33 -0
  132. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +14 -0
  133. package/dist/src/extensions/Blocks/Items/controls/index.d.ts +501 -0
  134. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +14 -0
  135. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +19 -0
  136. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +21 -0
  137. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +14 -0
  138. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +13 -0
  139. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +48 -0
  140. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +61 -0
  141. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +162 -0
  142. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +49 -0
  143. package/dist/src/extensions/Blocks/Items/extension.d.ts +2 -0
  144. package/dist/src/extensions/Blocks/Items/iconsRegistry.d.ts +4 -0
  145. package/dist/src/extensions/Blocks/Items/settingsPanel.d.ts +4 -0
  146. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +41 -0
  147. package/dist/src/extensions/Blocks/Items/template.d.ts +24 -0
  148. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +23 -0
  149. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +32 -0
  150. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +44 -0
  151. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +8 -0
  152. package/dist/src/extensions/Blocks/RadioButton/block.d.ts +1 -0
  153. package/dist/src/extensions/Blocks/RadioButton/template.d.ts +1 -1
  154. package/dist/src/extensions/Blocks/common-control.d.ts +44 -7
  155. package/dist/src/extensions/Blocks/controlFactories.d.ts +312 -0
  156. package/dist/src/stores/onboarding.d.ts +334 -0
  157. package/dist/src/utils/pairProductVariables.d.ts +7 -0
  158. package/dist/static/styles/customEditorStyle.css.js +1 -1
  159. package/dist/stores/onboarding.js +20 -12
  160. package/dist/utils/genericUtil.js +16 -17
  161. package/dist/utils/pairProductVariables.js +136 -0
  162. package/package.json +1 -1
@@ -1,18 +1,19 @@
1
- import { useConfig as H } from "./useConfig.js";
2
- import { TemplateTypes as V } from "../enums/defaults.js";
3
- import { DISPLAY_CONDITIONS_REGEX as D, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as P, CampaignCouldNotBeSavedKey as R, CanNotMakeAnyChangesForRunningKey as _ } from "../enums/html-validator.js";
1
+ import { useConfig as V } from "./useConfig.js";
2
+ import { TemplateTypes as D } from "../enums/defaults.js";
3
+ import { DISPLAY_CONDITIONS_REGEX as H, DISPLAY_CONDITIONS_EXCEPTIONS_REGEX as P, CampaignCouldNotBeSavedKey as R, CanNotMakeAnyChangesForRunningKey as _ } from "../enums/html-validator.js";
4
4
  import { ToasterTypeOptions as l } from "../enums/toaster.js";
5
- import { useRecommendationStore as G } from "../stores/recommendation.js";
6
- import { base64EncodeWithSpecialChars as $ } from "../utils/base64.js";
7
- import { useHttp as j } from "./useHttp.js";
8
- import { useToaster as q } from "./useToaster.js";
9
- import { useTranslations as M } from "./useTranslations.js";
10
- const se = () => {
5
+ import { itemsBlockDynamicVariables as G } from "../extensions/Blocks/Items/enums/productEnums.js";
6
+ import { useRecommendationStore as $ } from "../stores/recommendation.js";
7
+ import { base64EncodeWithSpecialChars as j } from "../utils/base64.js";
8
+ import { useHttp as q } from "./useHttp.js";
9
+ import { useToaster as M } from "./useToaster.js";
10
+ import { useTranslations as X } from "./useTranslations.js";
11
+ const ie = () => {
11
12
  var d;
12
- const { showToaster: c } = q(), { post: y } = j(), { config: h } = H(), a = M(), m = G(), u = ((d = h.partner) == null ? void 0 : d.messageType) === V.transactional, v = async (e) => {
13
+ const { showToaster: c } = M(), { post: y } = q(), { config: h } = V(), a = X(), m = $(), u = ((d = h.partner) == null ? void 0 : d.messageType) === D.transactional, v = async (e) => {
13
14
  const t = await y(
14
15
  "/newsletter/template-library/check-template-html-body",
15
- { html: $(e) }
16
+ { html: j(e) }
16
17
  ), { status: n, message: r } = t.data;
17
18
  return n || c({
18
19
  type: l.Alert,
@@ -25,10 +26,10 @@ const se = () => {
25
26
  const t = e.match(/({%(.*?)%})/g);
26
27
  let n = !0;
27
28
  return t !== null && !u && t.forEach((r) => {
28
- const o = r.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
29
- if (o && o.length > 0) {
30
- const [i] = o;
31
- C(i) && !s.includes(i) && (c({
29
+ const i = r.slice(2, -2).trim().match(/(".*?"|[^"\s]+)(?=\s*|\s*$)/g);
30
+ if (i && i.length > 0) {
31
+ const [o] = i;
32
+ C(o) && !s.includes(o) && (c({
32
33
  type: l.Warning,
33
34
  message: a("custom-fields.invalid-custom-fields")
34
35
  }), n = !1);
@@ -58,19 +59,19 @@ const se = () => {
58
59
  }, k = (e, s) => {
59
60
  const t = e.match(/{{([a-zA-Z0-9_\s]*)}}/gm);
60
61
  if (t && !u) {
61
- const n = new Set(s.map((o) => o.toLowerCase())), r = [];
62
- if (t.forEach((o) => {
63
- const i = o.slice(2, -2).trim().toLowerCase();
64
- (!n.has(i) || i === "") && r.push(i);
62
+ const n = new Set(s.map((i) => i.toLowerCase())), r = [];
63
+ if (t.forEach((i) => {
64
+ const o = i.slice(2, -2).trim().toLowerCase();
65
+ (!n.has(o) || o === "") && r.push(o);
65
66
  }), r.length > 0) {
66
- const o = `
67
+ const i = `
67
68
  <ul>
68
- ${r.map((i) => `<li>${i}</li>`).join("")}
69
+ ${r.map((o) => `<li>${o}</li>`).join("")}
69
70
  </ul>
70
71
  `;
71
72
  return c({
72
73
  type: l.Alert,
73
- message: a("custom-fields.invalid-custom-fields") + o
74
+ message: a("custom-fields.invalid-custom-fields") + i
74
75
  }), !1;
75
76
  }
76
77
  }
@@ -79,11 +80,11 @@ const se = () => {
79
80
  const s = e.match(/{%(.*?)%}/g), t = [];
80
81
  let n = !0;
81
82
  if (s && s.forEach((r) => {
82
- const o = r.match(D), i = r.match(P), B = (o == null ? void 0 : o.join("")) || "";
83
- (!o || r !== B) && !i && (c({
83
+ const i = r.match(H), o = r.match(P), B = (i == null ? void 0 : i.join("")) || "";
84
+ (!i || r !== B) && !o && (c({
84
85
  type: l.Alert,
85
86
  message: a("newsletter.display-conditions-invalid-syntax")
86
- }), n = !1), o && o.forEach((f) => {
87
+ }), n = !1), i && i.forEach((f) => {
87
88
  f.trim() === "=" && (c({
88
89
  type: l.Alert,
89
90
  message: a("custom-conditions.wrong-equality-operators")
@@ -94,8 +95,8 @@ const se = () => {
94
95
  });
95
96
  });
96
97
  }), t.length) {
97
- const r = t.filter((i) => i === "if"), o = t.filter((i) => i === "endif");
98
- r.length !== o.length && (c({
98
+ const r = t.filter((o) => o === "if"), i = t.filter((o) => o === "endif");
99
+ r.length !== i.length && (c({
99
100
  type: l.Alert,
100
101
  message: a("custom-conditions.missing-if-endif-tag")
101
102
  }), n = !1);
@@ -121,28 +122,28 @@ const se = () => {
121
122
  }), !1);
122
123
  }, N = (e) => {
123
124
  const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".checkbox-block-v2");
124
- return Array.from(n).find((o) => {
125
- var i;
126
- return !((i = o.id) != null && i.trim());
125
+ return Array.from(n).find((i) => {
126
+ var o;
127
+ return !((o = i.id) != null && o.trim());
127
128
  }) ? (c({
128
129
  type: l.Alert,
129
130
  message: a("unsubscribe-templates.select-checkbox-groups")
130
131
  }), !1) : !0;
131
132
  }, O = (e) => {
132
133
  const n = new DOMParser().parseFromString(e, "text/html").querySelectorAll(".radio-button-v2");
133
- return Array.from(n).find((o) => {
134
- var i;
135
- return !((i = o.id) != null && i.trim());
134
+ return Array.from(n).find((i) => {
135
+ var o;
136
+ return !((o = i.id) != null && o.trim());
136
137
  }) ? (c({
137
138
  type: l.Alert,
138
139
  message: a("unsubscribe-templates.select-radio-button-groups")
139
140
  }), !1) : !0;
140
141
  };
141
142
  return { validateHtml: async (e, s, t = !1) => {
142
- const n = s.map((o) => o.value);
143
+ const n = [...s.map((i) => i.value), ...G];
143
144
  return await b(e, n, t) && E(e) && A(e) && x(e) && k(e, n) && T(e) && F(e) && I(e) && W() && L(e) && N(e) && O(e);
144
145
  } };
145
146
  };
146
147
  export {
147
- se as useHtmlValidator
148
+ ie as useHtmlValidator
148
149
  };
@@ -1,25 +1,26 @@
1
- import { useActionsApi as w } from "./useActionsApi.js";
2
- import { useBlocksConfig as b } from "./useBlocksConfig.js";
3
- import { useConfig as k } from "./useConfig.js";
4
- import { useCustomInterfaceAppearance as V } from "./useCustomInterfaceAppearance.js";
5
- import { useStripoEventHandler as _ } from "./useStripoEventHandler.js";
6
- import { useToaster as B } from "./useToaster.js";
7
- import { displayConditions as T } from "../enums/displayConditions.js";
8
- import { useStripoApi as A } from "../services/stripoApi.js";
9
- import F from "../static/styles/customEditorStyle.css.js";
10
- import { useEditorStore as M } from "../stores/editor.js";
11
- import { dynamicContentToMergeTags as U } from "../utils/genericUtil.js";
12
- import v from "../package.json.js";
13
- const J = (c) => {
14
- const { config: u } = k(), { handleError: l } = B(), { getToken: f, getCustomFonts: y } = A(), { handleEvent: S } = _(), { getStripoBlocksConfig: C } = b(), E = async (i, r = []) => {
15
- var m, g;
16
- const t = M(), { html: n, css: p, forceRecreate: a } = i, { baseBlocks: e, extensions: d } = await C();
1
+ import { useActionsApi as V } from "./useActionsApi.js";
2
+ import { useBlocksConfig as _ } from "./useBlocksConfig.js";
3
+ import { useConfig as A } from "./useConfig.js";
4
+ import { useCustomInterfaceAppearance as B } from "./useCustomInterfaceAppearance.js";
5
+ import { useStripoEventHandler as v } from "./useStripoEventHandler.js";
6
+ import { useTimerClone as F } from "./useTimerClone.js";
7
+ import { useToaster as I } from "./useToaster.js";
8
+ import { displayConditions as M } from "../enums/displayConditions.js";
9
+ import { useStripoApi as U } from "../services/stripoApi.js";
10
+ import D from "../static/styles/customEditorStyle.css.js";
11
+ import { useEditorStore as P } from "../stores/editor.js";
12
+ import { dynamicContentToMergeTags as H } from "../utils/genericUtil.js";
13
+ import O from "../package.json.js";
14
+ const Y = (c) => {
15
+ const { config: u } = A(), { handleError: p } = I(), { getToken: m, getCustomFonts: C } = U(), { handleEvent: S } = v(), { getStripoBlocksConfig: E } = _(), w = async (i, r = []) => {
16
+ var g, y;
17
+ const e = P(), { html: s, css: f, forceRecreate: a } = i, { baseBlocks: t, extensions: d } = await E();
17
18
  window.UIEditor.initEditor(
18
19
  document.querySelector("#guido-editor"),
19
20
  {
20
21
  metadata: c,
21
- html: n,
22
- css: p,
22
+ html: s,
23
+ css: f,
23
24
  forceRecreate: a,
24
25
  locale: "en",
25
26
  undoButtonSelector: "#guido__undo-button",
@@ -30,10 +31,10 @@ const J = (c) => {
30
31
  customAppearanceMergetags: !0,
31
32
  customAppearanceMergetagsBorderColor: "#f1f3fe",
32
33
  customAppearanceMergetagsBackgroundColor: "#f1f3fe",
33
- customViewStyles: F,
34
- conditionsEnabled: ((m = u.features) == null ? void 0 : m.displayConditions) ?? !0,
35
- customConditionsEnabled: ((g = u.features) == null ? void 0 : g.displayConditions) ?? !0,
36
- conditionCategories: T,
34
+ customViewStyles: D,
35
+ conditionsEnabled: ((g = u.features) == null ? void 0 : g.displayConditions) ?? !0,
36
+ customConditionsEnabled: ((y = u.features) == null ? void 0 : y.displayConditions) ?? !0,
37
+ conditionCategories: M,
37
38
  enableXSSSecurity: !0,
38
39
  messageSettingsEnabled: !0,
39
40
  displayGmailAnnotations: !0,
@@ -41,7 +42,7 @@ const J = (c) => {
41
42
  displayTitle: !1,
42
43
  displayUTM: !1,
43
44
  selectElementAfterDrop: !0,
44
- ...e ? { baseBlocks: e } : {},
45
+ ...t ? { baseBlocks: t } : {},
45
46
  editorFonts: {
46
47
  showDefaultStandardFonts: !0,
47
48
  showDefaultNotStandardFonts: !0,
@@ -49,38 +50,39 @@ const J = (c) => {
49
50
  },
50
51
  mergeTags: [
51
52
  {
52
- entries: U(c.preselectedDynamicContentList)
53
+ entries: H(c.preselectedDynamicContentList)
53
54
  }
54
55
  ],
55
56
  async onTokenRefreshRequest(o) {
56
57
  try {
57
- const s = await f();
58
- o(s);
59
- } catch (s) {
60
- l(s, "Failed to refresh token");
58
+ const n = await m();
59
+ o(n);
60
+ } catch (n) {
61
+ p(n, "Failed to refresh token");
61
62
  }
62
63
  },
63
64
  onTemplateLoaded() {
65
+ var o, n;
64
66
  try {
65
- const { importCss: o } = V(), { activateCustomViewStyles: s } = w();
66
- o(), s(), c.onReady(), t.isStripoInitialized = !0, t.loadingStatus = !1, setTimeout(() => {
67
- t.hasChanges = !1;
67
+ const { importCss: l } = B(), { activateCustomViewStyles: T, updateTimerInClonedTemplate: b } = V(), { updateTimersOnLoad: k } = F();
68
+ l(), T(), typeof ((n = (o = window.StripoEditorApi) == null ? void 0 : o.actionsApi) == null ? void 0 : n.updateTimerInClonedTemplate) == "function" ? b() : k(m), c.onReady(), e.isStripoInitialized = !0, e.loadingStatus = !1, setTimeout(() => {
69
+ e.hasChanges = !1;
68
70
  }, 1e3);
69
- } catch (o) {
70
- l(o, "Failed to load custom interface appearance");
71
+ } catch (l) {
72
+ p(l, "Failed to load custom interface appearance");
71
73
  }
72
74
  },
73
75
  onCodeEditorVisibilityChanged(o) {
74
- t.isCodeEditorOpen = o;
76
+ e.isCodeEditorOpen = o;
75
77
  },
76
78
  onEditorVisualModeChanged(o) {
77
- t.editorVisualMode = o.toLowerCase();
79
+ e.editorVisualMode = o.toLowerCase();
78
80
  },
79
81
  onVersionHistoryVisibilityChanged(o) {
80
- t.isVersionHistoryOpen = o;
82
+ e.isVersionHistoryOpen = o;
81
83
  },
82
84
  onDataChanged() {
83
- t.hasChanges = !0;
85
+ e.hasChanges = !0;
84
86
  },
85
87
  onEvent: S,
86
88
  ignoreClickOutsideSelectors: [
@@ -91,26 +93,26 @@ const J = (c) => {
91
93
  extensions: d
92
94
  }
93
95
  );
94
- }, h = (i) => new Promise((r, t) => {
96
+ }, h = (i) => new Promise((r, e) => {
95
97
  var d;
96
98
  if (document.getElementById("UiEditorScript")) {
97
99
  i(), r();
98
100
  return;
99
101
  }
100
- const n = v.guido, a = `https://email-static.useinsider.com/guido/${(d = n == null ? void 0 : n.stripo) == null ? void 0 : d.version}/UIEditor.js`, e = document.createElement("script");
101
- e.id = "UiEditorScript", e.type = "module", e.src = a, e.onload = () => {
102
+ const s = O.guido, a = `https://email-static.useinsider.com/guido/${(d = s == null ? void 0 : s.stripo) == null ? void 0 : d.version}/UIEditor.js`, t = document.createElement("script");
103
+ t.id = "UiEditorScript", t.type = "module", t.src = a, t.onload = () => {
102
104
  i(), r();
103
- }, e.onerror = () => {
104
- t(new Error(`Failed to load Stripo UIEditor script from S3: ${a}`));
105
- }, document.body.appendChild(e);
105
+ }, t.onerror = () => {
106
+ e(new Error(`Failed to load Stripo UIEditor script from S3: ${a}`));
107
+ }, document.body.appendChild(t);
106
108
  });
107
109
  return { initPlugin: async (i) => {
108
110
  await h(async () => {
109
- const r = await y();
110
- await E(i, r);
111
+ const r = await C();
112
+ await w(i, r);
111
113
  });
112
114
  } };
113
115
  };
114
116
  export {
115
- J as useStripo
117
+ Y as useStripo
116
118
  };
@@ -0,0 +1,52 @@
1
+ import { useToaster as T } from "./useToaster.js";
2
+ import { useStripoApi as f } from "../services/stripoApi.js";
3
+ const E = () => {
4
+ const { handleError: c } = T(), { getToken: l } = f(), s = (t) => /esd-timer-id="(\d+)"/.test(t), i = async (t, e) => {
5
+ try {
6
+ const r = await fetch("https://plugins.stripo.email/api/v1/timers/clone", {
7
+ method: "POST",
8
+ headers: {
9
+ "ES-PLUGIN-AUTH": `Bearer ${e}`,
10
+ "Content-Type": "application/json"
11
+ },
12
+ body: JSON.stringify({ html: t })
13
+ });
14
+ if (!r.ok)
15
+ throw new Error(`Stripo API error: ${r.status} ${r.statusText}`);
16
+ return (await r.json()).html;
17
+ } catch (r) {
18
+ return c(r, "Failed to clone timer IDs"), null;
19
+ }
20
+ };
21
+ return {
22
+ hasTimerBlocks: s,
23
+ cloneTimersInHtml: i,
24
+ cloneTimersOnSave: async (t) => {
25
+ if (!s(t))
26
+ return t;
27
+ const e = await l();
28
+ return e && await i(t, e) || t;
29
+ },
30
+ updateTimersOnLoad: async (t) => {
31
+ var e, r, n, d, p, u;
32
+ try {
33
+ const o = (r = (e = window.UIEditor) == null ? void 0 : e.getHtml) == null ? void 0 : r.call(e);
34
+ if (!o || !s(o))
35
+ return;
36
+ const m = await t();
37
+ if (!m)
38
+ return;
39
+ const a = await i(o, m);
40
+ if (!a || a === o)
41
+ return;
42
+ const w = ((d = (n = window.UIEditor) == null ? void 0 : n.getCss) == null ? void 0 : d.call(n)) || "";
43
+ (u = (p = window.StripoEditorApi) == null ? void 0 : p.actionsApi) != null && u.updateHtmlAndCss && window.StripoEditorApi.actionsApi.updateHtmlAndCss(a, w);
44
+ } catch (o) {
45
+ c(o, "Failed to update timer blocks");
46
+ }
47
+ }
48
+ };
49
+ };
50
+ export {
51
+ E as useTimerClone
52
+ };
@@ -0,0 +1,14 @@
1
+ import { pairProductVariables as r } from "../../utils/pairProductVariables.js";
2
+ const t = [
3
+ {
4
+ id: "pair-product-variables",
5
+ description: "Replace product default values with template variables",
6
+ type: "custom",
7
+ processor: r,
8
+ priority: 60
9
+ // After recommendation rules (priority 50-53)
10
+ }
11
+ ];
12
+ export {
13
+ t as itemsCompilerRules
14
+ };
@@ -12,8 +12,8 @@ const s = {
12
12
  { id: 61, key: "mostPopular", name: "Most Popular Items", path: "most-popular" },
13
13
  { id: 62, key: "mostPurchased", name: "Top Sellers", path: "top-sellers" }
14
14
  ], u = ["discount", "omnibus_price", "omnibus_discount", "price", "original_price"], l = [
15
- { text: "after the amount", value: "1" },
16
- { text: "before the amount", value: "0" }
15
+ { text: "before the amount", value: "0" },
16
+ { text: "after the amount", value: "1" }
17
17
  ], c = [
18
18
  { text: "dot(.)", value: "." },
19
19
  { text: "comma(,)", value: "," }
@@ -2,8 +2,12 @@ const e = [
2
2
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-0.ng-star-inserted",
3
3
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-1.ng-star-inserted",
4
4
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-2.ng-star-inserted"
5
- ], t = "https://academy.useinsider.com/docs/email-drag-drop-editor";
5
+ ], t = "ui-editor", n = 'button[role="tab"][aria-label="Card Composition"]', s = 'button[role="tab"][aria-label="Settings"]', o = ".in-ribbons-wrapper", a = "https://academy.useinsider.com/docs/email-drag-drop-editor";
6
6
  export {
7
- t as ACADEMY_LINK,
8
- e as SERVICE_HOVER_SELECTORS
7
+ a as ACADEMY_LINK,
8
+ n as CARD_COMPOSITION_TAB_SELECTOR,
9
+ o as RIBBON_SELECTOR,
10
+ e as SERVICE_HOVER_SELECTORS,
11
+ s as SETTINGS_TAB_SELECTOR,
12
+ t as UI_EDITOR_SELECTOR
9
13
  };
@@ -1,7 +1,7 @@
1
1
  import { Block as e, BlockCompositionType as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
2
  import { getDefaultTemplate as o } from "./template.js";
3
3
  const r = "checkbox-block";
4
- class p extends e {
4
+ class s extends e {
5
5
  constructor() {
6
6
  super();
7
7
  }
@@ -23,8 +23,11 @@ class p extends e {
23
23
  getTemplate() {
24
24
  return o();
25
25
  }
26
+ allowInnerBlocksDND() {
27
+ return !1;
28
+ }
26
29
  }
27
30
  export {
28
31
  r as CHECKBOX_BLOCK_ID,
29
- p as CheckboxBlock
32
+ s as CheckboxBlock
30
33
  };
@@ -2,9 +2,9 @@ var d = Object.defineProperty;
2
2
  var l = (r, n, e) => n in r ? d(r, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : r[n] = e;
3
3
  var o = (r, n, e) => l(r, typeof n != "symbol" ? n + "" : n, e);
4
4
  import { useHttp as L } from "../../../composables/useHttp.js";
5
- import { DEFAULT_UNSUBSCRIBE_GROUP as u } from "../../../enums/unsubscribe.js";
5
+ import { DEFAULT_UNSUBSCRIBE_GROUP as c } from "../../../enums/unsubscribe.js";
6
6
  import { Control as h, UIElementType as i, UEAttr as t, ModificationDescription as p } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
7
- const m = "ui-elements-checkbox", a = "select", { get: C } = L();
7
+ const m = "ui-elements-checkbox", u = "select", { get: C } = L();
8
8
  class S extends h {
9
9
  constructor() {
10
10
  super(...arguments);
@@ -16,15 +16,16 @@ class S extends h {
16
16
  return m;
17
17
  }
18
18
  _setFormValues() {
19
- if (this.currentNode && "getAttribute" in this.currentNode) {
19
+ if (this.selectedUnsubGroup = "", this.currentNode && "getAttribute" in this.currentNode) {
20
20
  const e = this.currentNode.getAttribute("id");
21
21
  if (e) {
22
- const s = e === u.sendGridId ? e : Number(e);
23
- s && (this.selectedUnsubGroup = s, this.api.updateValues({
24
- [a]: this.selectedUnsubGroup
25
- }));
22
+ const s = e === c.sendGridId ? e : Number(e);
23
+ s && (this.selectedUnsubGroup = s);
26
24
  }
27
25
  }
26
+ this.api.updateValues({
27
+ [u]: this.selectedUnsubGroup
28
+ });
28
29
  }
29
30
  _getLabel(e, s = `${Math.random()}`) {
30
31
  return `
@@ -54,7 +55,7 @@ class S extends h {
54
55
  </${i.LABEL}>
55
56
 
56
57
  <${i.SELECTPICKER}
57
- ${t.SELECTPICKER.name}="${a}"
58
+ ${t.SELECTPICKER.name}="${u}"
58
59
  ${t.SELECTPICKER.placeholder}="${this.api.translate("Select Unsubscribe Group")}">
59
60
  ${this._getSelect()}
60
61
  </${i.SELECTPICKER}>
@@ -66,21 +67,21 @@ class S extends h {
66
67
  this.currentNode && this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute("id", e.toString()).apply(new p(`Updated text to ${e}`));
67
68
  }
68
69
  _listenToFormUpdates() {
69
- this.api.onValueChanged(a, (e) => this._onSelectChange(e));
70
+ this.api.onValueChanged(u, (e) => this._onSelectChange(e));
70
71
  }
71
72
  onTemplateNodeUpdated(e) {
72
- this.currentNode = e;
73
+ this.currentNode = e, this._setFormValues();
73
74
  }
74
75
  // eslint-disable-next-line @typescript-eslint/no-misused-promises
75
76
  async onRender() {
76
77
  const e = await C(
77
78
  "/unsubscribe-groups/unsubscribe-list"
78
- ), s = [u, ...e.data], E = s.map((c) => ({
79
- [t.SELECT_ITEM.text]: c.name,
80
- [t.SELECT_ITEM.value]: c.sendGridId
79
+ ), s = [c, ...e.data], E = s.map((a) => ({
80
+ [t.SELECT_ITEM.text]: a.name,
81
+ [t.SELECT_ITEM.value]: a.sendGridId
81
82
  }));
82
83
  this.unsubList = s, this.api.setUIEAttribute(
83
- a,
84
+ u,
84
85
  t.SELECTPICKER.items,
85
86
  E
86
87
  ), this._setFormValues(), this._listenToFormUpdates();
@@ -3,7 +3,7 @@ const e = {
3
3
  TITLE: "Unsubscribe From All Email Lists",
4
4
  DESCRIPTION: "You will still receive important transactional and billing-related emails."
5
5
  }, l = `
6
- <td align="left" class="checkbox-block-v2 esd-block-checkbox es-p20">
6
+ <td align="left" class="checkbox-block checkbox-block-v2 esd-block-checkbox es-p20">
7
7
  <table cellpadding="0" cellspacing="0" role="presentation" width="100%">
8
8
  <tbody>
9
9
  <tr>
@@ -26,11 +26,16 @@ const e = {
26
26
  </tbody>
27
27
  </table>
28
28
  </td>
29
- `, i = `
30
- <td
31
- align="left"
32
- esd-extension-block-id="checkbox-block"
33
- class="checkbox-block-v2 esd-block-checkbox esd-checkbox-block esd-extension-block es-p20"
29
+ `, o = `
30
+ <td
31
+ align="left"
32
+ esd-extension-block-id="checkbox-block"
33
+ class="
34
+ checkbox-block
35
+ checkbox-block-v2
36
+ esd-block-checkbox
37
+ esd-checkbox-block
38
+ esd-extension-block es-p20"
34
39
  >
35
40
  <table cellpadding="0" cellspacing="0" role="presentation" width="100%">
36
41
  <tbody>
@@ -55,10 +60,10 @@ const e = {
55
60
  </table>
56
61
  </td>
57
62
  `;
58
- function c() {
63
+ function a() {
59
64
  return l.replace("{-{-TITLE-}-}", `<p path="1">${e.TITLE}</p>`).replace("{-{-DESCRIPTION-}-}", `<p path="1">${e.DESCRIPTION}</p>`);
60
65
  }
61
66
  export {
62
- i as default,
63
- c as getDefaultTemplate
67
+ o as default,
68
+ a as getDefaultTemplate
64
69
  };
@@ -0,0 +1,67 @@
1
+ import { useOnboardingStore as y } from "../../../stores/onboarding.js";
2
+ import { Block as R, BlockCompositionType as L, ModificationDescription as a } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
+ import { configAttributes as t } from "./enums/productEnums.js";
4
+ import { DefaultConfigValues as e, SETTINGS_ENUMS as l } from "./enums/settingsEnums.js";
5
+ import { useItemsBlockStore as S } from "./store/items-block.js";
6
+ import { getDefaultTemplate as V } from "./template.js";
7
+ import { syncCurrencySymbolFromAttributes as B, syncCurrencyLocationFromAttributes as U, syncFormattedPriceFromAttributes as k } from "./utils/syncAttributesFromConfigBlock.js";
8
+ const M = "items-block";
9
+ class x extends R {
10
+ getId() {
11
+ return M;
12
+ }
13
+ getIcon() {
14
+ return "items-icon";
15
+ }
16
+ getBlockCompositionType() {
17
+ return L.CONTAINER;
18
+ }
19
+ getName() {
20
+ return this.api.translate("Items");
21
+ }
22
+ getDescription() {
23
+ return this.api.translate("Items lets you display personalized products based on user behavior.");
24
+ }
25
+ getTemplate() {
26
+ return V({
27
+ orientation: l.ORIENTATION.HORIZONTAL,
28
+ itemsType: l.ITEMS_TYPE.CART_ITEMS,
29
+ itemId: "{{Abandoned Cart Item (1) Url}}",
30
+ currencySymbol: e.productPriceCurrencySymbolControlValue,
31
+ currencyLocation: e.productPriceCurrencyLocationControlValue,
32
+ formattedPrice: e.productPriceFormattedControlValue === "1"
33
+ });
34
+ }
35
+ allowInnerBlocksDND() {
36
+ return !1;
37
+ }
38
+ onCreated(r) {
39
+ const n = r.querySelector("esd-config-block");
40
+ if (!n)
41
+ return;
42
+ const o = n, s = o.getAttribute("data-initialized") || "0", u = o.getAttribute(t.BLOCK_INSTANCE_ID), c = () => String(Date.now() + Math.floor(Math.random() * 1e3));
43
+ if (Number(s)) {
44
+ if (!u) {
45
+ const i = c();
46
+ this.api.getDocumentModifier().modifyHtml(o).setAttribute(t.BLOCK_INSTANCE_ID, i).apply(new a("Assign block instance ID to legacy block"));
47
+ }
48
+ } else {
49
+ const i = e.itemsType, I = e.cartItemsSelectControlValue, d = e.cardOrientationControlValue, m = e.productNameTrimmingControlValue, C = e.productPriceHideDiscountControlValue, b = e.productPriceFormattedControlValue, T = e.productPriceCurrencySymbolControlValue, A = e.productPriceCurrencyLocationControlValue, E = e.productButtonLinkControlValue, O = e.productImageLinkControlValue, _ = e.productImageVisible, p = e.productNameVisible, N = e.productQuantityVisible, f = e.productPriceVisible, g = e.productOriginalPriceVisible, D = e.productButtonVisible, P = c();
50
+ this.api.getDocumentModifier().modifyHtml(o).setAttribute("data-source", i).setAttribute(t.TYPE, i).setAttribute(t.ITEMS_INDEX_SELECT_CONTROL_VALUE, I).setAttribute(t.ORIENTATION, d).setAttribute(t.PRODUCT_NAME_TRIMMING, m).setAttribute(t.PRODUCT_PRICE_HIDE_DISCOUNT, C).setAttribute(t.PRODUCT_PRICE_FORMATTED, b).setAttribute(t.PRODUCT_PRICE_CURRENCY_SYMBOL, T).setAttribute(t.PRODUCT_PRICE_CURRENCY_LOCATION, A).setAttribute(t.PRODUCT_BUTTON_LINK, E).setAttribute(t.PRODUCT_IMAGE_LINK, O).setAttribute(t.BLOCK_INSTANCE_ID, P).setAttribute("data-initialized", "1").setAttribute(t.NAME_CONTROL_ENABLED, e.productNameControlEnabled).setAttribute(
51
+ t.QUANTITY_CONTROL_ENABLED,
52
+ e.productQuantityControlEnabled
53
+ ).setAttribute(t.PRICE_CONTROL_OPENED, e.productPriceControlOpened).setAttribute(t.PRODUCT_IMAGE_VISIBLE, _).setAttribute(t.PRODUCT_NAME_VISIBLE, p).setAttribute(t.PRODUCT_QUANTITY_VISIBLE, N).setAttribute(t.PRODUCT_PRICE_VISIBLE, f).setAttribute(t.PRODUCT_ORIGINAL_PRICE_VISIBLE, g).setAttribute(t.PRODUCT_BUTTON_VISIBLE, D).apply(new a("Initialize config block attributes with defaults")), y().startOnboarding("itemsOnboarding");
54
+ }
55
+ }
56
+ onSelect(r) {
57
+ const n = r.querySelector("esd-config-block"), o = S();
58
+ if (!n)
59
+ return;
60
+ const s = n, u = s.getAttribute(t.TYPE) || e.itemsType, c = s.getAttribute(t.ITEMS_INDEX_SELECT_CONTROL_VALUE) || e.cartItemsSelectControlValue, i = s.getAttribute(t.ORIENTATION) || e.cardOrientationControlValue;
61
+ o.setItemsType(u), o.setItemIds(c), o.setOrientation(i), B(r), U(r), k(r);
62
+ }
63
+ }
64
+ export {
65
+ M as BLOCK_ID,
66
+ x as ItemsBlock
67
+ };