@useinsider/guido 2.0.0-beta.a4f9fa2 → 2.0.0-beta.ab9d733

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 (101) hide show
  1. package/README.md +0 -2
  2. package/dist/@types/config/schemas.js +1 -3
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +17 -15
  5. package/dist/components/organisms/email-preview/PreviewContainer.vue.js +3 -3
  6. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue.js +8 -8
  7. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue2.js +17 -13
  8. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +7 -8
  9. package/dist/components/organisms/email-preview/amp/AmpToggle.vue2.js +14 -12
  10. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +10 -14
  11. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +18 -22
  12. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +3 -3
  13. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +12 -11
  14. package/dist/components/organisms/email-preview/mobile-preview/InboxView.vue.js +12 -10
  15. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue.js +11 -10
  16. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue2.js +15 -14
  17. package/dist/components/organisms/header/HeaderWrapper.vue.js +5 -5
  18. package/dist/components/organisms/header/LeftSlot.vue.js +9 -9
  19. package/dist/components/organisms/header/LeftSlot.vue2.js +13 -14
  20. package/dist/components/organisms/header/MiddleSlot.vue.js +5 -4
  21. package/dist/components/organisms/header/MiddleSlot.vue2.js +14 -13
  22. package/dist/components/organisms/header/RightSlot.vue.js +12 -12
  23. package/dist/components/organisms/header/RightSlot.vue2.js +27 -21
  24. package/dist/components/organisms/onboarding/NewVersionPopup.vue2.js +15 -15
  25. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue.js +1 -1
  26. package/dist/components/organisms/unsubscribe/UnsubscribeTypeSelection.vue2.js +20 -19
  27. package/dist/composables/useStripo.js +40 -40
  28. package/dist/config/migrator/index.js +8 -9
  29. package/dist/enums/academy.js +8 -0
  30. package/dist/enums/onboarding.js +1 -2
  31. package/dist/enums/unsubscribe.js +20 -21
  32. package/dist/extensions/Blocks/Items/block.js +40 -39
  33. package/dist/extensions/Blocks/Items/controls/button/link.js +29 -22
  34. package/dist/extensions/Blocks/Items/controls/cardComposition.js +46 -66
  35. package/dist/extensions/Blocks/Items/controls/image/link.js +30 -23
  36. package/dist/extensions/Blocks/Items/controls/name/trimming.js +25 -25
  37. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +17 -19
  38. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +29 -31
  39. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +36 -36
  40. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +19 -21
  41. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +27 -29
  42. package/dist/extensions/Blocks/Items/controls/settingsControl.js +143 -152
  43. package/dist/extensions/Blocks/Items/enums/controlEnums.js +2 -2
  44. package/dist/extensions/Blocks/Items/enums/productEnums.js +45 -43
  45. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +3 -4
  46. package/dist/extensions/Blocks/Items/extension.js +6 -7
  47. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +49 -58
  48. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +59 -48
  49. package/dist/extensions/Blocks/Items/settingsPanel.js +26 -27
  50. package/dist/extensions/Blocks/Items/store/items-block.js +7 -11
  51. package/dist/extensions/Blocks/Items/template.js +129 -366
  52. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +17 -0
  53. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +28 -0
  54. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +76 -0
  55. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +46 -0
  56. package/dist/extensions/Blocks/Recommendation/control.js +1 -1
  57. package/dist/extensions/Blocks/common-control.js +30 -29
  58. package/dist/extensions/Blocks/controlFactories.js +45 -55
  59. package/dist/guido.css +1 -1
  60. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +285 -364
  61. package/dist/package.json.js +1 -1
  62. package/dist/services/stripoApi.js +10 -6
  63. package/dist/src/@types/config/schemas.d.ts +0 -4
  64. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
  65. package/dist/src/composables/useConfig.d.ts +0 -2
  66. package/dist/src/enums/academy.d.ts +12 -0
  67. package/dist/src/enums/onboarding.d.ts +0 -1
  68. package/dist/src/enums/unsubscribe.d.ts +0 -1
  69. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +2 -0
  70. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +0 -9
  71. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +2 -0
  72. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +1 -1
  73. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +4 -0
  74. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +0 -1
  75. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +26 -24
  76. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +0 -1
  77. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +0 -2
  78. package/dist/src/extensions/Blocks/Items/template.d.ts +1 -22
  79. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +23 -0
  80. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +32 -0
  81. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +50 -0
  82. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +8 -0
  83. package/dist/src/extensions/Blocks/common-control.d.ts +10 -9
  84. package/dist/src/stores/config.d.ts +0 -17
  85. package/dist/static/assets/desktop/desktop-mockup-center.svg.js +4 -0
  86. package/dist/static/assets/desktop/desktop-mockup-left.svg.js +4 -0
  87. package/dist/static/assets/desktop/desktop-mockup-right.svg.js +4 -0
  88. package/dist/static/assets/mobile/email-mockup.svg.js +4 -0
  89. package/dist/static/assets/mobile/inbox-mockup.svg.js +4 -0
  90. package/dist/utils/pairProductVariables.js +58 -61
  91. package/package.json +3 -3
  92. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue.js +0 -17
  93. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue2.js +0 -20
  94. package/dist/config/migrator/itemsBlockMigrator.js +0 -342
  95. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +0 -93
  96. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +0 -184
  97. package/dist/src/config/migrator/itemsBlockMigrator.d.ts +0 -6
  98. package/dist/src/extensions/Blocks/Items/controls/price/singlePrice.d.ts +0 -18
  99. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +0 -73
  100. package/dist/static/assets/inbox-mockup.svg.js +0 -4
  101. package/dist/static/assets/phone-mockup.svg.js +0 -4
@@ -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,20 +1,20 @@
1
- import { useOnboardingStore as d } from "../../../stores/onboarding.js";
2
- import { Block as u, BlockCompositionType as p, ModificationDescription as n } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
- import { ItemsBlockId as f } from "./enums/controlEnums.js";
4
- import { SETTINGS_ENUMS as c, DefaultConfigValues as o } from "./enums/settingsEnums.js";
5
- import { useItemsBlockStore as g } from "./store/items-block.js";
6
- import { getDefaultTemplate as y } from "./template.js";
7
- import { getItemsBlockContainer as C, getItemsBlockConfig as a, getDefaultItemsBlockConfig as I } from "./utils/nodeConfigUtils.js";
8
- const b = "items-block";
9
- class O extends u {
1
+ import { useOnboardingStore as y } from "../../../stores/onboarding.js";
2
+ import { Block as R, BlockCompositionType as L, ModificationDescription as a } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
3
+ import { configAttributes as t } from "./enums/productEnums.js";
4
+ import { DefaultConfigValues as e, SETTINGS_ENUMS as l } from "./enums/settingsEnums.js";
5
+ import { useItemsBlockStore as S } from "./store/items-block.js";
6
+ import { getDefaultTemplate as V } from "./template.js";
7
+ import { syncCurrencySymbolFromAttributes as B, syncCurrencyLocationFromAttributes as U, syncFormattedPriceFromAttributes as k } from "./utils/syncAttributesFromConfigBlock.js";
8
+ const M = "items-block";
9
+ class x extends R {
10
10
  getId() {
11
- return b;
11
+ return M;
12
12
  }
13
13
  getIcon() {
14
14
  return "items-icon";
15
15
  }
16
16
  getBlockCompositionType() {
17
- return p.CONTAINER;
17
+ return L.CONTAINER;
18
18
  }
19
19
  getName() {
20
20
  return this.api.translate("Items");
@@ -23,44 +23,45 @@ class O extends u {
23
23
  return this.api.translate("Items lets you display personalized products based on user behavior.");
24
24
  }
25
25
  getTemplate() {
26
- return y({
27
- orientation: c.ORIENTATION.VERTICAL,
28
- itemsType: c.ITEMS_TYPE.CART_ITEMS,
26
+ return V({
27
+ orientation: l.ORIENTATION.HORIZONTAL,
28
+ itemsType: l.ITEMS_TYPE.CART_ITEMS,
29
29
  itemId: "{{Abandoned Cart Item (1) Url}}",
30
- currencySymbol: o.productPriceCurrencySymbolControlValue,
31
- currencyLocation: o.productPriceCurrencyLocationControlValue,
32
- formattedPrice: o.productPriceFormattedControlValue === "1"
30
+ currencySymbol: e.productPriceCurrencySymbolControlValue,
31
+ currencyLocation: e.productPriceCurrencyLocationControlValue,
32
+ formattedPrice: e.productPriceFormattedControlValue === "1"
33
33
  });
34
34
  }
35
35
  allowInnerBlocksDND() {
36
36
  return !1;
37
37
  }
38
- onCreated(i) {
39
- const e = C(i);
40
- if (!e)
38
+ onCreated(r) {
39
+ const n = r.querySelector("esd-config-block");
40
+ if (!n)
41
41
  return;
42
- const t = e.getNodeConfig(), l = t && Object.keys(t).length > 0, r = a(i);
43
- if (r != null && r.initialized)
44
- l ? r.blockInstanceId || this.api.getDocumentModifier().modifyHtml(e).setNodeConfig({ ...r, blockInstanceId: String(Date.now()) }).apply(new n("Assign block instance ID to block")) : this.api.getDocumentModifier().modifyHtml(e).setNodeConfig(r).apply(new n("Migrate legacy config to nodeConfig"));
45
- else {
46
- const m = I();
47
- this.api.getDocumentModifier().modifyHtml(e).setNodeConfig(m).apply(new n("Initialize Items block with default configuration")), d().startOnboarding("itemsOnboarding");
42
+ const o = n, s = o.getAttribute("data-initialized") || "0", u = o.getAttribute(t.BLOCK_INSTANCE_ID), c = () => String(Date.now() + Math.floor(Math.random() * 1e3));
43
+ if (Number(s)) {
44
+ if (!u) {
45
+ const i = c();
46
+ this.api.getDocumentModifier().modifyHtml(o).setAttribute(t.BLOCK_INSTANCE_ID, i).apply(new a("Assign block instance ID to legacy block"));
47
+ }
48
+ } else {
49
+ const i = e.itemsType, I = e.cartItemsSelectControlValue, d = e.cardOrientationControlValue, m = e.productNameTrimmingControlValue, C = e.productPriceHideDiscountControlValue, b = e.productPriceFormattedControlValue, T = e.productPriceCurrencySymbolControlValue, A = e.productPriceCurrencyLocationControlValue, E = e.productButtonLinkControlValue, O = e.productImageLinkControlValue, _ = e.productImageVisible, p = e.productNameVisible, N = e.productQuantityVisible, f = e.productPriceVisible, g = e.productOriginalPriceVisible, D = e.productButtonVisible, P = c();
50
+ this.api.getDocumentModifier().modifyHtml(o).setAttribute("data-source", i).setAttribute(t.TYPE, i).setAttribute(t.ITEMS_INDEX_SELECT_CONTROL_VALUE, I).setAttribute(t.ORIENTATION, d).setAttribute(t.PRODUCT_NAME_TRIMMING, m).setAttribute(t.PRODUCT_PRICE_HIDE_DISCOUNT, C).setAttribute(t.PRODUCT_PRICE_FORMATTED, b).setAttribute(t.PRODUCT_PRICE_CURRENCY_SYMBOL, T).setAttribute(t.PRODUCT_PRICE_CURRENCY_LOCATION, A).setAttribute(t.PRODUCT_BUTTON_LINK, E).setAttribute(t.PRODUCT_IMAGE_LINK, O).setAttribute(t.BLOCK_INSTANCE_ID, P).setAttribute("data-initialized", "1").setAttribute(t.NAME_CONTROL_ENABLED, e.productNameControlEnabled).setAttribute(
51
+ t.QUANTITY_CONTROL_ENABLED,
52
+ e.productQuantityControlEnabled
53
+ ).setAttribute(t.PRICE_CONTROL_OPENED, e.productPriceControlOpened).setAttribute(t.PRODUCT_IMAGE_VISIBLE, _).setAttribute(t.PRODUCT_NAME_VISIBLE, p).setAttribute(t.PRODUCT_QUANTITY_VISIBLE, N).setAttribute(t.PRODUCT_PRICE_VISIBLE, f).setAttribute(t.PRODUCT_ORIGINAL_PRICE_VISIBLE, g).setAttribute(t.PRODUCT_BUTTON_VISIBLE, D).apply(new a("Initialize config block attributes with defaults")), y().startOnboarding("itemsOnboarding");
48
54
  }
49
- const s = `[esd-extension-block-id="${f.IMAGE}"] img`;
50
- this.api.getDocumentModifier().modifyHtml(i.querySelector(s)).setStyle("object-fit", "contain").apply(new n("Updated image object-fit"));
51
55
  }
52
- onSelect(i) {
53
- const e = g(), t = a(i);
54
- t && (e.setItemsType(t.type || o.itemsType), e.setItemIds(t.itemsSelectValue || o.cartItemsSelectControlValue), e.setOrientation(t.orientation || o.cardOrientationControlValue), e.setCurrencySymbol(
55
- t.priceCurrencySymbol || o.productPriceCurrencySymbolControlValue
56
- ), e.setCurrencyLocation(
57
- t.priceCurrencyLocation || o.productPriceCurrencyLocationControlValue
58
- ), e.setFormattedPrice(
59
- t.priceFormatted ?? o.productPriceFormattedControlValue === "1"
60
- ));
56
+ onSelect(r) {
57
+ const n = r.querySelector("esd-config-block"), o = S();
58
+ if (!n)
59
+ return;
60
+ const s = n, u = s.getAttribute(t.TYPE) || e.itemsType, c = s.getAttribute(t.ITEMS_INDEX_SELECT_CONTROL_VALUE) || e.cartItemsSelectControlValue, i = s.getAttribute(t.ORIENTATION) || e.cardOrientationControlValue;
61
+ o.setItemsType(u), o.setItemIds(c), o.setOrientation(i), B(r), U(r), k(r);
61
62
  }
62
63
  }
63
64
  export {
64
- b as BLOCK_ID,
65
- O as ItemsBlock
65
+ M as BLOCK_ID,
66
+ x as ItemsBlock
66
67
  };
@@ -1,52 +1,59 @@
1
- var a = Object.defineProperty;
2
- var l = (e, t, n) => t in e ? a(e, t, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[t] = n;
3
- var i = (e, t, n) => l(e, typeof t != "symbol" ? t + "" : t, n);
1
+ var r = Object.defineProperty;
2
+ var a = (o, e, t) => e in o ? r(o, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[e] = t;
3
+ var s = (o, e, t) => a(o, typeof e != "symbol" ? e + "" : e, t);
4
4
  import { CommonControl as u } from "../../../common-control.js";
5
5
  import { ItemsBlockControlId as d } from "../../enums/controlEnums.js";
6
- import { useItemsBlockStore as m } from "../../store/items-block.js";
7
- import { getItemsBlockConfig as L } from "../../utils/nodeConfigUtils.js";
8
- const r = d.BUTTON_LINK, s = {
6
+ import { useItemsBlockStore as l } from "../../store/items-block.js";
7
+ import { syncButtonLinkFromAttributes as h } from "../../utils/syncAttributesFromConfigBlock.js";
8
+ import { updateConfigBlockAttributes as m } from "../../utils/updateAttributes.js";
9
+ const i = d.BUTTON_LINK, n = {
9
10
  LINK: "link"
10
11
  };
11
- class N extends u {
12
+ class C extends u {
12
13
  constructor() {
13
14
  super(...arguments);
14
- i(this, "store", m());
15
+ s(this, "store", l());
15
16
  }
16
17
  getId() {
17
- return r;
18
+ return i;
18
19
  }
19
20
  getTemplate() {
20
21
  return `
21
- <div class="container ${r}">
22
+ <div class="${i}">
22
23
  ${this._getLink()}
23
24
  </div>
24
25
  `;
25
26
  }
26
27
  onRender() {
27
28
  this.api.updateValues({
28
- [s.LINK]: this.store.buttonLink
29
- });
29
+ [n.LINK]: this.store.buttonLink
30
+ }), this._listenToFormUpdates();
30
31
  }
31
- onTemplateNodeUpdated(n) {
32
- super.onTemplateNodeUpdated(n), this.handleBlockInstanceChange(
33
- () => {
34
- const o = L(this.currentNode);
35
- o != null && o.buttonLink && this.store.setButtonLink(o.buttonLink);
36
- },
32
+ onTemplateNodeUpdated(t) {
33
+ super.onTemplateNodeUpdated(t), this.handleBlockInstanceChange(
34
+ () => h(this.currentNode),
37
35
  () => {
38
36
  this.api.updateValues({
39
- [s.LINK]: this.store.buttonLink
37
+ [n.LINK]: this.store.buttonLink
40
38
  });
41
39
  }
42
40
  );
43
41
  }
42
+ _listenToFormUpdates() {
43
+ this.api.onValueChanged(
44
+ n.LINK,
45
+ (t) => this._onLinkChange(t)
46
+ );
47
+ }
48
+ _onLinkChange(t) {
49
+ console.debug("Button link changed to: ", t), this.store.setButtonLink(t), m(this.currentNode, this.api);
50
+ }
44
51
  _getLink() {
45
52
  return `
46
53
  ${this._GuOneColumn([
47
54
  this._GuLabel({ text: "Link" }),
48
55
  this._GuTextInput({
49
- name: s.LINK,
56
+ name: n.LINK,
50
57
  placeholder: "Enter Link",
51
58
  className: "es-100",
52
59
  disabled: !0
@@ -56,6 +63,6 @@ class N extends u {
56
63
  }
57
64
  }
58
65
  export {
59
- N as ButtonLinkControl,
60
- r as CONTROL_BLOCK_ID
66
+ C as ButtonLinkControl,
67
+ i as CONTROL_BLOCK_ID
61
68
  };
@@ -1,13 +1,14 @@
1
- var O = Object.defineProperty;
2
- var y = (a, r, t) => r in a ? O(a, r, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[r] = t;
3
- var P = (a, r, t) => y(a, typeof r != "symbol" ? r + "" : r, t);
1
+ var c = Object.defineProperty;
2
+ var I = (a, n, t) => n in a ? c(a, n, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[n] = t;
3
+ var _ = (a, n, t) => I(a, typeof n != "symbol" ? n + "" : n, t);
4
4
  import { ModificationDescription as l } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { CommonControl as I } from "../../common-control.js";
5
+ import { CommonControl as R } from "../../common-control.js";
6
6
  import { ItemsBlockId as s } from "../enums/controlEnums.js";
7
- import { SETTINGS_ENUMS as h } from "../enums/settingsEnums.js";
8
- import { useItemsBlockStore as p } from "../store/items-block.js";
9
- import { getItemsBlockConfig as R, setItemsBlockConfig as U } from "../utils/nodeConfigUtils.js";
10
- const b = "ui-elements-items-card-composition-block", i = {
7
+ import { configAttributes as C } from "../enums/productEnums.js";
8
+ import { SETTINGS_ENUMS as u } from "../enums/settingsEnums.js";
9
+ import { useItemsBlockStore as O } from "../store/items-block.js";
10
+ import { getConfigBlock as P, attributeToBoolean as U } from "../utils/configBlockUtils.js";
11
+ const h = "ui-elements-items-card-composition-block", i = {
11
12
  PRODUCT_IMAGE: "image",
12
13
  PRODUCT_NAME: "name",
13
14
  PRODUCT_QUANTITY: "quantity",
@@ -15,11 +16,11 @@ const b = "ui-elements-items-card-composition-block", i = {
15
16
  PRODUCT_ORIGINAL_PRICE: "originalPrice",
16
17
  PRODUCT_BUTTON: "button"
17
18
  };
18
- class S extends I {
19
+ class g extends R {
19
20
  constructor() {
20
21
  super(...arguments);
21
- P(this, "store", p());
22
- P(this, "visibilityState", {
22
+ _(this, "store", O());
23
+ _(this, "visibilityState", {
23
24
  [i.PRODUCT_IMAGE]: !0,
24
25
  [i.PRODUCT_NAME]: !0,
25
26
  [i.PRODUCT_QUANTITY]: !0,
@@ -29,7 +30,7 @@ class S extends I {
29
30
  });
30
31
  }
31
32
  getId() {
32
- return b;
33
+ return h;
33
34
  }
34
35
  getTemplate() {
35
36
  return `
@@ -82,20 +83,20 @@ class S extends I {
82
83
  });
83
84
  }
84
85
  _syncVisibilityFromAttributes() {
85
- const t = R(this.currentNode);
86
+ const t = P(this.currentNode);
86
87
  if (!t)
87
88
  return;
88
89
  const e = {
89
- [i.PRODUCT_IMAGE]: "imageVisible",
90
- [i.PRODUCT_NAME]: "nameVisible",
91
- [i.PRODUCT_QUANTITY]: "quantityControlEnabled",
92
- [i.PRODUCT_PRICE]: "priceVisible",
93
- [i.PRODUCT_ORIGINAL_PRICE]: "originalPriceVisible",
94
- [i.PRODUCT_BUTTON]: "buttonVisible"
90
+ [i.PRODUCT_IMAGE]: "PRODUCT_IMAGE_VISIBLE",
91
+ [i.PRODUCT_NAME]: "PRODUCT_NAME_VISIBLE",
92
+ [i.PRODUCT_QUANTITY]: "PRODUCT_QUANTITY_VISIBLE",
93
+ [i.PRODUCT_PRICE]: "PRODUCT_PRICE_VISIBLE",
94
+ [i.PRODUCT_ORIGINAL_PRICE]: "PRODUCT_ORIGINAL_PRICE_VISIBLE",
95
+ [i.PRODUCT_BUTTON]: "PRODUCT_BUTTON_VISIBLE"
95
96
  };
96
- Object.entries(e).forEach(([o, n]) => {
97
- const c = t[n];
98
- this.visibilityState[o] = c !== !1;
97
+ Object.entries(e).forEach(([o, r]) => {
98
+ const T = t.getAttribute(C[r]);
99
+ this.visibilityState[o] = U(T, !0);
99
100
  });
100
101
  }
101
102
  /**
@@ -104,10 +105,11 @@ class S extends I {
104
105
  * and mark it as '0'
105
106
  */
106
107
  _handleBrowsedItemsQuantity() {
107
- const t = this.store.itemsType !== h.ITEMS_TYPE.BROWSED_ITEMS, e = R(this.currentNode);
108
+ var r;
109
+ const t = this.store.itemsType !== u.ITEMS_TYPE.BROWSED_ITEMS, e = (r = this.currentNode) == null ? void 0 : r.querySelector("esd-config-block");
108
110
  if (!e)
109
111
  return;
110
- const o = e.quantityControlEnabled !== !1;
112
+ const o = e.getAttribute(C.PRODUCT_QUANTITY_VISIBLE) === "1";
111
113
  this.visibilityState[i.PRODUCT_QUANTITY] = t && o, this.api.setVisibility(`${i.PRODUCT_QUANTITY}Container`, t), this._updateVisibilityAttribute(i.PRODUCT_QUANTITY, t && o);
112
114
  }
113
115
  _applyVisibilityStyles() {
@@ -121,25 +123,26 @@ class S extends I {
121
123
  };
122
124
  Object.entries(t).forEach(([e, o]) => {
123
125
  var d;
124
- const n = (d = this.currentNode) == null ? void 0 : d.querySelector(`[esd-extension-block-id="${o}"]`);
125
- if (!n)
126
+ const r = (d = this.currentNode) == null ? void 0 : d.querySelector(`[esd-extension-block-id="${o}"]`);
127
+ if (!r)
126
128
  return;
127
- const c = this.visibilityState[e];
128
- this.api.getDocumentModifier().modifyHtml(n).setStyle("display", c ? "table-cell" : "none").apply(new l(`Applied ${e} visibility from attributes`));
129
- }), this._updatePriceCellWidthsForVerticalLayout();
129
+ const T = this.visibilityState[e];
130
+ this.api.getDocumentModifier().modifyHtml(r).setStyle("display", T ? "table-cell" : "none").apply(new l(`Applied ${e} visibility from attributes`));
131
+ });
130
132
  }
131
133
  _updateVisibilityAttribute(t, e) {
132
- const n = {
133
- [i.PRODUCT_IMAGE]: "imageVisible",
134
- [i.PRODUCT_NAME]: "nameVisible",
135
- [i.PRODUCT_QUANTITY]: "quantityControlEnabled",
136
- [i.PRODUCT_PRICE]: "priceVisible",
137
- [i.PRODUCT_ORIGINAL_PRICE]: "originalPriceVisible",
138
- [i.PRODUCT_BUTTON]: "buttonVisible"
134
+ const o = P(this.currentNode);
135
+ if (!o)
136
+ return;
137
+ const T = {
138
+ [i.PRODUCT_IMAGE]: "PRODUCT_IMAGE_VISIBLE",
139
+ [i.PRODUCT_NAME]: "PRODUCT_NAME_VISIBLE",
140
+ [i.PRODUCT_QUANTITY]: "PRODUCT_QUANTITY_VISIBLE",
141
+ [i.PRODUCT_PRICE]: "PRODUCT_PRICE_VISIBLE",
142
+ [i.PRODUCT_ORIGINAL_PRICE]: "PRODUCT_ORIGINAL_PRICE_VISIBLE",
143
+ [i.PRODUCT_BUTTON]: "PRODUCT_BUTTON_VISIBLE"
139
144
  }[t];
140
- n && U(this.currentNode, this.api, {
141
- [n]: e
142
- });
145
+ T && this.api.getDocumentModifier().modifyHtml(o).setAttribute(C[T], e ? "1" : "0").apply(new l(`Updated ${t} visibility attribute`));
143
146
  }
144
147
  _listenToFormUpdates() {
145
148
  this.api.onValueChanged(i.PRODUCT_IMAGE, (t) => this._onProductImageChange(t)), this.api.onValueChanged(i.PRODUCT_NAME, (t) => this._onProductNameChange(t)), this.api.onValueChanged(i.PRODUCT_QUANTITY, (t) => this._onProductQuantityChange(t)), this.api.onValueChanged(i.PRODUCT_PRICE, (t) => this._onProductPriceChange(t)), this.api.onValueChanged(
@@ -167,7 +170,7 @@ class S extends I {
167
170
  _onProductPriceChange(t) {
168
171
  var o;
169
172
  const e = (o = this.currentNode) == null ? void 0 : o.querySelector(`[esd-extension-block-id="${s.PRICE}"]`);
170
- e && (this.visibilityState[i.PRODUCT_PRICE] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(`Product price visibility changed to ${t ? "visible" : "hidden"}`)), this._updateVisibilityAttribute(i.PRODUCT_PRICE, t), this._updatePriceCellWidthsForVerticalLayout());
173
+ e && (this.visibilityState[i.PRODUCT_PRICE] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(`Product price visibility changed to ${t ? "visible" : "hidden"}`)), this._updateVisibilityAttribute(i.PRODUCT_PRICE, t));
171
174
  }
172
175
  _onProductOriginalPriceChange(t) {
173
176
  var o;
@@ -176,30 +179,7 @@ class S extends I {
176
179
  );
177
180
  e && (this.visibilityState[i.PRODUCT_ORIGINAL_PRICE] = t, this.api.getDocumentModifier().modifyHtml(e).setStyle("display", t ? "table-cell" : "none").apply(new l(
178
181
  `Product original price visibility changed to ${t ? "visible" : "hidden"}`
179
- )), this._updateVisibilityAttribute(i.PRODUCT_ORIGINAL_PRICE, t), this._updatePriceCellWidthsForVerticalLayout());
180
- }
181
- /**
182
- * Updates both price cell widths in vertical layout based on priceOrientation and visibility.
183
- * - When priceOrientation is 'vertical': both cells are 100% (stacked layout)
184
- * - When priceOrientation is 'horizontal':
185
- * - When original price is hidden, price cell expands to 100%
186
- * - When price is hidden, original price cell expands to 100%
187
- * - When both are visible, they share 50% each
188
- */
189
- _updatePriceCellWidthsForVerticalLayout() {
190
- var u, _;
191
- if (!(this.store.orientation === h.ORIENTATION.VERTICAL))
192
- return;
193
- const e = (u = this.currentNode) == null ? void 0 : u.querySelector(".product-price-class"), o = (_ = this.currentNode) == null ? void 0 : _.querySelector(".product-original-price-class"), n = this.store.priceOrientation === "vertical", c = this.visibilityState[i.PRODUCT_PRICE], d = this.visibilityState[i.PRODUCT_ORIGINAL_PRICE], T = this.api.getDocumentModifier();
194
- if (e) {
195
- const C = n || !d ? "100%" : "50%";
196
- T.modifyHtml(e).setStyle("width", C);
197
- }
198
- if (o) {
199
- const C = n || !c ? "100%" : "50%";
200
- T.modifyHtml(o).setStyle("width", C);
201
- }
202
- T.apply(new l("Updated price cell widths for vertical layout"));
182
+ )), this._updateVisibilityAttribute(i.PRODUCT_ORIGINAL_PRICE, t));
203
183
  }
204
184
  _onProductButtonChange(t) {
205
185
  var o;
@@ -208,6 +188,6 @@ class S extends I {
208
188
  }
209
189
  }
210
190
  export {
211
- b as COMPOSITION_CONTROL_BLOCK_ID,
212
- S as ItemsBlockCardCompositionControl
191
+ h as COMPOSITION_CONTROL_BLOCK_ID,
192
+ g as ItemsBlockCardCompositionControl
213
193
  };
@@ -1,52 +1,59 @@
1
- var a = Object.defineProperty;
2
- var m = (t, e, n) => e in t ? a(t, e, { enumerable: !0, configurable: !0, writable: !0, value: n }) : t[e] = n;
3
- var s = (t, e, n) => m(t, typeof e != "symbol" ? e + "" : e, n);
4
- import { CommonControl as l } from "../../../common-control.js";
1
+ var r = Object.defineProperty;
2
+ var a = (o, t, e) => t in o ? r(o, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : o[t] = e;
3
+ var i = (o, t, e) => a(o, typeof t != "symbol" ? t + "" : t, e);
4
+ import { CommonControl as m } from "../../../common-control.js";
5
5
  import { ItemsBlockControlId as d } from "../../enums/controlEnums.js";
6
- import { useItemsBlockStore as L } from "../../store/items-block.js";
7
- import { getItemsBlockConfig as p } from "../../utils/nodeConfigUtils.js";
8
- const r = d.IMAGE_LINK, i = {
6
+ import { useItemsBlockStore as l } from "../../store/items-block.js";
7
+ import { syncImageLinkFromAttributes as h } from "../../utils/syncAttributesFromConfigBlock.js";
8
+ import { updateConfigBlockAttributes as p } from "../../utils/updateAttributes.js";
9
+ const s = d.IMAGE_LINK, n = {
9
10
  LINK: "link"
10
11
  };
11
- class g extends l {
12
+ class N extends m {
12
13
  constructor() {
13
14
  super(...arguments);
14
- s(this, "store", L());
15
+ i(this, "store", l());
15
16
  }
16
17
  getId() {
17
- return r;
18
+ return s;
18
19
  }
19
20
  getTemplate() {
20
21
  return `
21
- <div class="container ${r}">
22
+ <div class="${s}">
22
23
  ${this._getLink()}
23
24
  </div>
24
25
  `;
25
26
  }
26
27
  onRender() {
27
28
  this.api.updateValues({
28
- [i.LINK]: this.store.imageLink
29
- });
29
+ [n.LINK]: this.store.imageLink
30
+ }), this._listenToFormUpdates();
30
31
  }
31
- onTemplateNodeUpdated(n) {
32
- super.onTemplateNodeUpdated(n), this.handleBlockInstanceChange(
33
- () => {
34
- const o = p(this.currentNode);
35
- o != null && o.imageLink && this.store.setImageLink(o.imageLink);
36
- },
32
+ onTemplateNodeUpdated(e) {
33
+ super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(
34
+ () => h(this.currentNode),
37
35
  () => {
38
36
  this.api.updateValues({
39
- [i.LINK]: this.store.imageLink
37
+ [n.LINK]: this.store.imageLink
40
38
  });
41
39
  }
42
40
  );
43
41
  }
42
+ _listenToFormUpdates() {
43
+ this.api.onValueChanged(
44
+ n.LINK,
45
+ (e) => this._onLinkChange(e)
46
+ );
47
+ }
48
+ _onLinkChange(e) {
49
+ console.debug("Image link changed to: ", e), this.store.setImageLink(e), p(this.currentNode, this.api);
50
+ }
44
51
  _getLink() {
45
52
  return `
46
53
  ${this._GuOneColumn([
47
54
  this._GuLabel({ text: "Link" }),
48
55
  this._GuTextInput({
49
- name: i.LINK,
56
+ name: n.LINK,
50
57
  placeholder: "Enter Link",
51
58
  className: "es-100",
52
59
  disabled: !0
@@ -56,6 +63,6 @@ class g extends l {
56
63
  }
57
64
  }
58
65
  export {
59
- r as CONTROL_BLOCK_ID,
60
- g as ImageLinkControl
66
+ s as CONTROL_BLOCK_ID,
67
+ N as ImageLinkControl
61
68
  };
@@ -1,65 +1,65 @@
1
1
  var d = Object.defineProperty;
2
- var g = (i, t, e) => t in i ? d(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
3
- var s = (i, t, e) => g(i, typeof t != "symbol" ? t + "" : t, e);
4
- import { ModificationDescription as a, UIElementType as l, UEAttr as h } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ var h = (i, t, e) => t in i ? d(i, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : i[t] = e;
3
+ var n = (i, t, e) => h(i, typeof t != "symbol" ? t + "" : t, e);
4
+ import { ModificationDescription as a, UIElementType as l, UEAttr as g } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
5
  import { CommonControl as c } from "../../../common-control.js";
6
6
  import { ItemsBlockControlId as p } from "../../enums/controlEnums.js";
7
7
  import { SETTINGS_ENUMS as I } from "../../enums/settingsEnums.js";
8
8
  import { useItemsBlockStore as N } from "../../store/items-block.js";
9
- import { getItemsBlockConfig as f, setItemsBlockConfig as M } from "../../utils/nodeConfigUtils.js";
10
- const y = p.NAME_TRIMMING, m = {
9
+ import { syncNameTrimmingFromAttributes as M } from "../../utils/syncAttributesFromConfigBlock.js";
10
+ import { updateConfigBlockAttributes as u } from "../../utils/updateAttributes.js";
11
+ const y = p.NAME_TRIMMING, o = {
11
12
  TRIMMING: "trimming"
12
13
  };
13
14
  class _ extends c {
14
15
  constructor() {
15
16
  super(...arguments);
16
- s(this, "store", N());
17
+ n(this, "store", N());
17
18
  }
18
19
  getId() {
19
20
  return y;
20
21
  }
21
22
  getTemplate() {
22
23
  return `
23
- <div class="container ${p.NAME_TRIMMING}">
24
+ <div class="${p.NAME_TRIMMING}">
24
25
  ${this._getTextTrimming()}
25
26
  </div>
26
27
  `;
27
28
  }
28
29
  onRender() {
29
- this.api.updateValues({ [m.TRIMMING]: this.store.nameTrimming }), this.api.onValueChanged(m.TRIMMING, (e) => {
30
+ this.api.updateValues({ [o.TRIMMING]: this.store.nameTrimming }), this.api.onValueChanged(o.TRIMMING, (e) => {
30
31
  this._onTrimmingChange(e);
31
32
  });
32
33
  }
33
34
  onTemplateNodeUpdated(e) {
34
35
  super.onTemplateNodeUpdated(e), this.handleBlockInstanceChange(
36
+ () => M(this.currentNode),
35
37
  () => {
36
- const o = f(this.currentNode);
37
- o && this.store.setNameTrimming(o.nameTrimming ?? !0);
38
- },
39
- () => {
40
- this.api.updateValues({ [m.TRIMMING]: this.store.nameTrimming });
38
+ this.api.updateValues({ [o.TRIMMING]: this.store.nameTrimming });
41
39
  }
42
40
  );
43
41
  }
44
42
  _onTrimmingChange(e) {
45
- this.store.setNameTrimming(e), M(this.currentNode, this.api, { nameTrimming: e }), this.api.updateValues({ [m.TRIMMING]: e }), this._applyTrimmingStyles(e);
43
+ this.store.setNameTrimming(e), u(this.currentNode, this.api), this.api.updateValues({ [o.TRIMMING]: e }), this._applyTrimmingStyles(e);
46
44
  }
47
45
  _applyTrimmingStyles(e) {
48
- var r;
49
- const o = (r = this.currentNode) == null ? void 0 : r.querySelector("p > a");
50
- if (!o)
46
+ var s;
47
+ const r = (s = this.currentNode) == null ? void 0 : s.querySelector("p > a");
48
+ if (!r)
51
49
  return;
52
- const T = e !== void 0 ? e : this.store.nameTrimming, n = this.store.orientation === I.ORIENTATION.VERTICAL;
53
- T ? this.api.getDocumentModifier().modifyHtml(o).setStyle("white-space", "nowrap").setStyle("overflow", "hidden").setStyle("text-overflow", "ellipsis").setStyle("max-width", n ? "130px" : "520px").apply(new a("Text Trimming Enabled")) : this.api.getDocumentModifier().modifyHtml(o).removeStyle("white-space").removeStyle("overflow").removeStyle("text-overflow").removeStyle("max-width").setStyle("max-width", n ? "130px" : "520px").apply(new a("Text Trimming Disabled"));
50
+ const T = e !== void 0 ? e : this.store.nameTrimming, m = this.store.orientation === I.ORIENTATION.VERTICAL;
51
+ T ? this.api.getDocumentModifier().modifyHtml(r).setStyle("white-space", "nowrap").setStyle("overflow", "hidden").setStyle("text-overflow", "ellipsis").setStyle("max-width", m ? "130px" : "520px").apply(new a("Text Trimming Enabled")) : this.api.getDocumentModifier().modifyHtml(r).removeStyle("white-space").removeStyle("overflow").removeStyle("text-overflow").removeStyle("max-width").setStyle("max-width", m ? "130px" : "520px").apply(new a("Text Trimming Disabled"));
54
52
  }
55
53
  _getTextTrimming() {
56
54
  return `
57
- <div class="display-flex align-items-center justify-content-between">
58
- <${l.LABEL}
59
- ${h.LABEL.text}="${this.api.translate("Text Trimming")}"
60
- >
61
- </${l.LABEL}>
62
- ${this._GuToggle(m.TRIMMING)}
55
+ <div class="container">
56
+ <div class="display-flex align-items-center justify-content-between">
57
+ <${l.LABEL}
58
+ ${g.LABEL.text}="${this.api.translate("Text Trimming")}"
59
+ >
60
+ </${l.LABEL}>
61
+ ${this._GuToggle(o.TRIMMING)}
62
+ </div>
63
63
  </div>
64
64
  `;
65
65
  }