@useinsider/guido 1.0.3-beta.e32f324 → 1.0.3-beta.e787c98

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 (158) hide show
  1. package/README.md +3 -0
  2. package/dist/components/organisms/onboarding/ItemsOnboarding.vue.js +21 -0
  3. package/dist/components/organisms/onboarding/ItemsOnboarding.vue2.js +99 -0
  4. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +20 -18
  5. package/dist/composables/useActionsApi.js +1 -1
  6. package/dist/composables/useBlocksConfig.js +1 -2
  7. package/dist/composables/useHtmlCompiler.js +15 -13
  8. package/dist/composables/useHtmlValidator.js +36 -35
  9. package/dist/composables/useStripo.js +32 -28
  10. package/dist/config/compiler/itemsCompilerRules.js +14 -0
  11. package/dist/enums/extensions/recommendationBlock.js +2 -2
  12. package/dist/enums/onboarding.js +7 -3
  13. package/dist/extensions/Blocks/Checkbox/block.js +5 -2
  14. package/dist/extensions/Blocks/Checkbox/control.js +3 -3
  15. package/dist/extensions/Blocks/Checkbox/template.js +14 -9
  16. package/dist/extensions/Blocks/Items/block.js +67 -0
  17. package/dist/extensions/Blocks/Items/controls/button/link.js +68 -0
  18. package/dist/extensions/Blocks/Items/controls/cardComposition.js +193 -0
  19. package/dist/extensions/Blocks/Items/controls/image/link.js +68 -0
  20. package/dist/extensions/Blocks/Items/controls/index.js +217 -0
  21. package/dist/extensions/Blocks/Items/controls/name/trimming.js +70 -0
  22. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +107 -0
  23. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +123 -0
  24. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +76 -0
  25. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +61 -0
  26. package/dist/extensions/Blocks/Items/controls/settingsControl.js +316 -0
  27. package/dist/extensions/Blocks/Items/enums/controlEnums.js +5 -0
  28. package/dist/extensions/Blocks/Items/enums/productEnums.js +273 -0
  29. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +77 -0
  30. package/dist/extensions/Blocks/Items/extension.js +19 -0
  31. package/dist/extensions/Blocks/Items/iconsRegistry.js +32 -0
  32. package/dist/extensions/Blocks/Items/items.css.js +23 -0
  33. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +62 -0
  34. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +60 -0
  35. package/dist/extensions/Blocks/Items/settingsPanel.js +131 -0
  36. package/dist/extensions/Blocks/Items/store/items-block.js +71 -0
  37. package/dist/extensions/Blocks/Items/template.js +195 -0
  38. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +17 -0
  39. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +28 -0
  40. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +67 -0
  41. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +44 -0
  42. package/dist/extensions/Blocks/RadioButton/block.js +5 -2
  43. package/dist/extensions/Blocks/RadioButton/template.js +18 -9
  44. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +43 -43
  45. package/dist/extensions/Blocks/Unsubscribe/block.js +45 -41
  46. package/dist/extensions/Blocks/common-control.js +174 -110
  47. package/dist/extensions/Blocks/controlFactories.js +223 -0
  48. package/dist/guido.css +1 -1
  49. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +213 -168
  50. package/dist/node_modules/lodash-es/_DataView.js +6 -0
  51. package/dist/node_modules/lodash-es/_Promise.js +6 -0
  52. package/dist/node_modules/lodash-es/_Set.js +6 -0
  53. package/dist/node_modules/lodash-es/_SetCache.js +13 -0
  54. package/dist/node_modules/lodash-es/_WeakMap.js +6 -0
  55. package/dist/node_modules/lodash-es/_arrayFilter.js +10 -0
  56. package/dist/node_modules/lodash-es/_arrayLikeKeys.js +13 -12
  57. package/dist/node_modules/lodash-es/_arrayMap.js +8 -0
  58. package/dist/node_modules/lodash-es/_arrayPush.js +8 -0
  59. package/dist/node_modules/lodash-es/_arraySome.js +9 -0
  60. package/dist/node_modules/lodash-es/_baseEach.js +6 -0
  61. package/dist/node_modules/lodash-es/_baseFlatten.js +13 -0
  62. package/dist/node_modules/lodash-es/_baseForOwn.js +8 -0
  63. package/dist/node_modules/lodash-es/_baseGet.js +11 -0
  64. package/dist/node_modules/lodash-es/_baseGetAllKeys.js +9 -0
  65. package/dist/node_modules/lodash-es/_baseHasIn.js +6 -0
  66. package/dist/node_modules/lodash-es/_baseIsEqual.js +8 -0
  67. package/dist/node_modules/lodash-es/_baseIsEqualDeep.js +32 -0
  68. package/dist/node_modules/lodash-es/_baseIsMatch.js +29 -0
  69. package/dist/node_modules/lodash-es/_baseIteratee.js +11 -0
  70. package/dist/node_modules/lodash-es/_baseKeys.js +14 -0
  71. package/dist/node_modules/lodash-es/_baseMap.js +11 -0
  72. package/dist/node_modules/lodash-es/_baseMatches.js +12 -0
  73. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +17 -0
  74. package/dist/node_modules/lodash-es/_baseProperty.js +8 -0
  75. package/dist/node_modules/lodash-es/_basePropertyDeep.js +9 -0
  76. package/dist/node_modules/lodash-es/_baseRange.js +9 -0
  77. package/dist/node_modules/lodash-es/_baseToString.js +18 -0
  78. package/dist/node_modules/lodash-es/_baseTrim.js +8 -0
  79. package/dist/node_modules/lodash-es/_cacheHas.js +6 -0
  80. package/dist/node_modules/lodash-es/_castPath.js +10 -0
  81. package/dist/node_modules/lodash-es/_createBaseEach.js +15 -0
  82. package/dist/node_modules/lodash-es/_createRange.js +11 -0
  83. package/dist/node_modules/lodash-es/_equalArrays.js +40 -0
  84. package/dist/node_modules/lodash-es/_equalByTag.js +45 -0
  85. package/dist/node_modules/lodash-es/_equalObjects.js +36 -0
  86. package/dist/node_modules/lodash-es/_getAllKeys.js +9 -0
  87. package/dist/node_modules/lodash-es/_getMatchData.js +12 -0
  88. package/dist/node_modules/lodash-es/_getSymbols.js +10 -0
  89. package/dist/node_modules/lodash-es/_getTag.js +28 -0
  90. package/dist/node_modules/lodash-es/_hasPath.js +19 -0
  91. package/dist/node_modules/lodash-es/_isFlattenable.js +10 -0
  92. package/dist/node_modules/lodash-es/_isKey.js +12 -0
  93. package/dist/node_modules/lodash-es/_isStrictComparable.js +7 -0
  94. package/dist/node_modules/lodash-es/_mapToArray.js +9 -0
  95. package/dist/node_modules/lodash-es/_matchesStrictComparable.js +8 -0
  96. package/dist/node_modules/lodash-es/_memoizeCapped.js +11 -0
  97. package/dist/node_modules/lodash-es/_nativeKeys.js +5 -0
  98. package/dist/node_modules/lodash-es/_setCacheAdd.js +7 -0
  99. package/dist/node_modules/lodash-es/_setCacheHas.js +6 -0
  100. package/dist/node_modules/lodash-es/_setToArray.js +9 -0
  101. package/dist/node_modules/lodash-es/_stringToPath.js +10 -0
  102. package/dist/node_modules/lodash-es/_toKey.js +10 -0
  103. package/dist/node_modules/lodash-es/_trimmedEndIndex.js +9 -0
  104. package/dist/node_modules/lodash-es/flatMap.js +8 -0
  105. package/dist/node_modules/lodash-es/get.js +8 -0
  106. package/dist/node_modules/lodash-es/hasIn.js +8 -0
  107. package/dist/node_modules/lodash-es/isSymbol.js +9 -0
  108. package/dist/node_modules/lodash-es/keys.js +9 -0
  109. package/dist/node_modules/lodash-es/keysIn.js +3 -3
  110. package/dist/node_modules/lodash-es/map.js +11 -0
  111. package/dist/node_modules/lodash-es/property.js +10 -0
  112. package/dist/node_modules/lodash-es/range.js +5 -0
  113. package/dist/node_modules/lodash-es/stubArray.js +6 -0
  114. package/dist/node_modules/lodash-es/toFinite.js +14 -0
  115. package/dist/node_modules/lodash-es/toNumber.js +22 -0
  116. package/dist/node_modules/lodash-es/toString.js +7 -0
  117. package/dist/package.json.js +1 -1
  118. package/dist/services/recommendationApi.js +13 -19
  119. package/dist/src/components/organisms/onboarding/ItemsOnboarding.vue.d.ts +2 -0
  120. package/dist/src/config/compiler/itemsCompilerRules.d.ts +2 -0
  121. package/dist/src/enums/onboarding.d.ts +4 -0
  122. package/dist/src/extensions/Blocks/Checkbox/block.d.ts +1 -0
  123. package/dist/src/extensions/Blocks/Checkbox/template.d.ts +1 -1
  124. package/dist/src/extensions/Blocks/Items/block.d.ts +27 -0
  125. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +14 -0
  126. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +33 -0
  127. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +14 -0
  128. package/dist/src/extensions/Blocks/Items/controls/index.d.ts +501 -0
  129. package/dist/src/extensions/Blocks/Items/controls/name/trimming.d.ts +14 -0
  130. package/dist/src/extensions/Blocks/Items/controls/price/currencyLocation.d.ts +19 -0
  131. package/dist/src/extensions/Blocks/Items/controls/price/currencySymbol.d.ts +21 -0
  132. package/dist/src/extensions/Blocks/Items/controls/price/formattedPrice.d.ts +14 -0
  133. package/dist/src/extensions/Blocks/Items/controls/price/hideDiscount.d.ts +13 -0
  134. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +48 -0
  135. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +61 -0
  136. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +162 -0
  137. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +50 -0
  138. package/dist/src/extensions/Blocks/Items/extension.d.ts +2 -0
  139. package/dist/src/extensions/Blocks/Items/iconsRegistry.d.ts +4 -0
  140. package/dist/src/extensions/Blocks/Items/settingsPanel.d.ts +4 -0
  141. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +41 -0
  142. package/dist/src/extensions/Blocks/Items/template.d.ts +24 -0
  143. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +23 -0
  144. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +32 -0
  145. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +44 -0
  146. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +8 -0
  147. package/dist/src/extensions/Blocks/RadioButton/block.d.ts +1 -0
  148. package/dist/src/extensions/Blocks/RadioButton/template.d.ts +1 -1
  149. package/dist/src/extensions/Blocks/Unsubscribe/block.d.ts +3 -4
  150. package/dist/src/extensions/Blocks/common-control.d.ts +44 -7
  151. package/dist/src/extensions/Blocks/controlFactories.d.ts +312 -0
  152. package/dist/src/stores/onboarding.d.ts +334 -0
  153. package/dist/src/utils/pairProductVariables.d.ts +7 -0
  154. package/dist/static/styles/customEditorStyle.css.js +1 -1
  155. package/dist/stores/onboarding.js +20 -12
  156. package/dist/utils/genericUtil.js +16 -17
  157. package/dist/utils/pairProductVariables.js +136 -0
  158. package/package.json +4 -4
package/README.md CHANGED
@@ -600,6 +600,9 @@ Create a `.env` file with the following variables: (You can get env variables fr
600
600
  VITE_STRIPO_PLUGIN_ID=your_plugin_id
601
601
  VITE_STRIPO_SECRET_KEY=your_secret_key
602
602
  VITE_STRIPO_ROLE=your_role
603
+
604
+ # Playwright Test Configuration (Optional - for local debugging only)
605
+ HEADED=false # Set to 'true' to run tests with visible browser
603
606
  ```
604
607
 
605
608
  ### Project Structure
@@ -0,0 +1,21 @@
1
+ import g from "./ItemsOnboarding.vue2.js";
2
+ /* empty css */
3
+ import m from "../../../_virtual/_plugin-vue2_normalizer.js";
4
+ var l = function() {
5
+ var e, n, r, i, s, a;
6
+ var o = this, d = o._self._c, t = o._self._setupProxy;
7
+ return t.isVisible ? d(t.InOnboard, { key: "guido__items-onboard", staticClass: "w-21-s p-a z-11", class: (e = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : e.classes, attrs: { id: "guido__items-onboard", "is-multiple-page": "", visible: "", "image-source": "", title: "", "bottom-position": (n = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : n.bottom, "left-position": (r = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : r.left, "pages-config": t.onboardingStore.onboardings.itemsOnboarding.config, "pointer-position": (i = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : i.position, "right-position": (s = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : s.right, "top-position": (a = t.onboardingStore.getItemsCurrentCard) == null ? void 0 : a.top }, on: { backButtonClick: t.handleBack, close: function(b) {
8
+ return t.onboardingStore.close("itemsOnboarding");
9
+ }, nextButtonClick: t.handleNext } }) : o._e();
10
+ }, c = [], p = /* @__PURE__ */ m(
11
+ g,
12
+ l,
13
+ c,
14
+ !1,
15
+ null,
16
+ "dd1a237a"
17
+ );
18
+ const I = p.exports;
19
+ export {
20
+ I as default
21
+ };
@@ -0,0 +1,99 @@
1
+ import { defineComponent as l, computed as a, watch as u } from "vue";
2
+ import { useTranslations as x } from "../../../composables/useTranslations.js";
3
+ import { RIBBON_SELECTOR as T, UI_EDITOR_SELECTOR as O, CARD_COMPOSITION_TAB_SELECTOR as B, SETTINGS_TAB_SELECTOR as f } from "../../../enums/onboarding.js";
4
+ import { useOnboardingStore as C } from "../../../stores/onboarding.js";
5
+ import { InOnboard as k } from "@useinsider/design-system-vue";
6
+ const E = /* @__PURE__ */ l({
7
+ __name: "ItemsOnboarding",
8
+ setup(_) {
9
+ const e = x(), o = C(), c = a(() => {
10
+ const t = document.querySelector(T);
11
+ return (t == null ? void 0 : t.offsetHeight) ?? 0;
12
+ }), n = (t) => `${t + c.value}px`, r = (t) => {
13
+ const i = document.querySelector(O);
14
+ if (!(i != null && i.shadowRoot))
15
+ return;
16
+ const { shadowRoot: s } = i, m = s.querySelector(t);
17
+ m && m.click();
18
+ }, d = a(() => [
19
+ {
20
+ classes: "guido-items-onboarding-card-1",
21
+ right: "426px",
22
+ top: n(90),
23
+ position: "Right Top",
24
+ title: e("email-editor.onboarding-items-title"),
25
+ description: e("email-editor.onboarding-items-description"),
26
+ imageSource: "",
27
+ backButtonClick: () => {
28
+ },
29
+ nextButtonType: "text",
30
+ nextButtonText: e("products.next"),
31
+ nextButtonClick: () => {
32
+ o.next("itemsOnboarding");
33
+ }
34
+ },
35
+ {
36
+ classes: "guido-items-onboarding-card-2",
37
+ right: "426px",
38
+ top: n(218),
39
+ position: "Right Top",
40
+ title: e("email-editor.onboarding-items-item-type-title"),
41
+ description: e("email-editor.onboarding-items-item-type-description"),
42
+ imageSource: "",
43
+ backButtonType: "text",
44
+ backButtonText: e("ds-steps.back"),
45
+ backButtonClick: () => {
46
+ o.previous("itemsOnboarding");
47
+ },
48
+ nextButtonType: "text",
49
+ nextButtonText: e("products.next"),
50
+ nextButtonClick: () => {
51
+ o.next("itemsOnboarding");
52
+ }
53
+ },
54
+ {
55
+ classes: "guido-items-onboarding-card-3",
56
+ right: "426px",
57
+ top: n(140),
58
+ position: "Right Top",
59
+ title: e("email-editor.onboarding-items-composition-title"),
60
+ description: e("email-editor.onboarding-items-composition-description"),
61
+ imageSource: "",
62
+ backButtonType: "text",
63
+ backButtonText: e("ds-steps.back"),
64
+ backButtonClick: () => {
65
+ o.previous("itemsOnboarding");
66
+ },
67
+ nextButtonType: "text",
68
+ nextButtonText: e("action-builder.ok"),
69
+ nextButtonClick: () => {
70
+ o.close("itemsOnboarding");
71
+ }
72
+ }
73
+ ]), g = a(() => o.onboardings.itemsOnboarding.config.length > 0 && o.onboardings.itemsOnboarding.isActive), p = () => {
74
+ var t, i;
75
+ (i = (t = o.getItemsCurrentCard) == null ? void 0 : t.nextButtonClick) == null || i.call(t);
76
+ }, b = () => {
77
+ var t, i;
78
+ (i = (t = o.getItemsCurrentCard) == null ? void 0 : t.backButtonClick) == null || i.call(t);
79
+ };
80
+ return u(
81
+ () => o.isActive("itemsOnboarding"),
82
+ (t) => {
83
+ t && o.setConfig("itemsOnboarding", d.value);
84
+ },
85
+ { immediate: !0 }
86
+ ), u(
87
+ () => o.onboardings.itemsOnboarding.cardIndex,
88
+ (t, i) => {
89
+ if (!o.isActive("itemsOnboarding"))
90
+ return;
91
+ const s = `${i}-${t}`;
92
+ s === "1-2" && r(B), s === "2-1" && r(f);
93
+ }
94
+ ), { __sfc: !0, trans: e, onboardingStore: o, ribbonOffset: c, getTopPosition: n, switchTab: r, onboardingCardsConfig: d, isVisible: g, handleNext: p, handleBack: b, InOnboard: k };
95
+ }
96
+ });
97
+ export {
98
+ E as default
99
+ };
@@ -1,23 +1,25 @@
1
1
  import { defineComponent as b, computed as e, onMounted as O, watch as t } from "vue";
2
- import { usePartner as u } from "../../../composables/usePartner.js";
3
- import { useEditorStore as v } from "../../../stores/editor.js";
4
- import { useOnboardingStore as l } from "../../../stores/onboarding.js";
5
- import { usePreviewStore as y } from "../../../stores/preview.js";
6
- import S from "./AMPOnboarding.vue.js";
7
- import h from "./GenericOnboarding.vue.js";
8
- import w from "./NewVersionPopup.vue.js";
9
- import P from "./TextBlockOnboarding.vue.js";
10
- import _ from "./VersionHistoryOnboarding.vue.js";
11
- const F = /* @__PURE__ */ b({
2
+ import u from "./AMPOnboarding.vue.js";
3
+ import v from "./GenericOnboarding.vue.js";
4
+ import l from "./ItemsOnboarding.vue.js";
5
+ import y from "./NewVersionPopup.vue.js";
6
+ import S from "./TextBlockOnboarding.vue.js";
7
+ import h from "./VersionHistoryOnboarding.vue.js";
8
+ import { usePartner as w } from "../../../composables/usePartner.js";
9
+ import { useEditorStore as P } from "../../../stores/editor.js";
10
+ import { useOnboardingStore as _ } from "../../../stores/onboarding.js";
11
+ import { usePreviewStore as A } from "../../../stores/preview.js";
12
+ const G = /* @__PURE__ */ b({
12
13
  __name: "OnboardingWrapper",
13
14
  emits: ["onboarding-finished"],
14
- setup(A, { emit: f }) {
15
- const o = l(), r = v(), s = y(), { isTestPartner: a } = u(), p = e(() => r.isStripoInitialized), d = e(() => a()), m = [
16
- { type: "newVersionPopup", component: w },
17
- { type: "genericOnboarding", component: h },
18
- { type: "textBlockOnboarding", component: P },
19
- { type: "versionHistoryOnboarding", component: _ },
20
- { type: "ampOnboarding", component: S }
15
+ setup(H, { emit: f }) {
16
+ const o = _(), r = P(), s = A(), { isTestPartner: a } = w(), p = e(() => r.isStripoInitialized), d = e(() => a()), m = [
17
+ { type: "newVersionPopup", component: y },
18
+ { type: "genericOnboarding", component: v },
19
+ { type: "textBlockOnboarding", component: S },
20
+ { type: "versionHistoryOnboarding", component: h },
21
+ { type: "ampOnboarding", component: u },
22
+ { type: "itemsOnboarding", component: l }
21
23
  ], c = (n) => d.value || !p.value ? !1 : n === "newVersionPopup" ? o.shouldShowOnboarding(n) : o.isActive(n), g = e(() => m.filter((n) => c(n.type)));
22
24
  return O(async () => {
23
25
  await o.fetchUserModalState();
@@ -40,5 +42,5 @@ const F = /* @__PURE__ */ b({
40
42
  }
41
43
  });
42
44
  export {
43
- F as default
45
+ G as default
44
46
  };
@@ -17,7 +17,7 @@ const A = () => {
17
17
  ]
18
18
  },
19
19
  mergeTags: ["Tag1", "Tag2"],
20
- forseAmp: !1,
20
+ forceAmp: !1,
21
21
  resetDataSavedFlag: !1,
22
22
  disableLineHeightsReplace: !0
23
23
  }, ...t }, m = {
@@ -19,8 +19,7 @@ const l = {
19
19
  "recommendation-block": () => import("../extensions/Blocks/Recommendation/extension.js"),
20
20
  "unsubscribe-block": () => import("../extensions/Blocks/Unsubscribe/extension.js"),
21
21
  "coupon-block": () => import("../extensions/Blocks/CouponBlock/extension.js"),
22
- "items-block": null
23
- // TODO: Add ItemsBlock extension when available
22
+ "items-block": () => import("../extensions/Blocks/Items/extension.js")
24
23
  }, a = (n) => {
25
24
  if (!n || !n.length)
26
25
  return {};
@@ -1,25 +1,27 @@
1
1
  import { defaultHtmlCompilerRules as t } from "../config/compiler/htmlCompilerRules.js";
2
- import { outlookCompilerRules as p } from "../config/compiler/outlookCompilerRules.js";
3
- import { recommendationCompilerRules as s } from "../config/compiler/recommendationCompilerRules.js";
4
- import { socialCompilerRules as u } from "../config/compiler/socialCompilerRules.js";
5
- import { unsubscribeCompilerRules as n } from "../config/compiler/unsubscribeCompilerRules.js";
6
- import { createHtmlCompiler as c } from "../utils/htmlCompiler.js";
7
- import { useConfig as f } from "./useConfig.js";
8
- const h = () => {
9
- const { config: e } = f(), l = e.htmlCompilerRules || [], m = [
2
+ import { itemsCompilerRules as p } from "../config/compiler/itemsCompilerRules.js";
3
+ import { outlookCompilerRules as s } from "../config/compiler/outlookCompilerRules.js";
4
+ import { recommendationCompilerRules as u } from "../config/compiler/recommendationCompilerRules.js";
5
+ import { socialCompilerRules as n } from "../config/compiler/socialCompilerRules.js";
6
+ import { unsubscribeCompilerRules as c } from "../config/compiler/unsubscribeCompilerRules.js";
7
+ import { createHtmlCompiler as f } from "../utils/htmlCompiler.js";
8
+ import { useConfig as R } from "./useConfig.js";
9
+ const x = () => {
10
+ const { config: e } = R(), m = e.htmlCompilerRules || [], l = [
10
11
  ...!!e.ignoreDefaultHtmlCompilerRules ? [] : t,
12
+ ...u,
13
+ ...c,
14
+ ...p,
11
15
  ...s,
12
16
  ...n,
13
- ...p,
14
- ...u,
15
- ...l.map((o, i) => ({
17
+ ...m.map((o, i) => ({
16
18
  ...o,
17
19
  priority: o.priority + 1e3 + i
18
20
  // Ensure additional rules run after default rules
19
21
  }))
20
- ], r = c(m);
22
+ ], r = f(l);
21
23
  return { compileHtml: (o) => r.compile(o) };
22
24
  };
23
25
  export {
24
- h as useHtmlCompiler
26
+ x as useHtmlCompiler
25
27
  };
@@ -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,23 +1,23 @@
1
- import { useActionsApi as h } from "./useActionsApi.js";
1
+ import { useActionsApi as w } from "./useActionsApi.js";
2
2
  import { useBlocksConfig as b } from "./useBlocksConfig.js";
3
3
  import { useConfig as k } from "./useConfig.js";
4
- import { useCustomInterfaceAppearance as B } from "./useCustomInterfaceAppearance.js";
5
- import { useStripoEventHandler as V } from "./useStripoEventHandler.js";
6
- import { useToaster as _ } from "./useToaster.js";
7
- import { displayConditions as F } from "../enums/displayConditions.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
8
  import { useStripoApi as A } from "../services/stripoApi.js";
9
- import T from "../static/styles/customEditorStyle.css.js";
10
- import { useEditorStore as v } from "../stores/editor.js";
11
- import { dynamicContentToMergeTags as I } from "../utils/genericUtil.js";
12
- import M from "../package.json.js";
13
- const N = (d) => {
14
- const { config: u } = k(), { handleError: l } = _(), { getToken: f, getCustomFonts: S } = A(), { handleEvent: C } = V(), { getStripoBlocksConfig: y } = b(), E = async (i, r = []) => {
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
15
  var m, g;
16
- const t = v(), { html: n, css: p, forceRecreate: a } = i, { baseBlocks: e, extensions: c } = await y();
16
+ const t = M(), { html: n, css: p, forceRecreate: a } = i, { baseBlocks: e, extensions: d } = await C();
17
17
  window.UIEditor.initEditor(
18
18
  document.querySelector("#guido-editor"),
19
19
  {
20
- metadata: d,
20
+ metadata: c,
21
21
  html: n,
22
22
  css: p,
23
23
  forceRecreate: a,
@@ -30,13 +30,17 @@ const N = (d) => {
30
30
  customAppearanceMergetags: !0,
31
31
  customAppearanceMergetagsBorderColor: "#f1f3fe",
32
32
  customAppearanceMergetagsBackgroundColor: "#f1f3fe",
33
- customViewStyles: T,
33
+ customViewStyles: F,
34
34
  conditionsEnabled: ((m = u.features) == null ? void 0 : m.displayConditions) ?? !0,
35
35
  customConditionsEnabled: ((g = u.features) == null ? void 0 : g.displayConditions) ?? !0,
36
- conditionCategories: F,
36
+ conditionCategories: T,
37
37
  enableXSSSecurity: !0,
38
- messageSettingsEnabled: !1,
39
- selectBlockAfterDropFromSettingsPanel: !0,
38
+ messageSettingsEnabled: !0,
39
+ displayGmailAnnotations: !0,
40
+ displayHiddenPreheader: !1,
41
+ displayTitle: !1,
42
+ displayUTM: !1,
43
+ selectElementAfterDrop: !0,
40
44
  ...e ? { baseBlocks: e } : {},
41
45
  editorFonts: {
42
46
  showDefaultStandardFonts: !0,
@@ -45,7 +49,7 @@ const N = (d) => {
45
49
  },
46
50
  mergeTags: [
47
51
  {
48
- entries: I(d.preselectedDynamicContentList)
52
+ entries: U(c.preselectedDynamicContentList)
49
53
  }
50
54
  ],
51
55
  async onTokenRefreshRequest(o) {
@@ -58,8 +62,8 @@ const N = (d) => {
58
62
  },
59
63
  onTemplateLoaded() {
60
64
  try {
61
- const { importCss: o } = B(), { activateCustomViewStyles: s } = h();
62
- o(), s(), d.onReady(), t.isStripoInitialized = !0, t.loadingStatus = !1, setTimeout(() => {
65
+ const { importCss: o } = V(), { activateCustomViewStyles: s } = w();
66
+ o(), s(), c.onReady(), t.isStripoInitialized = !0, t.loadingStatus = !1, setTimeout(() => {
63
67
  t.hasChanges = !1;
64
68
  }, 1e3);
65
69
  } catch (o) {
@@ -78,22 +82,22 @@ const N = (d) => {
78
82
  onDataChanged() {
79
83
  t.hasChanges = !0;
80
84
  },
81
- onEvent: C,
85
+ onEvent: S,
82
86
  ignoreClickOutsideSelectors: [
83
87
  "#guido-dynamic-content-modal",
84
88
  ".in-on-board-wrapper",
85
89
  ".in-drawer__container"
86
90
  ],
87
- extensions: c
91
+ extensions: d
88
92
  }
89
93
  );
90
- }, w = (i) => new Promise((r, t) => {
91
- var c;
94
+ }, h = (i) => new Promise((r, t) => {
95
+ var d;
92
96
  if (document.getElementById("UiEditorScript")) {
93
97
  i(), r();
94
98
  return;
95
99
  }
96
- const n = M.guido, a = `https://email-static.useinsider.com/guido/${(c = n == null ? void 0 : n.stripo) == null ? void 0 : c.version}/UIEditor.js`, e = document.createElement("script");
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");
97
101
  e.id = "UiEditorScript", e.type = "module", e.src = a, e.onload = () => {
98
102
  i(), r();
99
103
  }, e.onerror = () => {
@@ -101,12 +105,12 @@ const N = (d) => {
101
105
  }, document.body.appendChild(e);
102
106
  });
103
107
  return { initPlugin: async (i) => {
104
- await w(async () => {
105
- const r = await S();
108
+ await h(async () => {
109
+ const r = await y();
106
110
  await E(i, r);
107
111
  });
108
112
  } };
109
113
  };
110
114
  export {
111
- N as useStripo
115
+ J as useStripo
112
116
  };
@@ -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
  };
@@ -22,10 +22,10 @@ class S extends h {
22
22
  const s = e === c.sendGridId ? e : Number(e);
23
23
  s && (this.selectedUnsubGroup = s);
24
24
  }
25
- this.api.updateValues({
26
- [u]: this.selectedUnsubGroup
27
- });
28
25
  }
26
+ this.api.updateValues({
27
+ [u]: this.selectedUnsubGroup
28
+ });
29
29
  }
30
30
  _getLabel(e, s = `${Math.random()}`) {
31
31
  return `
@@ -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
  };