@useinsider/guido 2.1.0-beta.9ba2e9d → 2.1.0-beta.9eddc27

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 (148) hide show
  1. package/README.md +1 -1
  2. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +14 -15
  3. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  4. package/dist/composables/useHtmlValidator.js +84 -106
  5. package/dist/composables/useRecommendation.js +21 -54
  6. package/dist/composables/useSave.js +16 -12
  7. package/dist/composables/useStripo.js +58 -54
  8. package/dist/composables/useStripoEventHandler.js +27 -12
  9. package/dist/composables/useSyncModuleExtractor.js +33 -0
  10. package/dist/config/compiler/recommendationCompilerRules.js +39 -45
  11. package/dist/config/migrator/recommendationMigrator.js +2 -2
  12. package/dist/enums/recommendation.js +15 -16
  13. package/dist/enums/unsubscribe.js +25 -21
  14. package/dist/extensions/Blocks/Recommendation/block.js +9 -130
  15. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +187 -0
  16. package/dist/extensions/Blocks/Recommendation/constants.js +13 -0
  17. package/dist/extensions/Blocks/Recommendation/control.js +336 -0
  18. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +68 -0
  19. package/dist/extensions/Blocks/Recommendation/controls/index.js +245 -0
  20. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +74 -0
  21. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textAfter.js → omnibusDiscountTextAfterControl.js} +14 -16
  22. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textBefore.js → omnibusDiscountTextBeforeControl.js} +14 -16
  23. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textAfter.js → omnibusPriceTextAfterControl.js} +14 -16
  24. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textBefore.js → omnibusPriceTextBeforeControl.js} +12 -14
  25. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +188 -0
  26. package/dist/extensions/Blocks/Recommendation/extension.js +17 -40
  27. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +3 -19
  28. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +4 -13
  29. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +10 -21
  30. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +193 -230
  31. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +181 -0
  32. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +189 -0
  33. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +209 -0
  34. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  35. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +15 -26
  36. package/dist/extensions/Blocks/controlFactories.js +93 -125
  37. package/dist/guido.css +1 -1
  38. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +169 -223
  39. package/dist/services/recommendationApi.js +9 -10
  40. package/dist/services/stripoApi.js +50 -14
  41. package/dist/services/templateLibraryApi.js +13 -16
  42. package/dist/src/@types/events.d.ts +34 -2
  43. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  44. package/dist/src/composables/useRecommendation.d.ts +0 -1
  45. package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
  46. package/dist/src/enums/unsubscribe.d.ts +3 -0
  47. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -67
  48. package/dist/src/extensions/Blocks/Recommendation/{controls/cardComposition/index.d.ts → cardCompositionControl.d.ts} +3 -23
  49. package/dist/src/extensions/Blocks/Recommendation/{constants/controlIds.d.ts → constants.d.ts} +24 -0
  50. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +38 -0
  51. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +589 -21
  52. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  53. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +0 -9
  54. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +468 -131
  55. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  56. package/dist/src/extensions/Blocks/Recommendation/templates/{grid/migration.d.ts → migrationTemplate.d.ts} +4 -11
  57. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +52 -0
  58. package/dist/src/mock/api/settings.d.ts +2 -0
  59. package/dist/src/services/stripoApi.d.ts +5 -0
  60. package/dist/src/stores/editor.d.ts +23 -0
  61. package/dist/static/styles/components/notification.css.js +1 -0
  62. package/dist/static/styles/components/version-history.css.js +10 -2
  63. package/dist/static/styles/components/wide-panel.css.js +18 -2
  64. package/dist/static/styles/customEditorStyle.css.js +2 -25
  65. package/dist/stores/editor.js +2 -1
  66. package/dist/utils/pairProductVariables.js +56 -57
  67. package/dist/utils/templatePreparation.js +14 -15
  68. package/package.json +1 -1
  69. package/dist/config/compiler/utils/recommendationCompilerUtils.js +0 -147
  70. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +0 -4
  71. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +0 -4
  72. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +0 -65
  73. package/dist/extensions/Blocks/Recommendation/constants/layout.js +0 -20
  74. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +0 -19
  75. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +0 -64
  76. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +0 -80
  77. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +0 -232
  78. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +0 -19
  79. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +0 -92
  80. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +0 -102
  81. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +0 -209
  82. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +0 -52
  83. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +0 -217
  84. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +0 -70
  85. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +0 -110
  86. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +0 -67
  87. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -286
  88. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +0 -46
  89. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +0 -108
  90. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +0 -44
  91. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +0 -48
  92. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +0 -48
  93. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +0 -44
  94. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +0 -222
  95. package/dist/extensions/Blocks/Recommendation/services/configService.js +0 -240
  96. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +0 -233
  97. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +0 -251
  98. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +0 -69
  99. package/dist/extensions/Blocks/Recommendation/templates/index.js +0 -12
  100. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +0 -174
  101. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +0 -73
  102. package/dist/extensions/Blocks/Recommendation/templates/utils.js +0 -122
  103. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +0 -6
  104. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +0 -29
  105. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +0 -46
  106. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +0 -17
  107. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +0 -13
  108. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -49
  109. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +0 -13
  110. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +0 -35
  111. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -31
  112. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +0 -143
  113. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -31
  114. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +0 -35
  115. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +0 -37
  116. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -29
  117. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +0 -52
  118. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +0 -22
  119. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -68
  120. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +0 -24
  121. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -42
  122. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -23
  123. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -214
  124. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +0 -97
  125. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -34
  126. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -95
  127. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -100
  128. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -15
  129. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -15
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -100
  131. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -15
  132. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -15
  133. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +0 -95
  134. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +0 -83
  135. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +0 -151
  136. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +0 -6
  137. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +0 -20
  138. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +0 -33
  139. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +0 -39
  140. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +0 -8
  141. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +0 -25
  142. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +0 -18
  143. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +0 -57
  144. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +0 -7
  145. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +0 -160
  146. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +0 -33
  147. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +0 -113
  148. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +0 -77
@@ -1,20 +1,35 @@
1
- import { useOnboardingStore as i } from "../stores/onboarding.js";
2
- const c = () => {
3
- const e = {
4
- block_dropped: ({ blockName: t }) => {
5
- if (t === "BLOCK_TEXT") {
6
- const n = i(), o = !n.shouldShowOnboarding("textBlockOnboarding"), r = n.isActive("textBlockOnboarding");
7
- if (o || r)
1
+ import { useStripoApi as i } from "../services/stripoApi.js";
2
+ import { useEditorStore as u } from "../stores/editor.js";
3
+ import { useOnboardingStore as l } from "../stores/onboarding.js";
4
+ import { useUnsubscribeStore as b } from "../stores/unsubscribe.js";
5
+ const v = () => {
6
+ const { updateSyncModule: d, getSyncModule: r } = i(), n = u(), s = b(), a = {
7
+ block_dropped: ({ blockName: e }) => {
8
+ if (e === "BLOCK_TEXT") {
9
+ const o = l(), t = !o.shouldShowOnboarding("textBlockOnboarding"), c = o.isActive("textBlockOnboarding");
10
+ if (t || c)
8
11
  return;
9
- n.start("textBlockOnboarding");
12
+ o.start("textBlockOnboarding");
10
13
  }
14
+ },
15
+ module_saved: async (e) => {
16
+ n.syncModulesEnabled && (console.debug("[module_saved] Saved module data:", e), await d(e));
17
+ },
18
+ module_dropped: async (e) => {
19
+ if (!n.syncModulesEnabled)
20
+ return;
21
+ const { moduleId: o } = e, t = await r(o);
22
+ console.debug("[module_dropped] Sync module data:", t), t.unsubscriptionPreferencePages.length && await s.fetchTemplates();
23
+ },
24
+ module_updated: async (e) => {
25
+ n.syncModulesEnabled && (console.debug("[module_updated] Updated module data:", e), await d(e));
11
26
  }
12
27
  };
13
- return { handleEvent: async (t, n) => {
14
- const o = e[t];
15
- o && await o(n);
28
+ return { handleEvent: async (e, o) => {
29
+ const t = a[e];
30
+ console.debug("Stripo Event: ", e, o), t && await t(o);
16
31
  } };
17
32
  };
18
33
  export {
19
- c as useStripoEventHandler
34
+ v as useStripoEventHandler
20
35
  };
@@ -0,0 +1,33 @@
1
+ import { UNSUBSCRIBE_SYNC_MODULE_TYPES as S } from "../enums/unsubscribe.js";
2
+ import { DATA_ATTRIBUTES as a } from "../extensions/Blocks/Unsubscribe/utils/constants.js";
3
+ import { useEditorStore as d } from "../stores/editor.js";
4
+ const T = ".esd-synchronizable-module", m = '[esd-extension-block-id="unsubscribe-block"]', A = "esd-custom-block-id", M = () => {
5
+ const l = d();
6
+ return { extractSyncModuleUnsubscribeData: (p) => {
7
+ if (!l.syncModulesEnabled)
8
+ return [];
9
+ const E = new DOMParser().parseFromString(p, "text/html").querySelectorAll(T), e = [];
10
+ return E.forEach((r) => {
11
+ const s = r.getAttribute(A);
12
+ if (!s)
13
+ return;
14
+ r.querySelectorAll(m).forEach((o) => {
15
+ const n = o.getAttribute(a.PAGE_LIST), c = o.getAttribute(a.PAGE_TYPE);
16
+ if (!n || !c)
17
+ return;
18
+ const b = parseInt(c), u = S[b];
19
+ if (!u)
20
+ return;
21
+ const i = n.split(",").map((t) => parseInt(t.trim())).filter((t) => !Number.isNaN(t));
22
+ i.length !== 0 && e.push({
23
+ stripoModuleId: s,
24
+ unsubscriptionPreferencePages: i,
25
+ type: u
26
+ });
27
+ });
28
+ }), e;
29
+ } };
30
+ };
31
+ export {
32
+ M as useSyncModuleExtractor
33
+ };
@@ -1,16 +1,15 @@
1
- import { useRecommendation as f } from "../../composables/useRecommendation.js";
2
- import { DUMMY_IMAGE_MAPPINGS as P, REGEX as m, VerticalOrientation as g, CSS as e, ATTRIBUTES as a, CONDITIONS as A, HTML as h } from "../../enums/recommendation.js";
3
- import { prepareRecommendationBlocks as D } from "./utils/recommendationCompilerUtils.js";
4
- const G = [
1
+ import { useRecommendation as u } from "../../composables/useRecommendation.js";
2
+ import { DUMMY_IMAGE_MAPPINGS as P, REGEX as i, CSS as e, CONDITIONS as E, ATTRIBUTES as r, HTML as h } from "../../enums/recommendation.js";
3
+ const H = [
5
4
  {
6
5
  id: "replace-images-with-variable-names",
7
6
  description: "Replacing dummy images with variable names in recommendation module",
8
7
  type: "custom",
9
- processor: (s) => {
10
- let t = s;
11
- return Object.entries(P).forEach(([, l]) => {
12
- Object.entries(l).forEach(([n, o]) => {
13
- t = t.replaceAll(o, `{{${n}}}`);
8
+ processor: (a) => {
9
+ let t = a;
10
+ return Object.entries(P).forEach(([, n]) => {
11
+ Object.entries(n).forEach(([s, o]) => {
12
+ t = t.replaceAll(o, `{{${s}}}`);
14
13
  });
15
14
  }), t;
16
15
  },
@@ -29,17 +28,17 @@ const G = [
29
28
  id: "add-recommendation-unresponsive-css",
30
29
  description: "Adding recommendation unresponsive css",
31
30
  type: "custom",
32
- processor: (s) => {
33
- const { calculateCardWidth: t, getRecommendationCampaignData: l } = f();
34
- let n = s;
35
- const o = n.match(m.ID);
36
- if (o) {
37
- const d = [];
38
- if (o.forEach((c) => {
39
- const E = /recommendation-id="(.*?)"/i.exec(c), I = E ? E[1].trim() : "", p = l(I);
40
- p.textTrimming && p.orientation === g && d.push(t(p));
41
- }), d.length) {
42
- const c = `width:${Math.min(...d)}px!important;`;
31
+ processor: (a) => {
32
+ const { getRecommendationCampaignData: t } = u();
33
+ let n = a;
34
+ const s = n.match(i.ID);
35
+ if (s) {
36
+ const o = [];
37
+ if (s.forEach((c) => {
38
+ const m = c.slice(35, c.length - 1).trim();
39
+ t(m);
40
+ }), o.length) {
41
+ const c = `width:${Math.min(...o)}px!important;`;
43
42
  n = n.replace(e.REGULAR_NAME_HEIGHT, `${e.TRIMMED_NAME_HEIGHT} ${c} ${e.ELLIPSIS}`).replace(e.REGULAR_NAME_CONTAINER_HEIGHT, e.TRIMMED_NAME_CONTAINER_CSS).replace(e.RESPONSIVE_NAME_SIZE, `${e.RESPONSIVE_NAME_HEIGHT} ${c} ${e.ELLIPSIS}`).replace(e.RESPONSIVE_NAME_CONTAINER_HEIGHT, e.TRIMMED_RESPONSIVE_NAME_CONTAINER_CSS);
44
43
  }
45
44
  }
@@ -47,37 +46,32 @@ const G = [
47
46
  },
48
47
  priority: 52
49
48
  },
50
- {
51
- id: "prepare-recommendations",
52
- description: "Replacing product data with template variables in recommendation blocks",
53
- type: "custom",
54
- processor: (s) => D(s),
55
- priority: 48
56
- },
49
+ // TODO: prepareRecommendations
50
+ // TODO: addRecommendationCustomFields
57
51
  {
58
52
  id: "add-discount-conditions",
59
53
  description: "Adding discount conditions to the recommendation block",
60
54
  type: "custom",
61
- processor: (s) => {
62
- let t = s;
63
- const l = t.match(m.ATTRIBUTE_PARAGRAPH), { getRecommendationCampaignData: n } = f();
64
- return l !== null && l.forEach((o) => {
65
- const d = o.match(m.CUSTOM_FIELD);
66
- if (!d)
55
+ processor: (a) => {
56
+ let t = a;
57
+ const n = t.match(i.ATTRIBUTE_PARAGRAPH), { getRecommendationCampaignData: s } = u();
58
+ return n !== null && n.forEach((o) => {
59
+ const c = o.match(i.CUSTOM_FIELD);
60
+ if (!c)
67
61
  return;
68
- const [c] = d, E = c.match(m.CUSTOM_FIELD_INDEXES_PART), I = c.match(m.CUSTOM_FIELD_NAME_PART), p = o.match(m.ATTRIBUTE_PARAGRAPH_START_TAG);
69
- if (!E || !I || !p)
62
+ const [m] = c, p = m.match(i.CUSTOM_FIELD_INDEXES_PART), A = m.match(i.CUSTOM_FIELD_NAME_PART), _ = o.match(i.ATTRIBUTE_PARAGRAPH_START_TAG);
63
+ if (!p || !A || !_)
70
64
  return;
71
- const [u] = E, [R] = I, [_] = p, T = R.substring(1, R.length - 2), S = _.match(m.COMPOSITION) !== null;
72
- let i = c;
73
- if (S) {
74
- const $ = u.substring(2, u.length - 3), r = n($);
75
- T === a.OMNIBUS_PRICE && (r.priceBeforeTextValue && (i = `${r.priceBeforeTextValue}${i}`), r.priceAfterTextValue && (i = `${i}${r.priceAfterTextValue}`)), T === a.OMNIBUS_DISCOUNT && (r.discountBeforeTextValue && (i = `${r.discountBeforeTextValue}${i}`), r.discountAfterTextValue && (i = `${i}${r.discountAfterTextValue}`));
65
+ const [l] = p, [T] = A, [d] = _, N = T.substring(1, T.length - 2), R = d.match(i.COMPOSITION) !== null;
66
+ let O = m;
67
+ if (R) {
68
+ const M = l.substring(2, l.length - 3);
69
+ s(M);
76
70
  }
77
- const N = u.substring(2);
78
- let M = "";
79
- T in A.IF && (M = A.IF[T].replaceAll(`{${a.DISCOUNT}}`, `${N}${a.DISCOUNT}`).replaceAll(`{${a.OMNIBUS_DISCOUNT}}`, `${N}${a.OMNIBUS_DISCOUNT}`).replaceAll(`{${a.OMNIBUS_PRICE}}`, `${N}${a.OMNIBUS_PRICE}`));
80
- const O = `${_}${i}${h.PARAGRAPH_END_TAG}`, C = `${M}${S ? O : o}${A.ELSE}${_}${h.PARAGRAPH_END_TAG}${A.END_IF}`;
71
+ const I = l.substring(2);
72
+ let S = "";
73
+ N in E.IF && (S = E.IF[N].replaceAll(`{${r.DISCOUNT}}`, `${I}${r.DISCOUNT}`).replaceAll(`{${r.OMNIBUS_DISCOUNT}}`, `${I}${r.OMNIBUS_DISCOUNT}`).replaceAll(`{${r.OMNIBUS_PRICE}}`, `${I}${r.OMNIBUS_PRICE}`));
74
+ const $ = `${d}${O}${h.PARAGRAPH_END_TAG}`, C = `${S}${R ? $ : o}${E.ELSE}${d}${h.PARAGRAPH_END_TAG}${E.END_IF}`;
81
75
  t = t.replace(o, C);
82
76
  }), t;
83
77
  },
@@ -85,5 +79,5 @@ const G = [
85
79
  }
86
80
  ];
87
81
  export {
88
- G as recommendationCompilerRules
82
+ H as recommendationCompilerRules
89
83
  };
@@ -1,8 +1,8 @@
1
1
  var h = Object.defineProperty;
2
2
  var T = (A, e, t) => e in A ? h(A, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : A[e] = t;
3
3
  var m = (A, e, t) => T(A, typeof e != "symbol" ? e + "" : e, t);
4
- import P, { prepareProductRows as S } from "../../extensions/Blocks/Recommendation/templates/grid/migration.js";
5
- import { getDefaultProducts as q } from "../../extensions/Blocks/Recommendation/templates/utils.js";
4
+ import P, { prepareProductRows as S } from "../../extensions/Blocks/Recommendation/templates/migrationTemplate.js";
5
+ import { getDefaultProducts as q } from "../../extensions/Blocks/Recommendation/templates/templateUtils.js";
6
6
  class w {
7
7
  constructor() {
8
8
  m(this, "parser");
@@ -1,4 +1,4 @@
1
- const e = 20, s = 320, t = "vertical", m = {
1
+ const s = 20, e = 320, t = {
2
2
  CART_ABANDONMENT: {
3
3
  ins_apr_img_1: "https://s3-eu-west-1.amazonaws.com/web-image.useinsider.com/email-assets/dummyImages/ins_apr_img_1.png",
4
4
  ins_apr_img_2: "https://s3-eu-west-1.amazonaws.com/web-image.useinsider.com/email-assets/dummyImages/ins_apr_img_2.png",
@@ -15,7 +15,7 @@ const e = 20, s = 320, t = "vertical", m = {
15
15
  DISCOUNT: "discount",
16
16
  OMNIBUS_DISCOUNT: "omnibus_discount",
17
17
  OMNIBUS_PRICE: "omnibus_price"
18
- }, _ = {
18
+ }, m = {
19
19
  IF: {
20
20
  discount: `{% if {${i.DISCOUNT}} != "0%" and {${i.DISCOUNT}} != "" %}`,
21
21
  omnibus_discount: `{% if {${i.DISCOUNT}} != "0%" and {${i.DISCOUNT}} != "" and {${i.OMNIBUS_DISCOUNT}} != "0%" and {${i.OMNIBUS_DISCOUNT}} != "" %}`,
@@ -23,17 +23,17 @@ const e = 20, s = 320, t = "vertical", m = {
23
23
  },
24
24
  ELSE: "{% else %}",
25
25
  END_IF: "{% endif %}"
26
- }, a = {
27
- ID: /recommendation-id="(.*?)"/gi,
28
- ATTRIBUTE_PARAGRAPH: /<p[^>]*?product-attr="(discount|omnibus_discount|omnibus_price)"[^>]*>[\S\s]*?<\/p>/gm,
29
- ATTRIBUTE_PARAGRAPH_START_TAG: /<p[^>]*?product-attr="(discount|omnibus_discount|omnibus_price)"[^>]*>/gm,
26
+ }, _ = {
27
+ ID: /ins-recommendation-v3-campaign-id="(.*?)"/gi,
28
+ ATTRIBUTE_PARAGRAPH: /<p[^>]*?product-attr="(discount|omnibus_discount|omnibus_price)">[\S\s]*?<\/p>/gm,
29
+ ATTRIBUTE_PARAGRAPH_START_TAG: /<p[^>]*?product-attr="(discount|omnibus_discount|omnibus_price)">/gm,
30
30
  COMPOSITION: /composition="true"/gm,
31
31
  CUSTOM_FIELD: /{{[0-9]+_[0-8]_(discount|omnibus_discount|omnibus_price)}}/gm,
32
32
  CUSTOM_FIELD_INDEXES_PART: /{{[0-9]+_[0-8]_/gm,
33
33
  CUSTOM_FIELD_NAME_PART: /_(discount|omnibus_discount|omnibus_price)}}/gm
34
- }, n = {
34
+ }, a = {
35
35
  PARAGRAPH_END_TAG: "</p>"
36
- }, o = {
36
+ }, n = {
37
37
  REGULAR_NAME_HEIGHT: ".ext-product-name.ins-vertical p { height:90px!important;",
38
38
  TRIMMED_NAME_HEIGHT: ".ext-product-name.ins-vertical p { height:18px!important;",
39
39
  ELLIPSIS: "text-overflow:ellipsis!important; white-space:nowrap!important;",
@@ -46,12 +46,11 @@ const e = 20, s = 320, t = "vertical", m = {
46
46
  };
47
47
  export {
48
48
  i as ATTRIBUTES,
49
- _ as CONDITIONS,
50
- o as CSS,
51
- m as DUMMY_IMAGE_MAPPINGS,
52
- e as DefaultPadding,
53
- n as HTML,
54
- s as MinDeviceViewport,
55
- a as REGEX,
56
- t as VerticalOrientation
49
+ m as CONDITIONS,
50
+ n as CSS,
51
+ t as DUMMY_IMAGE_MAPPINGS,
52
+ s as DefaultPadding,
53
+ a as HTML,
54
+ e as MinDeviceViewport,
55
+ _ as REGEX
57
56
  };
@@ -1,17 +1,17 @@
1
1
  import { useTranslations as e } from "../composables/useTranslations.js";
2
2
  import { getEnvironmentPrefix as R } from "../utils/environmentUtil.js";
3
- const I = {
3
+ const _ = {
4
4
  UNSUBSCRIBE_LINK_TYPE: 1,
5
5
  PREFERENCES_LINK_TYPE: 3
6
- }, r = {
6
+ }, I = {
7
7
  UNSUBSCRIBE_LINK_REGEX: /{{ins-unsubscribe-link}}/g,
8
8
  DATA_OGSB_BUTTON_CSS_REGEX: "\\[data-ogsb\\]\\s*\\.es-button\\.es-button-[0-9]+\\s*\\{(?:[^\\}]*)\\}",
9
9
  GLOBAL_UNSUBSCRIBE_LINK_REGEX: /{{ins-global-unsubscribe-link}}/g,
10
10
  PREFERENCES_UNSUBSCRIBE_LINK_REGEX: /{{ins-preferences-unsubscribe-link}}/g
11
- }, s = R(), _ = {
12
- UNSUBSCRIBE_URL: `https://mail.${s}.com/user/v1/unsub`,
13
- PREFERENCES_URL: `https://mail.${s}.com/user/v1/prefs`
14
- }, i = "iid", B = {
11
+ }, n = R(), r = {
12
+ UNSUBSCRIBE_URL: `https://mail.${n}.com/user/v1/unsub`,
13
+ PREFERENCES_URL: `https://mail.${n}.com/user/v1/prefs`
14
+ }, B = "iid", i = {
15
15
  name: "Global Unsubscribe",
16
16
  sendGridId: "G"
17
17
  }, C = "/email/unsubscribe-pages", E = {
@@ -20,6 +20,9 @@ const I = {
20
20
  SUBSCRIPTION_PREFERENCE_CENTER: 3,
21
21
  SUBSCRIPTION_PREFERENCE_CONFIRMATION: 4,
22
22
  RESUBSCRIBE: 5
23
+ }, U = {
24
+ [E.GLOBAL_UNSUBSCRIBE]: "custom-unsubscribe",
25
+ [E.SUBSCRIPTION_PREFERENCE_CENTER]: "custom-preferences"
23
26
  }, t = {
24
27
  [E.GLOBAL_UNSUBSCRIBE]: [
25
28
  E.GLOBAL_UNSUBSCRIBE,
@@ -30,29 +33,30 @@ const I = {
30
33
  E.SUBSCRIPTION_PREFERENCE_CENTER,
31
34
  E.SUBSCRIPTION_PREFERENCE_CONFIRMATION
32
35
  ]
33
- }, U = () => {
34
- const n = e();
36
+ }, c = () => {
37
+ const s = e();
35
38
  return {
36
- [E.GLOBAL_UNSUBSCRIBE]: n("unsubscription-preference.type-global-unsubscribe"),
37
- [E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]: n("unsubscription-preference.type-global-unsubscription-confirmation"),
38
- [E.RESUBSCRIBE]: n("unsubscription-preference.type-resubscribe"),
39
- [E.SUBSCRIPTION_PREFERENCE_CENTER]: n("unsubscription-preference.type-subscription-preferences-center"),
40
- [E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]: n("unsubscription-preference.type-subscription-preferences-confirmation")
39
+ [E.GLOBAL_UNSUBSCRIBE]: s("unsubscription-preference.type-global-unsubscribe"),
40
+ [E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]: s("unsubscription-preference.type-global-unsubscription-confirmation"),
41
+ [E.RESUBSCRIBE]: s("unsubscription-preference.type-resubscribe"),
42
+ [E.SUBSCRIPTION_PREFERENCE_CENTER]: s("unsubscription-preference.type-subscription-preferences-center"),
43
+ [E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]: s("unsubscription-preference.type-subscription-preferences-confirmation")
41
44
  };
42
- }, c = {
45
+ }, o = {
43
46
  default: "{{ins-unsubscribe-link}}",
44
47
  [E.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
45
48
  [E.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
46
49
  };
47
50
  export {
48
- B as DEFAULT_UNSUBSCRIBE_GROUP,
49
- i as INSIDER_ID,
50
- r as LINK_REGEXES,
51
- I as LINK_TYPES,
52
- c as MERGE_TAGS,
51
+ i as DEFAULT_UNSUBSCRIBE_GROUP,
52
+ B as INSIDER_ID,
53
+ I as LINK_REGEXES,
54
+ _ as LINK_TYPES,
55
+ o as MERGE_TAGS,
53
56
  E as PAGE_TYPES,
54
57
  t as TYPE_COLLECTIONS,
55
58
  C as UNSUBSCRIBE_PAGES_LINK,
56
- _ as URLS,
57
- U as getTypeTranslations
59
+ U as UNSUBSCRIBE_SYNC_MODULE_TYPES,
60
+ r as URLS,
61
+ c as getTypeTranslations
58
62
  };
@@ -1,28 +1,18 @@
1
- var u = Object.defineProperty;
2
- var p = (r, i, t) => i in r ? u(r, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[i] = t;
3
- var g = (r, i, t) => p(r, typeof i != "symbol" ? i + "" : i, t);
4
- import { Block as f, BlockCompositionType as I, ModificationDescription as h } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { RecommendationConfigService as s } from "./services/configService.js";
6
- import { useRecommendationExtensionStore as d } from "./store/recommendation.js";
7
- import { getDefaultTemplate as _ } from "./templates/grid/template.js";
8
- const k = "recommendation-block", c = "ins-recommendation-v3-block-v2", m = "recommendation-id";
9
- class b extends f {
1
+ import { Block as e, BlockCompositionType as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { getDefaultTemplate as o } from "./templates/blockTemplate.js";
3
+ const n = "recommendation-block";
4
+ class m extends e {
10
5
  constructor() {
11
6
  super();
12
- /**
13
- * Stores the ID generated in getTemplate() so onCreated() can reuse it.
14
- * This avoids generating a new (different) ID in onCreated().
15
- */
16
- g(this, "_pendingBlockId", null);
17
7
  }
18
8
  getId() {
19
- return k;
9
+ return n;
20
10
  }
21
11
  getIcon() {
22
12
  return "recommendation-icon";
23
13
  }
24
14
  getBlockCompositionType() {
25
- return I.CONTAINER;
15
+ return t.CONTAINER;
26
16
  }
27
17
  getName() {
28
18
  return this.api.translate("Recommendation Block");
@@ -30,122 +20,11 @@ class b extends f {
30
20
  getDescription() {
31
21
  return this.api.translate("Recommendation Block Title Description");
32
22
  }
33
- /**
34
- * Returns the template HTML for a new recommendation block.
35
- * Generates a unique recommendation ID and embeds the instance class
36
- * (ins-recommendation-v3-block-{id}) directly in the template HTML.
37
- * This is necessary because Stripo's Angular rendering manages the class
38
- * attribute and overwrites dynamically added classes via setAttribute.
39
- */
40
23
  getTemplate() {
41
- const t = this._generateNextId();
42
- return this._pendingBlockId = t, _(t);
43
- }
44
- /**
45
- * Called when a new block is dropped into the template
46
- *
47
- * Uses the ID from getTemplate() (which already embedded the instance class)
48
- * and assigns the recommendation-id attribute + initializes configuration.
49
- * @param node - The newly created block node
50
- */
51
- onCreated(t) {
52
- const e = this._pendingBlockId ?? this._generateNextId();
53
- this._pendingBlockId = null, this._assignRecommendationId(t, e), s.initializeConfig(this.api, t, { recommendationId: e }), d().setCurrentBlock(e);
54
- }
55
- /**
56
- * Called when the document changes or template is loaded
57
- *
58
- * Handles migration from legacy templates that don't have node config
59
- * and assigns recommendation-id to legacy blocks that lack one.
60
- * @param node - The block node that may need migration
61
- */
62
- onDocumentChanged(t) {
63
- if (!(!t || !("getNodeConfig" in t))) {
64
- if (!this._getRecommendationId(t)) {
65
- const e = this._generateNextId();
66
- this._assignRecommendationId(t, e), s.hasConfig(t) && s.updateConfig(
67
- this.api,
68
- t,
69
- { recommendationId: e },
70
- "Assign recommendation ID to legacy block"
71
- );
72
- }
73
- s.needsMigration(t) && this._migrateFromLegacy(t);
74
- }
75
- }
76
- /**
77
- * Called when a block is deleted from the template
78
- *
79
- * Cleans up the per-block state from the Pinia store.
80
- * @param node - The block node being deleted
81
- */
82
- onDelete(t) {
83
- const e = this._getRecommendationId(t);
84
- e && d().removeBlockState(e);
85
- }
86
- /**
87
- * Generates the next unique recommendation ID by scanning all existing blocks
88
- * in the document and finding the maximum existing ID + 1.
89
- */
90
- _generateNextId() {
91
- let t = 0;
92
- try {
93
- const e = this.api.getDocumentRoot();
94
- e && "querySelectorAll" in e && e.querySelectorAll(`.${c}`).forEach((o) => {
95
- if ("getAttribute" in o) {
96
- const a = o.getAttribute(m), l = a ? parseInt(a) : 0;
97
- l > t && (t = l);
98
- }
99
- });
100
- } catch {
101
- }
102
- return t + 1;
103
- }
104
- /**
105
- * Assigns a recommendation-id attribute to the block element.
106
- * The instance class (ins-recommendation-v3-block-{id}) is embedded in the template
107
- * HTML by getTemplate(), since Stripo's Angular rendering overwrites dynamically
108
- * added classes via setAttribute.
109
- */
110
- _assignRecommendationId(t, e) {
111
- const n = this._getBlockElement(t);
112
- if (!n)
113
- return;
114
- const o = this.api.getDocumentModifier();
115
- o.modifyHtml(n).setAttribute(m, e.toString()), o.apply(new h(`Assign recommendation ID ${e}`));
116
- }
117
- /**
118
- * Gets the recommendation-id from a block node
119
- */
120
- _getRecommendationId(t) {
121
- const e = this._getBlockElement(t);
122
- if (!e || !("getAttribute" in e))
123
- return null;
124
- const n = e.getAttribute(m);
125
- if (!n)
126
- return null;
127
- const o = parseInt(n);
128
- return Number.isNaN(o) ? null : o;
129
- }
130
- /**
131
- * Gets the block element (the element with BLOCK_CLASS)
132
- */
133
- _getBlockElement(t) {
134
- if ("getAttribute" in t) {
135
- const e = t.getAttribute("class");
136
- if (e && e.includes(c))
137
- return t;
138
- }
139
- return "querySelector" in t ? t.querySelector(`.${c}`) : null;
140
- }
141
- /**
142
- * Migrate configuration from legacy format
143
- */
144
- _migrateFromLegacy(t) {
145
- s.migrateFromDataAttributes(this.api, t);
24
+ return o();
146
25
  }
147
26
  }
148
27
  export {
149
- k as BLOCK_ID,
150
- b as RecommendationBlock
28
+ n as BLOCK_ID,
29
+ m as RecommendationBlock
151
30
  };