@useinsider/guido 2.1.0-beta.42f5dfa → 2.1.0-beta.4bcb91b

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 (149) hide show
  1. package/README.md +3 -1
  2. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +14 -15
  3. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  4. package/dist/composables/useHtmlValidator.js +84 -106
  5. package/dist/composables/useRecommendation.js +21 -54
  6. package/dist/composables/useSave.js +16 -12
  7. package/dist/composables/useStripo.js +58 -54
  8. package/dist/composables/useStripoEventHandler.js +27 -12
  9. package/dist/composables/useSyncModuleExtractor.js +33 -0
  10. package/dist/config/compiler/recommendationCompilerRules.js +39 -45
  11. package/dist/config/migrator/recommendationMigrator.js +2 -2
  12. package/dist/enums/extensions/recommendationBlock.js +1 -1
  13. package/dist/enums/recommendation.js +15 -16
  14. package/dist/enums/unsubscribe.js +25 -21
  15. package/dist/extensions/Blocks/Recommendation/block.js +9 -130
  16. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +187 -0
  17. package/dist/extensions/Blocks/Recommendation/constants.js +13 -0
  18. package/dist/extensions/Blocks/Recommendation/control.js +336 -0
  19. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +68 -0
  20. package/dist/extensions/Blocks/Recommendation/controls/index.js +245 -0
  21. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +74 -0
  22. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textAfter.js → omnibusDiscountTextAfterControl.js} +14 -16
  23. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscount/textBefore.js → omnibusDiscountTextBeforeControl.js} +14 -16
  24. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textAfter.js → omnibusPriceTextAfterControl.js} +14 -16
  25. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPrice/textBefore.js → omnibusPriceTextBeforeControl.js} +12 -14
  26. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +188 -0
  27. package/dist/extensions/Blocks/Recommendation/extension.js +17 -40
  28. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +3 -19
  29. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +4 -13
  30. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +10 -21
  31. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +193 -230
  32. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +181 -0
  33. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +189 -0
  34. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +209 -0
  35. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  36. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +15 -26
  37. package/dist/extensions/Blocks/controlFactories.js +93 -125
  38. package/dist/guido.css +1 -1
  39. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +169 -223
  40. package/dist/services/recommendationApi.js +9 -10
  41. package/dist/services/stripoApi.js +50 -14
  42. package/dist/services/templateLibraryApi.js +13 -16
  43. package/dist/src/@types/events.d.ts +34 -2
  44. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  45. package/dist/src/composables/useRecommendation.d.ts +0 -1
  46. package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
  47. package/dist/src/enums/unsubscribe.d.ts +3 -0
  48. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +0 -67
  49. package/dist/src/extensions/Blocks/Recommendation/{controls/cardComposition/index.d.ts → cardCompositionControl.d.ts} +3 -23
  50. package/dist/src/extensions/Blocks/Recommendation/{constants/controlIds.d.ts → constants.d.ts} +24 -0
  51. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +38 -0
  52. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +589 -21
  53. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +16 -0
  54. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +0 -9
  55. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +468 -131
  56. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  57. package/dist/src/extensions/Blocks/Recommendation/templates/{grid/migration.d.ts → migrationTemplate.d.ts} +4 -11
  58. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +52 -0
  59. package/dist/src/mock/api/settings.d.ts +2 -0
  60. package/dist/src/services/stripoApi.d.ts +5 -0
  61. package/dist/src/stores/editor.d.ts +23 -0
  62. package/dist/static/styles/components/notification.css.js +1 -0
  63. package/dist/static/styles/components/version-history.css.js +10 -2
  64. package/dist/static/styles/components/wide-panel.css.js +18 -2
  65. package/dist/static/styles/customEditorStyle.css.js +2 -25
  66. package/dist/stores/editor.js +2 -1
  67. package/dist/utils/pairProductVariables.js +56 -57
  68. package/dist/utils/templatePreparation.js +14 -15
  69. package/package.json +1 -1
  70. package/dist/config/compiler/utils/recommendationCompilerUtils.js +0 -116
  71. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +0 -4
  72. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +0 -4
  73. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +0 -65
  74. package/dist/extensions/Blocks/Recommendation/constants/layout.js +0 -20
  75. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +0 -19
  76. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +0 -64
  77. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +0 -80
  78. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +0 -232
  79. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +0 -19
  80. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +0 -92
  81. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +0 -102
  82. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +0 -209
  83. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +0 -52
  84. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +0 -217
  85. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +0 -70
  86. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +0 -110
  87. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +0 -67
  88. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -286
  89. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +0 -46
  90. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +0 -108
  91. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +0 -44
  92. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +0 -48
  93. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +0 -48
  94. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +0 -44
  95. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +0 -222
  96. package/dist/extensions/Blocks/Recommendation/services/configService.js +0 -240
  97. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +0 -233
  98. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +0 -251
  99. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +0 -69
  100. package/dist/extensions/Blocks/Recommendation/templates/index.js +0 -12
  101. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +0 -174
  102. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +0 -73
  103. package/dist/extensions/Blocks/Recommendation/templates/utils.js +0 -122
  104. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +0 -6
  105. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +0 -29
  106. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +0 -46
  107. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +0 -17
  108. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +0 -13
  109. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +0 -49
  110. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +0 -13
  111. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +0 -35
  112. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -31
  113. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +0 -143
  114. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -31
  115. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +0 -35
  116. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +0 -37
  117. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -29
  118. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +0 -52
  119. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +0 -22
  120. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -68
  121. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +0 -24
  122. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -42
  123. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -23
  124. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -214
  125. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +0 -97
  126. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -34
  127. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -95
  128. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -100
  129. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -15
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -15
  131. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -100
  132. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -15
  133. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -15
  134. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +0 -95
  135. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +0 -83
  136. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +0 -151
  137. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +0 -6
  138. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +0 -20
  139. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +0 -33
  140. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +0 -39
  141. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +0 -8
  142. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +0 -25
  143. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +0 -18
  144. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +0 -57
  145. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +0 -7
  146. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +0 -160
  147. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +0 -33
  148. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +0 -113
  149. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +0 -77
@@ -1,32 +1,31 @@
1
- import { useActionsApi as f } from "../composables/useActionsApi.js";
2
- import { useHtmlCompiler as C } from "../composables/useHtmlCompiler.js";
3
- import { useRecommendationExtensionStore as T } from "../extensions/Blocks/Recommendation/store/recommendation.js";
4
- import { useDynamicContentStore as x } from "../stores/dynamic-content.js";
5
- import { useUnsubscribeStore as y } from "../stores/unsubscribe.js";
6
- const E = () => {
7
- const o = x(), t = y(), { getCompiledEmail: i, getTemplateData: n, editorSave: s } = f(), { compileHtml: m } = C();
1
+ import { useActionsApi as b } from "../composables/useActionsApi.js";
2
+ import { useHtmlCompiler as f } from "../composables/useHtmlCompiler.js";
3
+ import { useDynamicContentStore as C } from "../stores/dynamic-content.js";
4
+ import { useUnsubscribeStore as T } from "../stores/unsubscribe.js";
5
+ const P = () => {
6
+ const i = C(), t = T(), { getCompiledEmail: o, getTemplateData: s, editorSave: n } = b(), { compileHtml: a } = f();
8
7
  return {
9
8
  prepareTemplateDetails: async () => {
10
- const { html: a, ampHtml: r = "", ampErrors: c = [] } = await i({
9
+ const { html: r, ampHtml: m = "", ampErrors: c = [] } = await o({
11
10
  minimize: !0,
12
11
  resetDataSavedFlag: !1
13
- }), { html: l, css: p, syncModulesIds: u = [] } = await n(), { compiledHtml: d, stats: e, appliedRules: S } = m(a), g = o.getSelectedDynamicContentList, b = T();
14
- return s(), console.debug("HTML Compilation Stats:", {
12
+ }), { html: l, css: p, syncModulesIds: u = [] } = await s(), { compiledHtml: d, stats: e, appliedRules: g } = a(r), S = i.getSelectedDynamicContentList;
13
+ return n(), console.debug("HTML Compilation Stats:", {
15
14
  originalSize: e.originalSize,
16
15
  compiledSize: e.compiledSize,
17
16
  reduction: `${e.reductionPercentage.toFixed(2)}%`,
18
- appliedRules: S,
17
+ appliedRules: g,
19
18
  executionTime: `${e.executionTime.toFixed(2)}ms`
20
19
  }), {
21
- dynamicContentList: g,
20
+ dynamicContentList: S,
22
21
  compiledHtml: d,
23
22
  rawHtml: l,
24
23
  css: p,
25
- ampHtml: r,
24
+ ampHtml: m,
26
25
  ampErrors: c,
27
26
  modules: u,
28
27
  recommendation: {
29
- campaignUrls: b.recommendationCampaignUrls,
28
+ campaignUrls: {},
30
29
  configs: {}
31
30
  },
32
31
  unsubscribe: {
@@ -38,5 +37,5 @@ const E = () => {
38
37
  };
39
38
  };
40
39
  export {
41
- E as useTemplatePreparation
40
+ P as useTemplatePreparation
42
41
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "2.1.0-beta.42f5dfa",
3
+ "version": "2.1.0-beta.4bcb91b",
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",
@@ -1,116 +0,0 @@
1
- import { useRecommendation as S } from "../../../composables/useRecommendation.js";
2
- function b(e, u, r, o) {
3
- const s = `{{${e}_${u}_${r}}}`, t = `{{${e}_${u}_currency}}`;
4
- return o === "before" ? `${t} ${s}` : `${s} ${t}`;
5
- }
6
- function p(e, u, r, o, s) {
7
- switch (u) {
8
- case "productImage": {
9
- const t = e.querySelector("img");
10
- t && t.setAttribute("src", `{{${r}_${o}_img}}`);
11
- const c = e.querySelector("a");
12
- c && c.setAttribute("href", `{{${r}_${o}_url}}`);
13
- break;
14
- }
15
- case "productName": {
16
- const t = e.querySelector("p");
17
- if (t) {
18
- const c = t.querySelector("strong") || t;
19
- c.textContent = `{{${r}_${o}_name}}`;
20
- }
21
- break;
22
- }
23
- case "productPrice": {
24
- const t = e.querySelector("p");
25
- if (t) {
26
- const c = t.querySelector("strong") || t;
27
- c.textContent = b(r, o, "price", s);
28
- }
29
- break;
30
- }
31
- case "productOldPrice": {
32
- const t = e.querySelector("p");
33
- if (t) {
34
- const c = t.querySelector("strong") || t;
35
- c.textContent = b(
36
- r,
37
- o,
38
- "original_price",
39
- s
40
- ), t.setAttribute("product-attr", "discount");
41
- }
42
- break;
43
- }
44
- case "productButton": {
45
- const t = e.querySelector("a");
46
- t && t.setAttribute("href", `{{${r}_${o}_url}}`);
47
- break;
48
- }
49
- case "productOmnibusPrice": {
50
- const t = e.querySelector(".omnibus-price-value");
51
- if (t) {
52
- t.textContent = `{{${r}_${o}_omnibus_price}}`;
53
- const c = t.closest("p");
54
- c && (c.setAttribute("product-attr", "omnibus_price"), c.setAttribute("composition", "true"));
55
- }
56
- break;
57
- }
58
- case "productOmnibusDiscount": {
59
- const t = e.querySelector(".omnibus-discount-value");
60
- if (t) {
61
- t.textContent = `{{${r}_${o}_omnibus_discount}}`;
62
- const c = t.closest("p");
63
- c && (c.setAttribute("product-attr", "omnibus_discount"), c.setAttribute("composition", "true"));
64
- }
65
- break;
66
- }
67
- }
68
- }
69
- function $(e, u, r) {
70
- e.querySelectorAll(".recommendation-product-row").forEach((s, t) => {
71
- s.querySelectorAll("[data-attribute-type]").forEach((n) => {
72
- const i = n.getAttribute("data-attribute-type") || "", a = n.querySelectorAll(".attribute-cell");
73
- a.length > 0 ? a.forEach((l) => {
74
- p(l, i, u, t, r);
75
- }) : p(n, i, u, t, r);
76
- });
77
- });
78
- }
79
- function _(e, u, r) {
80
- const o = e.querySelectorAll(".recommendation-product-row");
81
- if (!o.length)
82
- return;
83
- const [s] = o, t = s.querySelector("[data-attribute-type]"), c = t ? t.querySelectorAll(".attribute-cell").length : 1;
84
- o.forEach((n, i) => {
85
- n.querySelectorAll("[data-attribute-type]").forEach((l) => {
86
- const f = l.getAttribute("data-attribute-type") || "";
87
- l.querySelectorAll(".attribute-cell").forEach((y, m) => {
88
- const A = i * c + m;
89
- p(y, f, u, A, r);
90
- });
91
- });
92
- });
93
- }
94
- function q(e, u) {
95
- const r = e.getAttribute("data-layout") || "grid", o = e.getAttribute("currency-alignment") || "after";
96
- r === "list" ? $(e, u, o) : _(e, u, o);
97
- }
98
- function d(e, u) {
99
- const r = e.match(/<!DOCTYPE[^>]*>/i);
100
- return (r ? `${r[0]}
101
- ` : "") + u.documentElement.outerHTML;
102
- }
103
- function w(e) {
104
- const u = e.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->"), r = new DOMParser().parseFromString(u, "text/html"), o = r.querySelectorAll(".ins-recommendation-v3-block-v2");
105
- if (!o.length)
106
- return e;
107
- const { buildCampaignUrl: s } = S();
108
- return o.forEach((c) => {
109
- const n = c.getAttribute("recommendation-id");
110
- n && (s(n), q(c, n));
111
- }), d(u, r).replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
112
- }
113
- export {
114
- b as formatPriceVariable,
115
- w as prepareRecommendationBlocks
116
- };
@@ -1,4 +0,0 @@
1
- var b = /* @__PURE__ */ ((r) => (r.BUTTON = "recommendation-block-button", r.NAME = "recommendation-block-name", r.PRICE = "recommendation-block-price", r.OLD_PRICE = "recommendation-block-old-price", r.OMNIBUS_PRICE = "recommendation-block-omnibus-price", r.OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount", r.IMAGE = "recommendation-block-image", r))(b || {});
2
- export {
3
- b as RecommendationBlockId
4
- };
@@ -1,4 +0,0 @@
1
- var o = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.NAME_TEXT_TRIM = "recommendation-block-name-text-trim-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.OMNIBUS_PRICE_ALIGN = "recommendation-block-omnibus-price-align-control", c.OMNIBUS_PRICE_BACKGROUND = "recommendation-block-omnibus-price-background-control", c.OMNIBUS_PRICE_COLOR = "recommendation-block-omnibus-price-color-control", c.OMNIBUS_PRICE_FONT_FAMILY = "recommendation-block-omnibus-price-font-family-control", c.OMNIBUS_PRICE_PADDINGS = "recommendation-block-omnibus-price-paddings-control", c.OMNIBUS_PRICE_SIZE = "recommendation-block-omnibus-price-size-control", c.OMNIBUS_PRICE_STYLE = "recommendation-block-omnibus-price-style-control", c.OMNIBUS_PRICE_TEXT_BEFORE = "recommendation-block-omnibus-price-text-before-control", c.OMNIBUS_PRICE_TEXT_AFTER = "recommendation-block-omnibus-price-text-after-control", c.OMNIBUS_DISCOUNT_ALIGN = "recommendation-block-omnibus-discount-align-control", c.OMNIBUS_DISCOUNT_BACKGROUND = "recommendation-block-omnibus-discount-background-control", c.OMNIBUS_DISCOUNT_COLOR = "recommendation-block-omnibus-discount-color-control", c.OMNIBUS_DISCOUNT_FONT_FAMILY = "recommendation-block-omnibus-discount-font-family-control", c.OMNIBUS_DISCOUNT_PADDINGS = "recommendation-block-omnibus-discount-paddings-control", c.OMNIBUS_DISCOUNT_SIZE = "recommendation-block-omnibus-discount-size-control", c.OMNIBUS_DISCOUNT_STYLE = "recommendation-block-omnibus-discount-style-control", c.OMNIBUS_DISCOUNT_TEXT_BEFORE = "recommendation-block-omnibus-discount-text-before-control", c.OMNIBUS_DISCOUNT_TEXT_AFTER = "recommendation-block-omnibus-discount-text-after-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(o || {});
2
- export {
3
- o as RecommendationControlId
4
- };
@@ -1,65 +0,0 @@
1
- import { DEFAULT_ROW_SPACING as n, DEFAULT_COLUMN_SPACING as s, DEFAULT_CARDS_IN_ROW as R } from "./layout.js";
2
- import { ATTR_PRODUCT_IMAGE as t, ATTR_PRODUCT_NAME as e, ATTR_PRODUCT_OLD_PRICE as o, ATTR_PRODUCT_PRICE as T, ATTR_PRODUCT_OMNIBUS_PRICE as _, ATTR_PRODUCT_OMNIBUS_DISCOUNT as r, ATTR_PRODUCT_BUTTON as U } from "./selectors.js";
3
- const I = {
4
- code: "USD",
5
- symbol: "USD",
6
- alignment: "after",
7
- decimalCount: 2,
8
- decimalSeparator: ".",
9
- thousandSeparator: ","
10
- }, i = {
11
- textBefore: "",
12
- textAfter: ""
13
- }, O = {
14
- textBefore: "",
15
- textAfter: ""
16
- }, C = [
17
- t,
18
- e,
19
- o,
20
- T,
21
- _,
22
- r,
23
- U
24
- ], D = {
25
- [t]: !0,
26
- [e]: !0,
27
- [T]: !0,
28
- [o]: !0,
29
- [_]: !1,
30
- [r]: !1,
31
- [U]: !0
32
- }, a = {
33
- // Settings
34
- strategy: "mostPopular",
35
- productIds: [],
36
- size: "6",
37
- shuffleProducts: !1,
38
- language: "en_US",
39
- currency: I,
40
- filters: [],
41
- // Layout
42
- layout: "grid",
43
- cardsInRow: R,
44
- columnSpacing: s,
45
- rowSpacing: n,
46
- // Composition
47
- composition: C,
48
- visibility: D,
49
- // Element settings
50
- omnibusPrice: i,
51
- omnibusDiscount: O,
52
- textTrimming: !1,
53
- // Meta
54
- configVersion: 1,
55
- recommendationId: 0
56
- }, E = 1;
57
- export {
58
- E as CURRENT_CONFIG_VERSION,
59
- C as DEFAULT_COMPOSITION,
60
- I as DEFAULT_CURRENCY,
61
- a as DEFAULT_NODE_CONFIG,
62
- O as DEFAULT_OMNIBUS_DISCOUNT,
63
- i as DEFAULT_OMNIBUS_PRICE,
64
- D as DEFAULT_VISIBILITY
65
- };
@@ -1,20 +0,0 @@
1
- const _ = {
2
- GRID: "grid",
3
- LIST: "list"
4
- }, o = [
5
- { icon: "grid-orientation", value: _.GRID },
6
- { icon: "list-orientation", value: _.LIST }
7
- ], t = 3, n = 3, A = 9, T = 4, c = 10, s = 20, O = 0, S = 50, I = 5;
8
- export {
9
- n as DEFAULT_CARDS_IN_ROW,
10
- c as DEFAULT_COLUMN_SPACING,
11
- t as DEFAULT_PRODUCTS_PER_ROW,
12
- s as DEFAULT_ROW_SPACING,
13
- o as LAYOUT_OPTIONS,
14
- _ as LAYOUT_VALUES,
15
- T as MAX_PRODUCTS_PER_ROW,
16
- A as MAX_PRODUCT_COUNT,
17
- S as MAX_SPACING,
18
- O as MIN_SPACING,
19
- I as SPACING_STEP
20
- };
@@ -1,19 +0,0 @@
1
- const c = ".ins-recommendation-product-container", T = {
2
- CURRENCY: "currency",
3
- SYMBOL: "currency-symbol",
4
- ALIGNMENT: "currency-alignment",
5
- THOUSAND_SEPARATOR: "currency-thousand-separator",
6
- DECIMAL_SEPARATOR: "currency-decimal-separator",
7
- DECIMAL_COUNT: "currency-decimal-count"
8
- }, r = "productImage", n = "productName", o = "productPrice", t = "productOldPrice", R = "productOmnibusPrice", O = "productOmnibusDiscount", _ = "productButton";
9
- export {
10
- _ as ATTR_PRODUCT_BUTTON,
11
- r as ATTR_PRODUCT_IMAGE,
12
- n as ATTR_PRODUCT_NAME,
13
- t as ATTR_PRODUCT_OLD_PRICE,
14
- O as ATTR_PRODUCT_OMNIBUS_DISCOUNT,
15
- R as ATTR_PRODUCT_OMNIBUS_PRICE,
16
- o as ATTR_PRODUCT_PRICE,
17
- c as CONTAINER_SELECTOR,
18
- T as CURRENCY_ATTR
19
- };
@@ -1,64 +0,0 @@
1
- import { createButtonFitToContainerControl as T, createButtonTextStyleAndFontColorControl as r, createButtonTextSizeControl as e, createButtonTextControl as B, createButtonPaddingsControl as l, createButtonMarginsControl as C, createButtonFontFamilyControl as O, createButtonColorControl as N, createButtonBorderRadiusControl as i, createButtonBorderControl as a, createButtonAlignControl as c } from "../../../controlFactories.js";
2
- import { RecommendationBlockId as o } from "../../constants/blockIds.js";
3
- import { RecommendationControlId as t } from "../../constants/controlIds.js";
4
- import { CONTAINER_SELECTOR as n } from "../../constants/selectors.js";
5
- const U = c(
6
- t.BUTTON_ALIGN,
7
- o.BUTTON,
8
- n
9
- ), d = a(
10
- t.BUTTON_BORDER,
11
- o.BUTTON,
12
- n
13
- ), s = i(
14
- t.BUTTON_BORDER_RADIUS,
15
- o.BUTTON,
16
- n
17
- ), _ = N(
18
- t.BUTTON_COLOR,
19
- o.BUTTON,
20
- n
21
- ), m = O(
22
- t.BUTTON_FONT_FAMILY,
23
- o.BUTTON,
24
- n
25
- ), u = C(
26
- t.BUTTON_MARGINS,
27
- o.BUTTON,
28
- n
29
- ), R = l(
30
- t.BUTTON_PADDINGS,
31
- o.BUTTON,
32
- n
33
- ), F = B(
34
- t.BUTTON_TEXT,
35
- o.BUTTON,
36
- n
37
- ), A = e(
38
- t.BUTTON_TEXT_SIZE,
39
- o.BUTTON,
40
- n
41
- ), S = r(
42
- t.BUTTON_TEXT_STYLE_AND_FONT_COLOR,
43
- o.BUTTON,
44
- n
45
- ), E = T(
46
- t.BUTTON_FIT_TO_CONTENT,
47
- o.BUTTON,
48
- n
49
- ), p = {
50
- align: U,
51
- border: d,
52
- borderRadius: s,
53
- color: _,
54
- fontFamily: m,
55
- margins: u,
56
- paddings: R,
57
- text: F,
58
- textSize: A,
59
- textStyleAndFontColor: S,
60
- fitToContent: E
61
- };
62
- export {
63
- p as ButtonControls
64
- };
@@ -1,80 +0,0 @@
1
- import { ModificationDescription as d } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
- import { CommonControl as s } from "../../../common-control.js";
3
- import { getCurrentLayout as l } from "../main/utils.js";
4
- const u = "recommendation-card-background-color-control", e = {
5
- CARD_BACKGROUND_COLOR: "cardBackgroundColor"
6
- }, a = {
7
- GRID: ".product-card-segment",
8
- LIST: ".product-card-wrapper"
9
- };
10
- class _ extends s {
11
- getId() {
12
- return u;
13
- }
14
- getTemplate() {
15
- return `
16
- <div class="card-bg-control-container">
17
- ${this._GuTwoColumns([
18
- this._GuLabel({ text: "Card Background Color" }),
19
- this._GuColorPicker(e.CARD_BACKGROUND_COLOR)
20
- ])}
21
- </div>
22
- `;
23
- }
24
- onRender() {
25
- this._setFormValues(), this._listenToFormUpdates();
26
- }
27
- onTemplateNodeUpdated(r) {
28
- super.onTemplateNodeUpdated(r), this._setFormValues();
29
- }
30
- _setFormValues() {
31
- const r = this._getCurrentCardBackgroundColor();
32
- this.api.updateValues({
33
- [e.CARD_BACKGROUND_COLOR]: r
34
- });
35
- }
36
- /**
37
- * Gets the appropriate selector based on layout
38
- * Grid: .product-card-segment (inner table per product cell)
39
- * List: .product-card-wrapper (table per product row)
40
- */
41
- _getCardSelector() {
42
- return l(this.currentNode) === "grid" ? a.GRID : a.LIST;
43
- }
44
- /**
45
- * Reads the current background color from the first product card element
46
- * @returns The background color value or 'transparent' if not found
47
- */
48
- _getCurrentCardBackgroundColor() {
49
- if (!this.currentNode || !("querySelectorAll" in this.currentNode))
50
- return "transparent";
51
- const r = this._getCardSelector(), t = this.currentNode.querySelector(r);
52
- return !t || !("getStyle" in t) ? "transparent" : t.getStyle("background-color") || "transparent";
53
- }
54
- /**
55
- * Handles card background color changes
56
- * Applies the color to all product card elements based on layout
57
- */
58
- _onCardBackgroundColorChange(r) {
59
- if (!this.currentNode || !("querySelectorAll" in this.currentNode))
60
- return;
61
- const t = this._getCardSelector(), o = Array.from(
62
- this.currentNode.querySelectorAll(t)
63
- );
64
- if (o.length === 0)
65
- return;
66
- const n = this.api.getDocumentModifier();
67
- o.forEach((c) => {
68
- n.modifyHtml(c).setStyle("background-color", r);
69
- }), n.apply(new d("Update card background color"));
70
- }
71
- _listenToFormUpdates() {
72
- this.api.onValueChanged(e.CARD_BACKGROUND_COLOR, (r) => {
73
- this._onCardBackgroundColorChange(r);
74
- });
75
- }
76
- }
77
- export {
78
- u as CARD_BACKGROUND_COLOR_CONTROL_ID,
79
- _ as CardBackgroundColorControl
80
- };
@@ -1,232 +0,0 @@
1
- var T = Object.defineProperty;
2
- var C = (a, s, t) => s in a ? T(a, s, { enumerable: !0, configurable: !0, writable: !0, value: t }) : a[s] = t;
3
- var l = (a, s, t) => C(a, typeof s != "symbol" ? s + "" : s, t);
4
- import { ModificationDescription as u } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { CommonControl as f } from "../../../common-control.js";
6
- import { ATTR_PRODUCT_IMAGE as O, ATTR_PRODUCT_NAME as g, ATTR_PRODUCT_PRICE as R, ATTR_PRODUCT_OLD_PRICE as A, ATTR_PRODUCT_OMNIBUS_PRICE as D, ATTR_PRODUCT_OMNIBUS_DISCOUNT as N, ATTR_PRODUCT_BUTTON as V } from "../../constants/selectors.js";
7
- import { useRecommendationExtensionStore as E } from "../../store/recommendation.js";
8
- import { getTableDisplayValue as I } from "../../utils/tagName.js";
9
- import { getCurrentLayout as P } from "../main/utils.js";
10
- const S = "ui-elements-recommendation-card-composition", k = {
11
- ORDERABLE: "cardComposition"
12
- }, c = ".recommendation-attribute-row", v = ".product-card-wrapper > tbody", _ = "data-card-composition", d = "data-attribute-type", m = "data-visibility", n = [
13
- { key: O, label: "Product Image", visible: !0 },
14
- { key: g, label: "Product Name", visible: !0 },
15
- { key: R, label: "Product Price", visible: !0 },
16
- { key: A, label: "Product Original Price", visible: !0 },
17
- { key: D, label: "Omnibus Price", visible: !1 },
18
- { key: N, label: "Omnibus Discount", visible: !1 },
19
- { key: V, label: "Product Button", visible: !0 }
20
- ];
21
- class H extends f {
22
- constructor() {
23
- super(...arguments);
24
- l(this, "store", E());
25
- l(this, "unsubscribeOrientation", null);
26
- }
27
- getId() {
28
- return S;
29
- }
30
- getTemplate() {
31
- const t = n.map((e) => ({
32
- key: e.key,
33
- label: e.label,
34
- content: this._createItemContent(e.label, e.key)
35
- }));
36
- return `
37
- <div class="container" data-card-composition-control>
38
- ${this._GuLabel({ text: "Card Element Order & Visibility" })}
39
- ${this._GuOrderable(k.ORDERABLE, t)}
40
- </div>
41
- `;
42
- }
43
- onRender() {
44
- this._initializeComposition(), this._registerValueChangeListeners(), this._updateOrderableState(), this._subscribeToOrientationChanges();
45
- }
46
- onTemplateNodeUpdated(t) {
47
- super.onTemplateNodeUpdated(t), this._initializeComposition(), this._updateOrderableState();
48
- }
49
- /**
50
- * Creates the HTML content for an orderable item with label and toggle
51
- */
52
- _createItemContent(t, e) {
53
- return `
54
- <div style="display: flex; align-items: center; justify-content: space-between;
55
- padding: 8px; gap: 8px;">
56
- <span style="flex: 1;">${t}</span>
57
- ${this._GuToggle(`visibility_${e}`)}
58
- </div>
59
- `;
60
- }
61
- /**
62
- * Registers event listeners for composition and visibility changes
63
- */
64
- _registerValueChangeListeners() {
65
- this.api.onValueChanged("cardComposition", (t) => {
66
- this._applyCompositionToBlock(t);
67
- }), n.forEach((t) => {
68
- this.api.onValueChanged(`visibility_${t.key}`, (e) => {
69
- this._applyVisibilityToBlock(t.key, e);
70
- });
71
- });
72
- }
73
- /**
74
- * Initializes composition order and visibility state from the current node
75
- */
76
- _initializeComposition() {
77
- const t = this._readCompositionFromNode(), e = this._readVisibilityFromRows(), i = {
78
- cardComposition: t,
79
- ...this._buildVisibilityValues(e)
80
- };
81
- this.api.updateValues(i);
82
- }
83
- /**
84
- * Reads composition order from node's data-card-composition attribute
85
- * Falls back to default order if attribute is not present
86
- */
87
- _readCompositionFromNode() {
88
- if (!this.currentNode || !("getAttribute" in this.currentNode))
89
- return n.map((e) => e.key);
90
- const t = this.currentNode.getAttribute(_);
91
- return t ? t.split(",").filter(Boolean) : n.map((e) => e.key);
92
- }
93
- /**
94
- * Builds visibility values object from the visibility map
95
- */
96
- _buildVisibilityValues(t) {
97
- return n.reduce((e, i) => (e[`visibility_${i.key}`] = t[i.key] ?? !0, e), {});
98
- }
99
- /**
100
- * Read visibility state from individual row elements' data-visibility attributes
101
- * This ensures toggles reflect the actual DOM state
102
- */
103
- _readVisibilityFromRows() {
104
- if (!this.currentNode)
105
- return this._getDefaultVisibilities();
106
- const t = Array.from(this.currentNode.querySelectorAll(c)), e = this._extractVisibilityFromRows(t);
107
- return this._mergeWithDefaults(e);
108
- }
109
- /**
110
- * Returns default visibility values for all items
111
- */
112
- _getDefaultVisibilities() {
113
- return n.reduce((t, e) => (t[e.key] = e.visible, t), {});
114
- }
115
- /**
116
- * Extracts visibility values from DOM nodes
117
- */
118
- _extractVisibilityFromRows(t) {
119
- const e = {};
120
- return t.forEach((i) => {
121
- if (!("getAttribute" in i))
122
- return;
123
- const o = i.getAttribute(d), r = i.getAttribute(m);
124
- o && r !== null && (e[o] = this._parseVisibilityValue(r));
125
- }), e;
126
- }
127
- /**
128
- * Parses visibility value from string to boolean
129
- * Accepts "1", "true" as true, everything else as false
130
- */
131
- _parseVisibilityValue(t) {
132
- return t === "1" || t === "true";
133
- }
134
- /**
135
- * Merges extracted visibilities with default values for missing keys
136
- */
137
- _mergeWithDefaults(t) {
138
- return n.forEach((e) => {
139
- e.key in t || (t[e.key] = e.visible);
140
- }), t;
141
- }
142
- /**
143
- * Apply the reordered composition to the block's HTML structure
144
- * Updates the data-card-composition attribute and reorders product attributes
145
- * Note: Reordering is only applied for grid layout
146
- */
147
- _applyCompositionToBlock(t) {
148
- if (!this.currentNode)
149
- return;
150
- const e = this._getCurrentLayout();
151
- this.api.getDocumentModifier().modifyHtml(this.currentNode).setAttribute(_, t.join(",")).apply(new u("Update card composition")), e === "grid" && this._reorderProductAttributes(t);
152
- }
153
- /**
154
- * Reorders attribute rows within each product card based on composition order
155
- * Targets the tbody inside each product-attribute-cell to preserve card structure
156
- */
157
- _reorderProductAttributes(t) {
158
- if (!this.currentNode)
159
- return;
160
- const e = this.currentNode.querySelectorAll(v);
161
- if (!(e != null && e.length))
162
- return;
163
- const i = this.api.getDocumentModifier();
164
- e.forEach((o) => {
165
- const r = this._buildCompositionHtml(o, t);
166
- i.modifyHtml(o).setInnerHtml(r);
167
- }), i.apply(new u("Reorder product attributes"));
168
- }
169
- /**
170
- * Builds HTML string with attributes ordered according to composition
171
- */
172
- _buildCompositionHtml(t, e) {
173
- return e.reduce((i, o) => {
174
- const r = t.querySelector(`${c}[${d}="${o}"]`);
175
- return r && "getOuterHTML" in r ? i + r.getOuterHTML() : i;
176
- }, "");
177
- }
178
- /**
179
- * Apply visibility changes to the block's HTML structure
180
- * Updates display style and data-visibility attribute for all matching elements
181
- * - <tr> elements: use display: none / table-row
182
- * - <td> elements: use display: none / table-cell
183
- */
184
- _applyVisibilityToBlock(t, e) {
185
- if (!this.currentNode)
186
- return;
187
- const i = this.currentNode.querySelectorAll(`${c}[${d}="${t}"]`);
188
- if (!(i != null && i.length))
189
- return;
190
- const o = e ? "1" : "0", r = `Set ${t} visibility to ${e ? "visible" : "hidden"}`, b = this.api.getDocumentModifier();
191
- i.forEach((p) => {
192
- const y = I(p), h = e ? y : "none";
193
- b.modifyHtml(p).setStyle("display", h).setAttribute(m, o);
194
- }), b.apply(new u(r));
195
- }
196
- /**
197
- * Gets the current layout orientation from store or DOM
198
- */
199
- _getCurrentLayout() {
200
- return this.store.recommendationConfigs.orientation || P(this.currentNode);
201
- }
202
- /**
203
- * Updates orderable state based on layout orientation
204
- * Adds/removes disabled class to hide drag icons for list layout
205
- */
206
- _updateOrderableState() {
207
- const e = this._getCurrentLayout() === "list", i = this.getContainer();
208
- if (!i)
209
- return;
210
- const o = i.querySelector("[data-card-composition-control]");
211
- if (!o)
212
- return;
213
- const r = o.querySelector("ue-orderable");
214
- r && r.classList.toggle("orderable-disabled", e);
215
- }
216
- /**
217
- * Subscribe to store orientation changes
218
- * Updates orderable state when layout changes via the layout control
219
- */
220
- _subscribeToOrientationChanges() {
221
- this.unsubscribeOrientation && this.unsubscribeOrientation();
222
- let t = this.store.recommendationConfigs.orientation;
223
- this.unsubscribeOrientation = this.store.$subscribe(() => {
224
- const e = this.store.recommendationConfigs.orientation;
225
- e !== t && (t = e, this._updateOrderableState());
226
- });
227
- }
228
- }
229
- export {
230
- S as COMPOSITION_CONTROL_BLOCK_ID,
231
- H as RecommendationCardCompositionControl
232
- };