@useinsider/guido 2.0.0-beta.afc5689 → 2.0.0-beta.b442f78

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 (41) hide show
  1. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +2 -2
  2. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +2 -2
  3. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
  4. package/dist/components/organisms/header/LeftSlot.vue.js +12 -12
  5. package/dist/components/organisms/header/LeftSlot.vue2.js +6 -6
  6. package/dist/config/migrator/index.js +8 -9
  7. package/dist/extensions/Blocks/Items/block.js +40 -39
  8. package/dist/extensions/Blocks/Items/controls/button/link.js +29 -22
  9. package/dist/extensions/Blocks/Items/controls/cardComposition.js +49 -46
  10. package/dist/extensions/Blocks/Items/controls/image/link.js +30 -23
  11. package/dist/extensions/Blocks/Items/controls/name/trimming.js +15 -13
  12. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +1 -1
  13. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +1 -1
  14. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +17 -15
  15. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +15 -15
  16. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +27 -29
  17. package/dist/extensions/Blocks/Items/controls/settingsControl.js +136 -145
  18. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +2 -2
  19. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +48 -58
  20. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +58 -48
  21. package/dist/extensions/Blocks/Items/settingsPanel.js +4 -4
  22. package/dist/extensions/Blocks/Items/store/items-block.js +2 -2
  23. package/dist/extensions/Blocks/Items/template.js +125 -312
  24. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +44 -17
  25. package/dist/extensions/Blocks/Recommendation/control.js +1 -1
  26. package/dist/extensions/Blocks/common-control.js +55 -67
  27. package/dist/extensions/Blocks/controlFactories.js +45 -55
  28. package/dist/guido.css +1 -1
  29. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +285 -364
  30. package/dist/package.json.js +1 -1
  31. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +2 -0
  32. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +2 -0
  33. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +1 -1
  34. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +4 -0
  35. package/dist/src/extensions/Blocks/Items/template.d.ts +1 -20
  36. package/dist/src/extensions/Blocks/common-control.d.ts +9 -14
  37. package/package.json +3 -3
  38. package/dist/config/migrator/itemsBlockMigrator.js +0 -283
  39. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +0 -172
  40. package/dist/src/config/migrator/itemsBlockMigrator.d.ts +0 -6
  41. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +0 -71
@@ -1,4 +1,4 @@
1
- const o = { stripo: { version: "2.52.0" } }, s = {
1
+ const o = { stripo: { version: "2.47.0" } }, s = {
2
2
  guido: o
3
3
  };
4
4
  export {
@@ -8,5 +8,7 @@ export declare class ButtonLinkControl extends CommonControl {
8
8
  getTemplate(): string;
9
9
  onRender(): void;
10
10
  onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
11
+ _listenToFormUpdates(): void;
12
+ _onLinkChange(value: string): void;
11
13
  _getLink(): string;
12
14
  }
@@ -8,5 +8,7 @@ export declare class ImageLinkControl extends CommonControl {
8
8
  getTemplate(): string;
9
9
  onRender(): void;
10
10
  onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
11
+ _listenToFormUpdates(): void;
12
+ _onLinkChange(value: string): void;
11
13
  _getLink(): string;
12
14
  }
@@ -9,7 +9,7 @@ export declare class PriceOrientationControl extends CommonControl {
9
9
  onRender(): void;
10
10
  onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
11
11
  _onPriceOrientationChange(value: string): void;
12
- private _updateVerticalLayout;
13
12
  private _updateHorizontalLayout;
13
+ private _updateVerticalLayout;
14
14
  _getPriceOrientation(): string;
15
15
  }
@@ -31,6 +31,10 @@ export declare class ItemsBlockControl extends CommonControl {
31
31
  _updatePrice(price: string): void;
32
32
  _updateOriginalPrice(originalPrice: string): void;
33
33
  _updateQuantity(quantity: string): void;
34
+ /**
35
+ * @todo Optimize template reordering for performance.
36
+ * @description Reorders the template structure based on current orientation and visibility settings.
37
+ */
34
38
  _reOrderTemplate(): void;
35
39
  _updateDataTypeAttributes(itemsType: ProductType): void;
36
40
  _updateDataNumberAttributes(itemId: string): void;
@@ -1,8 +1,6 @@
1
- import type { ItemsBlockConfig } from './utils/nodeConfigUtils';
2
1
  declare const migrationTemplate = "ADD YOUR MIGRATION HERE";
3
2
  type ProductType = 'CART_ITEMS' | 'BROWSED_ITEMS' | 'PURCHASED_ITEMS';
4
3
  type OrientationType = 'vertical' | 'horizontal';
5
- type PriceOrientationType = 'vertical' | 'horizontal';
6
4
  type TemplateParameters = {
7
5
  orientation: OrientationType;
8
6
  itemsType: ProductType;
@@ -10,23 +8,6 @@ type TemplateParameters = {
10
8
  currencySymbol?: string;
11
9
  currencyLocation?: string;
12
10
  formattedPrice?: boolean;
13
- migrate?: boolean;
14
- /** Legacy config format (data-* attributes from esd-config-block) */
15
- configBlockAttributes?: Record<string, string>;
16
- /** New config format (Stripo V2 nodeConfig from esd-ext-config) */
17
- nodeConfig?: Partial<ItemsBlockConfig>;
18
- /** Extracted styles from a[product-attr="name"] for migration */
19
- nameStyles?: string;
20
- /** Extracted styles from a.es-button for migration */
21
- buttonStyles?: string;
22
- /** Extracted styles from p[product-attr="price"] for migration */
23
- priceStyles?: string;
24
- /** Extracted styles from p[product-attr="originalPrice"] for migration */
25
- originalPriceStyles?: string;
26
- /** Extracted styles from p[product-attr="quantity"] for migration */
27
- quantityStyles?: string;
28
- /** Price orientation within the card ('vertical' = stacked, 'horizontal' = side-by-side) */
29
- priceOrientation?: PriceOrientationType;
30
11
  };
31
12
  /**
32
13
  * Generates the default template for the Items Block.
@@ -39,5 +20,5 @@ type TemplateParameters = {
39
20
  * @param params.formattedPrice - Whether to use formatted price display
40
21
  * @returns HTML template string for the Items Block
41
22
  */
42
- export declare function getDefaultTemplate({ orientation, itemsType, itemId, currencySymbol, currencyLocation, migrate, formattedPrice, configBlockAttributes, nodeConfig, nameStyles, buttonStyles, priceStyles, originalPriceStyles, quantityStyles, priceOrientation, }: TemplateParameters): string;
23
+ export declare function getDefaultTemplate({ orientation, itemsType, itemId, currencySymbol, currencyLocation, formattedPrice, }: TemplateParameters): string;
43
24
  export default migrationTemplate;
@@ -56,31 +56,26 @@ export declare abstract class CommonControl extends Control {
56
56
  onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
57
57
  onDestroy(): void;
58
58
  /**
59
- * Gets the Items block container element from the current node.
60
- * @returns The container element or null if not found
61
- */
62
- protected getItemsBlockContainer(): ImmutableHtmlElementNode | null;
63
- /**
64
- * Gets the config block element from the current node (legacy support).
65
- * @deprecated Use getNodeConfig() from nodeConfigUtils instead for Stripo V2
59
+ * Gets the config block element from the current node.
66
60
  * @returns The config block element or null if not found
67
61
  */
68
62
  protected getConfigBlock(): ImmutableHtmlElementNode | null;
69
63
  /**
70
- * Gets the current block instance ID from the node config (Stripo V2) or legacy config block.
64
+ * Gets the current block instance ID from the config block.
65
+ * @param blockInstanceIdAttribute - The attribute name for block instance ID (default: 'data-block-instance-id')
71
66
  * @returns The block instance ID or null if not found
72
67
  */
73
- protected getBlockInstanceId(): string | null;
68
+ protected getBlockInstanceId(blockInstanceIdAttribute?: string): string | null;
74
69
  /**
75
70
  * Handles block instance change detection and syncing.
76
- * This is a helper method for controls that need to sync config when switching between block instances.
77
- * Uses Stripo V2 nodeConfig API for block instance tracking.
78
- * @param syncFunction - Function to call when block instance changes (to sync from node config)
71
+ * This is a helper method for controls that need to sync attributes when switching between block instances.
72
+ * @param syncFunction - Function to call when block instance changes (to sync from attributes)
79
73
  * @param updateUI - Function to call to update the UI (called both on change and when same block)
74
+ * @param blockInstanceIdAttribute - The attribute name for block instance ID (default: 'data-block-instance-id')
80
75
  * @returns true if block instance changed, false otherwise
81
76
  */
82
- protected handleBlockInstanceChange(syncFunction: (node: ImmutableHtmlNode) => void, updateUI: () => void): boolean;
83
- _GuLabel({ text, name, position }: LabelProps): string;
77
+ protected handleBlockInstanceChange(syncFunction: (node: ImmutableHtmlNode) => void, updateUI: () => void, blockInstanceIdAttribute?: string): boolean;
78
+ _GuLabel({ text, name }: LabelProps): string;
84
79
  _GuToggle(name: string): string;
85
80
  _GuSelectItem({ text, value }: {
86
81
  text: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "2.0.0-beta.afc5689",
3
+ "version": "2.0.0-beta.b442f78",
4
4
  "description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
5
5
  "main": "./dist/guido.umd.cjs",
6
6
  "module": "./dist/library.js",
@@ -31,7 +31,7 @@
31
31
  "author": "",
32
32
  "license": "ISC",
33
33
  "dependencies": {
34
- "@stripoinc/ui-editor-extensions": "3.5.0",
34
+ "@stripoinc/ui-editor-extensions": "3.3.0",
35
35
  "@useinsider/design-system-vue": "0.14.20",
36
36
  "@vueuse/core": "11.3.0",
37
37
  "lodash-es": "4.17.21",
@@ -85,7 +85,7 @@
85
85
  },
86
86
  "guido": {
87
87
  "stripo": {
88
- "version": "2.52.0"
88
+ "version": "2.47.0"
89
89
  }
90
90
  }
91
91
  }
@@ -1,283 +0,0 @@
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
- };
@@ -1,172 +0,0 @@
1
- import { ModificationDescription as _ } from "../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { DefaultConfigValues as e, SETTINGS_ENUMS as n, ItemInCartOptions as g } from "../enums/settingsEnums.js";
3
- function d() {
4
- return String(Date.now() + Math.floor(Math.random() * 1e3));
5
- }
6
- function f() {
7
- return {
8
- initialized: !0,
9
- blockInstanceId: d(),
10
- source: n.ITEMS_TYPE.CART_ITEMS,
11
- type: n.ITEMS_TYPE.CART_ITEMS,
12
- itemsSelectValue: e.cartItemsSelectControlValue,
13
- orientation: n.ORIENTATION.VERTICAL,
14
- nameTrimming: e.productNameTrimmingControlValue === "1",
15
- nameControlEnabled: e.productNameControlEnabled === "1",
16
- priceHideDiscount: e.productPriceHideDiscountControlValue === "1",
17
- priceFormatted: e.productPriceFormattedControlValue === "1",
18
- priceCurrencySymbol: e.productPriceCurrencySymbolControlValue,
19
- priceCurrencyLocation: e.productPriceCurrencyLocationControlValue,
20
- priceControlOpened: e.productPriceControlOpened === "1",
21
- priceOrientation: "horizontal",
22
- quantityControlEnabled: e.productQuantityControlEnabled === "1",
23
- buttonLink: e.productButtonLinkControlValue,
24
- imageLink: e.productImageLinkControlValue,
25
- buttonLabel: "Buy",
26
- imageVisible: e.productImageVisible === "1",
27
- nameVisible: e.productNameVisible === "1",
28
- quantityVisible: e.productQuantityVisible === "1",
29
- priceVisible: e.productPriceVisible === "1",
30
- originalPriceVisible: e.productOriginalPriceVisible === "1",
31
- buttonVisible: e.productButtonVisible === "1"
32
- };
33
- }
34
- function s(r) {
35
- if (!r)
36
- return null;
37
- const t = r.closest(".items-block-v2");
38
- return t || r.closest(".esd-cart-items-block");
39
- }
40
- function m(r) {
41
- return r ? {
42
- CartItems: n.ITEMS_TYPE.CART_ITEMS,
43
- BrowsedItems: n.ITEMS_TYPE.BROWSED_ITEMS,
44
- PurchasedItems: n.ITEMS_TYPE.PURCHASED_ITEMS,
45
- // Also handle already correct formats
46
- CART_ITEMS: n.ITEMS_TYPE.CART_ITEMS,
47
- BROWSED_ITEMS: n.ITEMS_TYPE.BROWSED_ITEMS,
48
- PURCHASED_ITEMS: n.ITEMS_TYPE.PURCHASED_ITEMS
49
- }[r] || n.ITEMS_TYPE.CART_ITEMS : n.ITEMS_TYPE.CART_ITEMS;
50
- }
51
- function C(r, t) {
52
- if (!r)
53
- return e.cartItemsSelectControlValue;
54
- if (r.includes("{{"))
55
- return r;
56
- if (/^\d+$/.test(r)) {
57
- const i = parseInt(r) - 1, o = g[t];
58
- if (o && o[i])
59
- return o[i].value;
60
- }
61
- return e.cartItemsSelectControlValue;
62
- }
63
- function I(r) {
64
- const t = r.querySelector("esd-config-block");
65
- if (!t)
66
- return null;
67
- const i = (c, a) => c == null ? a : c === "1" || c === "true", o = (c, a) => c || a, l = t.getAttribute("data-type"), u = m(l), p = t.getAttribute("data-cart_items_select_control_value"), b = C(p, u);
68
- return {
69
- initialized: i(t.getAttribute("data-initialized"), !1),
70
- blockInstanceId: o(
71
- t.getAttribute("data-block-instance-id"),
72
- d()
73
- ),
74
- source: u,
75
- type: u,
76
- itemsSelectValue: b,
77
- orientation: t.getAttribute("data-card_orientation_control_value") || n.ORIENTATION.VERTICAL,
78
- nameTrimming: i(
79
- t.getAttribute("data-product_name_trimming"),
80
- !0
81
- ),
82
- nameControlEnabled: i(
83
- t.getAttribute("data-product_name_control_enabled"),
84
- !0
85
- ),
86
- priceHideDiscount: i(
87
- t.getAttribute("data-product_price_hide_discount"),
88
- !0
89
- ),
90
- priceFormatted: i(
91
- t.getAttribute("data-product_price_formatted"),
92
- !0
93
- ),
94
- priceCurrencySymbol: o(
95
- t.getAttribute("data-product_price_currency_symbol"),
96
- e.productPriceCurrencySymbolControlValue
97
- ),
98
- priceCurrencyLocation: o(
99
- t.getAttribute("data-product_price_currency_location"),
100
- e.productPriceCurrencyLocationControlValue
101
- ),
102
- priceControlOpened: i(
103
- t.getAttribute("data-product_price_control_opened"),
104
- !0
105
- ),
106
- priceOrientation: t.getAttribute("data-product_original_price_control_orientation") || "horizontal",
107
- quantityControlEnabled: i(
108
- t.getAttribute("data-product_quantity_control_enabled"),
109
- !0
110
- ),
111
- buttonLink: o(
112
- t.getAttribute("data-product_button_link"),
113
- e.productButtonLinkControlValue
114
- ),
115
- imageLink: o(
116
- t.getAttribute("data-product_image_link"),
117
- e.productImageLinkControlValue
118
- ),
119
- buttonLabel: o(
120
- t.getAttribute("data-product_button_control_label"),
121
- "Buy"
122
- ),
123
- imageVisible: i(
124
- t.getAttribute("data-product_image_visible"),
125
- !0
126
- ),
127
- nameVisible: i(
128
- t.getAttribute("data-product_name_visible"),
129
- !0
130
- ),
131
- quantityVisible: i(
132
- t.getAttribute("data-product_quantity_visible"),
133
- !0
134
- ),
135
- priceVisible: i(
136
- t.getAttribute("data-product_price_visible"),
137
- !0
138
- ),
139
- originalPriceVisible: i(
140
- t.getAttribute("data-product_original_price_control_enabled"),
141
- !0
142
- ),
143
- buttonVisible: i(
144
- t.getAttribute("data-product_button_visible"),
145
- !0
146
- )
147
- };
148
- }
149
- function S(r) {
150
- const t = s(r);
151
- if (!t)
152
- return null;
153
- const i = t.getNodeConfig();
154
- if (i && i.initialized)
155
- return i;
156
- const o = I(t);
157
- return o || null;
158
- }
159
- function y(r, t, i) {
160
- const o = s(r);
161
- if (!o)
162
- return;
163
- const u = { ...o.getNodeConfig() || {}, ...i };
164
- t.getDocumentModifier().modifyHtml(o).setNodeConfig(u).apply(new _("Update Items block configuration"));
165
- }
166
- export {
167
- d as generateBlockInstanceId,
168
- f as getDefaultItemsBlockConfig,
169
- S as getItemsBlockConfig,
170
- s as getItemsBlockContainer,
171
- y as setItemsBlockConfig
172
- };
@@ -1,6 +0,0 @@
1
- /**
2
- * Migrates legacy ItemsBlock templates to v2 format
3
- * @param html - HTML string containing legacy items blocks
4
- * @returns Migrated HTML with replaced variables and cleaned conditionals
5
- */
6
- export declare function migrateItemsBlock(html: string): string;