@useinsider/guido 3.23.0-beta.31d0f5f → 3.23.0-beta.9f6bfbf

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 (42) hide show
  1. package/README.md +1 -0
  2. package/dist/@types/config/schemas.js +17 -15
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +58 -56
  5. package/dist/composables/useModuleRepair.js +14 -12
  6. package/dist/config/migrator/index.js +16 -15
  7. package/dist/config/migrator/itemsPriceFormatMigrator.js +20 -0
  8. package/dist/extensions/Blocks/Items/block.js +115 -77
  9. package/dist/extensions/Blocks/Items/constants/currency.js +59 -14
  10. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +33 -22
  11. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +62 -51
  12. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +18 -17
  13. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +42 -31
  14. package/dist/extensions/Blocks/Items/controls/priceFormat.js +145 -0
  15. package/dist/extensions/Blocks/Items/controls/settingsControl.js +141 -120
  16. package/dist/extensions/Blocks/Items/enums/controlEnums.js +1 -1
  17. package/dist/extensions/Blocks/Items/extension.js +9 -8
  18. package/dist/extensions/Blocks/Items/items.css.js +19 -0
  19. package/dist/extensions/Blocks/Items/settingsPanel.js +34 -25
  20. package/dist/extensions/Blocks/Items/template.js +250 -212
  21. package/dist/extensions/Blocks/Items/utils/priceFormatOps.js +185 -0
  22. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +1 -0
  23. package/dist/guido.css +1 -1
  24. package/dist/package.json.js +1 -1
  25. package/dist/src/@types/config/schemas.d.ts +4 -0
  26. package/dist/src/composables/useConfig.d.ts +2 -0
  27. package/dist/src/config/migrator/index.d.ts +4 -1
  28. package/dist/src/config/migrator/itemsPriceFormatMigrator.d.ts +1 -0
  29. package/dist/src/extensions/Blocks/Items/block.d.ts +6 -9
  30. package/dist/src/extensions/Blocks/Items/constants/currency.d.ts +32 -0
  31. package/dist/src/extensions/Blocks/Items/controls/priceFormat.d.ts +23 -0
  32. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +1 -0
  33. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +1 -0
  34. package/dist/src/extensions/Blocks/Items/template.d.ts +4 -1
  35. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +3 -0
  36. package/dist/src/extensions/Blocks/Items/utils/priceFormatOps.d.ts +61 -0
  37. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +12 -0
  38. package/dist/src/stores/config.d.ts +20 -0
  39. package/dist/src/utils/itemsCurrencyRepair.d.ts +5 -1
  40. package/dist/utils/itemsCurrencyRepair.js +29 -24
  41. package/dist/utils/pairProductVariables.js +119 -99
  42. package/package.json +1 -1
@@ -109,6 +109,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
109
109
  linkTrackingIds: boolean;
110
110
  allowSaveWithErrors: boolean;
111
111
  reusableRecommendationStrategy: boolean;
112
+ itemsPriceFormatting: boolean;
112
113
  };
113
114
  blocks: {
114
115
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -254,6 +255,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
254
255
  linkTrackingIds: boolean;
255
256
  allowSaveWithErrors: boolean;
256
257
  reusableRecommendationStrategy: boolean;
258
+ itemsPriceFormatting: boolean;
257
259
  };
258
260
  blocks: {
259
261
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -399,6 +401,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
399
401
  linkTrackingIds: boolean;
400
402
  allowSaveWithErrors: boolean;
401
403
  reusableRecommendationStrategy: boolean;
404
+ itemsPriceFormatting: boolean;
402
405
  };
403
406
  blocks: {
404
407
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -544,6 +547,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
544
547
  linkTrackingIds: boolean;
545
548
  allowSaveWithErrors: boolean;
546
549
  reusableRecommendationStrategy: boolean;
550
+ itemsPriceFormatting: boolean;
547
551
  };
548
552
  blocks: {
549
553
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -689,6 +693,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
689
693
  linkTrackingIds: boolean;
690
694
  allowSaveWithErrors: boolean;
691
695
  reusableRecommendationStrategy: boolean;
696
+ itemsPriceFormatting: boolean;
692
697
  };
693
698
  blocks: {
694
699
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -834,6 +839,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
834
839
  linkTrackingIds: boolean;
835
840
  allowSaveWithErrors: boolean;
836
841
  reusableRecommendationStrategy: boolean;
842
+ itemsPriceFormatting: boolean;
837
843
  };
838
844
  blocks: {
839
845
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -979,6 +985,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
979
985
  linkTrackingIds: boolean;
980
986
  allowSaveWithErrors: boolean;
981
987
  reusableRecommendationStrategy: boolean;
988
+ itemsPriceFormatting: boolean;
982
989
  };
983
990
  blocks: {
984
991
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1124,6 +1131,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1124
1131
  linkTrackingIds: boolean;
1125
1132
  allowSaveWithErrors: boolean;
1126
1133
  reusableRecommendationStrategy: boolean;
1134
+ itemsPriceFormatting: boolean;
1127
1135
  };
1128
1136
  blocks: {
1129
1137
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1269,6 +1277,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1269
1277
  linkTrackingIds: boolean;
1270
1278
  allowSaveWithErrors: boolean;
1271
1279
  reusableRecommendationStrategy: boolean;
1280
+ itemsPriceFormatting: boolean;
1272
1281
  };
1273
1282
  blocks: {
1274
1283
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1414,6 +1423,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1414
1423
  linkTrackingIds: boolean;
1415
1424
  allowSaveWithErrors: boolean;
1416
1425
  reusableRecommendationStrategy: boolean;
1426
+ itemsPriceFormatting: boolean;
1417
1427
  };
1418
1428
  blocks: {
1419
1429
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1559,6 +1569,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1559
1569
  linkTrackingIds: boolean;
1560
1570
  allowSaveWithErrors: boolean;
1561
1571
  reusableRecommendationStrategy: boolean;
1572
+ itemsPriceFormatting: boolean;
1562
1573
  };
1563
1574
  blocks: {
1564
1575
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1704,6 +1715,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1704
1715
  linkTrackingIds: boolean;
1705
1716
  allowSaveWithErrors: boolean;
1706
1717
  reusableRecommendationStrategy: boolean;
1718
+ itemsPriceFormatting: boolean;
1707
1719
  };
1708
1720
  blocks: {
1709
1721
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1849,6 +1861,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1849
1861
  linkTrackingIds: boolean;
1850
1862
  allowSaveWithErrors: boolean;
1851
1863
  reusableRecommendationStrategy: boolean;
1864
+ itemsPriceFormatting: boolean;
1852
1865
  };
1853
1866
  blocks: {
1854
1867
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1994,6 +2007,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1994
2007
  linkTrackingIds: boolean;
1995
2008
  allowSaveWithErrors: boolean;
1996
2009
  reusableRecommendationStrategy: boolean;
2010
+ itemsPriceFormatting: boolean;
1997
2011
  };
1998
2012
  blocks: {
1999
2013
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2139,6 +2153,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2139
2153
  linkTrackingIds: boolean;
2140
2154
  allowSaveWithErrors: boolean;
2141
2155
  reusableRecommendationStrategy: boolean;
2156
+ itemsPriceFormatting: boolean;
2142
2157
  };
2143
2158
  blocks: {
2144
2159
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2284,6 +2299,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2284
2299
  linkTrackingIds: boolean;
2285
2300
  allowSaveWithErrors: boolean;
2286
2301
  reusableRecommendationStrategy: boolean;
2302
+ itemsPriceFormatting: boolean;
2287
2303
  };
2288
2304
  blocks: {
2289
2305
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2429,6 +2445,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2429
2445
  linkTrackingIds: boolean;
2430
2446
  allowSaveWithErrors: boolean;
2431
2447
  reusableRecommendationStrategy: boolean;
2448
+ itemsPriceFormatting: boolean;
2432
2449
  };
2433
2450
  blocks: {
2434
2451
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2586,6 +2603,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2586
2603
  linkTrackingIds: boolean;
2587
2604
  allowSaveWithErrors: boolean;
2588
2605
  reusableRecommendationStrategy: boolean;
2606
+ itemsPriceFormatting: boolean;
2589
2607
  };
2590
2608
  blocks: {
2591
2609
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2731,6 +2749,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2731
2749
  linkTrackingIds: boolean;
2732
2750
  allowSaveWithErrors: boolean;
2733
2751
  reusableRecommendationStrategy: boolean;
2752
+ itemsPriceFormatting: boolean;
2734
2753
  };
2735
2754
  blocks: {
2736
2755
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2878,6 +2897,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2878
2897
  linkTrackingIds: boolean;
2879
2898
  allowSaveWithErrors: boolean;
2880
2899
  reusableRecommendationStrategy: boolean;
2900
+ itemsPriceFormatting: boolean;
2881
2901
  };
2882
2902
  blocks: {
2883
2903
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1,3 +1,7 @@
1
+ export interface ItemsCurrencyRepairOptions {
2
+ /** Convert legacy-model blocks to the root price-format contract (itemsPriceFormatting). */
3
+ convertToPriceFormat?: boolean;
4
+ }
1
5
  /**
2
6
  * Heals stale price currency attributes on every v2 Items block inside a dropped
3
7
  * saved module, driving `data-curency` / `data-currency_symbol` from each block's
@@ -14,4 +18,4 @@
14
18
  * recommendationMigrator wraps). If the wrap fails to capture the blocks (non-`<td>`
15
19
  * root foster-parented out), it bails to the original string.
16
20
  */
17
- export declare function repairItemsCurrencyAttributes(html: string): string;
21
+ export declare function repairItemsCurrencyAttributes(html: string, { convertToPriceFormat }?: ItemsCurrencyRepairOptions): string;
@@ -1,39 +1,44 @@
1
- import { currencyAttrTargets as u, ITEMS_CURRENCY_ATTR as c } from "../extensions/Blocks/Items/constants/currency.js";
2
- import { ItemsBlockId as l } from "../extensions/Blocks/Items/enums/controlEnums.js";
3
- const s = "items-block-v2";
4
- function f(e) {
5
- const i = e.getAttribute("esd-ext-config");
6
- if (!i)
1
+ import { isNewPriceFormatRoot as a, currencyAttrTargets as f, ITEMS_CURRENCY_ATTR as c } from "../extensions/Blocks/Items/constants/currency.js";
2
+ import { ItemsBlockId as p } from "../extensions/Blocks/Items/enums/controlEnums.js";
3
+ import { snapshotPriceFormatFromElement as m, planPriceFormatOps as y, applyPriceFormatOpsToElement as d } from "../extensions/Blocks/Items/utils/priceFormatOps.js";
4
+ const u = "items-block-v2";
5
+ function S(e, i) {
6
+ if (i || a(e)) {
7
+ const t = m(e), l = y(t, { convertLegacy: i });
8
+ return d(e, l);
9
+ }
10
+ const n = e.getAttribute("esd-ext-config");
11
+ if (!n)
7
12
  return !1;
8
- let t, r;
13
+ let r, o;
9
14
  try {
10
- ({ position: t, symbol: r } = u(JSON.parse(i)));
15
+ ({ position: r, symbol: o } = f(JSON.parse(n)));
11
16
  } catch {
12
17
  return !1;
13
18
  }
14
- let o = !1;
15
- return e.querySelectorAll(`.${l.PRICE} p`).forEach((n) => {
16
- t !== void 0 && n.getAttribute(c.POSITION) !== t && (n.setAttribute(c.POSITION, t), o = !0), r !== void 0 && n.getAttribute(c.SYMBOL) !== r && (n.setAttribute(c.SYMBOL, r), o = !0);
17
- }), o;
19
+ let s = !1;
20
+ return e.querySelectorAll(`.${p.PRICE} p`).forEach((t) => {
21
+ r !== void 0 && t.getAttribute(c.POSITION) !== r && (t.setAttribute(c.POSITION, r), s = !0), o !== void 0 && t.getAttribute(c.SYMBOL) !== o && (t.setAttribute(c.SYMBOL, o), s = !0);
22
+ }), s;
18
23
  }
19
- function S(e) {
20
- if (typeof e != "string" || !e.includes(s))
24
+ function I(e, { convertToPriceFormat: i = !1 } = {}) {
25
+ if (typeof e != "string" || !e.includes(u))
21
26
  return e;
22
27
  try {
23
- const t = new DOMParser().parseFromString(
28
+ const r = new DOMParser().parseFromString(
24
29
  `<table><tbody><tr>${e}</tr></tbody></table>`,
25
30
  "text/html"
26
- ).querySelector("tr"), r = t.querySelectorAll(`.${s}`);
27
- if (r.length === 0)
31
+ ).querySelector("tr"), o = r.querySelectorAll(`.${u}`);
32
+ if (o.length === 0)
28
33
  return e;
29
- let o = !1;
30
- return r.forEach((n) => {
31
- f(n) && (o = !0);
32
- }), o ? t.innerHTML : e;
33
- } catch (i) {
34
- return console.error("Failed to repair items currency on module add:", i), e;
34
+ let s = !1;
35
+ return o.forEach((t) => {
36
+ S(t, i) && (s = !0);
37
+ }), s ? r.innerHTML : e;
38
+ } catch (n) {
39
+ return console.error("Failed to repair items currency on module add:", n), e;
35
40
  }
36
41
  }
37
42
  export {
38
- S as repairItemsCurrencyAttributes
43
+ I as repairItemsCurrencyAttributes
39
44
  };
@@ -1,108 +1,128 @@
1
- import { ITEMS_CURRENCY_ATTR as U, isCustomCurrencySymbol as Y } from "../extensions/Blocks/Items/constants/currency.js";
2
- import { productPairs as M } from "../extensions/Blocks/Items/enums/productEnums.js";
3
- import { escapeReplacement as B } from "../extensions/Blocks/Items/utils/nodeConfigUtils.js";
4
- import { preserveTextStyles as L } from "./preserveTextStyles.js";
1
+ import { isNewPriceFormatRoot as G, ITEMS_PRICE_FORMAT_ATTR as N, currencyPositionFromLocation as Y, ITEMS_CURRENCY_ATTR as U, isCustomCurrencySymbol as B } from "../extensions/Blocks/Items/constants/currency.js";
2
+ import { productPairs as k } from "../extensions/Blocks/Items/enums/productEnums.js";
3
+ import { escapeReplacement as v } from "../extensions/Blocks/Items/utils/nodeConfigUtils.js";
4
+ import { preserveTextStyles as w } from "./preserveTextStyles.js";
5
5
  import { unwrapProductNameLinks as X } from "./unwrapProductNameLink.js";
6
6
  const q = {
7
7
  CART_ITEMS: "ins_apr",
8
8
  BROWSED_ITEMS: "browsed_item",
9
9
  PURCHASED_ITEMS: "purchased_item"
10
- }, W = ($) => $.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->");
11
- function v($, C, A) {
12
- let d = C;
13
- for (; d > 0 && /\s/.test($[d - 1]); )
14
- d -= 1;
15
- return A.some((E) => $.endsWith(E, d));
10
+ }, W = (r) => r.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->");
11
+ function j(r, h, p) {
12
+ let u = h;
13
+ for (; u > 0 && /\s/.test(r[u - 1]); )
14
+ u -= 1;
15
+ return p.some((A) => r.endsWith(A, u));
16
16
  }
17
- const j = /(\s)href=(["'])(?:[^"']*#!|#)?\2/gi;
18
- function Q($, C) {
19
- var d;
20
- const A = $.ownerDocument.createTreeWalker($, NodeFilter.SHOW_COMMENT);
21
- for (let E = A.nextNode(); E; E = A.nextNode())
22
- (d = E.nodeValue) != null && d.includes("[if mso]") && (E.nodeValue = E.nodeValue.replace(j, (k, P) => `${P}href="${C}"`));
17
+ const Q = /(\s)href=(["'])(?:[^"']*#!|#)?\2/gi;
18
+ function z(r, h) {
19
+ var u;
20
+ const p = r.ownerDocument.createTreeWalker(r, NodeFilter.SHOW_COMMENT);
21
+ for (let A = p.nextNode(); A; A = p.nextNode())
22
+ (u = A.nodeValue) != null && u.includes("[if mso]") && (A.nodeValue = A.nodeValue.replace(Q, (L, P) => `${P}href="${h}"`));
23
23
  }
24
- function et($) {
25
- const C = W($), A = new DOMParser().parseFromString(C, "text/html");
26
- X(A);
27
- const d = M.PAIRS_FOR_EXTENSION;
28
- Object.entries(d).forEach(([o, p]) => {
29
- A.querySelectorAll(".ins-product-td").forEach((r) => {
30
- const _ = r.getAttribute("data-number") || "1", y = r.getAttribute("data-type") || "CART_ITEMS";
31
- r.querySelectorAll(`[product-attr="${o}"]`).forEach((t) => {
32
- var S, I, O, x;
33
- const m = t.getAttribute("data-type") || y, n = t.getAttribute("data-number") || _, f = p[m];
24
+ function J(r) {
25
+ return {
26
+ isFormatted: r.getAttribute("data-formated") === "true",
27
+ isSinglePrice: r.getAttribute("data-single_price") === "true",
28
+ currencyPosition: r.getAttribute(U.POSITION) || "before",
29
+ configuredSymbol: (r.getAttribute(U.SYMBOL) || "").trim()
30
+ };
31
+ }
32
+ function K(r) {
33
+ return {
34
+ isFormatted: !1,
35
+ isSinglePrice: r.getAttribute(N.SINGLE_PRICE) === "true",
36
+ currencyPosition: Y(
37
+ r.getAttribute(N.ALIGNMENT) ?? void 0
38
+ ),
39
+ configuredSymbol: (r.getAttribute(N.SYMBOL) || "").trim()
40
+ };
41
+ }
42
+ function Z(r, h, p) {
43
+ const { isFormatted: u, isSinglePrice: A, currencyPosition: L, configuredSymbol: P } = p;
44
+ let y;
45
+ A ? y = u ? r.SINGLE_PRICE_FORMATTED : r.SINGLE_PRICE : y = u ? r.PRICE_FORMATTED : r.PRICE;
46
+ const E = r.CURRENCY;
47
+ let F = `{{${y}_${h}}}`, R = "";
48
+ return B(P) ? R = P : E && (R = `{{${E}_${h}}}`), R && (F = L === "after" ? `${F} ${R}` : `${R} ${F}`), F;
49
+ }
50
+ function ct(r) {
51
+ const h = W(r), p = new DOMParser().parseFromString(h, "text/html");
52
+ X(p);
53
+ const u = k.PAIRS_FOR_EXTENSION;
54
+ Object.entries(u).forEach(([o, T]) => {
55
+ p.querySelectorAll(".ins-product-td").forEach((n) => {
56
+ const S = n.getAttribute("data-number") || "1", I = n.getAttribute("data-type") || "CART_ITEMS";
57
+ n.querySelectorAll(`[product-attr="${o}"]`).forEach((t) => {
58
+ var b, M, D, x;
59
+ const m = t.getAttribute("data-type") || I, c = t.getAttribute("data-number") || S, f = T[m];
34
60
  if (f)
35
61
  switch (o) {
36
62
  case "imageSrc": {
37
- let e = null, s = null;
38
- if (t.tagName === "IMG" ? (e = t, s = e.closest("a")) : (e = t.querySelector("img"), s = t.querySelector("a") || t.closest("a")), !e)
63
+ let e = null, i = null;
64
+ if (t.tagName === "IMG" ? (e = t, i = e.closest("a")) : (e = t.querySelector("img"), i = t.querySelector("a") || t.closest("a")), !e)
39
65
  break;
40
- const l = f.DEFAULT, c = f.ATTR;
41
- if (l && e.src) {
42
- const a = e.src;
43
- l.some((g) => {
44
- const u = g.split("/").pop() || "", H = a.split("/").pop() || "";
45
- return a.includes(g) || a.includes(u) || H === u;
46
- }) && (e.src = `{{${c}_${n}}}`);
66
+ const d = f.DEFAULT, a = f.ATTR;
67
+ if (d && e.src) {
68
+ const l = e.src;
69
+ d.some((C) => {
70
+ const $ = C.split("/").pop() || "", V = l.split("/").pop() || "";
71
+ return l.includes(C) || l.includes($) || V === $;
72
+ }) && (e.src = `{{${a}_${c}}}`);
47
73
  }
48
- const i = (I = (S = d.name) == null ? void 0 : S[m]) == null ? void 0 : I.ATTR;
49
- if (i && e.setAttribute("alt", `{{${i}_${n}}}`), s) {
50
- const a = (O = d.itemLink) == null ? void 0 : O[m];
51
- if (a) {
52
- const b = a.HREF, g = a.DEFAULT_HREF || "#!", u = s.href;
53
- (u === "#" || u === "" || u.endsWith("#!") || u.endsWith(g) || u === `${window.location.href}${g}` || !u || u === window.location.href) && (s.href = `{{${b}_${n}}}`);
74
+ const s = (M = (b = u.name) == null ? void 0 : b[m]) == null ? void 0 : M.ATTR;
75
+ if (s && e.setAttribute("alt", `{{${s}_${c}}}`), i) {
76
+ const l = (D = u.itemLink) == null ? void 0 : D[m];
77
+ if (l) {
78
+ const H = l.HREF, C = l.DEFAULT_HREF || "#!", $ = i.href;
79
+ ($ === "#" || $ === "" || $.endsWith("#!") || $.endsWith(C) || $ === `${window.location.href}${C}` || !$ || $ === window.location.href) && (i.href = `{{${H}_${c}}}`);
54
80
  }
55
81
  }
56
82
  break;
57
83
  }
58
84
  case "name": {
59
- const e = f, s = e.ATTR, l = e.DEFAULT_HREF || "#!", c = e.HREF;
60
- t.textContent && (t.innerHTML = L(t, `{{${s}_${n}}}`));
61
- const i = t.closest("a") || (t.tagName === "A" ? t : null);
62
- if (i && c) {
63
- const a = i.href, b = `${window.location.href}${l}`;
64
- (a === b || a.endsWith(l)) && (i.href = `{{${c}_${n}}}`);
85
+ const e = f, i = e.ATTR, d = e.DEFAULT_HREF || "#!", a = e.HREF;
86
+ t.textContent && (t.innerHTML = w(t, `{{${i}_${c}}}`));
87
+ const s = t.closest("a") || (t.tagName === "A" ? t : null);
88
+ if (s && a) {
89
+ const l = s.href, H = `${window.location.href}${d}`;
90
+ (l === H || l.endsWith(d)) && (s.href = `{{${a}_${c}}}`);
65
91
  }
66
92
  break;
67
93
  }
68
94
  case "price":
69
95
  case "originalPrice": {
70
- const e = f, s = t.getAttribute("data-formated"), l = t.getAttribute("data-single_price"), c = s === "true", i = l === "true", a = t.getAttribute(U.POSITION) || "before";
71
- let b;
72
- i ? b = c ? e.SINGLE_PRICE_FORMATTED : e.SINGLE_PRICE : b = c ? e.PRICE_FORMATTED : e.PRICE;
73
- const g = e.CURRENCY;
74
- let u = `{{${b}_${n}}}`;
75
- const H = (t.getAttribute(U.SYMBOL) || "").trim(), G = Y(H);
76
- let F = "";
77
- G ? F = H : g && (F = `{{${g}_${n}}}`), F && (u = a === "after" ? `${u} ${F}` : `${F} ${u}`), t.innerHTML = L(t, u);
96
+ const e = f, i = G(n) ? K(n) : J(t);
97
+ t.innerHTML = w(t, Z(e, c, i));
78
98
  break;
79
99
  }
80
100
  case "quantity": {
81
- const e = f, s = e.ATTR, l = [e.DEFAULT, ...e.LEGACY_DEFAULTS], c = (x = t.textContent) == null ? void 0 : x.trim();
82
- c && l.includes(c) && (t.innerHTML = L(t, `{{${s}_${n}}}`));
101
+ const e = f, i = e.ATTR, d = [e.DEFAULT, ...e.LEGACY_DEFAULTS], a = (x = t.textContent) == null ? void 0 : x.trim();
102
+ a && d.includes(a) && (t.innerHTML = w(t, `{{${i}_${c}}}`));
83
103
  break;
84
104
  }
85
105
  case "button": {
86
- const e = f, s = e.HREF, l = e.DEFAULT_HREF || "#!", c = t.tagName === "A" ? t : t.querySelector("a");
87
- if (c) {
88
- const i = c.href || "", a = `${window.location.href}${l}`;
89
- (i === "" || i === "#" || i === a || i.endsWith(l) || i.endsWith("#!") || i === window.location.href) && (c.href = `{{${s}_${n}}}`);
106
+ const e = f, i = e.HREF, d = e.DEFAULT_HREF || "#!", a = t.tagName === "A" ? t : t.querySelector("a");
107
+ if (a) {
108
+ const s = a.href || "", l = `${window.location.href}${d}`;
109
+ (s === "" || s === "#" || s === l || s.endsWith(d) || s.endsWith("#!") || s === window.location.href) && (a.href = `{{${i}_${c}}}`);
90
110
  }
91
- Q(t, `{{${s}_${n}}}`);
111
+ z(t, `{{${i}_${c}}}`);
92
112
  break;
93
113
  }
94
114
  case "itemLink": {
95
- const e = f, s = e.HREF, l = e.DEFAULT_HREF || "#!", c = t;
96
- if (c.href) {
97
- const i = c.href, a = `${window.location.href}${l}`;
98
- (i === a || i.endsWith(l)) && (c.href = `{{${s}_${n}}}`);
115
+ const e = f, i = e.HREF, d = e.DEFAULT_HREF || "#!", a = t;
116
+ if (a.href) {
117
+ const s = a.href, l = `${window.location.href}${d}`;
118
+ (s === l || s.endsWith(d)) && (a.href = `{{${i}_${c}}}`);
99
119
  }
100
120
  break;
101
121
  }
102
122
  default: {
103
123
  if ("ATTR" in f) {
104
124
  const e = f.ATTR;
105
- t.textContent && (t.innerHTML = L(t, `{{${e}_${n}}}`));
125
+ t.textContent && (t.innerHTML = w(t, `{{${e}_${c}}}`));
106
126
  }
107
127
  break;
108
128
  }
@@ -110,49 +130,49 @@ function et($) {
110
130
  });
111
131
  });
112
132
  });
113
- const E = C.match(/<!DOCTYPE[^>]*>/i), k = E ? `${E[0]}
114
- ` : "", P = A.querySelectorAll(".ins-product-td"), N = [];
133
+ const A = h.match(/<!DOCTYPE[^>]*>/i), L = A ? `${A[0]}
134
+ ` : "", P = p.querySelectorAll(".ins-product-td"), y = [];
115
135
  P.forEach((o) => {
116
- const p = o.getAttribute("data-type") || "CART_ITEMS", T = o.getAttribute("data-number") || "1", r = o.outerHTML;
117
- N.push({
136
+ const T = o.getAttribute("data-type") || "CART_ITEMS", _ = o.getAttribute("data-number") || "1", n = o.outerHTML;
137
+ y.push({
118
138
  element: o,
119
- outerHtml: r,
120
- type: p,
121
- number: T
139
+ outerHtml: n,
140
+ type: T,
141
+ number: _
122
142
  });
123
143
  });
124
- let h = k + A.documentElement.outerHTML;
125
- N.reverse().forEach(({ outerHtml: o, type: p, number: T }) => {
126
- const r = q[p], _ = r ? `${r}_total_product_kind` : "";
127
- if (_) {
128
- const R = parseInt(T) - 1, n = `${`{% if ${_} > ${R} %}`}${o}{% endif %}`;
129
- h = h.replace(o, B(n));
144
+ let E = L + p.documentElement.outerHTML;
145
+ y.reverse().forEach(({ outerHtml: o, type: T, number: _ }) => {
146
+ const n = q[T], S = n ? `${n}_total_product_kind` : "";
147
+ if (S) {
148
+ const g = parseInt(_) - 1, c = `${`{% if ${S} > ${g} %}`}${o}{% endif %}`;
149
+ E = E.replace(o, v(c));
130
150
  }
131
151
  });
132
- const V = A.querySelectorAll('[product-attr="originalPrice"][data-type]'), w = /* @__PURE__ */ new Map(), D = /* @__PURE__ */ new Set();
133
- return V.forEach((o) => {
152
+ const F = p.querySelectorAll('[product-attr="originalPrice"][data-type]'), R = /* @__PURE__ */ new Map(), O = /* @__PURE__ */ new Set();
153
+ return F.forEach((o) => {
134
154
  var t;
135
- const p = o.getAttribute("data-number"), T = o.getAttribute("data-type");
136
- if (!p || !q[T])
155
+ const T = o.getAttribute("data-number"), _ = o.getAttribute("data-type");
156
+ if (!T || !q[_])
137
157
  return;
138
- const r = o.closest(".product-original-price-class");
139
- if (!r || D.has(r))
158
+ const n = o.closest(".product-original-price-class");
159
+ if (!n || O.has(n))
140
160
  return;
141
- D.add(r);
142
- const _ = r.outerHTML, y = (t = o.closest(".ins-product-td")) == null ? void 0 : t.getAttribute("data-nodup"), R = w.get(_) ?? { number: p, type: T, wrap: [] };
143
- R.wrap.push(y !== "false"), w.set(_, R);
144
- }), w.forEach(({ number: o, type: p, wrap: T }, r) => {
145
- if (r.includes("{% if") || !T.some(Boolean))
161
+ O.add(n);
162
+ const S = n.outerHTML, I = (t = o.closest(".ins-product-td")) == null ? void 0 : t.getAttribute("data-nodup"), g = R.get(S) ?? { number: T, type: _, wrap: [] };
163
+ g.wrap.push(I !== "false"), R.set(S, g);
164
+ }), R.forEach(({ number: o, type: T, wrap: _ }, n) => {
165
+ if (n.includes("{% if") || !_.some(Boolean))
146
166
  return;
147
- const _ = M.PAIRS_FOR_EXTENSION.price[p].PRICE, y = M.PAIRS_FOR_EXTENSION.originalPrice[p].PRICE, R = `{% if ${_}_${o} != ${y}_${o} %}`, t = [R, W(R)];
148
- let m = "", n = 0, f = 0, S = h.indexOf(r);
149
- for (; S !== -1; ) {
150
- const I = T[f] === !0 && !v(h, S, t);
151
- m += h.slice(n, S) + (I ? `${R}${r}{% endif %}` : r), n = S + r.length, f += 1, S = h.indexOf(r, n);
167
+ const S = k.PAIRS_FOR_EXTENSION.price[T].PRICE, I = k.PAIRS_FOR_EXTENSION.originalPrice[T].PRICE, g = `{% if ${S}_${o} != ${I}_${o} %}`, t = [g, W(g)];
168
+ let m = "", c = 0, f = 0, b = E.indexOf(n);
169
+ for (; b !== -1; ) {
170
+ const M = _[f] === !0 && !j(E, b, t);
171
+ m += E.slice(c, b) + (M ? `${g}${n}{% endif %}` : n), c = b + n.length, f += 1, b = E.indexOf(n, c);
152
172
  }
153
- h = m + h.slice(n);
154
- }), h.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
173
+ E = m + E.slice(c);
174
+ }), E.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
155
175
  }
156
176
  export {
157
- et as pairProductVariables
177
+ ct as pairProductVariables
158
178
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.23.0-beta.31d0f5f",
3
+ "version": "3.23.0-beta.9f6bfbf",
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",