@useinsider/guido 2.1.0-beta.8e15673 → 2.1.0-beta.963cc01

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 (146) hide show
  1. package/README.md +2 -2
  2. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +14 -15
  3. package/dist/composables/useHtmlValidator.js +84 -106
  4. package/dist/composables/useRecommendation.js +21 -54
  5. package/dist/composables/useSave.js +16 -12
  6. package/dist/composables/useStripo.js +58 -54
  7. package/dist/composables/useStripoEventHandler.js +27 -12
  8. package/dist/composables/useSyncModuleExtractor.js +33 -0
  9. package/dist/config/compiler/recommendationCompilerRules.js +39 -45
  10. package/dist/config/migrator/recommendationMigrator.js +2 -2
  11. package/dist/enums/extensions/recommendationBlock.js +1 -1
  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 -133
  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 +207 -256
  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/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +169 -225
  38. package/dist/services/recommendationApi.js +8 -11
  39. package/dist/services/stripoApi.js +50 -14
  40. package/dist/services/templateLibraryApi.js +13 -16
  41. package/dist/src/@types/events.d.ts +34 -2
  42. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  43. package/dist/src/composables/useRecommendation.d.ts +0 -1
  44. package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
  45. package/dist/src/enums/unsubscribe.d.ts +3 -0
  46. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -67
  47. package/dist/src/extensions/Blocks/Recommendation/{controls/cardComposition/index.d.ts → cardCompositionControl.d.ts} +3 -23
  48. package/dist/src/extensions/Blocks/Recommendation/{constants/controlIds.d.ts → constants.d.ts} +24 -0
  49. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +38 -0
  50. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +589 -21
  51. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  52. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +0 -9
  53. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +468 -138
  54. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  55. package/dist/src/extensions/Blocks/Recommendation/templates/{grid/migration.d.ts → migrationTemplate.d.ts} +4 -11
  56. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +52 -0
  57. package/dist/src/mock/api/settings.d.ts +2 -0
  58. package/dist/src/services/stripoApi.d.ts +5 -0
  59. package/dist/src/stores/editor.d.ts +23 -0
  60. package/dist/static/styles/customEditorStyle.css.js +11 -35
  61. package/dist/stores/editor.js +2 -1
  62. package/dist/utils/pairProductVariables.js +56 -57
  63. package/dist/utils/templatePreparation.js +14 -15
  64. package/package.json +1 -1
  65. package/dist/config/compiler/utils/recommendationCompilerUtils.js +0 -116
  66. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +0 -4
  67. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +0 -4
  68. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +0 -66
  69. package/dist/extensions/Blocks/Recommendation/constants/layout.js +0 -22
  70. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +0 -21
  71. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +0 -64
  72. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +0 -80
  73. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +0 -232
  74. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +0 -19
  75. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +0 -92
  76. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +0 -102
  77. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +0 -209
  78. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +0 -52
  79. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +0 -218
  80. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +0 -70
  81. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +0 -160
  82. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +0 -67
  83. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -307
  84. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +0 -21
  85. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +0 -46
  86. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +0 -108
  87. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +0 -44
  88. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +0 -48
  89. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +0 -48
  90. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +0 -44
  91. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +0 -222
  92. package/dist/extensions/Blocks/Recommendation/services/configService.js +0 -240
  93. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +0 -233
  94. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +0 -251
  95. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +0 -66
  96. package/dist/extensions/Blocks/Recommendation/templates/index.js +0 -12
  97. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +0 -174
  98. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +0 -73
  99. package/dist/extensions/Blocks/Recommendation/templates/utils.js +0 -134
  100. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +0 -6
  101. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +0 -29
  102. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +0 -46
  103. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +0 -17
  104. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +0 -13
  105. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -49
  106. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +0 -13
  107. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +0 -41
  108. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -35
  109. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +0 -143
  110. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -31
  111. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +0 -35
  112. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +0 -37
  113. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -29
  114. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +0 -52
  115. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +0 -22
  116. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -67
  117. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +0 -24
  118. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -60
  119. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -23
  120. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -221
  121. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +0 -29
  122. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +0 -97
  123. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -34
  124. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -95
  125. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -100
  126. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -15
  127. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -15
  128. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -100
  129. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -15
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -15
  131. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +0 -95
  132. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +0 -83
  133. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +0 -151
  134. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +0 -6
  135. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +0 -20
  136. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +0 -33
  137. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +0 -41
  138. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +0 -8
  139. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +0 -25
  140. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +0 -18
  141. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +0 -66
  142. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +0 -7
  143. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +0 -166
  144. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +0 -33
  145. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +0 -113
  146. 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,5 +1,5 @@
1
1
  const s = {
2
- RECOMMENDATION_API_URL: "https://recommendationv2.api.useinsider.com"
2
+ RECOMMENDATION_API_URL: "http://recommendationv2.api.useinsider.com"
3
3
  }, i = [
4
4
  { id: 11, key: "similarViewed", name: "Viewed Together", path: "viewed-together" },
5
5
  { id: 12, key: "similarBought", name: "Purchased Together", path: "purchased-together" },
@@ -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,29 +1,18 @@
1
- var p = Object.defineProperty;
2
- var f = (r, o, t) => o in r ? p(r, o, { enumerable: !0, configurable: !0, writable: !0, value: t }) : r[o] = t;
3
- var g = (r, o, t) => f(r, typeof o != "symbol" ? o + "" : o, t);
4
- import { Block as h, BlockCompositionType as I, ModificationDescription as _ } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { ensureMobileCssRulesExist as d } from "./controls/mobileLayout/cssRules.js";
6
- import { RecommendationConfigService as s } from "./services/configService.js";
7
- import { useRecommendationExtensionStore as u } from "./store/recommendation.js";
8
- import { getDefaultTemplate as k } from "./templates/grid/template.js";
9
- const B = "recommendation-block", c = "ins-recommendation-v3-block-v2", a = "recommendation-id";
10
- class y extends h {
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 {
11
5
  constructor() {
12
6
  super();
13
- /**
14
- * Stores the ID generated in getTemplate() so onCreated() can reuse it.
15
- * This avoids generating a new (different) ID in onCreated().
16
- */
17
- g(this, "_pendingBlockId", null);
18
7
  }
19
8
  getId() {
20
- return B;
9
+ return n;
21
10
  }
22
11
  getIcon() {
23
12
  return "recommendation-icon";
24
13
  }
25
14
  getBlockCompositionType() {
26
- return I.CONTAINER;
15
+ return t.CONTAINER;
27
16
  }
28
17
  getName() {
29
18
  return this.api.translate("Recommendation Block");
@@ -31,124 +20,11 @@ class y extends h {
31
20
  getDescription() {
32
21
  return this.api.translate("Recommendation Block Title Description");
33
22
  }
34
- /**
35
- * Returns the template HTML for a new recommendation block.
36
- * Generates a unique recommendation ID and embeds the instance class
37
- * (ins-recommendation-v3-block-{id}) directly in the template HTML.
38
- * This is necessary because Stripo's Angular rendering manages the class
39
- * attribute and overwrites dynamically added classes via setAttribute.
40
- */
41
23
  getTemplate() {
42
- const t = this._generateNextId();
43
- return this._pendingBlockId = t, k(t);
44
- }
45
- /**
46
- * Called when a new block is dropped into the template
47
- *
48
- * Uses the ID from getTemplate() (which already embedded the instance class)
49
- * and assigns the recommendation-id attribute + initializes configuration.
50
- * @param node - The newly created block node
51
- */
52
- onCreated(t) {
53
- const e = this._pendingBlockId ?? this._generateNextId();
54
- this._pendingBlockId = null, this._assignRecommendationId(t, e);
55
- const n = s.initializeConfig(this.api, t, { recommendationId: e }), i = u();
56
- i.setCurrentBlock(e), d(this.api), i.patchCurrentBlockConfig({ language: n.language }, { triggerRefetch: !1 });
57
- }
58
- /**
59
- * Called when the document changes or template is loaded
60
- *
61
- * Handles migration from legacy templates that don't have node config
62
- * and assigns recommendation-id to legacy blocks that lack one.
63
- * @param node - The block node that may need migration
64
- */
65
- onDocumentChanged(t) {
66
- if (!(!t || !("getNodeConfig" in t))) {
67
- if (!this._getRecommendationId(t)) {
68
- const e = this._generateNextId();
69
- this._assignRecommendationId(t, e), s.hasConfig(t) && s.updateConfig(
70
- this.api,
71
- t,
72
- { recommendationId: e },
73
- "Assign recommendation ID to legacy block"
74
- );
75
- }
76
- s.needsMigration(t) && this._migrateFromLegacy(t), d(this.api);
77
- }
78
- }
79
- /**
80
- * Called when a block is deleted from the template
81
- *
82
- * Cleans up the per-block state from the Pinia store.
83
- * @param node - The block node being deleted
84
- */
85
- onDelete(t) {
86
- const e = this._getRecommendationId(t);
87
- e && u().removeBlockState(e);
88
- }
89
- /**
90
- * Generates the next unique recommendation ID by scanning all existing blocks
91
- * in the document and finding the maximum existing ID + 1.
92
- */
93
- _generateNextId() {
94
- let t = 0;
95
- try {
96
- const e = this.api.getDocumentRoot();
97
- e && "querySelectorAll" in e && e.querySelectorAll(`.${c}`).forEach((i) => {
98
- if ("getAttribute" in i) {
99
- const m = i.getAttribute(a), l = m ? parseInt(m) : 0;
100
- l > t && (t = l);
101
- }
102
- });
103
- } catch {
104
- }
105
- return t + 1;
106
- }
107
- /**
108
- * Assigns a recommendation-id attribute to the block element.
109
- * The instance class (ins-recommendation-v3-block-{id}) is embedded in the template
110
- * HTML by getTemplate(), since Stripo's Angular rendering overwrites dynamically
111
- * added classes via setAttribute.
112
- */
113
- _assignRecommendationId(t, e) {
114
- const n = this._getBlockElement(t);
115
- if (!n)
116
- return;
117
- const i = this.api.getDocumentModifier();
118
- i.modifyHtml(n).setAttribute(a, e.toString()), i.apply(new _(`Assign recommendation ID ${e}`));
119
- }
120
- /**
121
- * Gets the recommendation-id from a block node
122
- */
123
- _getRecommendationId(t) {
124
- const e = this._getBlockElement(t);
125
- if (!e || !("getAttribute" in e))
126
- return null;
127
- const n = e.getAttribute(a);
128
- if (!n)
129
- return null;
130
- const i = parseInt(n);
131
- return Number.isNaN(i) ? null : i;
132
- }
133
- /**
134
- * Gets the block element (the element with BLOCK_CLASS)
135
- */
136
- _getBlockElement(t) {
137
- if ("getAttribute" in t) {
138
- const e = t.getAttribute("class");
139
- if (e && e.includes(c))
140
- return t;
141
- }
142
- return "querySelector" in t ? t.querySelector(`.${c}`) : null;
143
- }
144
- /**
145
- * Migrate configuration from legacy format
146
- */
147
- _migrateFromLegacy(t) {
148
- s.migrateFromDataAttributes(this.api, t);
24
+ return o();
149
25
  }
150
26
  }
151
27
  export {
152
- B as BLOCK_ID,
153
- y as RecommendationBlock
28
+ n as BLOCK_ID,
29
+ m as RecommendationBlock
154
30
  };