@useinsider/guido 2.0.0-beta.d170da6 → 2.0.0-beta.d2098bd

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 (136) hide show
  1. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue.js +8 -8
  2. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue2.js +12 -11
  3. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +7 -8
  4. package/dist/components/organisms/email-preview/amp/AmpToggle.vue2.js +14 -12
  5. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +10 -14
  6. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +18 -22
  7. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +3 -3
  8. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue.js +10 -10
  9. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue2.js +15 -14
  10. package/dist/components/organisms/header/LeftSlot.vue.js +2 -2
  11. package/dist/components/organisms/header/MiddleSlot.vue.js +5 -4
  12. package/dist/components/organisms/header/MiddleSlot.vue2.js +14 -13
  13. package/dist/components/organisms/header/RightSlot.vue.js +7 -7
  14. package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +15 -15
  15. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +1 -1
  16. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +20 -19
  17. package/dist/components/wrappers/WpModal.vue.js +4 -3
  18. package/dist/enums/academy.js +8 -0
  19. package/dist/enums/onboarding.js +1 -2
  20. package/dist/enums/unsubscribe.js +20 -21
  21. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +69 -153
  22. package/dist/extensions/Blocks/Recommendation/constants.js +1 -9
  23. package/dist/extensions/Blocks/Recommendation/control.js +59 -74
  24. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +13 -0
  25. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +13 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +13 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +13 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +13 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +13 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +13 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +13 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +13 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +13 -0
  34. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +13 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +13 -0
  36. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +13 -0
  37. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +13 -0
  38. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +13 -0
  39. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +13 -0
  40. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +13 -0
  41. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +13 -0
  42. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +13 -0
  43. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +13 -0
  44. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +13 -0
  45. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +13 -0
  46. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +13 -0
  47. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +13 -0
  48. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +13 -0
  49. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +13 -0
  50. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +13 -0
  51. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +13 -0
  52. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +13 -0
  53. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +13 -0
  54. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +13 -0
  55. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +13 -0
  56. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +13 -0
  57. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +13 -0
  58. package/dist/extensions/Blocks/Recommendation/extension.js +42 -16
  59. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +72 -117
  60. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +64 -85
  61. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +17 -54
  62. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +45 -74
  63. package/dist/guido.css +1 -1
  64. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +52 -47
  65. package/dist/src/enums/academy.d.ts +12 -0
  66. package/dist/src/enums/onboarding.d.ts +0 -1
  67. package/dist/src/enums/unsubscribe.d.ts +0 -1
  68. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +3 -50
  69. package/dist/src/extensions/Blocks/Recommendation/constants.d.ts +0 -32
  70. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +2 -5
  71. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +5 -0
  72. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +5 -0
  73. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +5 -0
  74. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +5 -0
  75. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +5 -0
  76. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +5 -0
  77. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +5 -0
  78. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +5 -0
  79. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +5 -0
  80. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +5 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +5 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +5 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +5 -0
  84. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +5 -0
  85. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +5 -0
  86. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +5 -0
  87. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +5 -0
  88. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +5 -0
  89. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +5 -0
  90. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +5 -0
  91. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +5 -0
  92. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +5 -0
  93. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +5 -0
  94. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +5 -0
  95. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +5 -0
  96. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +5 -0
  97. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +5 -0
  98. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +5 -0
  99. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +5 -0
  100. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +5 -0
  101. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +5 -0
  102. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +5 -0
  103. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +5 -0
  104. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +5 -0
  105. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +3 -3
  106. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +7 -15
  107. package/dist/static/assets/desktop/desktop-mockup-center.svg.js +4 -0
  108. package/dist/static/assets/desktop/desktop-mockup-left.svg.js +4 -0
  109. package/dist/static/assets/desktop/desktop-mockup-right.svg.js +4 -0
  110. package/dist/static/assets/mobile/email-mockup.svg.js +4 -0
  111. package/dist/static/assets/mobile/inbox-mockup.svg.js +4 -0
  112. package/dist/static/styles/components/wide-panel.css.js +4 -0
  113. package/dist/static/styles/customEditorStyle.css.js +0 -13
  114. package/package.json +1 -1
  115. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue.js +0 -17
  116. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue2.js +0 -20
  117. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  118. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  119. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  120. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.js +0 -71
  121. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.js +0 -71
  122. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.js +0 -71
  123. package/dist/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.js +0 -71
  124. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  125. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +0 -25
  126. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.d.ts +0 -25
  127. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +0 -592
  128. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  129. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextAfterControl.d.ts +0 -15
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscountTextBeforeControl.d.ts +0 -15
  131. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextAfterControl.d.ts +0 -15
  132. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPriceTextBeforeControl.d.ts +0 -15
  133. package/dist/src/extensions/Blocks/Recommendation/controls/spacingControl.d.ts +0 -60
  134. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -19
  135. package/dist/static/assets/inbox-mockup.svg.js +0 -4
  136. package/dist/static/assets/phone-mockup.svg.js +0 -4
@@ -0,0 +1,8 @@
1
+ const e = "https://academy.useinsider.com", o = {
2
+ EMAIL_EDITOR: `${e}/docs/email-drag-drop-editor`,
3
+ GLOBAL_UNSUBSCRIBE: `${e}/docs/global-unsubscribe-preference-center`,
4
+ AMP_FOR_EMAILS: `${e}/docs/amp-for-emails`
5
+ };
6
+ export {
7
+ o as ACADEMY_LINKS
8
+ };
@@ -2,9 +2,8 @@ const e = [
2
2
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-0.ng-star-inserted",
3
3
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-1.ng-star-inserted",
4
4
  ".service-element.stacked-panel-item.ng-tns-c1014751574-3.level-bottom-2.ng-star-inserted"
5
- ], t = "ui-editor", n = 'button[role="tab"][aria-label="Card Composition"]', s = 'button[role="tab"][aria-label="Settings"]', o = ".in-ribbons-wrapper", a = "https://academy.useinsider.com/docs/email-drag-drop-editor";
5
+ ], t = "ui-editor", n = 'button[role="tab"][aria-label="Card Composition"]', s = 'button[role="tab"][aria-label="Settings"]', o = ".in-ribbons-wrapper";
6
6
  export {
7
- a as ACADEMY_LINK,
8
7
  n as CARD_COMPOSITION_TAB_SELECTOR,
9
8
  o as RIBBON_SELECTOR,
10
9
  e as SERVICE_HOVER_SELECTORS,
@@ -1,26 +1,26 @@
1
- import { useTranslations as n } from "../composables/useTranslations.js";
1
+ import { useTranslations as e } from "../composables/useTranslations.js";
2
2
  import { getEnvironmentPrefix as R } from "../utils/environmentUtil.js";
3
- const N = {
3
+ const I = {
4
4
  UNSUBSCRIBE_LINK_TYPE: 1,
5
5
  PREFERENCES_LINK_TYPE: 3
6
- }, I = {
6
+ }, r = {
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(), i = {
11
+ }, s = R(), _ = {
12
12
  UNSUBSCRIBE_URL: `https://mail.${s}.com/user/v1/unsub`,
13
13
  PREFERENCES_URL: `https://mail.${s}.com/user/v1/prefs`
14
- }, _ = "iid", B = {
14
+ }, i = "iid", B = {
15
15
  name: "Global Unsubscribe",
16
16
  sendGridId: "G"
17
- }, t = "https://academy.useinsider.com/docs/global-unsubscribe-preference-center", C = "/email/unsubscribe-pages", E = {
17
+ }, C = "/email/unsubscribe-pages", E = {
18
18
  GLOBAL_UNSUBSCRIBE: 1,
19
19
  GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE: 2,
20
20
  SUBSCRIPTION_PREFERENCE_CENTER: 3,
21
21
  SUBSCRIPTION_PREFERENCE_CONFIRMATION: 4,
22
22
  RESUBSCRIBE: 5
23
- }, c = {
23
+ }, t = {
24
24
  [E.GLOBAL_UNSUBSCRIBE]: [
25
25
  E.GLOBAL_UNSUBSCRIBE,
26
26
  E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE,
@@ -31,29 +31,28 @@ const N = {
31
31
  E.SUBSCRIPTION_PREFERENCE_CONFIRMATION
32
32
  ]
33
33
  }, U = () => {
34
- const e = n();
34
+ const n = e();
35
35
  return {
36
- [E.GLOBAL_UNSUBSCRIBE]: e("unsubscription-preference.type-global-unsubscribe"),
37
- [E.GLOBAL_UNSUBSCRIBE_CONFIRMATION_PAGE]: e("unsubscription-preference.type-global-unsubscription-confirmation"),
38
- [E.RESUBSCRIBE]: e("unsubscription-preference.type-resubscribe"),
39
- [E.SUBSCRIPTION_PREFERENCE_CENTER]: e("unsubscription-preference.type-subscription-preferences-center"),
40
- [E.SUBSCRIPTION_PREFERENCE_CONFIRMATION]: e("unsubscription-preference.type-subscription-preferences-confirmation")
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")
41
41
  };
42
- }, o = {
42
+ }, c = {
43
43
  default: "{{ins-unsubscribe-link}}",
44
44
  [E.GLOBAL_UNSUBSCRIBE]: "{{ins-global-unsubscribe-link}}",
45
45
  [E.SUBSCRIPTION_PREFERENCE_CENTER]: "{{ins-preferences-unsubscribe-link}}"
46
46
  };
47
47
  export {
48
- t as ACADEMY_LINK,
49
48
  B as DEFAULT_UNSUBSCRIBE_GROUP,
50
- _ as INSIDER_ID,
51
- I as LINK_REGEXES,
52
- N as LINK_TYPES,
53
- o as MERGE_TAGS,
49
+ i as INSIDER_ID,
50
+ r as LINK_REGEXES,
51
+ I as LINK_TYPES,
52
+ c as MERGE_TAGS,
54
53
  E as PAGE_TYPES,
55
- c as TYPE_COLLECTIONS,
54
+ t as TYPE_COLLECTIONS,
56
55
  C as UNSUBSCRIBE_PAGES_LINK,
57
- i as URLS,
56
+ _ as URLS,
58
57
  U as getTypeTranslations
59
58
  };
@@ -1,187 +1,103 @@
1
- import { ModificationDescription as n } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { CommonControl as _ } from "../common-control.js";
3
- import { ATTR_PRODUCT_IMAGE as m, ATTR_PRODUCT_NAME as y, ATTR_PRODUCT_PRICE as T, ATTR_PRODUCT_OLD_PRICE as h, ATTR_PRODUCT_OMNIBUS_PRICE as C, ATTR_PRODUCT_OMNIBUS_DISCOUNT as f, ATTR_PRODUCT_BUTTON as g } from "./constants.js";
4
- const R = "ui-elements-recommendation-card-composition", l = ".recommendation-attribute-row", A = "tr.recommendation-product-row", c = "data-card-composition", a = "data-attribute-type", d = "data-visibility", s = [
5
- { key: m, label: "Product Image", visible: !0 },
6
- { key: y, label: "Product Name", visible: !0 },
7
- { key: T, label: "Product Price", visible: !0 },
8
- { key: h, label: "Product Original Price", visible: !0 },
9
- { key: C, label: "Omnibus Price", visible: !1 },
10
- { key: f, label: "Omnibus Discount", visible: !1 },
11
- { key: g, label: "Product Button", visible: !0 }
1
+ var m = Object.defineProperty;
2
+ var y = (n, o, i) => o in n ? m(n, o, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[o] = i;
3
+ var a = (n, o, i) => y(n, typeof o != "symbol" ? o + "" : o, i);
4
+ import { ModificationDescription as u } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { CommonControl as b } from "../common-control.js";
6
+ const h = "ui-elements-recommendation-card-composition", s = [
7
+ { key: "productImage", label: "Product Image", visible: !0 },
8
+ { key: "productName", label: "Product Name", visible: !0 },
9
+ { key: "productPrice", label: "Product Price", visible: !0 },
10
+ { key: "productOriginalPrice", label: "Product Original Price", visible: !0 },
11
+ { key: "productButton", label: "Product Button", visible: !0 }
12
12
  ];
13
- class N extends _ {
13
+ class g extends b {
14
+ constructor() {
15
+ super(...arguments);
16
+ a(this, "currentComposition", []);
17
+ a(this, "currentVisibility", {});
18
+ }
14
19
  getId() {
15
- return R;
20
+ return h;
16
21
  }
17
22
  getTemplate() {
18
- const t = s.map((i) => ({
19
- key: i.key,
20
- label: i.label,
21
- content: this._createItemContent(i.label, i.key)
23
+ const i = s.map((e) => ({
24
+ key: e.key,
25
+ label: e.label,
26
+ content: `
27
+ <div style="display: flex; align-items: center; justify-content: space-between;
28
+ padding: 8px; gap: 8px;">
29
+ <span style="flex: 1;">${e.label}</span>
30
+ ${this._GuToggle(`visibility_${e.key}`)}
31
+ </div>
32
+ `
22
33
  }));
23
34
  return `
24
35
  <div class="container">
25
36
  ${this._GuLabel({ text: "Card Element Order & Visibility" })}
26
- ${this._GuOrderable("cardComposition", t)}
37
+ ${this._GuOrderable("cardComposition", i)}
27
38
  </div>
28
39
  `;
29
40
  }
30
41
  onRender() {
31
- this._initializeComposition(), this._registerValueChangeListeners();
32
- }
33
- onTemplateNodeUpdated(t) {
34
- super.onTemplateNodeUpdated(t), this._initializeComposition();
35
- }
36
- /**
37
- * Creates the HTML content for an orderable item with label and toggle
38
- */
39
- _createItemContent(t, i) {
40
- return `
41
- <div style="display: flex; align-items: center; justify-content: space-between;
42
- padding: 8px; gap: 8px;">
43
- <span style="flex: 1;">${t}</span>
44
- ${this._GuToggle(`visibility_${i}`)}
45
- </div>
46
- `;
47
- }
48
- /**
49
- * Registers event listeners for composition and visibility changes
50
- */
51
- _registerValueChangeListeners() {
52
- this.api.onValueChanged("cardComposition", (t) => {
53
- this._applyCompositionToBlock(t);
54
- }), s.forEach((t) => {
55
- this.api.onValueChanged(`visibility_${t.key}`, (i) => {
56
- this._applyVisibilityToBlock(t.key, i);
42
+ this._initializeComposition(), this.api.onValueChanged("cardComposition", (i) => {
43
+ this.currentComposition = i, this._applyCompositionToBlock(i);
44
+ }), s.forEach((i) => {
45
+ this.api.onValueChanged(`visibility_${i.key}`, (e) => {
46
+ this.currentVisibility[i.key] = e, this._applyVisibilityToBlock();
57
47
  });
58
48
  });
59
49
  }
50
+ onTemplateNodeUpdated(i) {
51
+ super.onTemplateNodeUpdated(i), this._initializeComposition();
52
+ }
60
53
  /**
61
- * Initializes composition order and visibility state from the current node
54
+ * Initialize the composition order and visibility from the block or use defaults
62
55
  */
63
56
  _initializeComposition() {
64
- const t = this._readCompositionFromNode(), i = this._readVisibilityFromRows(), e = {
65
- cardComposition: t,
66
- ...this._buildVisibilityValues(i)
57
+ var p;
58
+ const i = (p = this.currentNode) == null ? void 0 : p.querySelector(".ins-recommendation-v3-block-v2");
59
+ let e = null, l = null;
60
+ if (i && "getAttribute" in i && (e = i.getAttribute("data-card-composition"), l = i.getAttribute("data-card-visibility")), e) {
61
+ const t = e.split(",").filter(Boolean), r = s.map((c) => c.key);
62
+ t.every((c) => r.includes(c)) && t.length > 0 ? this.currentComposition = t : this.currentComposition = r;
63
+ } else
64
+ this.currentComposition = s.map((t) => t.key);
65
+ if (l)
66
+ try {
67
+ const t = JSON.parse(l);
68
+ this.currentVisibility = t;
69
+ } catch {
70
+ this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
71
+ }
72
+ else
73
+ this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
74
+ const d = {
75
+ cardComposition: this.currentComposition
67
76
  };
68
- this.api.updateValues(e);
69
- }
70
- /**
71
- * Reads composition order from node's data-card-composition attribute
72
- * Falls back to default order if attribute is not present
73
- */
74
- _readCompositionFromNode() {
75
- if (!this.currentNode || !("getAttribute" in this.currentNode))
76
- return s.map((i) => i.key);
77
- const t = this.currentNode.getAttribute(c);
78
- return t ? t.split(",").filter(Boolean) : s.map((i) => i.key);
79
- }
80
- /**
81
- * Builds visibility values object from the visibility map
82
- */
83
- _buildVisibilityValues(t) {
84
- return s.reduce((i, e) => (i[`visibility_${e.key}`] = t[e.key] ?? !0, i), {});
85
- }
86
- /**
87
- * Read visibility state from individual row elements' data-visibility attributes
88
- * This ensures toggles reflect the actual DOM state
89
- */
90
- _readVisibilityFromRows() {
91
- if (!this.currentNode)
92
- return this._getDefaultVisibilities();
93
- const t = Array.from(this.currentNode.querySelectorAll(l));
94
- console.debug("_readVisibilityFromRows - found attribute rows:", t.length);
95
- const i = this._extractVisibilityFromRows(t);
96
- return this._mergeWithDefaults(i);
97
- }
98
- /**
99
- * Returns default visibility values for all items
100
- */
101
- _getDefaultVisibilities() {
102
- return s.reduce((t, i) => (t[i.key] = i.visible, t), {});
103
- }
104
- /**
105
- * Extracts visibility values from DOM nodes
106
- */
107
- _extractVisibilityFromRows(t) {
108
- const i = {};
109
- return t.forEach((e) => {
110
- if (!("getAttribute" in e))
111
- return;
112
- const o = e.getAttribute(a), r = e.getAttribute(d);
113
- o && r !== null && (i[o] = this._parseVisibilityValue(r), console.debug(
114
- `_readVisibilityFromRows - ${o}: ${i[o]} (raw: ${r})`
115
- ));
116
- }), i;
117
- }
118
- /**
119
- * Parses visibility value from string to boolean
120
- * Accepts "1", "true" as true, everything else as false
121
- */
122
- _parseVisibilityValue(t) {
123
- return t === "1" || t === "true";
124
- }
125
- /**
126
- * Merges extracted visibilities with default values for missing keys
127
- */
128
- _mergeWithDefaults(t) {
129
- return s.forEach((i) => {
130
- i.key in t || (t[i.key] = i.visible, console.debug(`_readVisibilityFromRows - ${i.key}: using default ${i.visible}`));
131
- }), t;
77
+ s.forEach((t) => {
78
+ d[`visibility_${t.key}`] = this.currentVisibility[t.key] ?? !0;
79
+ }), this.api.updateValues(d);
132
80
  }
133
81
  /**
134
82
  * Apply the reordered composition to the block's HTML structure
135
- * Updates the data-card-composition attribute and reorders product attributes
136
- */
137
- _applyCompositionToBlock(t) {
138
- if (console.debug("_applyCompositionToBlock - composition:", t), !this.currentNode) {
139
- console.debug("_applyCompositionToBlock - no current node");
140
- return;
141
- }
142
- this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(c, t.join(",")).apply(new n("Update card composition")), this._reorderProductAttributes(t);
143
- }
144
- /**
145
- * Reorders attribute rows within each product row based on composition order
146
83
  */
147
- _reorderProductAttributes(t) {
84
+ _applyCompositionToBlock(i) {
148
85
  if (!this.currentNode)
149
86
  return;
150
- const i = this.currentNode.querySelectorAll(A);
151
- if (!(i != null && i.length))
152
- return;
153
- const e = this.api.getDocumentModifier();
154
- i.forEach((o) => {
155
- const r = this._buildCompositionHtml(o, t);
156
- e.modifyHtml(o).setInnerHtml(r);
157
- }), e.apply(new n("Reorder product attributes"));
158
- }
159
- /**
160
- * Builds HTML string with attributes ordered according to composition
161
- */
162
- _buildCompositionHtml(t, i) {
163
- return i.reduce((e, o) => {
164
- const r = t.querySelector(`${l}[${a}="${o}"]`);
165
- return r && "getOuterHTML" in r ? e + r.getOuterHTML() : e;
166
- }, "");
87
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
88
+ e && this.api.getDocumentModifier().modifyHtml(e).setAttribute("data-card-composition", i.join(",")).apply(new u("Stored card composition order"));
167
89
  }
168
90
  /**
169
91
  * Apply visibility changes to the block's HTML structure
170
- * Updates display style and data-visibility attribute for all matching rows
171
92
  */
172
- _applyVisibilityToBlock(t, i) {
173
- if (console.debug("_applyVisibilityToBlock", t, i), !this.currentNode)
174
- return;
175
- const e = this.currentNode.querySelectorAll(`${l}[${a}="${t}"]`);
176
- if (!(e != null && e.length))
93
+ _applyVisibilityToBlock() {
94
+ if (!this.currentNode)
177
95
  return;
178
- const o = i ? "table-row" : "none", r = i ? "1" : "0", p = `Set ${t} visibility to ${i ? "visible" : "hidden"}`, u = this.api.getDocumentModifier();
179
- e.forEach((b) => {
180
- u.modifyHtml(b).setStyle("display", o).setAttribute(d, r);
181
- }), u.apply(new n(p));
96
+ const i = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
97
+ i && this.api.getDocumentModifier().modifyHtml(i).setAttribute("data-card-visibility", JSON.stringify(this.currentVisibility)).apply(new u("Stored card visibility settings"));
182
98
  }
183
99
  }
184
100
  export {
185
- R as COMPOSITION_CONTROL_BLOCK_ID,
186
- N as RecommendationCardCompositionControl
101
+ h as COMPOSITION_CONTROL_BLOCK_ID,
102
+ g as RecommendationCardCompositionControl
187
103
  };
@@ -1,13 +1,5 @@
1
- const _ = "productImage", b = "productName", n = "productPrice", i = "productOldPrice", O = "productOmnibusPrice", T = "productOmnibusDiscount", t = "productButton";
2
- var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.OMNIBUS_PRICE = "recommendation-block-omnibus-price", c.OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.NAME_TEXT_TRIM = "recommendation-block-name-text-trim-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.OMNIBUS_PRICE_ALIGN = "recommendation-block-omnibus-price-align-control", c.OMNIBUS_PRICE_BACKGROUND = "recommendation-block-omnibus-price-background-control", c.OMNIBUS_PRICE_COLOR = "recommendation-block-omnibus-price-color-control", c.OMNIBUS_PRICE_FONT_FAMILY = "recommendation-block-omnibus-price-font-family-control", c.OMNIBUS_PRICE_PADDINGS = "recommendation-block-omnibus-price-paddings-control", c.OMNIBUS_PRICE_SIZE = "recommendation-block-omnibus-price-size-control", c.OMNIBUS_PRICE_STYLE = "recommendation-block-omnibus-price-style-control", c.OMNIBUS_PRICE_TEXT_BEFORE = "recommendation-block-omnibus-price-text-before-control", c.OMNIBUS_PRICE_TEXT_AFTER = "recommendation-block-omnibus-price-text-after-control", c.OMNIBUS_DISCOUNT_ALIGN = "recommendation-block-omnibus-discount-align-control", c.OMNIBUS_DISCOUNT_BACKGROUND = "recommendation-block-omnibus-discount-background-control", c.OMNIBUS_DISCOUNT_COLOR = "recommendation-block-omnibus-discount-color-control", c.OMNIBUS_DISCOUNT_FONT_FAMILY = "recommendation-block-omnibus-discount-font-family-control", c.OMNIBUS_DISCOUNT_PADDINGS = "recommendation-block-omnibus-discount-paddings-control", c.OMNIBUS_DISCOUNT_SIZE = "recommendation-block-omnibus-discount-size-control", c.OMNIBUS_DISCOUNT_STYLE = "recommendation-block-omnibus-discount-style-control", c.OMNIBUS_DISCOUNT_TEXT_BEFORE = "recommendation-block-omnibus-discount-text-before-control", c.OMNIBUS_DISCOUNT_TEXT_AFTER = "recommendation-block-omnibus-discount-text-after-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
1
+ var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
3
2
  export {
4
- t as ATTR_PRODUCT_BUTTON,
5
- _ as ATTR_PRODUCT_IMAGE,
6
- b as ATTR_PRODUCT_NAME,
7
- i as ATTR_PRODUCT_OLD_PRICE,
8
- T as ATTR_PRODUCT_OMNIBUS_DISCOUNT,
9
- O as ATTR_PRODUCT_OMNIBUS_PRICE,
10
- n as ATTR_PRODUCT_PRICE,
11
3
  o as RecommendationBlockId,
12
4
  r as RecommendationControlId
13
5
  };
@@ -1,14 +1,14 @@
1
- var p = Object.defineProperty;
2
- var S = (a, s, e) => s in a ? p(a, s, { enumerable: !0, configurable: !0, writable: !0, value: e }) : a[s] = e;
3
- var u = (a, s, e) => S(a, typeof s != "symbol" ? s + "" : s, e);
4
- import { currencyDecimalCounts as _, currencyOperators as C, currencyLocationMaps as R } from "../../../enums/extensions/recommendationBlock.js";
5
- import { UEAttr as O, ModificationDescription as g } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
- import { CommonControl as U } from "../common-control.js";
7
- import { useRecommendationExtensionStore as N } from "./store/recommendation.js";
8
- import { prepareProductRows as E } from "./templates/blockTemplate.js";
9
- import { DEFAULT_CARD_COMPOSITION as d, getDefaultProducts as L } from "./templates/templateUtils.js";
10
- import { useDebounceFn as T } from "../../../node_modules/@vueuse/shared/index.js";
11
- const f = "ui-elements-recommendation-block", t = {
1
+ var _ = Object.defineProperty;
2
+ var R = (s, n, e) => n in s ? _(s, n, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[n] = e;
3
+ var r = (s, n, e) => R(s, typeof n != "symbol" ? n + "" : n, e);
4
+ import { currencyDecimalCounts as l, currencyOperators as c, currencyLocationMaps as h } from "../../../enums/extensions/recommendationBlock.js";
5
+ import { UEAttr as m, ModificationDescription as S } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
6
+ import { CommonControl as g } from "../common-control.js";
7
+ import { useRecommendationExtensionStore as O } from "./store/recommendation.js";
8
+ import { prepareProductRows as p } from "./templates/blockTemplate.js";
9
+ import { DEFAULT_CARD_COMPOSITION as C, getDefaultProducts as E } from "./templates/templateUtils.js";
10
+ import { useDebounceFn as U } from "../../../node_modules/@vueuse/shared/index.js";
11
+ const L = "ui-elements-recommendation-block", t = {
12
12
  ALGORITHM: "strategy",
13
13
  PRODUCT_IDS: "productIds",
14
14
  LOCALE: "language",
@@ -21,23 +21,24 @@ const f = "ui-elements-recommendation-block", t = {
21
21
  FILTERS: "filterStatus",
22
22
  PRODUCT_COUNT: "size",
23
23
  PRODUCT_IN_ROW: "cardsInRow",
24
- SHUFFLE_PRODUCTS: "shuffleProducts"
24
+ SHUFFLE_PRODUCTS: "shuffleProducts",
25
+ RESPONSIVE: "unresponsive"
25
26
  };
26
- class Y extends U {
27
+ class b extends g {
27
28
  constructor() {
28
29
  super(...arguments);
29
- u(this, "store", N());
30
- u(this, "storeUnsubscription", () => {
30
+ r(this, "store", O());
31
+ r(this, "storeUnsubscription", () => {
31
32
  });
32
- u(this, "addFilterListener", () => {
33
+ r(this, "addFilterListener", () => {
33
34
  });
34
- u(this, "addFilterButton", null);
35
- u(this, "_debouncedRegenerateProductRows", T(() => {
35
+ r(this, "addFilterButton", null);
36
+ r(this, "_debouncedRegenerateProductRows", U(() => {
36
37
  this._regenerateProductRows();
37
38
  }, 500));
38
39
  }
39
40
  getId() {
40
- return f;
41
+ return L;
41
42
  }
42
43
  getTemplate() {
43
44
  return `
@@ -48,6 +49,7 @@ class Y extends U {
48
49
  ${this._getFilterStatus()}
49
50
  ${this._getProductLayout()}
50
51
  ${this._getShuffleProducts()}
52
+ ${this._getResponsive()}
51
53
  </div>
52
54
  `;
53
55
  }
@@ -77,25 +79,27 @@ class Y extends U {
77
79
  [t.CURRENCY_DECIMAL_COUNT]: e.currencySettings.decimalCount,
78
80
  [t.PRODUCT_COUNT]: e.size,
79
81
  [t.PRODUCT_IN_ROW]: e.cardsInRow,
80
- [t.SHUFFLE_PRODUCTS]: e.shuffleProducts
82
+ [t.SHUFFLE_PRODUCTS]: e.shuffleProducts,
83
+ [t.RESPONSIVE]: !e.unresponsive
81
84
  });
82
85
  }
83
86
  _initializeSelectItems() {
84
- const { store: e } = this, o = e.getActivePredictiveAlgorithms, i = e.getLanguages, n = {
87
+ const { store: e } = this, o = e.getActivePredictiveAlgorithms, i = e.getLanguages, a = {
85
88
  [t.ALGORITHM]: o,
86
89
  [t.LOCALE]: i,
87
90
  [t.CURRENCY]: e.currencyList,
88
- [t.CURRENCY_LOCATION]: R,
91
+ [t.CURRENCY_LOCATION]: h,
89
92
  [t.CURRENCY_SYMBOL]: e.getCurrencySymbolList,
90
- [t.CURRENCY_THOUSAND_SEPARATOR]: C,
91
- [t.CURRENCY_DECIMAL_SEPARATOR]: C,
92
- [t.CURRENCY_DECIMAL_COUNT]: _,
93
+ [t.CURRENCY_THOUSAND_SEPARATOR]: c,
94
+ [t.CURRENCY_DECIMAL_SEPARATOR]: c,
95
+ [t.CURRENCY_DECIMAL_COUNT]: l,
93
96
  [t.PRODUCT_COUNT]: Number(e.recommendationConfigs.size),
94
97
  [t.PRODUCT_IN_ROW]: e.recommendationConfigs.cardsInRow,
95
- [t.SHUFFLE_PRODUCTS]: e.recommendationConfigs.shuffleProducts
98
+ [t.SHUFFLE_PRODUCTS]: e.recommendationConfigs.shuffleProducts,
99
+ [t.RESPONSIVE]: !e.recommendationConfigs.unresponsive
96
100
  };
97
- Object.entries(n).forEach(([r, l]) => {
98
- this.api.setUIEAttribute(r, O.SELECTPICKER.items, l);
101
+ Object.entries(a).forEach(([u, d]) => {
102
+ this.api.setUIEAttribute(u, m.SELECTPICKER.items, d);
99
103
  });
100
104
  }
101
105
  _getAlgorithms() {
@@ -141,7 +145,7 @@ class Y extends U {
141
145
  this._GuSelect({
142
146
  name: t.CURRENCY_LOCATION,
143
147
  placeholder: "Select Currency Location",
144
- options: R
148
+ options: h
145
149
  }),
146
150
  this._GuLabel({ text: "Currency Symbol" }),
147
151
  this._GuSelect({
@@ -153,19 +157,19 @@ class Y extends U {
153
157
  this._GuSelect({
154
158
  name: t.CURRENCY_THOUSAND_SEPARATOR,
155
159
  placeholder: "Select Thousand Separator",
156
- options: C
160
+ options: c
157
161
  }),
158
162
  this._GuLabel({ text: "Decimal Separator" }),
159
163
  this._GuSelect({
160
164
  name: t.CURRENCY_DECIMAL_SEPARATOR,
161
165
  placeholder: "Select Decimal Separator",
162
- options: C
166
+ options: c
163
167
  }),
164
168
  this._GuLabel({ text: "Decimal Count" }),
165
169
  this._GuSelect({
166
170
  name: t.CURRENCY_DECIMAL_COUNT,
167
171
  placeholder: "Select Decimal Count",
168
- options: _
172
+ options: l
169
173
  })
170
174
  ])}
171
175
  `;
@@ -200,6 +204,20 @@ class Y extends U {
200
204
  ])}
201
205
  `;
202
206
  }
207
+ _getResponsive() {
208
+ return `
209
+ ${this._GuTwoColumns([
210
+ this._GuLabel({ text: "Responsive Block" }),
211
+ this._GuToggle(t.RESPONSIVE)
212
+ ])}
213
+ `;
214
+ }
215
+ _onFilterChange(e) {
216
+ this.currentNode && this.store.$patch({
217
+ filterStatus: e,
218
+ filterSelectionDrawerStatus: e
219
+ });
220
+ }
203
221
  _onFilterSelectClick() {
204
222
  this.store.$patch({
205
223
  filterSelectionDrawerStatus: !0
@@ -217,12 +235,12 @@ class Y extends U {
217
235
  */
218
236
  _getCardComposition() {
219
237
  if (!this.currentNode)
220
- return d;
238
+ return C;
221
239
  const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
222
240
  if (!e || !("getAttribute" in e))
223
- return d;
241
+ return C;
224
242
  const o = e.getAttribute("data-card-composition");
225
- return o ? o.split(",").filter(Boolean) : d;
243
+ return o ? o.split(",").filter(Boolean) : C;
226
244
  }
227
245
  _regenerateProductRows() {
228
246
  if (!this.currentNode || !("querySelector" in this.currentNode))
@@ -232,41 +250,8 @@ class Y extends U {
232
250
  console.error("Could not find container table for product rows");
233
251
  return;
234
252
  }
235
- const o = this.store.recommendationProducts.length > 0 ? this.store.recommendationProducts : L(), { cardsInRow: i } = this.store.recommendationConfigs, n = this._getCardComposition(), r = E(o, i, n);
236
- this.api.getDocumentModifier().modifyHtml(e).setInnerHtml(r).apply(new g("Updated product")), this._reapplySpacing();
237
- }
238
- /**
239
- * Reapply spacing values after product regeneration
240
- * This ensures spacing persists when products are regenerated
241
- */
242
- _reapplySpacing() {
243
- if (!this.currentNode)
244
- return;
245
- const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
246
- if (!e || !("getAttribute" in e))
247
- return;
248
- const o = e.getAttribute("data-column-spacing"), i = e.getAttribute("data-row-spacing"), n = this.api.getDocumentModifier();
249
- if (o) {
250
- const r = parseInt(o);
251
- if (!Number.isNaN(r)) {
252
- const h = `0 ${Math.floor(r / 2)}px`;
253
- Array.from(
254
- this.currentNode.querySelectorAll(".product-card-wrapper")
255
- ).forEach((c) => {
256
- "parentNode" in c && c.parentNode && typeof c.parentNode == "object" && "tagName" in c.parentNode && c.parentNode.tagName === "TD" && n.modifyHtml(c.parentNode).setStyle("padding", h);
257
- });
258
- }
259
- }
260
- if (i) {
261
- const r = parseInt(i);
262
- if (!Number.isNaN(r)) {
263
- const l = `${r}px`;
264
- Array.from(this.currentNode.querySelectorAll(".spacer")).forEach((m) => {
265
- n.modifyHtml(m).setStyle("height", l);
266
- });
267
- }
268
- }
269
- (o || i) && n.apply(new g("Reapply spacing after regeneration"));
253
+ const o = this.store.recommendationProducts.length > 0 ? this.store.recommendationProducts : E(), { cardsInRow: i } = this.store.recommendationConfigs, a = this._getCardComposition(), u = p(o, i, a);
254
+ this.api.getDocumentModifier().modifyHtml(e).setInnerHtml(u).apply(new S("Updated product"));
270
255
  }
271
256
  _onCurrencyConfigChange(e, o) {
272
257
  this.currentNode && this.store.$patch({
@@ -303,8 +288,8 @@ class Y extends U {
303
288
  t.CURRENCY_DECIMAL_SEPARATOR,
304
289
  t.CURRENCY_DECIMAL_COUNT
305
290
  ].forEach((i) => {
306
- this.api.onValueChanged(i, (n) => this._onCurrencyConfigChange(i, n));
307
- }), this.api.onValueChanged(t.PRODUCT_COUNT, (i) => this._onDataChange(t.PRODUCT_COUNT, i.toString())), this.api.onValueChanged(t.PRODUCT_IN_ROW, (i) => this._onDataChange(t.PRODUCT_IN_ROW, i)), this.api.onValueChanged(t.SHUFFLE_PRODUCTS, (i) => this._onDataChange(t.SHUFFLE_PRODUCTS, i)), this.addFilterListener = this._onFilterSelectClick.bind(this), this.addFilterButton = this.getContainer().querySelector("#guido__btn-add-filter"), (o = this.addFilterButton) == null || o.addEventListener("click", this.addFilterListener);
291
+ this.api.onValueChanged(i, (a) => this._onCurrencyConfigChange(i, a));
292
+ }), this.api.onValueChanged(t.PRODUCT_COUNT, (i) => this._onDataChange(t.PRODUCT_COUNT, i.toString())), this.api.onValueChanged(t.PRODUCT_IN_ROW, (i) => this._onDataChange(t.PRODUCT_IN_ROW, i)), this.api.onValueChanged(t.SHUFFLE_PRODUCTS, (i) => this._onDataChange(t.SHUFFLE_PRODUCTS, i)), this.api.onValueChanged(t.RESPONSIVE, (i) => this._onDataChange(t.RESPONSIVE, i)), this.addFilterListener = this._onFilterSelectClick.bind(this), this.addFilterButton = this.getContainer().querySelector("#guido__btn-add-filter"), (o = this.addFilterButton) == null || o.addEventListener("click", this.addFilterListener);
308
293
  }
309
294
  _listenStateUpdates() {
310
295
  this.storeUnsubscription = this.store.$subscribe((e) => {
@@ -316,6 +301,6 @@ class Y extends U {
316
301
  }
317
302
  }
318
303
  export {
319
- f as CONTROL_BLOCK_ID,
320
- Y as RecommendationBlockControl
304
+ L as CONTROL_BLOCK_ID,
305
+ b as RecommendationBlockControl
321
306
  };
@@ -0,0 +1,13 @@
1
+ import { ButtonAlignBuiltInControl as t } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { RecommendationControlId as e, RecommendationBlockId as n } from "../../constants.js";
3
+ class c extends t {
4
+ getId() {
5
+ return e.BUTTON_ALIGN;
6
+ }
7
+ getTargetNodes(o) {
8
+ return o.closest(".ins-recommendation-product-container").querySelectorAll(`[esd-extension-block-id="${n.BUTTON}"]`);
9
+ }
10
+ }
11
+ export {
12
+ c as ButtonAlignControl
13
+ };
@@ -0,0 +1,13 @@
1
+ import { ButtonBorderBuiltInControl as t } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { RecommendationControlId as e, RecommendationBlockId as n } from "../../constants.js";
3
+ class s extends t {
4
+ getId() {
5
+ return e.BUTTON_BORDER;
6
+ }
7
+ getTargetNodes(o) {
8
+ return o.closest(".ins-recommendation-product-container").querySelectorAll(`[esd-extension-block-id="${n.BUTTON}"]`);
9
+ }
10
+ }
11
+ export {
12
+ s as ButtonBorderControl
13
+ };