@useinsider/guido 2.0.0-beta.536ec84 → 2.0.0-beta.54d276a

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 (181) hide show
  1. package/README.md +2 -0
  2. package/dist/@types/config/schemas.js +3 -1
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +15 -17
  5. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue.js +7 -7
  6. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +8 -7
  7. package/dist/components/organisms/email-preview/amp/AmpToggle.vue2.js +3 -4
  8. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +14 -10
  9. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +22 -18
  10. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue.js +17 -0
  11. package/dist/components/organisms/email-preview/desktop-preview/EmailHeaderInfo.vue2.js +20 -0
  12. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +3 -3
  13. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue.js +10 -10
  14. package/dist/components/organisms/email-preview/mobile-preview/MobilePreview.vue2.js +14 -15
  15. package/dist/components/organisms/header/LeftSlot.vue.js +2 -2
  16. package/dist/components/organisms/header/MiddleSlot.vue.js +1 -1
  17. package/dist/components/organisms/header/MiddleSlot.vue2.js +13 -14
  18. package/dist/components/organisms/header/RightSlot.vue.js +7 -7
  19. package/dist/composables/useStripo.js +40 -40
  20. package/dist/config/migrator/recommendationMigrator.js +2 -2
  21. package/dist/extensions/Blocks/Items/controls/cardComposition.js +13 -4
  22. package/dist/extensions/Blocks/Recommendation/block.js +1 -1
  23. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  24. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  25. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +11 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +100 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +243 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +154 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +372 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +76 -0
  34. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  36. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +73 -0
  37. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +73 -0
  38. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  39. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +73 -0
  40. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +73 -0
  41. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  42. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +224 -0
  43. package/dist/extensions/Blocks/Recommendation/extension.js +39 -43
  44. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +5 -0
  45. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +127 -72
  46. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +20 -20
  47. package/dist/extensions/Blocks/Recommendation/templates/horizontal/elementRenderer.js +157 -0
  48. package/dist/extensions/Blocks/Recommendation/templates/horizontal/template.js +72 -0
  49. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  50. package/dist/extensions/Blocks/Recommendation/templates/utils.js +173 -0
  51. package/dist/extensions/Blocks/Recommendation/templates/vertical/elementRenderer.js +186 -0
  52. package/dist/extensions/Blocks/Recommendation/templates/vertical/migration.js +251 -0
  53. package/dist/extensions/Blocks/Recommendation/templates/vertical/template.js +61 -0
  54. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +25 -0
  55. package/dist/extensions/Blocks/controlFactories.js +155 -121
  56. package/dist/guido.css +1 -1
  57. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +361 -291
  58. package/dist/package.json.js +1 -1
  59. package/dist/services/stripoApi.js +6 -10
  60. package/dist/src/@types/config/schemas.d.ts +4 -0
  61. package/dist/src/composables/useConfig.d.ts +2 -0
  62. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  63. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +19 -11
  64. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +11 -0
  65. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +19 -0
  66. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  67. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +41 -0
  68. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +95 -0
  69. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  70. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +23 -0
  71. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +50 -0
  72. package/dist/src/extensions/Blocks/Recommendation/{control.d.ts → controls/main/index.d.ts} +19 -3
  73. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  74. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +16 -0
  75. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  76. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  77. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  78. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  79. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  80. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +77 -0
  84. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  85. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/elementRenderer.d.ts +8 -0
  86. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/migration.d.ts +25 -0
  87. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/template.d.ts +18 -0
  88. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +39 -0
  89. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +45 -0
  90. package/dist/src/extensions/Blocks/Recommendation/templates/vertical/elementRenderer.d.ts +7 -0
  91. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → vertical/migration.d.ts} +11 -4
  92. package/dist/src/extensions/Blocks/Recommendation/templates/vertical/template.d.ts +33 -0
  93. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
  94. package/dist/src/stores/config.d.ts +17 -0
  95. package/dist/static/assets/inbox-mockup.svg.js +4 -0
  96. package/dist/static/assets/phone-mockup.svg.js +4 -0
  97. package/dist/static/styles/components/wide-panel.css.js +0 -4
  98. package/dist/static/styles/customEditorStyle.css.js +38 -2
  99. package/package.json +3 -3
  100. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -103
  101. package/dist/extensions/Blocks/Recommendation/constants.js +0 -5
  102. package/dist/extensions/Blocks/Recommendation/control.js +0 -306
  103. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +0 -13
  104. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +0 -13
  105. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +0 -13
  106. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +0 -13
  107. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +0 -13
  108. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +0 -13
  109. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +0 -13
  110. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +0 -13
  111. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +0 -13
  112. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +0 -13
  113. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +0 -13
  114. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +0 -13
  115. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +0 -13
  116. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +0 -13
  117. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +0 -13
  118. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +0 -13
  119. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +0 -13
  120. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +0 -13
  121. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +0 -13
  122. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +0 -13
  123. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +0 -13
  124. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +0 -13
  125. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +0 -13
  126. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +0 -13
  127. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +0 -13
  128. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +0 -13
  129. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +0 -13
  130. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +0 -13
  131. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +0 -13
  132. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +0 -13
  133. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +0 -13
  134. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +0 -13
  135. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +0 -13
  136. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +0 -13
  137. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -160
  138. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -152
  139. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -180
  140. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +0 -28
  141. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +0 -5
  142. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +0 -5
  143. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +0 -5
  144. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +0 -5
  145. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +0 -5
  146. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +0 -5
  147. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +0 -5
  148. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +0 -5
  149. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +0 -5
  150. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +0 -5
  151. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +0 -5
  152. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +0 -5
  153. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +0 -5
  154. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +0 -5
  155. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +0 -5
  156. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +0 -5
  157. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +0 -5
  158. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +0 -5
  159. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +0 -5
  160. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +0 -5
  161. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +0 -5
  162. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +0 -5
  163. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +0 -5
  164. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +0 -5
  165. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +0 -5
  166. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +0 -5
  167. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +0 -5
  168. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +0 -5
  169. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +0 -5
  170. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +0 -5
  171. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +0 -5
  172. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +0 -5
  173. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +0 -5
  174. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +0 -5
  175. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  176. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -44
  177. package/dist/static/assets/desktop/desktop-mockup-center.svg.js +0 -4
  178. package/dist/static/assets/desktop/desktop-mockup-left.svg.js +0 -4
  179. package/dist/static/assets/desktop/desktop-mockup-right.svg.js +0 -4
  180. package/dist/static/assets/mobile/email-mockup.svg.js +0 -4
  181. package/dist/static/assets/mobile/inbox-mockup.svg.js +0 -4
@@ -0,0 +1,48 @@
1
+ import { createPaddingsControl as n, createTextBackgroundColorControl as e, createTextFontFamilyControl as C, createTextStyleControl as O, createTextSizeControl as S, createTextColorControl as I, createTextAlignControl as N } 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 r } from "../../constants/selectors.js";
5
+ import { OmnibusDiscountTextAfterControl as l } from "./textAfter.js";
6
+ import { OmnibusDiscountTextBeforeControl as U } from "./textBefore.js";
7
+ const i = N(
8
+ t.OMNIBUS_DISCOUNT_ALIGN,
9
+ o.OMNIBUS_DISCOUNT,
10
+ r
11
+ ), T = I(
12
+ t.OMNIBUS_DISCOUNT_COLOR,
13
+ o.OMNIBUS_DISCOUNT,
14
+ r
15
+ ), c = S(
16
+ t.OMNIBUS_DISCOUNT_SIZE,
17
+ o.OMNIBUS_DISCOUNT,
18
+ r
19
+ ), _ = O(
20
+ t.OMNIBUS_DISCOUNT_STYLE,
21
+ o.OMNIBUS_DISCOUNT,
22
+ r
23
+ ), m = C(
24
+ t.OMNIBUS_DISCOUNT_FONT_FAMILY,
25
+ o.OMNIBUS_DISCOUNT,
26
+ r
27
+ ), s = e(
28
+ t.OMNIBUS_DISCOUNT_BACKGROUND,
29
+ o.OMNIBUS_DISCOUNT,
30
+ r
31
+ ), B = n(
32
+ t.OMNIBUS_DISCOUNT_PADDINGS,
33
+ o.OMNIBUS_DISCOUNT,
34
+ r
35
+ ), g = {
36
+ align: i,
37
+ color: T,
38
+ size: c,
39
+ style: _,
40
+ fontFamily: m,
41
+ background: s,
42
+ paddings: B,
43
+ textBefore: U,
44
+ textAfter: l
45
+ };
46
+ export {
47
+ g as OmnibusDiscountControls
48
+ };
@@ -0,0 +1,73 @@
1
+ import { ModificationDescription as c } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as a } from "../../../common-control.js";
3
+ import { RecommendationBlockId as l } from "../../constants/blockIds.js";
4
+ import { RecommendationControlId as d } from "../../constants/controlIds.js";
5
+ import { CONTAINER_SELECTOR as T } from "../../constants/selectors.js";
6
+ import { preserveTextStyles as f } from "../../utils/preserveTextStyles.js";
7
+ const i = "data-text-after", u = "", p = ".omnibus-text-after";
8
+ class b extends a {
9
+ getId() {
10
+ return d.OMNIBUS_DISCOUNT_TEXT_AFTER;
11
+ }
12
+ getTemplate() {
13
+ return `
14
+ <div class="omnibus-discount-text-after-control-container">
15
+ ${this._GuTwoColumns([
16
+ this._GuLabel({ text: "Text After" }),
17
+ this._GuTextInput({
18
+ name: "omnibusDiscountTextAfter",
19
+ placeholder: "e.g., off!",
20
+ className: "es-180w"
21
+ })
22
+ ])}
23
+ </div>
24
+ `;
25
+ }
26
+ onRender() {
27
+ this._setFormValues(), this._listenToFormUpdates();
28
+ }
29
+ onTemplateNodeUpdated(t) {
30
+ super.onTemplateNodeUpdated(t), this._setFormValues();
31
+ }
32
+ _setFormValues() {
33
+ const t = this._getCurrentText();
34
+ this.api.updateValues({
35
+ omnibusDiscountTextAfter: t
36
+ });
37
+ }
38
+ _getCurrentText() {
39
+ if (!this.currentNode || !("getAttribute" in this.currentNode))
40
+ return u;
41
+ const t = this.currentNode.getAttribute(i);
42
+ return t === null ? u : t;
43
+ }
44
+ _onTextChange(t) {
45
+ if (!this.currentNode || !("closest" in this.currentNode))
46
+ return;
47
+ const e = this.currentNode.closest(T);
48
+ if (!e || !("querySelectorAll" in e))
49
+ return;
50
+ const n = Array.from(
51
+ e.querySelectorAll(`[esd-extension-block-id="${l.OMNIBUS_DISCOUNT}"]`)
52
+ );
53
+ if (!n.length)
54
+ return;
55
+ const o = this.api.getDocumentModifier();
56
+ n.forEach((s) => {
57
+ o.modifyHtml(s).setAttribute(i, t);
58
+ const r = s.querySelector(p);
59
+ if (r) {
60
+ const m = f(r, t);
61
+ o.modifyHtml(r).setInnerHtml(m);
62
+ }
63
+ }), o.apply(new c("Update omnibus discount text after"));
64
+ }
65
+ _listenToFormUpdates() {
66
+ this.api.onValueChanged("omnibusDiscountTextAfter", (t) => {
67
+ this._onTextChange(t);
68
+ });
69
+ }
70
+ }
71
+ export {
72
+ b as OmnibusDiscountTextAfterControl
73
+ };
@@ -0,0 +1,73 @@
1
+ import { ModificationDescription as c } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as l } from "../../../common-control.js";
3
+ import { RecommendationBlockId as a } from "../../constants/blockIds.js";
4
+ import { RecommendationControlId as d } from "../../constants/controlIds.js";
5
+ import { CONTAINER_SELECTOR as T } from "../../constants/selectors.js";
6
+ import { preserveTextStyles as f } from "../../utils/preserveTextStyles.js";
7
+ const i = "data-text-before", u = "", p = ".omnibus-text-before";
8
+ class B extends l {
9
+ getId() {
10
+ return d.OMNIBUS_DISCOUNT_TEXT_BEFORE;
11
+ }
12
+ getTemplate() {
13
+ return `
14
+ <div class="omnibus-discount-text-before-control-container">
15
+ ${this._GuTwoColumns([
16
+ this._GuLabel({ text: "Text Before" }),
17
+ this._GuTextInput({
18
+ name: "omnibusDiscountTextBefore",
19
+ placeholder: "e.g., Save ",
20
+ className: "es-180w"
21
+ })
22
+ ])}
23
+ </div>
24
+ `;
25
+ }
26
+ onRender() {
27
+ this._setFormValues(), this._listenToFormUpdates();
28
+ }
29
+ onTemplateNodeUpdated(e) {
30
+ super.onTemplateNodeUpdated(e), this._setFormValues();
31
+ }
32
+ _setFormValues() {
33
+ const e = this._getCurrentText();
34
+ this.api.updateValues({
35
+ omnibusDiscountTextBefore: e
36
+ });
37
+ }
38
+ _getCurrentText() {
39
+ if (!this.currentNode || !("getAttribute" in this.currentNode))
40
+ return u;
41
+ const e = this.currentNode.getAttribute(i);
42
+ return e === null ? u : e;
43
+ }
44
+ _onTextChange(e) {
45
+ if (!this.currentNode || !("closest" in this.currentNode))
46
+ return;
47
+ const t = this.currentNode.closest(T);
48
+ if (!t || !("querySelectorAll" in t))
49
+ return;
50
+ const n = Array.from(
51
+ t.querySelectorAll(`[esd-extension-block-id="${a.OMNIBUS_DISCOUNT}"]`)
52
+ );
53
+ if (!n.length)
54
+ return;
55
+ const o = this.api.getDocumentModifier();
56
+ n.forEach((s) => {
57
+ o.modifyHtml(s).setAttribute(i, e);
58
+ const r = s.querySelector(p);
59
+ if (r) {
60
+ const m = f(r, e);
61
+ o.modifyHtml(r).setInnerHtml(m);
62
+ }
63
+ }), o.apply(new c("Update omnibus discount text before"));
64
+ }
65
+ _listenToFormUpdates() {
66
+ this.api.onValueChanged("omnibusDiscountTextBefore", (e) => {
67
+ this._onTextChange(e);
68
+ });
69
+ }
70
+ }
71
+ export {
72
+ B as OmnibusDiscountTextBeforeControl
73
+ };
@@ -0,0 +1,48 @@
1
+ import { createPaddingsControl as n, createTextBackgroundColorControl as e, createTextFontFamilyControl as C, createTextStyleControl as I, createTextSizeControl as l, createTextColorControl as i, createTextAlignControl 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 r } from "../../constants/selectors.js";
5
+ import { OmnibusPriceTextAfterControl as O } from "./textAfter.js";
6
+ import { OmnibusPriceTextBeforeControl as _ } from "./textBefore.js";
7
+ const m = c(
8
+ t.OMNIBUS_PRICE_ALIGN,
9
+ o.OMNIBUS_PRICE,
10
+ r
11
+ ), S = i(
12
+ t.OMNIBUS_PRICE_COLOR,
13
+ o.OMNIBUS_PRICE,
14
+ r
15
+ ), B = l(
16
+ t.OMNIBUS_PRICE_SIZE,
17
+ o.OMNIBUS_PRICE,
18
+ r
19
+ ), N = I(
20
+ t.OMNIBUS_PRICE_STYLE,
21
+ o.OMNIBUS_PRICE,
22
+ r
23
+ ), P = C(
24
+ t.OMNIBUS_PRICE_FONT_FAMILY,
25
+ o.OMNIBUS_PRICE,
26
+ r
27
+ ), R = e(
28
+ t.OMNIBUS_PRICE_BACKGROUND,
29
+ o.OMNIBUS_PRICE,
30
+ r
31
+ ), a = n(
32
+ t.OMNIBUS_PRICE_PADDINGS,
33
+ o.OMNIBUS_PRICE,
34
+ r
35
+ ), f = {
36
+ align: m,
37
+ color: S,
38
+ size: B,
39
+ style: N,
40
+ fontFamily: P,
41
+ background: R,
42
+ paddings: a,
43
+ textBefore: _,
44
+ textAfter: O
45
+ };
46
+ export {
47
+ f as OmnibusPriceControls
48
+ };
@@ -0,0 +1,73 @@
1
+ import { ModificationDescription as c } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as a } from "../../../common-control.js";
3
+ import { RecommendationBlockId as l } from "../../constants/blockIds.js";
4
+ import { RecommendationControlId as d } from "../../constants/controlIds.js";
5
+ import { CONTAINER_SELECTOR as T } from "../../constants/selectors.js";
6
+ import { preserveTextStyles as f } from "../../utils/preserveTextStyles.js";
7
+ const s = "data-text-after", m = "", p = ".omnibus-text-after";
8
+ class N extends a {
9
+ getId() {
10
+ return d.OMNIBUS_PRICE_TEXT_AFTER;
11
+ }
12
+ getTemplate() {
13
+ return `
14
+ <div class="omnibus-price-text-after-control-container">
15
+ ${this._GuTwoColumns([
16
+ this._GuLabel({ text: "Text After" }),
17
+ this._GuTextInput({
18
+ name: "omnibusPriceTextAfter",
19
+ placeholder: "e.g., (incl. VAT)",
20
+ className: "es-180w"
21
+ })
22
+ ])}
23
+ </div>
24
+ `;
25
+ }
26
+ onRender() {
27
+ this._setFormValues(), this._listenToFormUpdates();
28
+ }
29
+ onTemplateNodeUpdated(t) {
30
+ super.onTemplateNodeUpdated(t), this._setFormValues();
31
+ }
32
+ _setFormValues() {
33
+ const t = this._getCurrentText();
34
+ this.api.updateValues({
35
+ omnibusPriceTextAfter: t
36
+ });
37
+ }
38
+ _getCurrentText() {
39
+ if (!this.currentNode || !("getAttribute" in this.currentNode))
40
+ return m;
41
+ const t = this.currentNode.getAttribute(s);
42
+ return t === null ? m : t;
43
+ }
44
+ _onTextChange(t) {
45
+ if (!this.currentNode || !("closest" in this.currentNode))
46
+ return;
47
+ const e = this.currentNode.closest(T);
48
+ if (!e || !("querySelectorAll" in e))
49
+ return;
50
+ const n = Array.from(
51
+ e.querySelectorAll(`[esd-extension-block-id="${l.OMNIBUS_PRICE}"]`)
52
+ );
53
+ if (!n.length)
54
+ return;
55
+ const r = this.api.getDocumentModifier();
56
+ n.forEach((i) => {
57
+ r.modifyHtml(i).setAttribute(s, t);
58
+ const o = i.querySelector(p);
59
+ if (o) {
60
+ const u = f(o, t);
61
+ r.modifyHtml(o).setInnerHtml(u);
62
+ }
63
+ }), r.apply(new c("Update omnibus price text after"));
64
+ }
65
+ _listenToFormUpdates() {
66
+ this.api.onValueChanged("omnibusPriceTextAfter", (t) => {
67
+ this._onTextChange(t);
68
+ });
69
+ }
70
+ }
71
+ export {
72
+ N as OmnibusPriceTextAfterControl
73
+ };
@@ -0,0 +1,73 @@
1
+ import { ModificationDescription as u } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
2
+ import { CommonControl as l } from "../../../common-control.js";
3
+ import { RecommendationBlockId as a } from "../../constants/blockIds.js";
4
+ import { RecommendationControlId as d } from "../../constants/controlIds.js";
5
+ import { CONTAINER_SELECTOR as p } from "../../constants/selectors.js";
6
+ import { preserveTextStyles as T } from "../../utils/preserveTextStyles.js";
7
+ const s = "data-text-before", c = "Lowest 30-day price: ", f = ".omnibus-text-before";
8
+ class N extends l {
9
+ getId() {
10
+ return d.OMNIBUS_PRICE_TEXT_BEFORE;
11
+ }
12
+ getTemplate() {
13
+ return `
14
+ <div class="omnibus-price-text-before-control-container">
15
+ ${this._GuTwoColumns([
16
+ this._GuLabel({ text: "Text Before" }),
17
+ this._GuTextInput({
18
+ name: "omnibusPriceTextBefore",
19
+ placeholder: "e.g., Lowest 30-day price: ",
20
+ className: "es-180w"
21
+ })
22
+ ])}
23
+ </div>
24
+ `;
25
+ }
26
+ onRender() {
27
+ this._setFormValues(), this._listenToFormUpdates();
28
+ }
29
+ onTemplateNodeUpdated(e) {
30
+ super.onTemplateNodeUpdated(e), this._setFormValues();
31
+ }
32
+ _setFormValues() {
33
+ const e = this._getCurrentText();
34
+ this.api.updateValues({
35
+ omnibusPriceTextBefore: e
36
+ });
37
+ }
38
+ _getCurrentText() {
39
+ if (!this.currentNode || !("getAttribute" in this.currentNode))
40
+ return c;
41
+ const e = this.currentNode.getAttribute(s);
42
+ return e === null ? c : e;
43
+ }
44
+ _onTextChange(e) {
45
+ if (!this.currentNode || !("closest" in this.currentNode))
46
+ return;
47
+ const t = this.currentNode.closest(p);
48
+ if (!t || !("querySelectorAll" in t))
49
+ return;
50
+ const n = Array.from(
51
+ t.querySelectorAll(`[esd-extension-block-id="${a.OMNIBUS_PRICE}"]`)
52
+ );
53
+ if (!n.length)
54
+ return;
55
+ const o = this.api.getDocumentModifier();
56
+ n.forEach((i) => {
57
+ o.modifyHtml(i).setAttribute(s, e);
58
+ const r = i.querySelector(f);
59
+ if (r) {
60
+ const m = T(r, e);
61
+ o.modifyHtml(r).setInnerHtml(m);
62
+ }
63
+ }), o.apply(new u("Update omnibus price text before"));
64
+ }
65
+ _listenToFormUpdates() {
66
+ this.api.onValueChanged("omnibusPriceTextBefore", (e) => {
67
+ this._onTextChange(e);
68
+ });
69
+ }
70
+ }
71
+ export {
72
+ N as OmnibusPriceTextBeforeControl
73
+ };
@@ -0,0 +1,44 @@
1
+ import { createPaddingsControl as r, createTextBackgroundColorControl as C, createTextFontFamilyControl as e, createTextStyleControl as l, createTextSizeControl as c, createTextColorControl as I, createTextAlignControl as R } 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 a = R(
6
+ t.PRICE_ALIGN,
7
+ o.PRICE,
8
+ n
9
+ ), i = I(
10
+ t.PRICE_COLOR,
11
+ o.PRICE,
12
+ n
13
+ ), E = c(
14
+ t.PRICE_SIZE,
15
+ o.PRICE,
16
+ n
17
+ ), P = l(
18
+ t.PRICE_STYLE,
19
+ o.PRICE,
20
+ n
21
+ ), m = e(
22
+ t.PRICE_FONT_FAMILY,
23
+ o.PRICE,
24
+ n
25
+ ), s = C(
26
+ t.PRICE_BACKGROUND,
27
+ o.PRICE,
28
+ n
29
+ ), d = r(
30
+ t.PRICE_PADDINGS,
31
+ o.PRICE,
32
+ n
33
+ ), x = {
34
+ align: a,
35
+ color: i,
36
+ size: E,
37
+ style: P,
38
+ fontFamily: m,
39
+ background: s,
40
+ paddings: d
41
+ };
42
+ export {
43
+ x as PriceControls
44
+ };
@@ -0,0 +1,224 @@
1
+ var A = Object.defineProperty;
2
+ var y = (n, i, t) => i in n ? A(n, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[i] = t;
3
+ var p = (n, i, t) => y(n, typeof i != "symbol" ? i + "" : i, t);
4
+ import { ModificationDescription as d } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
+ import { CommonControl as b } from "../../../common-control.js";
6
+ import { useRecommendationExtensionStore as P } from "../../store/recommendation.js";
7
+ import { useDebounceFn as N } from "../../../../../node_modules/@vueuse/shared/index.js";
8
+ const O = "recommendation-spacing-control", a = {
9
+ COLUMN_SPACING: "columnSpacing",
10
+ COLUMN_SPACING_LABEL: "columnSpacingLabel",
11
+ ROW_SPACING: "rowSpacing"
12
+ }, _ = {
13
+ COLUMN_SPACING: "data-column-spacing",
14
+ ROW_SPACING: "data-row-spacing"
15
+ }, s = {
16
+ COLUMN_SPACING: 10,
17
+ // 5px on each side = 10px total
18
+ ROW_SPACING: 20
19
+ }, u = {
20
+ MIN_SPACING: 0,
21
+ MAX_SPACING: 50,
22
+ STEP: 5
23
+ };
24
+ function S(n, i) {
25
+ return !n || !("getStyle" in n) ? null : n.getStyle(i);
26
+ }
27
+ function I(n) {
28
+ return !n || !("parent" in n) || typeof n.parent != "function" ? null : n.parent();
29
+ }
30
+ function C(n, i) {
31
+ if (!n)
32
+ return i;
33
+ const t = parseFloat(n);
34
+ return Number.isNaN(t) ? i : t;
35
+ }
36
+ class w extends b {
37
+ constructor() {
38
+ super(...arguments);
39
+ p(this, "store", P());
40
+ p(this, "unsubscribeOrientation", null);
41
+ /**
42
+ * Debounced version of _onColumnSpacingChange
43
+ * Prevents excessive DOM updates when user rapidly adjusts the counter
44
+ */
45
+ p(this, "_debouncedOnColumnSpacingChange", N((t) => {
46
+ this._onColumnSpacingChange(t);
47
+ }, 300));
48
+ /**
49
+ * Debounced version of _onRowSpacingChange
50
+ * Prevents excessive DOM updates when user rapidly adjusts the counter
51
+ */
52
+ p(this, "_debouncedOnRowSpacingChange", N((t) => {
53
+ this._onRowSpacingChange(t);
54
+ }, 300));
55
+ }
56
+ getId() {
57
+ return O;
58
+ }
59
+ getTemplate() {
60
+ return `
61
+ <div class="spacing-control-container">
62
+ ${this._GuTwoColumns([
63
+ this._GuLabel({ text: "Column Spacing (px)", name: a.COLUMN_SPACING_LABEL }),
64
+ this._GuCounter({
65
+ name: a.COLUMN_SPACING,
66
+ minValue: u.MIN_SPACING,
67
+ maxValue: u.MAX_SPACING,
68
+ step: u.STEP
69
+ }),
70
+ this._GuLabel({ text: "Row Spacing (px)" }),
71
+ this._GuCounter({
72
+ name: a.ROW_SPACING,
73
+ minValue: u.MIN_SPACING,
74
+ maxValue: u.MAX_SPACING,
75
+ step: u.STEP
76
+ })
77
+ ])}
78
+ </div>
79
+ `;
80
+ }
81
+ onRender() {
82
+ this._setFormValues(), this._updateColumnSpacingVisibility(), this._listenToFormUpdates(), this._subscribeToOrientationChanges();
83
+ }
84
+ onTemplateNodeUpdated(t) {
85
+ super.onTemplateNodeUpdated(t), this._setFormValues(), this._updateColumnSpacingVisibility();
86
+ }
87
+ /**
88
+ * Gets the current layout orientation from the block's data attribute
89
+ */
90
+ _getCurrentLayout() {
91
+ if (!this.currentNode || !("querySelector" in this.currentNode))
92
+ return "vertical";
93
+ const t = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
94
+ return !t || !("getAttribute" in t) ? "vertical" : t.getAttribute("data-layout") === "horizontal" ? "horizontal" : "vertical";
95
+ }
96
+ /**
97
+ * Updates column spacing visibility based on layout orientation
98
+ * Column spacing is hidden for horizontal layout (products are stacked vertically)
99
+ * Reads from store first for reliability, falls back to DOM
100
+ */
101
+ _updateColumnSpacingVisibility() {
102
+ const r = (this.store.recommendationConfigs.orientation || this._getCurrentLayout()) === "vertical";
103
+ this.api.setVisibility(a.COLUMN_SPACING, r), this.api.setVisibility(a.COLUMN_SPACING_LABEL, r);
104
+ }
105
+ /**
106
+ * Reads spacing values from data attributes or returns defaults
107
+ */
108
+ _setFormValues() {
109
+ const t = this._getStoredColumnSpacing(), e = this._getStoredRowSpacing();
110
+ this.api.updateValues({
111
+ [a.COLUMN_SPACING]: t,
112
+ [a.ROW_SPACING]: e
113
+ });
114
+ }
115
+ /**
116
+ * Gets stored column spacing from the first attribute row cell's padding.
117
+ * For vertical layout: cells inside .recommendation-attribute-row have padding applied.
118
+ * For horizontal layout: the parent of .product-card-wrapper has the padding.
119
+ * The padding is applied as "0 {halfSpacing}px", so we extract and multiply by 2.
120
+ */
121
+ _getStoredColumnSpacing() {
122
+ if (!this.currentNode)
123
+ return s.COLUMN_SPACING;
124
+ if (this._getCurrentLayout() === "vertical") {
125
+ const o = this.currentNode.querySelector(".recommendation-attribute-row"), f = o == null ? void 0 : o.querySelector("td"), g = S(f, "padding");
126
+ if (!g)
127
+ return s.COLUMN_SPACING;
128
+ const m = g.trim().split(/\s+/);
129
+ return m.length < 2 ? s.COLUMN_SPACING : C(m[1], s.COLUMN_SPACING / 2) * 2;
130
+ }
131
+ const e = this.currentNode.querySelector(".product-card-wrapper"), r = I(e), l = S(r, "padding");
132
+ if (!l)
133
+ return s.COLUMN_SPACING;
134
+ const c = l.trim().split(/\s+/);
135
+ return c.length < 2 ? s.COLUMN_SPACING : C(c[1], s.COLUMN_SPACING / 2) * 2;
136
+ }
137
+ /**
138
+ * Gets stored row spacing from the first spacer element's height style
139
+ */
140
+ _getStoredRowSpacing() {
141
+ if (!this.currentNode)
142
+ return s.ROW_SPACING;
143
+ const t = this.currentNode.querySelector(".spacer"), e = S(t, "height");
144
+ return C(e, s.ROW_SPACING);
145
+ }
146
+ /**
147
+ * Handles column spacing changes.
148
+ * For vertical layout: applies horizontal padding to all cells inside attribute rows.
149
+ * For horizontal layout: applies padding to parent of product card wrappers.
150
+ */
151
+ _onColumnSpacingChange(t) {
152
+ if (!this.currentNode)
153
+ return;
154
+ this._storeColumnSpacing(t);
155
+ const e = this._getCurrentLayout(), r = this.api.getDocumentModifier(), c = `0 ${t / 2}px`;
156
+ e === "vertical" ? Array.from(
157
+ this.currentNode.querySelectorAll(".attribute-cell")
158
+ ).forEach((o) => {
159
+ r.modifyHtml(o).setStyle("padding", c);
160
+ }) : Array.from(
161
+ this.currentNode.querySelectorAll(".product-card-wrapper")
162
+ ).forEach((o) => {
163
+ "parent" in o && o.parent() && r.modifyHtml(o.parent()).setStyle("padding", c);
164
+ }), r.apply(new d(`Update column spacing to ${t}px`));
165
+ }
166
+ /**
167
+ * Handles row spacing changes
168
+ * Applies height to all spacer elements between product rows
169
+ */
170
+ _onRowSpacingChange(t) {
171
+ if (!this.currentNode)
172
+ return;
173
+ this._storeRowSpacing(t);
174
+ const e = Array.from(
175
+ this.currentNode.querySelectorAll(".spacer")
176
+ );
177
+ if (!e.length)
178
+ return;
179
+ const r = this.api.getDocumentModifier(), l = `${t}px`;
180
+ e.forEach((c) => {
181
+ r.modifyHtml(c).setStyle("height", l);
182
+ }), r.apply(new d(`Update row spacing to ${t}px`));
183
+ }
184
+ /**
185
+ * Stores column spacing value in block data attribute
186
+ */
187
+ _storeColumnSpacing(t) {
188
+ if (!this.currentNode)
189
+ return;
190
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
191
+ e && this.api.getDocumentModifier().modifyHtml(e).setAttribute(_.COLUMN_SPACING, t.toString()).apply(new d("Store column spacing"));
192
+ }
193
+ /**
194
+ * Stores row spacing value in block data attribute
195
+ */
196
+ _storeRowSpacing(t) {
197
+ if (!this.currentNode)
198
+ return;
199
+ const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
200
+ e && this.api.getDocumentModifier().modifyHtml(e).setAttribute(_.ROW_SPACING, t.toString()).apply(new d("Store row spacing"));
201
+ }
202
+ _listenToFormUpdates() {
203
+ this.api.onValueChanged(a.COLUMN_SPACING, (t) => {
204
+ const e = parseInt(t);
205
+ Number.isNaN(e) || this._debouncedOnColumnSpacingChange(e);
206
+ }), this.api.onValueChanged(a.ROW_SPACING, (t) => {
207
+ const e = parseInt(t);
208
+ Number.isNaN(e) || this._debouncedOnRowSpacingChange(e);
209
+ });
210
+ }
211
+ /**
212
+ * Subscribe to store orientation changes
213
+ * Updates column spacing visibility when layout changes via the layout control
214
+ */
215
+ _subscribeToOrientationChanges() {
216
+ this.unsubscribeOrientation && this.unsubscribeOrientation(), this.unsubscribeOrientation = this.store.$subscribe((t) => {
217
+ t.type === "patch object" && this._updateColumnSpacingVisibility();
218
+ });
219
+ }
220
+ }
221
+ export {
222
+ O as SPACING_CONTROL_ID,
223
+ w as SpacingControl
224
+ };