@useinsider/guido 1.0.3-beta.9b9f41a → 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 (109) hide show
  1. package/README.md +3 -32
  2. package/dist/components/Guido.vue.js +1 -1
  3. package/dist/components/Guido.vue2.js +49 -48
  4. package/dist/composables/useActionsApi.js +33 -24
  5. package/dist/composables/useHtmlCompiler.js +15 -13
  6. package/dist/composables/useHtmlValidator.js +36 -35
  7. package/dist/composables/useStripo.js +58 -52
  8. package/dist/composables/useTimerClone.js +52 -0
  9. package/dist/config/compiler/itemsCompilerRules.js +14 -0
  10. package/dist/enums/unsubscribe.js +27 -26
  11. package/dist/extensions/Blocks/Checkbox/control.js +15 -14
  12. package/dist/extensions/Blocks/Checkbox/template.js +14 -9
  13. package/dist/extensions/Blocks/Items/block.js +26 -26
  14. package/dist/extensions/Blocks/Items/controls/cardComposition.js +151 -57
  15. package/dist/extensions/Blocks/Items/controls/name/trimming.js +2 -2
  16. package/dist/extensions/Blocks/Items/controls/settingsControl.js +149 -117
  17. package/dist/extensions/Blocks/Items/enums/productEnums.js +83 -5
  18. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +7 -1
  19. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +57 -56
  20. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +54 -55
  21. package/dist/extensions/Blocks/Items/settingsPanel.js +56 -31
  22. package/dist/extensions/Blocks/Items/template.js +138 -59
  23. package/dist/extensions/Blocks/RadioButton/control.js +18 -17
  24. package/dist/extensions/Blocks/RadioButton/template.js +18 -9
  25. package/dist/extensions/Blocks/Unsubscribe/block.js +27 -27
  26. package/dist/guido.css +1 -1
  27. package/dist/node_modules/lodash-es/_DataView.js +6 -0
  28. package/dist/node_modules/lodash-es/_Promise.js +6 -0
  29. package/dist/node_modules/lodash-es/_Set.js +6 -0
  30. package/dist/node_modules/lodash-es/_SetCache.js +13 -0
  31. package/dist/node_modules/lodash-es/_WeakMap.js +6 -0
  32. package/dist/node_modules/lodash-es/_arrayFilter.js +10 -0
  33. package/dist/node_modules/lodash-es/_arrayLikeKeys.js +13 -12
  34. package/dist/node_modules/lodash-es/_arrayMap.js +8 -0
  35. package/dist/node_modules/lodash-es/_arrayPush.js +8 -0
  36. package/dist/node_modules/lodash-es/_arraySome.js +9 -0
  37. package/dist/node_modules/lodash-es/_baseEach.js +6 -0
  38. package/dist/node_modules/lodash-es/_baseFlatten.js +13 -0
  39. package/dist/node_modules/lodash-es/_baseForOwn.js +8 -0
  40. package/dist/node_modules/lodash-es/_baseGet.js +11 -0
  41. package/dist/node_modules/lodash-es/_baseGetAllKeys.js +9 -0
  42. package/dist/node_modules/lodash-es/_baseHasIn.js +6 -0
  43. package/dist/node_modules/lodash-es/_baseIsEqual.js +8 -0
  44. package/dist/node_modules/lodash-es/_baseIsEqualDeep.js +32 -0
  45. package/dist/node_modules/lodash-es/_baseIsMatch.js +29 -0
  46. package/dist/node_modules/lodash-es/_baseIteratee.js +11 -0
  47. package/dist/node_modules/lodash-es/_baseKeys.js +14 -0
  48. package/dist/node_modules/lodash-es/_baseMap.js +11 -0
  49. package/dist/node_modules/lodash-es/_baseMatches.js +12 -0
  50. package/dist/node_modules/lodash-es/_baseMatchesProperty.js +17 -0
  51. package/dist/node_modules/lodash-es/_baseProperty.js +8 -0
  52. package/dist/node_modules/lodash-es/_basePropertyDeep.js +9 -0
  53. package/dist/node_modules/lodash-es/_baseRange.js +9 -0
  54. package/dist/node_modules/lodash-es/_baseToString.js +18 -0
  55. package/dist/node_modules/lodash-es/_baseTrim.js +8 -0
  56. package/dist/node_modules/lodash-es/_cacheHas.js +6 -0
  57. package/dist/node_modules/lodash-es/_castPath.js +10 -0
  58. package/dist/node_modules/lodash-es/_createBaseEach.js +15 -0
  59. package/dist/node_modules/lodash-es/_createRange.js +11 -0
  60. package/dist/node_modules/lodash-es/_equalArrays.js +40 -0
  61. package/dist/node_modules/lodash-es/_equalByTag.js +45 -0
  62. package/dist/node_modules/lodash-es/_equalObjects.js +36 -0
  63. package/dist/node_modules/lodash-es/_getAllKeys.js +9 -0
  64. package/dist/node_modules/lodash-es/_getMatchData.js +12 -0
  65. package/dist/node_modules/lodash-es/_getSymbols.js +10 -0
  66. package/dist/node_modules/lodash-es/_getTag.js +28 -0
  67. package/dist/node_modules/lodash-es/_hasPath.js +19 -0
  68. package/dist/node_modules/lodash-es/_isFlattenable.js +10 -0
  69. package/dist/node_modules/lodash-es/_isKey.js +12 -0
  70. package/dist/node_modules/lodash-es/_isStrictComparable.js +7 -0
  71. package/dist/node_modules/lodash-es/_mapToArray.js +9 -0
  72. package/dist/node_modules/lodash-es/_matchesStrictComparable.js +8 -0
  73. package/dist/node_modules/lodash-es/_memoizeCapped.js +11 -0
  74. package/dist/node_modules/lodash-es/_nativeKeys.js +5 -0
  75. package/dist/node_modules/lodash-es/_setCacheAdd.js +7 -0
  76. package/dist/node_modules/lodash-es/_setCacheHas.js +6 -0
  77. package/dist/node_modules/lodash-es/_setToArray.js +9 -0
  78. package/dist/node_modules/lodash-es/_stringToPath.js +10 -0
  79. package/dist/node_modules/lodash-es/_toKey.js +10 -0
  80. package/dist/node_modules/lodash-es/_trimmedEndIndex.js +9 -0
  81. package/dist/node_modules/lodash-es/flatMap.js +8 -0
  82. package/dist/node_modules/lodash-es/get.js +8 -0
  83. package/dist/node_modules/lodash-es/hasIn.js +8 -0
  84. package/dist/node_modules/lodash-es/isSymbol.js +9 -0
  85. package/dist/node_modules/lodash-es/keys.js +9 -0
  86. package/dist/node_modules/lodash-es/keysIn.js +3 -3
  87. package/dist/node_modules/lodash-es/map.js +11 -0
  88. package/dist/node_modules/lodash-es/property.js +10 -0
  89. package/dist/node_modules/lodash-es/range.js +5 -0
  90. package/dist/node_modules/lodash-es/stubArray.js +6 -0
  91. package/dist/node_modules/lodash-es/toFinite.js +14 -0
  92. package/dist/node_modules/lodash-es/toNumber.js +22 -0
  93. package/dist/node_modules/lodash-es/toString.js +7 -0
  94. package/dist/src/composables/useActionsApi.d.ts +1 -0
  95. package/dist/src/composables/useTimerClone.d.ts +6 -0
  96. package/dist/src/config/compiler/itemsCompilerRules.d.ts +2 -0
  97. package/dist/src/extensions/Blocks/Checkbox/template.d.ts +1 -1
  98. package/dist/src/extensions/Blocks/Items/block.d.ts +14 -0
  99. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +20 -7
  100. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +8 -2
  101. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +8 -0
  102. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +6 -0
  103. package/dist/src/extensions/Blocks/Items/template.d.ts +9 -1
  104. package/dist/src/extensions/Blocks/RadioButton/template.d.ts +1 -1
  105. package/dist/src/utils/environmentUtil.d.ts +5 -0
  106. package/dist/src/utils/pairProductVariables.d.ts +7 -0
  107. package/dist/utils/environmentUtil.js +4 -0
  108. package/dist/utils/pairProductVariables.js +136 -0
  109. package/package.json +3 -10
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
@@ -787,35 +790,3 @@ ISC License
787
790
  - Playwright integrationBoilerplate/control.ts
788
791
  - Commitlint & Precommit Hooks integration
789
792
  - Get Pre-built display conditions from API
790
-
791
- Recommendation Block:
792
- - [ ] Validations for Filters
793
- - [ ] DOM Rerender after Filters change
794
- - [ ] Change currencySymbol as Input Type
795
- - [ ] Apply filter query to request
796
- - [ ] Drawer loading bug
797
- - [ ] Drawer send request when apply filters
798
- - [ ] Clear all feature for Drawer
799
- - [ ] Stripo's controls should be effect specific DOM item -- Try extending CommonControl class
800
- - [ ] Show toaster message if uses multiple recommendation blocks in same template
801
- - [ ] Change filter button text as Change Filters
802
- - [ ] Migration template for Recommendation Block
803
- - [ ] Recommendation Algorithm default value should be mostPopular
804
- - [ ] Default fields for empty template like currency, title etc.
805
- - [ ] Recommendation Block Icon Registry should be updated
806
- - [ ] AMP Block Icon should be updated
807
- - [ ] Padding feature for between Product Rows
808
-
809
- Items Block Phase 2:
810
- [ ] Writing configs to esd-config-data DOM.
811
- [ ] Build on save feature should be working
812
- [ ] Data Migration feature should be working
813
-
814
- Tech Debts:
815
- [ ] Merge Custom Blocks into a single File
816
- [ ] Move Custom Blocks names to an enum file
817
- [ ] Template Replacement should be optimized for version history
818
- [ ] Code Optimization for Items Block inner blocks reordering
819
- [ ] Image Size & Margins controls has an error on console
820
- [ ] Feed Text Trimming feature to toggle settings
821
- [ ] Formatted Price feature to toggle settings
@@ -12,7 +12,7 @@ var t = function() {
12
12
  n,
13
13
  !1,
14
14
  null,
15
- "23c413c9"
15
+ "48a9b534"
16
16
  );
17
17
  const v = s.exports;
18
18
  export {
@@ -1,23 +1,24 @@
1
- import { defineComponent as O, defineAsyncComponent as I, ref as z, computed as U, watch as B, onMounted as K, onUnmounted as j } from "vue";
2
- import { provideGuidoActions as q } from "../composables/useGuidoActions.js";
3
- import { usePartner as J } from "../composables/usePartner.js";
4
- import { useStripo as Q } from "../composables/useStripo.js";
5
- import { migrate as L } from "../config/migrator/index.js";
6
- import { DefaultUsername as V, DefaultMessageType as X, DefaultGuidoConfig as Y } from "../enums/defaults.js";
7
- import Z from "./organisms/base/Toaster.vue.js";
8
- import $ from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
9
- import ee from "./organisms/header/HeaderWrapper.vue.js";
10
- import oe from "./organisms/LoadingWrapper.vue.js";
11
- import te from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
12
- import ne from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
13
- import { useStripoApi as re } from "../services/stripoApi.js";
14
- import { useConfigStore as ie } from "../stores/config.js";
15
- import { useDynamicContentStore as se } from "../stores/dynamic-content.js";
16
- import { useEditorStore as ae } from "../stores/editor.js";
17
- import { usePreviewStore as ce } from "../stores/preview.js";
18
- import { useUnsubscribeStore as me } from "../stores/unsubscribe.js";
19
- import de from "../node_modules/lodash-es/merge.js";
20
- const Ue = /* @__PURE__ */ O({
1
+ import { defineComponent as z, defineAsyncComponent as L, ref as K, computed as W, watch as j, onMounted as q, onUnmounted as J } from "vue";
2
+ import { provideGuidoActions as Q } from "../composables/useGuidoActions.js";
3
+ import { usePartner as V } from "../composables/usePartner.js";
4
+ import { useStripo as X } from "../composables/useStripo.js";
5
+ import { useTimerClone as Y } from "../composables/useTimerClone.js";
6
+ import { migrate as _ } from "../config/migrator/index.js";
7
+ import { DefaultUsername as Z, DefaultMessageType as $, DefaultGuidoConfig as ee } from "../enums/defaults.js";
8
+ import oe from "./organisms/base/Toaster.vue.js";
9
+ import te from "./organisms/extensions/recommendation/FilterSelectionDrawer.vue.js";
10
+ import ne from "./organisms/header/HeaderWrapper.vue.js";
11
+ import re from "./organisms/LoadingWrapper.vue.js";
12
+ import ie from "./organisms/save-as-template/SaveAsTemplateDrawer.vue.js";
13
+ import se from "./organisms/unsubscribe/UnsubscribeWrapper.vue.js";
14
+ import { useStripoApi as ae } from "../services/stripoApi.js";
15
+ import { useConfigStore as ce } from "../stores/config.js";
16
+ import { useDynamicContentStore as me } from "../stores/dynamic-content.js";
17
+ import { useEditorStore as de } from "../stores/editor.js";
18
+ import { usePreviewStore as le } from "../stores/preview.js";
19
+ import { useUnsubscribeStore as ue } from "../stores/unsubscribe.js";
20
+ import pe from "../node_modules/lodash-es/merge.js";
21
+ const Ae = /* @__PURE__ */ z({
21
22
  __name: "Guido",
22
23
  props: {
23
24
  templateId: null,
@@ -32,34 +33,34 @@ const Ue = /* @__PURE__ */ O({
32
33
  templateConfig: null
33
34
  },
34
35
  emits: ["dynamic-content:open", "back", "save:start", "save:complete", "on-change", "ready", "onboarding:finished", "test-email:click"],
35
- setup(W, { expose: _, emit: o }) {
36
- const u = W, A = I(
36
+ setup(A, { expose: N, emit: o }) {
37
+ const u = A, F = L(
37
38
  () => import("./organisms/email-preview/PreviewContainer.vue.js")
38
- ), N = I(
39
+ ), H = L(
39
40
  () => import("./organisms/onboarding/OnboardingWrapper.vue.js")
40
- ), p = z(), i = se(), g = me(), f = ie(), s = ae(), F = ce(), n = U(() => s.hasChanges), { getPartnerName: y, getProductType: v, isTestPartner: H } = J(), b = () => {
41
+ ), p = K(), i = me(), g = ue(), f = ce(), s = de(), O = le(), n = W(() => s.hasChanges), { getPartnerName: y, getProductType: v, isTestPartner: R } = V(), h = () => {
41
42
  var e;
42
43
  return (e = p.value) == null ? void 0 : e.handleSave(!0);
43
44
  }, {
44
45
  templateId: a,
45
- userId: C,
46
- guidoConfig: h,
46
+ userId: b,
47
+ guidoConfig: C,
47
48
  templateConfig: t,
48
49
  html: r = "",
49
50
  css: S = "",
50
51
  partnerName: c = y(),
51
52
  productType: m = v(),
52
- messageType: w = X,
53
- username: D = V
53
+ messageType: w = $,
54
+ username: D = Z
54
55
  } = u, d = (t == null ? void 0 : t.preselectedDynamicContentList) || [];
55
- s.templateId = a, window.GuidoConfig = de(Y, h), window.GuidoConfig.partner = {
56
+ s.templateId = a, window.GuidoConfig = pe(ee, C), window.GuidoConfig.partner = {
56
57
  partnerName: c,
57
58
  productType: m,
58
59
  messageType: w
59
60
  }, f.templateConfig = t;
60
- const { initPlugin: E } = Q({
61
+ const { initPlugin: T } = X({
61
62
  emailId: a,
62
- userId: C,
63
+ userId: b,
63
64
  username: D,
64
65
  partnerName: c,
65
66
  productType: m,
@@ -67,11 +68,11 @@ const Ue = /* @__PURE__ */ O({
67
68
  onReady: () => {
68
69
  console.debug("guido:ready"), o("ready");
69
70
  }
70
- }), { getDefaultTemplate: T } = re(), R = U(() => {
71
+ }), { getDefaultTemplate: E } = ae(), { cloneTimersOnSave: k, hasTimerBlocks: P } = Y(), x = W(() => {
71
72
  var e;
72
73
  return !((e = window.GuidoConfig) != null && e.useHeader);
73
74
  });
74
- q({
75
+ Q({
75
76
  onBack: () => {
76
77
  console.debug("guido:back"), o("back");
77
78
  },
@@ -85,50 +86,50 @@ const Ue = /* @__PURE__ */ O({
85
86
  console.debug("guido:test-email:click"), o("test-email:click");
86
87
  }
87
88
  });
88
- const P = (e) => {
89
+ const G = (e) => {
89
90
  console.debug("dynamic-content:close", e), i.setSelectedDynamicContent(e), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: e }));
90
- }, k = () => {
91
+ }, I = () => {
91
92
  console.debug("dynamic-content:close", "Without Data"), document.dispatchEvent(new CustomEvent("dynamic-content:close", { detail: { text: "", value: "" } }));
92
93
  };
93
- B(() => n.value, () => {
94
+ j(() => n.value, () => {
94
95
  o("on-change", n.value);
95
96
  });
96
97
  const l = (e) => {
97
- const G = e, { attribute: x, position: M } = G.detail;
98
- console.debug("dynamic-content:open", G.detail), o("dynamic-content:open", x, M);
98
+ const U = e, { attribute: B, position: M } = U.detail;
99
+ console.debug("dynamic-content:open", U.detail), o("dynamic-content:open", B, M);
99
100
  };
100
- return K(async () => {
101
+ return q(async () => {
101
102
  console.debug("Guido says happy coding 🎉"), console.debug("🚗 Ka-Chow");
102
103
  try {
103
104
  g.selectedUnsubscribePages = (t == null ? void 0 : t.selectedUnsubscribePages) || [];
104
105
  let e = {
105
- html: r && await L(r),
106
+ html: r && await _(r),
106
107
  css: S,
107
108
  forceRecreate: !0
108
109
  // TODO: It should be false for old templates. We will communicate with Stripo
109
110
  };
110
- e.html || (e = await T(), e.html = await L(e.html)), await E(e), i.selectedDynamicContentList = d;
111
+ e.html || (e = await E(), e.html = await _(e.html)), P(e.html) && (e.html = await k(e.html)), await T(e), i.selectedDynamicContentList = d;
111
112
  } catch (e) {
112
113
  console.error("Failed to initialize Stripo editor:", e);
113
114
  }
114
115
  document.addEventListener("dynamic-content:open", l);
115
- }), j(() => {
116
+ }), J(() => {
116
117
  document.removeEventListener("dynamic-content:open", l);
117
118
  try {
118
119
  window.UIEditor.removeEditor();
119
120
  } catch {
120
121
  console.debug("Failed to remove Stripo editor: No editor found");
121
122
  }
122
- }), _({
123
+ }), N({
123
124
  dynamicContent: {
124
- insert: P,
125
- close: k
125
+ insert: G,
126
+ close: I
126
127
  },
127
128
  hasChanges: n,
128
- saveSilent: b
129
- }), { __sfc: !0, PreviewContainer: A, OnboardingWrapper: N, headerWrapperRef: p, dynamicContentStore: i, unsubscribeStore: g, props: u, configStore: f, editorStore: s, previewStore: F, hasChanges: n, getPartnerName: y, getProductType: v, isTestPartner: H, saveSilent: b, templateId: a, userId: C, guidoConfig: h, templateConfig: t, html: r, css: S, partnerName: c, productType: m, messageType: w, username: D, preselectedDynamicContentList: d, emit: o, initPlugin: E, getDefaultTemplate: T, noHeader: R, insertDynamicContent: P, closeDynamicContent: k, handleDynamicContentOpen: l, Toaster: Z, FilterSelectionDrawer: $, HeaderWrapper: ee, LoadingWrapper: oe, SaveAsTemplateDrawer: te, UnsubscribeWrapper: ne };
129
+ saveSilent: h
130
+ }), { __sfc: !0, PreviewContainer: F, OnboardingWrapper: H, headerWrapperRef: p, dynamicContentStore: i, unsubscribeStore: g, props: u, configStore: f, editorStore: s, previewStore: O, hasChanges: n, getPartnerName: y, getProductType: v, isTestPartner: R, saveSilent: h, templateId: a, userId: b, guidoConfig: C, templateConfig: t, html: r, css: S, partnerName: c, productType: m, messageType: w, username: D, preselectedDynamicContentList: d, emit: o, initPlugin: T, getDefaultTemplate: E, cloneTimersOnSave: k, hasTimerBlocks: P, noHeader: x, insertDynamicContent: G, closeDynamicContent: I, handleDynamicContentOpen: l, Toaster: oe, FilterSelectionDrawer: te, HeaderWrapper: ne, LoadingWrapper: re, SaveAsTemplateDrawer: ie, UnsubscribeWrapper: se };
130
131
  }
131
132
  });
132
133
  export {
133
- Ue as default
134
+ Ae as default
134
135
  };
@@ -1,6 +1,6 @@
1
- import { useToaster as g } from "./useToaster.js";
1
+ import { useToaster as w } from "./useToaster.js";
2
2
  const A = () => {
3
- const { handleError: l } = g(), n = (t = {}) => new Promise((e, a) => {
3
+ const { handleError: l } = w(), s = (e = {}) => new Promise((t, a) => {
4
4
  const i = { ...{
5
5
  minimize: !0,
6
6
  utmEntity: {
@@ -17,16 +17,16 @@ 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
- }, ...t }, m = {
24
- callback: (s, c, p, u, d) => {
25
- s ? a(s) : e({
26
- html: c,
27
- ampHtml: p,
28
- ampErrors: u,
29
- displayConditions: d
23
+ }, ...e }, m = {
24
+ callback: (n, p, c, d, u) => {
25
+ n ? a(n) : t({
26
+ html: p,
27
+ ampHtml: c,
28
+ ampErrors: d,
29
+ displayConditions: u
30
30
  });
31
31
  },
32
32
  ...i
@@ -34,44 +34,53 @@ const A = () => {
34
34
  window.StripoEditorApi.actionsApi.compileEmail(m);
35
35
  });
36
36
  return {
37
- getCompiledEmail: n,
38
- getTemplateData: () => new Promise((t) => {
39
- const e = ({ html: a, css: o, width: i, height: r, utmParams: m, syncModulesIds: s }) => t({
37
+ getCompiledEmail: s,
38
+ getTemplateData: () => new Promise((e) => {
39
+ const t = ({ html: a, css: o, width: i, height: r, utmParams: m, syncModulesIds: n }) => e({
40
40
  html: a,
41
41
  css: o,
42
42
  width: i,
43
43
  height: r,
44
44
  utmParams: m,
45
- syncModulesIds: s
45
+ syncModulesIds: n
46
46
  });
47
- window.StripoEditorApi.actionsApi.getTemplateData(e);
47
+ window.StripoEditorApi.actionsApi.getTemplateData(t);
48
48
  }),
49
- activateCustomViewStyles: (t = !0) => {
50
- window.StripoEditorApi.actionsApi.activateCustomViewStyles(t);
49
+ activateCustomViewStyles: (e = !0) => {
50
+ window.StripoEditorApi.actionsApi.activateCustomViewStyles(e);
51
51
  },
52
- getPreviewData: async (t) => {
52
+ getPreviewData: async (e) => {
53
53
  try {
54
54
  const {
55
- html: e,
55
+ html: t,
56
56
  displayConditions: a,
57
57
  ampHtml: o = "",
58
58
  ampErrors: i = []
59
- } = await n({ minimize: !1, resetDataSavedFlag: !1, ...t });
59
+ } = await s({ minimize: !1, resetDataSavedFlag: !1, ...e });
60
60
  return {
61
- html: e,
61
+ html: t,
62
62
  ampHtml: o,
63
63
  ampErrors: i,
64
64
  displayConditions: a
65
65
  };
66
- } catch (e) {
67
- return l(e, "Error loading preview"), {
66
+ } catch (t) {
67
+ return l(t, "Error loading preview"), {
68
68
  html: "",
69
69
  ampHtml: "",
70
70
  ampErrors: [],
71
71
  displayConditions: []
72
72
  };
73
73
  }
74
- }
74
+ },
75
+ updateTimerInClonedTemplate: () => new Promise((e) => {
76
+ try {
77
+ window.StripoEditorApi.actionsApi.updateTimerInClonedTemplate((t, a) => {
78
+ t ? (l(t, "Failed to update timer in cloned template"), e(null)) : e(a || null);
79
+ });
80
+ } catch (t) {
81
+ l(t, "Failed to call updateTimerInClonedTemplate"), e(null);
82
+ }
83
+ })
75
84
  };
76
85
  };
77
86
  export {
@@ -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
  };