@useinsider/guido 2.0.0-beta.bf65edd → 2.0.0-beta.c0d8594

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 (61) hide show
  1. package/README.md +2 -0
  2. package/dist/@types/config/schemas.js +3 -1
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +57 -61
  5. package/dist/components/organisms/base/Toaster.vue.js +6 -6
  6. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +2 -2
  7. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +6 -6
  8. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
  9. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
  10. package/dist/components/organisms/header/LeftSlot.vue.js +12 -12
  11. package/dist/components/organisms/header/LeftSlot.vue2.js +6 -6
  12. package/dist/composables/useStripo.js +40 -40
  13. package/dist/config/migrator/index.js +9 -8
  14. package/dist/config/migrator/itemsBlockMigrator.js +283 -0
  15. package/dist/extensions/Blocks/CouponBlock/constants.js +4 -0
  16. package/dist/extensions/Blocks/CouponBlock/controls/index.js +29 -0
  17. package/dist/extensions/Blocks/CouponBlock/extension.js +5 -4
  18. package/dist/extensions/Blocks/CouponBlock/settingsPanel.js +20 -14
  19. package/dist/extensions/Blocks/CouponBlock/template.js +22 -11
  20. package/dist/extensions/Blocks/Items/block.js +39 -40
  21. package/dist/extensions/Blocks/Items/controls/button/link.js +22 -29
  22. package/dist/extensions/Blocks/Items/controls/cardComposition.js +46 -49
  23. package/dist/extensions/Blocks/Items/controls/image/link.js +23 -30
  24. package/dist/extensions/Blocks/Items/controls/name/trimming.js +13 -15
  25. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +1 -1
  26. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +1 -1
  27. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +15 -17
  28. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +15 -15
  29. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +29 -27
  30. package/dist/extensions/Blocks/Items/controls/settingsControl.js +145 -136
  31. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +2 -2
  32. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +58 -48
  33. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +48 -58
  34. package/dist/extensions/Blocks/Items/settingsPanel.js +4 -4
  35. package/dist/extensions/Blocks/Items/store/items-block.js +2 -2
  36. package/dist/extensions/Blocks/Items/template.js +312 -125
  37. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +172 -0
  38. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +17 -44
  39. package/dist/extensions/Blocks/Recommendation/control.js +1 -1
  40. package/dist/extensions/Blocks/common-control.js +64 -53
  41. package/dist/extensions/Blocks/controlFactories.js +139 -118
  42. package/dist/guido.css +1 -1
  43. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +370 -286
  44. package/dist/package.json.js +1 -1
  45. package/dist/services/stripoApi.js +6 -10
  46. package/dist/src/@types/config/schemas.d.ts +4 -0
  47. package/dist/src/composables/useConfig.d.ts +2 -0
  48. package/dist/src/config/migrator/itemsBlockMigrator.d.ts +6 -0
  49. package/dist/src/extensions/Blocks/CouponBlock/constants.d.ts +14 -0
  50. package/dist/src/extensions/Blocks/CouponBlock/controls/index.d.ts +108 -0
  51. package/dist/src/extensions/Blocks/CouponBlock/template.d.ts +1 -1
  52. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +0 -2
  53. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +0 -2
  54. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +1 -1
  55. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +0 -4
  56. package/dist/src/extensions/Blocks/Items/template.d.ts +20 -1
  57. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +71 -0
  58. package/dist/src/extensions/Blocks/common-control.d.ts +13 -8
  59. package/dist/src/extensions/Blocks/controlFactories.d.ts +30 -7
  60. package/dist/src/stores/config.d.ts +17 -0
  61. package/package.json +3 -3
@@ -0,0 +1,283 @@
1
+ var B = Object.defineProperty;
2
+ var q = (o, t, r) => t in o ? B(o, t, { enumerable: !0, configurable: !0, writable: !0, value: r }) : o[t] = r;
3
+ var A = (o, t, r) => q(o, typeof t != "symbol" ? t + "" : t, r);
4
+ import { productPairs as L } from "../../extensions/Blocks/Items/enums/productEnums.js";
5
+ import { ItemInCartOptions as I, DefaultConfigValues as m, SETTINGS_ENUMS as l } from "../../extensions/Blocks/Items/enums/settingsEnums.js";
6
+ import { getDefaultTemplate as K } from "../../extensions/Blocks/Items/template.js";
7
+ const V = {
8
+ ins_apr_img: {
9
+ pairsKey: "imageSrc",
10
+ defaultKey: "DEFAULT",
11
+ isArray: !0
12
+ },
13
+ ins_apr_name: {
14
+ pairsKey: "name",
15
+ defaultKey: "DEFAULT",
16
+ isArray: !0
17
+ },
18
+ ins_apr_url: {
19
+ pairsKey: "button",
20
+ defaultKey: "DEFAULT_HREF",
21
+ isArray: !1
22
+ },
23
+ ins_apr_formattedprice: {
24
+ pairsKey: "price",
25
+ defaultKey: "DEFAULT_PRICE_FORMATTED",
26
+ isArray: !1
27
+ },
28
+ ins_apr_productcurrency: {
29
+ pairsKey: "price",
30
+ defaultKey: "DEFAULT_CURRENCY",
31
+ isArray: !1
32
+ },
33
+ ins_apr_quantity: {
34
+ pairsKey: "quantity",
35
+ defaultKey: "DEFAULT",
36
+ isArray: !1
37
+ },
38
+ ins_apr_price: {
39
+ pairsKey: "price",
40
+ defaultKey: "DEFAULT_PRICE",
41
+ isArray: !1
42
+ },
43
+ ins_apr_originalprice: {
44
+ pairsKey: "originalPrice",
45
+ defaultKey: "DEFAULT_PRICE",
46
+ isArray: !1
47
+ },
48
+ ins_apr_originalformattedprice: {
49
+ pairsKey: "originalPrice",
50
+ defaultKey: "DEFAULT_PRICE_FORMATTED",
51
+ isArray: !1
52
+ }
53
+ };
54
+ function U() {
55
+ return String(Date.now() + Math.floor(Math.random() * 1e3));
56
+ }
57
+ function F(o) {
58
+ return o ? {
59
+ CartItems: l.ITEMS_TYPE.CART_ITEMS,
60
+ BrowsedItems: l.ITEMS_TYPE.BROWSED_ITEMS,
61
+ PurchasedItems: l.ITEMS_TYPE.PURCHASED_ITEMS,
62
+ CART_ITEMS: l.ITEMS_TYPE.CART_ITEMS,
63
+ BROWSED_ITEMS: l.ITEMS_TYPE.BROWSED_ITEMS,
64
+ PURCHASED_ITEMS: l.ITEMS_TYPE.PURCHASED_ITEMS
65
+ }[o] || l.ITEMS_TYPE.CART_ITEMS : l.ITEMS_TYPE.CART_ITEMS;
66
+ }
67
+ function D(o) {
68
+ const t = (e, a) => e == null ? a : e === "1" || e === "true", r = (e, a) => e || a, c = o["data-type"] || o["data-source"], n = F(c);
69
+ let i = o["data-cart_items_select_control_value"] || m.cartItemsSelectControlValue;
70
+ if (i && !i.includes("{{") && /^\d+$/.test(i)) {
71
+ const e = parseInt(i) - 1, a = I[n];
72
+ a && a[e] && (i = a[e].value);
73
+ }
74
+ return {
75
+ initialized: !0,
76
+ blockInstanceId: r(o["data-block-instance-id"], U()),
77
+ source: n,
78
+ type: n,
79
+ itemsSelectValue: i,
80
+ orientation: o["data-card_orientation_control_value"] || l.ORIENTATION.VERTICAL,
81
+ nameTrimming: t(o["data-product_name_trimming"], !0),
82
+ nameControlEnabled: t(o["data-product_name_control_enabled"], !0),
83
+ priceHideDiscount: t(o["data-product_price_hide_discount"], !1),
84
+ priceFormatted: t(o["data-product_price_formatted"], !0),
85
+ priceCurrencySymbol: r(
86
+ o["data-product_price_currency_symbol"],
87
+ m.productPriceCurrencySymbolControlValue
88
+ ),
89
+ priceCurrencyLocation: r(
90
+ o["data-product_price_currency_location"],
91
+ m.productPriceCurrencyLocationControlValue
92
+ ),
93
+ priceControlOpened: t(o["data-product_price_control_opened"], !0),
94
+ priceOrientation: o["data-product_original_price_control_orientation"] || "horizontal",
95
+ quantityControlEnabled: t(o["data-product_quantity_control_enabled"], !0),
96
+ buttonLink: r(o["data-product_button_link"], m.productButtonLinkControlValue),
97
+ imageLink: r(o["data-product_image_link"], m.productImageLinkControlValue),
98
+ buttonLabel: r(o["data-product_button_control_label"], "Buy"),
99
+ imageVisible: t(o["data-product_image_visible"], !0),
100
+ nameVisible: t(o["data-product_name_visible"], !0),
101
+ quantityVisible: t(o["data-product_quantity_visible"], !0),
102
+ priceVisible: t(o["data-product_price_visible"], !0),
103
+ originalPriceVisible: t(o["data-product_original_price_control_enabled"], !0),
104
+ buttonVisible: t(o["data-product_button_visible"], !0)
105
+ };
106
+ }
107
+ class w {
108
+ constructor() {
109
+ A(this, "parser");
110
+ A(this, "DATA_TYPE", "CART_ITEMS");
111
+ this.parser = new DOMParser();
112
+ }
113
+ migrate(t) {
114
+ try {
115
+ let r = this.removeJinjaConditionals(t);
116
+ r = this.replaceTemplateVariables(r);
117
+ const c = this.parser.parseFromString(r, "text/html"), n = c.querySelectorAll("td.esd-cart-items-block");
118
+ return n.length === 0 ? (console.warn('ItemsBlockMigrator: No blocks found with selector "td.esd-cart-items-block"'), r) : (n.forEach((i) => {
119
+ const e = this.extractConfiguration(i), a = K({
120
+ orientation: e.orientation,
121
+ itemsType: e.itemsType,
122
+ itemId: e.itemId,
123
+ currencySymbol: e.currencySymbol,
124
+ currencyLocation: e.currencyLocation,
125
+ formattedPrice: e.formattedPrice,
126
+ configBlockAttributes: e.configBlockAttributes,
127
+ migrate: !0,
128
+ nameStyles: e.nameStyles,
129
+ buttonStyles: e.buttonStyles,
130
+ priceStyles: e.priceStyles,
131
+ originalPriceStyles: e.originalPriceStyles,
132
+ quantityStyles: e.quantityStyles,
133
+ nodeConfig: D(e.configBlockAttributes)
134
+ }), u = this.parser.parseFromString(
135
+ `<table><tbody><tr>${a}</tr></tbody></table>`,
136
+ "text/html"
137
+ ).querySelector("td");
138
+ if (u && i.parentNode) {
139
+ const s = D(e.configBlockAttributes);
140
+ u.setAttribute("esd-ext-config", JSON.stringify(s));
141
+ const p = u.querySelector("esd-config-block");
142
+ p && p.remove(), i.parentNode.replaceChild(u, i);
143
+ }
144
+ }), c.documentElement.outerHTML);
145
+ } catch (r) {
146
+ return console.error("ItemsBlockMigrator failed:", r), t;
147
+ }
148
+ }
149
+ /**
150
+ * Extracts configuration from legacy HTML block
151
+ * Parses data attributes and structure to determine:
152
+ * - orientation, itemsType, itemNumber, currency settings, esd-config-block attributes
153
+ * - UI styles from product elements (name, price, button, quantity, etc.)
154
+ */
155
+ extractConfiguration(t) {
156
+ var E, C, P;
157
+ const r = ((E = t.querySelector("[data-type]")) == null ? void 0 : E.getAttribute("data-type")) || "CART_ITEMS", c = ((C = t.querySelector("[data-number]")) == null ? void 0 : C.getAttribute("data-number")) || "1", n = parseInt(c) - 1, i = I[r], e = ((P = i == null ? void 0 : i[n]) == null ? void 0 : P.value) || i[0].value, a = t.querySelector('[product-attr="price"]'), _ = (a == null ? void 0 : a.getAttribute("data-currency_symbol")) || void 0, s = ((a == null ? void 0 : a.getAttribute("data-curency")) || "before") === "after" ? "1" : "0", p = (a == null ? void 0 : a.getAttribute("data-formated")) !== "false", y = this.extractConfigBlockAttributes(t, r), f = y["data-product_original_price_control_orientation"] === "vertical" ? "vertical" : "horizontal", d = t.querySelector('a[product-attr="name"]'), v = (d == null ? void 0 : d.getAttribute("style")) || void 0, b = t.querySelector('a[product-attr="button"]'), M = (b == null ? void 0 : b.getAttribute("style")) || void 0, h = (a == null ? void 0 : a.getAttribute("style")) || void 0, S = t.querySelector('[product-attr="originalPrice"]'), R = (S == null ? void 0 : S.getAttribute("style")) || void 0, T = t.querySelector('[product-attr="quantity"]'), k = (T == null ? void 0 : T.getAttribute("style")) || void 0;
158
+ return {
159
+ orientation: f,
160
+ itemsType: r,
161
+ itemId: e,
162
+ currencySymbol: _,
163
+ currencyLocation: s,
164
+ formattedPrice: p,
165
+ configBlockAttributes: y,
166
+ nameStyles: v,
167
+ buttonStyles: M,
168
+ priceStyles: h,
169
+ originalPriceStyles: R,
170
+ quantityStyles: k
171
+ };
172
+ }
173
+ /**
174
+ * Extracts all data-* attributes from the esd-config-block element
175
+ * Returns a key-value mapping of all configuration attributes
176
+ * @param block - The block element containing the esd-config-block
177
+ * @param itemsType - The type of items (CART_ITEMS, BROWSED_ITEMS, PURCHASED_ITEMS)
178
+ */
179
+ extractConfigBlockAttributes(t, r) {
180
+ const c = t.querySelector("esd-config-block"), n = {};
181
+ if (!c)
182
+ return this.getDefaultConfigBlockAttributes();
183
+ if (Array.from(c.attributes).forEach((e) => {
184
+ e.name.startsWith("data-") && (n[e.name] = e.value);
185
+ }), n["data-cart_items_select_control_value"]) {
186
+ const e = n["data-cart_items_select_control_value"];
187
+ if (/^\d+$/.test(e)) {
188
+ const a = parseInt(e) - 1, _ = I[r];
189
+ _ && _[a] && (n["data-cart_items_select_control_value"] = _[a].value);
190
+ }
191
+ }
192
+ if (n["data-product_price_control_curency"]) {
193
+ const e = n["data-product_price_control_curency"];
194
+ e === "before" ? n["data-product_price_control_curency"] = "0" : e === "after" && (n["data-product_price_control_curency"] = "1");
195
+ }
196
+ (!n["data-product_price_currency_symbol"] || n["data-product_price_currency_symbol"].trim() === "") && (n["data-product_price_currency_symbol"] = "USD");
197
+ const i = { ...this.getDefaultConfigBlockAttributes(), ...n };
198
+ return i["data-type"] = r, i["data-source"] = r, i;
199
+ }
200
+ /**
201
+ * Returns default esd-config-block attributes based on the old template structure
202
+ * These serve as fallbacks when attributes are missing
203
+ */
204
+ getDefaultConfigBlockAttributes() {
205
+ return {
206
+ "data-type": "CART_ITEMS",
207
+ "data-product_image_control_opened": "false",
208
+ "data-product_image_control_image-width": "250",
209
+ "data-product_image_control_image-height": "250",
210
+ "data-product_image_control_align_button": "true",
211
+ "data-product_image_control_padding_mobile": "true",
212
+ "data-product_name_control_opened": "false",
213
+ "data-product_quantity_control_opened": "true",
214
+ // DONE
215
+ "data-product_quantity_control_enabled": "false",
216
+ "data-product_name_control_font_font_size": "20",
217
+ "data-product_price_control_opened": "false",
218
+ "data-product_price_control_font_font_size": "20",
219
+ "data-product_price_control_color": "#060606",
220
+ "data-product_price_control_curency": "0",
221
+ "data-product_price_currency_symbol": "USD",
222
+ "data-product_original_price_control_opened": "false",
223
+ "data-product_original_price_control_font_font_size": "19",
224
+ "data-product_original_price_control_align_align_desktop": "center",
225
+ "data-product_original_price_control_orientation": "vertical",
226
+ "data-product_button_control_opened": "true",
227
+ "data-product_button_control_label": "Comprar",
228
+ // DONE
229
+ "data-product_button_control_font_font_size": "17",
230
+ "data-product_button_control_color": "#ffffff",
231
+ "data-product_button_control_background": "#010101",
232
+ "data-product_button_control_atw": "false",
233
+ "data-product_original_price_control_enabled": "false"
234
+ };
235
+ }
236
+ /**
237
+ * Removes Jinja2 conditional statements from HTML
238
+ * - Removes {% if ins_apr_total_product_kind > N %}
239
+ * - Removes {% if ins_apr_price_N != ins_apr_originalprice_N %}
240
+ * - Removes {% endif %}
241
+ */
242
+ removeJinjaConditionals(t) {
243
+ let r = t.replace(/\{%\s*if\s+ins_apr_total_product_kind\s*(&gt;|>)\s*\d+\s*%\}/g, "");
244
+ return r = r.replace(/\{%\s*if\s+ins_apr_price_\d+\s*(!&#61;|!=)\s*ins_apr_originalprice_\d+\s*%\}/g, ""), r = r.replace(/\{%\s*endif\s*%\}/g, ""), r = r.replace(/\n\s*\n\s*\n/g, `
245
+
246
+ `), r;
247
+ }
248
+ /**
249
+ * Replaces template variables with default values from productPairs
250
+ *
251
+ * Examples:
252
+ * - {{ins_apr_img_1}} → https://s3.../ins_apr_img_1.jpeg (array-based, uses index 0)
253
+ * - {{ins_apr_name_2}} → 'Set of Sprite Yoga Straps' (array-based, uses index 1)
254
+ * - {{ins_apr_formattedprice_1}} → '1,100.00' (single value, ignores index)
255
+ * - {{ins_apr_url_3}} → '#!' (single value, ignores index)
256
+ */
257
+ replaceTemplateVariables(t) {
258
+ const { PAIRS_FOR_EXTENSION: r } = L;
259
+ return t.replace(/{{([^}]+)}}/g, (c, n) => {
260
+ const i = n.match(/^(ins_apr_[a-z]+)_(\d+)$/);
261
+ if (!i)
262
+ return c;
263
+ const [, e, a] = i, _ = V[e];
264
+ if (!_)
265
+ return console.warn(`Unknown variable mapping for: ${e}`), c;
266
+ const { pairsKey: u, defaultKey: s, isArray: p } = _, y = r[u][this.DATA_TYPE];
267
+ if (!y)
268
+ return console.warn(`No data found for: ${u}.${this.DATA_TYPE}`), c;
269
+ if (p) {
270
+ const f = parseInt(a) - 1, d = y[s];
271
+ return Array.isArray(d) && d[f] ? d[f] : (console.warn(`Array value not found: ${u}.${this.DATA_TYPE}.${s}[${f}]`), c);
272
+ }
273
+ const g = y[s];
274
+ return g !== void 0 ? String(g) : (console.warn(`Default value not found: ${u}.${this.DATA_TYPE}.${s}`), c);
275
+ });
276
+ }
277
+ }
278
+ function $(o) {
279
+ return new w().migrate(o);
280
+ }
281
+ export {
282
+ $ as migrateItemsBlock
283
+ };
@@ -0,0 +1,4 @@
1
+ var t = /* @__PURE__ */ ((c) => (c.TEXT_ALIGN = "coupon-block-text-align-control", c.TEXT_COLOR = "coupon-block-text-color-control", c.TEXT_SIZE = "coupon-block-text-size-control", c.TEXT_STYLE = "coupon-block-text-style-control", c.TEXT_FONT_FAMILY = "coupon-block-text-font-family-control", c.TEXT_BACKGROUND = "coupon-block-text-background-control", c.TEXT_PADDINGS = "coupon-block-text-paddings-control", c.TEXT_LINE_SPACING = "coupon-block-text-line-spacing-control", c))(t || {});
2
+ export {
3
+ t as CouponControlId
4
+ };
@@ -0,0 +1,29 @@
1
+ import { createTextAlignControl as t, createTextColorControl as e, createTextSizeControl as n, createTextStyleControl as r, createTextFontFamilyControl as T, createTextBackgroundColorControl as l, createPaddingsControl as C, createTextLineSpacingControl as c } from "../../controlFactories.js";
2
+ import { CouponControlId as o } from "../constants.js";
3
+ const i = t(
4
+ o.TEXT_ALIGN
5
+ ), E = e(
6
+ o.TEXT_COLOR
7
+ ), s = n(
8
+ o.TEXT_SIZE
9
+ ), S = r(
10
+ o.TEXT_STYLE
11
+ ), _ = T(
12
+ o.TEXT_FONT_FAMILY
13
+ ), g = l(
14
+ o.TEXT_BACKGROUND
15
+ ), X = C(
16
+ o.TEXT_PADDINGS
17
+ ), d = c(
18
+ o.TEXT_LINE_SPACING
19
+ );
20
+ export {
21
+ i as TextAlignControl,
22
+ g as TextBackgroundControl,
23
+ E as TextColorControl,
24
+ _ as TextFontFamilyControl,
25
+ d as TextLineSpacingControl,
26
+ X as TextPaddingsControl,
27
+ s as TextSizeControl,
28
+ S as TextStyleControl
29
+ };
@@ -1,8 +1,9 @@
1
1
  import { ExtensionBuilder as o } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
2
  import { CouponBlock as t } from "./block.js";
3
- import { CouponIconsRegistry as i } from "./iconsRegistry.js";
4
- import { CouponBlockSettings as n } from "./settingsPanel.js";
5
- const p = new o().addBlock(t).withSettingsPanelRegistry(n).withIconsRegistry(i).build();
3
+ import { TextAlignControl as n, TextColorControl as r, TextSizeControl as l, TextStyleControl as d, TextFontFamilyControl as e, TextBackgroundControl as i, TextPaddingsControl as C, TextLineSpacingControl as a } from "./controls/index.js";
4
+ import { CouponIconsRegistry as s } from "./iconsRegistry.js";
5
+ import { CouponBlockSettings as m } from "./settingsPanel.js";
6
+ const u = new o().addBlock(t).withSettingsPanelRegistry(m).addControl(n).addControl(r).addControl(l).addControl(d).addControl(e).addControl(i).addControl(C).addControl(a).withIconsRegistry(s).build();
6
7
  export {
7
- p as default
8
+ u as default
8
9
  };
@@ -1,24 +1,30 @@
1
- import { SettingsPanelRegistry as T, SettingsPanelTab as o, SettingsTab as O, TextControls as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { COUPON_BLOCK_ID as N } from "./block.js";
3
- class _ extends T {
1
+ import { SettingsPanelRegistry as n, SettingsPanelTab as o, SettingsTab as t } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { COUPON_BLOCK_ID as E } from "./block.js";
3
+ import { CouponControlId as T } from "./constants.js";
4
+ class i extends n {
4
5
  registerBlockControls(e) {
5
- e[N] = [
6
+ e[E] = [
6
7
  new o(
7
- O.SETTINGS,
8
+ t.SETTINGS,
8
9
  [
9
- t.FONT_FAMILY,
10
- t.FONT_SIZE,
11
- t.FORMAT,
12
- t.FONT_COLOR,
13
- t.TEXT_BLOCK_BACKGROUND_COLOR,
14
- t.ALIGN,
15
- t.LINE_HEIGHT,
16
- t.INTERNAL_INDENTS
10
+ T.TEXT_STYLE,
11
+ T.TEXT_ALIGN,
12
+ T.TEXT_PADDINGS
13
+ ]
14
+ ),
15
+ new o(
16
+ t.STYLES,
17
+ [
18
+ T.TEXT_BACKGROUND,
19
+ T.TEXT_FONT_FAMILY,
20
+ T.TEXT_LINE_SPACING,
21
+ T.TEXT_SIZE,
22
+ T.TEXT_COLOR
17
23
  ]
18
24
  )
19
25
  ];
20
26
  }
21
27
  }
22
28
  export {
23
- _ as CouponBlockSettings
29
+ i as CouponBlockSettings
24
30
  };
@@ -1,18 +1,29 @@
1
- const o = `
2
- <td class="coupon-block ins-coupon-code esd-block-text coupon-block-v2">
3
- <p class="ins-title" contenteditable="false">{@COUPON_CODE}</p>
4
- </td>`, e = `
5
- <td
6
- class="coupon-block coupon-block-v2 ins-coupon-code esd-block-text esd-extension-block"
7
- esd-extension-block-id="coupon-block"
1
+ import { BlockType as o } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { COUPON_BLOCK_ID as e } from "./block.js";
3
+ const t = `
4
+ <${o.BLOCK_TEXT}
5
+ class="coupon-block ins-coupon-code coupon-block-v2 es-p10"
6
+ align="center"
7
+ esd-extension-block-id="${e}">
8
+ <p
9
+ path="1"
10
+ contenteditable="false"
11
+ style="font-size: 16px; color: #333333;">
12
+ <strong path="1,0">{@COUPON_CODE}</strong>
13
+ </p>
14
+ </${o.BLOCK_TEXT}>
15
+ `, l = `
16
+ <td
17
+ class="coupon-block coupon-block-v2 ins-coupon-code esd-block-text esd-extension-block"
18
+ esd-extension-block-id="${e}"
8
19
  >
9
20
  <p class="ins-title" contenteditable="false">{@COUPON_CODE}</p>
10
21
  </td>
11
22
  `;
12
- function t() {
13
- return o;
23
+ function s() {
24
+ return t;
14
25
  }
15
26
  export {
16
- e as default,
17
- t as getDefaultTemplate
27
+ l as default,
28
+ s as getDefaultTemplate
18
29
  };
@@ -1,20 +1,20 @@
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 {
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 {
10
10
  getId() {
11
- return M;
11
+ return b;
12
12
  }
13
13
  getIcon() {
14
14
  return "items-icon";
15
15
  }
16
16
  getBlockCompositionType() {
17
- return L.CONTAINER;
17
+ return p.CONTAINER;
18
18
  }
19
19
  getName() {
20
20
  return this.api.translate("Items");
@@ -23,45 +23,44 @@ class x extends R {
23
23
  return this.api.translate("Items lets you display personalized products based on user behavior.");
24
24
  }
25
25
  getTemplate() {
26
- return V({
27
- orientation: l.ORIENTATION.HORIZONTAL,
28
- itemsType: l.ITEMS_TYPE.CART_ITEMS,
26
+ return y({
27
+ orientation: c.ORIENTATION.VERTICAL,
28
+ itemsType: c.ITEMS_TYPE.CART_ITEMS,
29
29
  itemId: "{{Abandoned Cart Item (1) Url}}",
30
- currencySymbol: e.productPriceCurrencySymbolControlValue,
31
- currencyLocation: e.productPriceCurrencyLocationControlValue,
32
- formattedPrice: e.productPriceFormattedControlValue === "1"
30
+ currencySymbol: o.productPriceCurrencySymbolControlValue,
31
+ currencyLocation: o.productPriceCurrencyLocationControlValue,
32
+ formattedPrice: o.productPriceFormattedControlValue === "1"
33
33
  });
34
34
  }
35
35
  allowInnerBlocksDND() {
36
36
  return !1;
37
37
  }
38
- onCreated(r) {
39
- const n = r.querySelector("esd-config-block");
40
- if (!n)
38
+ onCreated(i) {
39
+ const e = C(i);
40
+ if (!e)
41
41
  return;
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");
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 esd-config-block 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");
54
48
  }
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"));
55
51
  }
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);
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
+ ));
62
61
  }
63
62
  }
64
63
  export {
65
- M as BLOCK_ID,
66
- x as ItemsBlock
64
+ b as BLOCK_ID,
65
+ O as ItemsBlock
67
66
  };
@@ -1,59 +1,52 @@
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);
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);
4
4
  import { CommonControl as u } 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 { syncButtonLinkFromAttributes as h } from "../../utils/syncAttributesFromConfigBlock.js";
8
- import { updateConfigBlockAttributes as m } from "../../utils/updateAttributes.js";
9
- const i = d.BUTTON_LINK, n = {
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 = {
10
9
  LINK: "link"
11
10
  };
12
- class C extends u {
11
+ class N extends u {
13
12
  constructor() {
14
13
  super(...arguments);
15
- s(this, "store", l());
14
+ i(this, "store", m());
16
15
  }
17
16
  getId() {
18
- return i;
17
+ return r;
19
18
  }
20
19
  getTemplate() {
21
20
  return `
22
- <div class="${i}">
21
+ <div class="container ${r}">
23
22
  ${this._getLink()}
24
23
  </div>
25
24
  `;
26
25
  }
27
26
  onRender() {
28
27
  this.api.updateValues({
29
- [n.LINK]: this.store.buttonLink
30
- }), this._listenToFormUpdates();
28
+ [s.LINK]: this.store.buttonLink
29
+ });
31
30
  }
32
- onTemplateNodeUpdated(t) {
33
- super.onTemplateNodeUpdated(t), this.handleBlockInstanceChange(
34
- () => h(this.currentNode),
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
+ },
35
37
  () => {
36
38
  this.api.updateValues({
37
- [n.LINK]: this.store.buttonLink
39
+ [s.LINK]: this.store.buttonLink
38
40
  });
39
41
  }
40
42
  );
41
43
  }
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
- }
51
44
  _getLink() {
52
45
  return `
53
46
  ${this._GuOneColumn([
54
47
  this._GuLabel({ text: "Link" }),
55
48
  this._GuTextInput({
56
- name: n.LINK,
49
+ name: s.LINK,
57
50
  placeholder: "Enter Link",
58
51
  className: "es-100",
59
52
  disabled: !0
@@ -63,6 +56,6 @@ class C extends u {
63
56
  }
64
57
  }
65
58
  export {
66
- C as ButtonLinkControl,
67
- i as CONTROL_BLOCK_ID
59
+ N as ButtonLinkControl,
60
+ r as CONTROL_BLOCK_ID
68
61
  };