@useinsider/guido 2.0.0-beta.edc1f0a → 2.0.0-beta.eee5ecc

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 (238) hide show
  1. package/dist/@types/config/schemas.js +53 -39
  2. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +2 -2
  3. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +2 -2
  4. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
  5. package/dist/components/organisms/header/LeftSlot.vue.js +12 -12
  6. package/dist/components/organisms/header/LeftSlot.vue2.js +6 -6
  7. package/dist/components/organisms/header/RightSlot.vue2.js +10 -10
  8. package/dist/composables/useActionsApi.js +33 -30
  9. package/dist/composables/useConfig.js +29 -27
  10. package/dist/composables/useSave.js +13 -11
  11. package/dist/config/migrator/index.js +9 -8
  12. package/dist/config/migrator/itemsBlockMigrator.js +334 -0
  13. package/dist/config/migrator/recommendationMigrator.js +2 -2
  14. package/dist/extensions/Blocks/Items/block.js +36 -40
  15. package/dist/extensions/Blocks/Items/controls/button/link.js +22 -29
  16. package/dist/extensions/Blocks/Items/controls/cardComposition.js +70 -59
  17. package/dist/extensions/Blocks/Items/controls/image/link.js +23 -30
  18. package/dist/extensions/Blocks/Items/controls/name/trimming.js +25 -25
  19. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +19 -17
  20. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +31 -29
  21. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +36 -36
  22. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +21 -19
  23. package/dist/extensions/Blocks/Items/controls/price/priceOrientation.js +29 -27
  24. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +93 -0
  25. package/dist/extensions/Blocks/Items/controls/settingsControl.js +146 -131
  26. package/dist/extensions/Blocks/Items/enums/controlEnums.js +2 -2
  27. package/dist/extensions/Blocks/Items/enums/productEnums.js +43 -45
  28. package/dist/extensions/Blocks/Items/enums/settingsEnums.js +4 -5
  29. package/dist/extensions/Blocks/Items/extension.js +11 -9
  30. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +58 -49
  31. package/dist/extensions/Blocks/Items/layouts/vertical.html.js +48 -59
  32. package/dist/extensions/Blocks/Items/settingsPanel.js +27 -26
  33. package/dist/extensions/Blocks/Items/store/items-block.js +11 -7
  34. package/dist/extensions/Blocks/Items/template.js +389 -141
  35. package/dist/extensions/Blocks/Items/utils/nodeConfigUtils.js +176 -0
  36. package/dist/extensions/Blocks/Recommendation/block.js +1 -1
  37. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +103 -0
  38. package/dist/extensions/Blocks/Recommendation/constants.js +5 -0
  39. package/dist/extensions/Blocks/Recommendation/control.js +306 -0
  40. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +13 -0
  41. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +13 -0
  42. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +13 -0
  43. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +13 -0
  44. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +13 -0
  45. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +13 -0
  46. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +13 -0
  47. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +13 -0
  48. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +13 -0
  49. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +13 -0
  50. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +13 -0
  51. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +13 -0
  52. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +13 -0
  53. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +13 -0
  54. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +13 -0
  55. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +13 -0
  56. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +13 -0
  57. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +13 -0
  58. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +13 -0
  59. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +13 -0
  60. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +13 -0
  61. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +13 -0
  62. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +13 -0
  63. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +13 -0
  64. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +13 -0
  65. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +13 -0
  66. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +13 -0
  67. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +13 -0
  68. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +13 -0
  69. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +13 -0
  70. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +13 -0
  71. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +13 -0
  72. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +13 -0
  73. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +13 -0
  74. package/dist/extensions/Blocks/Recommendation/extension.js +43 -40
  75. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +4 -13
  76. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +72 -128
  77. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +26 -29
  78. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +160 -0
  79. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +152 -0
  80. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +180 -0
  81. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  82. package/dist/extensions/Blocks/Unsubscribe/extension.js +9 -9
  83. package/dist/extensions/Blocks/common-control.js +30 -32
  84. package/dist/extensions/Blocks/controlFactories.js +106 -130
  85. package/dist/guido.css +1 -1
  86. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +125 -116
  87. package/dist/src/@types/config/index.d.ts +2 -2
  88. package/dist/src/@types/config/schemas.d.ts +26 -0
  89. package/dist/src/@types/config/types.d.ts +7 -1
  90. package/dist/src/composables/useActionsApi.d.ts +1 -0
  91. package/dist/src/composables/useConfig.d.ts +6 -0
  92. package/dist/src/config/migrator/itemsBlockMigrator.d.ts +6 -0
  93. package/dist/src/extensions/Blocks/Items/controls/button/link.d.ts +0 -2
  94. package/dist/src/extensions/Blocks/Items/controls/cardComposition.d.ts +9 -0
  95. package/dist/src/extensions/Blocks/Items/controls/image/link.d.ts +0 -2
  96. package/dist/src/extensions/Blocks/Items/controls/price/priceOrientation.d.ts +1 -1
  97. package/dist/src/extensions/Blocks/Items/controls/price/singlePrice.d.ts +18 -0
  98. package/dist/src/extensions/Blocks/Items/controls/settingsControl.d.ts +0 -4
  99. package/dist/src/extensions/Blocks/Items/enums/controlEnums.d.ts +1 -0
  100. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +24 -26
  101. package/dist/src/extensions/Blocks/Items/enums/settingsEnums.d.ts +1 -2
  102. package/dist/src/extensions/Blocks/Items/store/items-block.d.ts +2 -0
  103. package/dist/src/extensions/Blocks/Items/template.d.ts +22 -1
  104. package/dist/src/extensions/Blocks/Items/utils/nodeConfigUtils.d.ts +76 -0
  105. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +28 -0
  106. package/dist/src/extensions/Blocks/Recommendation/{constants/controlIds.d.ts → constants.d.ts} +11 -19
  107. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +35 -0
  108. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +5 -0
  109. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +5 -0
  110. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +5 -0
  111. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +5 -0
  112. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +5 -0
  113. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +5 -0
  114. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +5 -0
  115. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +5 -0
  116. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +5 -0
  117. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +5 -0
  118. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +5 -0
  119. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +5 -0
  120. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +5 -0
  121. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +5 -0
  122. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +5 -0
  123. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +5 -0
  124. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +5 -0
  125. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +5 -0
  126. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +5 -0
  127. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +5 -0
  128. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +5 -0
  129. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +5 -0
  130. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +5 -0
  131. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +5 -0
  132. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +5 -0
  133. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +5 -0
  134. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +5 -0
  135. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +5 -0
  136. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +5 -0
  137. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +5 -0
  138. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +5 -0
  139. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +5 -0
  140. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +5 -0
  141. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +5 -0
  142. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +0 -9
  143. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +16 -17
  144. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +16 -0
  145. package/dist/src/extensions/Blocks/Recommendation/templates/{vertical/migration.d.ts → migrationTemplate.d.ts} +4 -11
  146. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +44 -0
  147. package/dist/src/extensions/Blocks/common-control.d.ts +10 -11
  148. package/dist/src/stores/config.d.ts +147 -1
  149. package/dist/static/styles/components/button.css.js +1 -1
  150. package/dist/static/styles/components/wide-panel.css.js +4 -0
  151. package/dist/static/styles/customEditorStyle.css.js +2 -38
  152. package/dist/stores/config.js +7 -0
  153. package/dist/utils/pairProductVariables.js +61 -58
  154. package/dist/utils/templatePreparation.js +17 -17
  155. package/package.json +1 -1
  156. package/dist/extensions/Blocks/Items/utils/configBlockUtils.js +0 -17
  157. package/dist/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.js +0 -28
  158. package/dist/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.js +0 -76
  159. package/dist/extensions/Blocks/Items/utils/updateAttributes.js +0 -46
  160. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +0 -4
  161. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +0 -4
  162. package/dist/extensions/Blocks/Recommendation/constants/layout.js +0 -12
  163. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +0 -11
  164. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +0 -64
  165. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +0 -80
  166. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +0 -232
  167. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +0 -19
  168. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +0 -104
  169. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +0 -86
  170. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +0 -134
  171. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +0 -54
  172. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +0 -147
  173. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +0 -64
  174. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +0 -111
  175. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +0 -60
  176. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -114
  177. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +0 -46
  178. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +0 -76
  179. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +0 -44
  180. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +0 -48
  181. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +0 -73
  182. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +0 -73
  183. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +0 -48
  184. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +0 -73
  185. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +0 -73
  186. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +0 -44
  187. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +0 -211
  188. package/dist/extensions/Blocks/Recommendation/templates/horizontal/elementRenderer.js +0 -157
  189. package/dist/extensions/Blocks/Recommendation/templates/horizontal/template.js +0 -72
  190. package/dist/extensions/Blocks/Recommendation/templates/index.js +0 -12
  191. package/dist/extensions/Blocks/Recommendation/templates/utils.js +0 -173
  192. package/dist/extensions/Blocks/Recommendation/templates/vertical/elementRenderer.js +0 -186
  193. package/dist/extensions/Blocks/Recommendation/templates/vertical/migration.js +0 -251
  194. package/dist/extensions/Blocks/Recommendation/templates/vertical/template.js +0 -62
  195. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +0 -36
  196. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +0 -46
  197. package/dist/src/extensions/Blocks/Items/utils/configBlockUtils.d.ts +0 -23
  198. package/dist/src/extensions/Blocks/Items/utils/syncAttributeFromConfigBlock.d.ts +0 -32
  199. package/dist/src/extensions/Blocks/Items/utils/syncAttributesFromConfigBlock.d.ts +0 -50
  200. package/dist/src/extensions/Blocks/Items/utils/updateAttributes.d.ts +0 -8
  201. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +0 -13
  202. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +0 -12
  203. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +0 -27
  204. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -19
  205. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +0 -143
  206. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +0 -31
  207. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +0 -95
  208. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +0 -35
  209. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +0 -24
  210. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +0 -34
  211. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +0 -17
  212. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +0 -16
  213. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +0 -22
  214. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +0 -62
  215. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +0 -15
  216. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +0 -39
  217. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +0 -15
  218. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -81
  219. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +0 -97
  220. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +0 -16
  221. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +0 -95
  222. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +0 -100
  223. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +0 -15
  224. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +0 -15
  225. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +0 -100
  226. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +0 -15
  227. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +0 -15
  228. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +0 -95
  229. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +0 -73
  230. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/elementRenderer.d.ts +0 -8
  231. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/migration.d.ts +0 -25
  232. package/dist/src/extensions/Blocks/Recommendation/templates/horizontal/template.d.ts +0 -18
  233. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +0 -39
  234. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +0 -45
  235. package/dist/src/extensions/Blocks/Recommendation/templates/vertical/elementRenderer.d.ts +0 -7
  236. package/dist/src/extensions/Blocks/Recommendation/templates/vertical/template.d.ts +0 -33
  237. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +0 -19
  238. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +0 -77
@@ -1,48 +0,0 @@
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
- };
@@ -1,73 +0,0 @@
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
- typeof t == "string" && this._onTextChange(t);
68
- });
69
- }
70
- }
71
- export {
72
- b as OmnibusDiscountTextAfterControl
73
- };
@@ -1,73 +0,0 @@
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 g 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
- typeof e == "string" && this._onTextChange(e);
68
- });
69
- }
70
- }
71
- export {
72
- g as OmnibusDiscountTextBeforeControl
73
- };
@@ -1,48 +0,0 @@
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
- };
@@ -1,73 +0,0 @@
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
- };
@@ -1,73 +0,0 @@
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
- };
@@ -1,44 +0,0 @@
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
- };
@@ -1,211 +0,0 @@
1
- var P = Object.defineProperty;
2
- var G = (o, i, t) => i in o ? P(o, i, { enumerable: !0, configurable: !0, writable: !0, value: t }) : o[i] = t;
3
- var l = (o, i, t) => G(o, typeof i != "symbol" ? i + "" : i, t);
4
- import { ModificationDescription as p } from "../../../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { CommonControl as I } from "../../../common-control.js";
6
- import { SPACING_STEP as N, MAX_SPACING as _, MIN_SPACING as f, DEFAULT_COLUMN_SPACING as c, DEFAULT_ROW_SPACING as b } from "../../constants/layout.js";
7
- import { useRecommendationExtensionStore as L } from "../../store/recommendation.js";
8
- import { safeGetStyle as d, safeGetParent as V } from "../../utils/tagName.js";
9
- import { getCurrentLayout as m } from "../main/utils.js";
10
- import { useDebounceFn as y } from "../../../../../node_modules/@vueuse/shared/index.js";
11
- const w = "recommendation-spacing-control", s = {
12
- COLUMN_SPACING: "columnSpacing",
13
- COLUMN_SPACING_LABEL: "columnSpacingLabel",
14
- ROW_SPACING: "rowSpacing"
15
- }, A = {
16
- COLUMN_SPACING: "data-column-spacing",
17
- ROW_SPACING: "data-row-spacing"
18
- };
19
- function h(o, i) {
20
- if (!o)
21
- return i;
22
- const t = parseFloat(o);
23
- return Number.isNaN(t) ? i : t;
24
- }
25
- class q extends I {
26
- constructor() {
27
- super(...arguments);
28
- l(this, "store", L());
29
- l(this, "unsubscribeOrientation", null);
30
- /**
31
- * Debounced version of _onColumnSpacingChange
32
- * Prevents excessive DOM updates when user rapidly adjusts the counter
33
- */
34
- l(this, "_debouncedOnColumnSpacingChange", y((t) => {
35
- this._onColumnSpacingChange(t);
36
- }, 300));
37
- /**
38
- * Debounced version of _onRowSpacingChange
39
- * Prevents excessive DOM updates when user rapidly adjusts the counter
40
- */
41
- l(this, "_debouncedOnRowSpacingChange", y((t) => {
42
- this._onRowSpacingChange(t);
43
- }, 300));
44
- }
45
- getId() {
46
- return w;
47
- }
48
- getTemplate() {
49
- return `
50
- <div class="spacing-control-container">
51
- ${this._GuTwoColumns([
52
- this._GuLabel({ text: "Column Spacing (px)", name: s.COLUMN_SPACING_LABEL }),
53
- this._GuCounter({
54
- name: s.COLUMN_SPACING,
55
- minValue: f,
56
- maxValue: _,
57
- step: N
58
- }),
59
- this._GuLabel({ text: "Row Spacing (px)" }),
60
- this._GuCounter({
61
- name: s.ROW_SPACING,
62
- minValue: f,
63
- maxValue: _,
64
- step: N
65
- })
66
- ])}
67
- </div>
68
- `;
69
- }
70
- onRender() {
71
- this._setFormValues(), this._updateColumnSpacingVisibility(), this._listenToFormUpdates(), this._subscribeToOrientationChanges();
72
- }
73
- onTemplateNodeUpdated(t) {
74
- super.onTemplateNodeUpdated(t), this._setFormValues(), this._updateColumnSpacingVisibility();
75
- }
76
- onDestroy() {
77
- this.unsubscribeOrientation && (this.unsubscribeOrientation(), this.unsubscribeOrientation = null);
78
- }
79
- /**
80
- * Updates column spacing visibility based on layout orientation
81
- * Column spacing is hidden for horizontal layout (products are stacked vertically)
82
- * Reads from store first for reliability, falls back to DOM
83
- */
84
- _updateColumnSpacingVisibility() {
85
- if (!this.api)
86
- return;
87
- const n = (this.store.recommendationConfigs.orientation || m(this.currentNode)) === "vertical";
88
- this.api.setVisibility(s.COLUMN_SPACING, n), this.api.setVisibility(s.COLUMN_SPACING_LABEL, n);
89
- }
90
- /**
91
- * Reads spacing values from data attributes or returns defaults
92
- */
93
- _setFormValues() {
94
- if (!this.api)
95
- return;
96
- const t = this._getStoredColumnSpacing(), e = this._getStoredRowSpacing();
97
- this.api.updateValues({
98
- [s.COLUMN_SPACING]: t,
99
- [s.ROW_SPACING]: e
100
- });
101
- }
102
- /**
103
- * Gets stored column spacing from the first attribute row cell's padding.
104
- * For vertical layout: cells inside .recommendation-attribute-row have padding applied.
105
- * For horizontal layout: the parent of .product-card-wrapper has the padding.
106
- * The padding is applied as "0 {halfSpacing}px", so we extract and multiply by 2.
107
- */
108
- _getStoredColumnSpacing() {
109
- if (!this.currentNode)
110
- return c;
111
- if (m(this.currentNode) === "vertical") {
112
- const r = this.currentNode.querySelector(".recommendation-attribute-row"), O = r == null ? void 0 : r.querySelector("td"), S = d(O, "padding");
113
- if (!S)
114
- return c;
115
- const C = S.trim().split(/\s+/);
116
- return C.length < 2 ? c : h(C[1], c / 2) * 2;
117
- }
118
- const e = this.currentNode.querySelector(".product-card-wrapper"), n = V(e), u = d(n, "padding");
119
- if (!u)
120
- return c;
121
- const a = u.trim().split(/\s+/);
122
- return a.length < 2 ? c : h(a[1], c / 2) * 2;
123
- }
124
- /**
125
- * Gets stored row spacing from the first spacer element's height style
126
- */
127
- _getStoredRowSpacing() {
128
- if (!this.currentNode)
129
- return b;
130
- const t = this.currentNode.querySelector(".spacer"), e = d(t, "height");
131
- return h(e, b);
132
- }
133
- /**
134
- * Handles column spacing changes.
135
- * For vertical layout: applies horizontal padding to all cells inside attribute rows.
136
- * For horizontal layout: applies padding to parent of product card wrappers.
137
- */
138
- _onColumnSpacingChange(t) {
139
- if (!this.currentNode)
140
- return;
141
- this._storeColumnSpacing(t);
142
- const e = m(this.currentNode), n = this.api.getDocumentModifier(), a = `0 ${t / 2}px`;
143
- e === "vertical" ? Array.from(
144
- this.currentNode.querySelectorAll(".attribute-cell")
145
- ).forEach((r) => {
146
- n.modifyHtml(r).setStyle("padding", a);
147
- }) : Array.from(
148
- this.currentNode.querySelectorAll(".product-card-wrapper")
149
- ).forEach((r) => {
150
- "parent" in r && r.parent() && n.modifyHtml(r.parent()).setStyle("padding", a);
151
- }), n.apply(new p(`Update column spacing to ${t}px`));
152
- }
153
- /**
154
- * Handles row spacing changes
155
- * Applies height to all spacer elements between product rows
156
- */
157
- _onRowSpacingChange(t) {
158
- if (!this.currentNode)
159
- return;
160
- this._storeRowSpacing(t);
161
- const e = Array.from(
162
- this.currentNode.querySelectorAll(".spacer")
163
- );
164
- if (!e.length)
165
- return;
166
- const n = this.api.getDocumentModifier(), u = `${t}px`;
167
- e.forEach((a) => {
168
- n.modifyHtml(a).setStyle("height", u);
169
- }), n.apply(new p(`Update row spacing to ${t}px`));
170
- }
171
- /**
172
- * Stores column spacing value in block data attribute
173
- */
174
- _storeColumnSpacing(t) {
175
- if (!this.currentNode)
176
- return;
177
- const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
178
- e && this.api.getDocumentModifier().modifyHtml(e).setAttribute(A.COLUMN_SPACING, t.toString()).apply(new p("Store column spacing"));
179
- }
180
- /**
181
- * Stores row spacing value in block data attribute
182
- */
183
- _storeRowSpacing(t) {
184
- if (!this.currentNode)
185
- return;
186
- const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
187
- e && this.api.getDocumentModifier().modifyHtml(e).setAttribute(A.ROW_SPACING, t.toString()).apply(new p("Store row spacing"));
188
- }
189
- _listenToFormUpdates() {
190
- this.api.onValueChanged(s.COLUMN_SPACING, (t) => {
191
- const e = parseInt(t);
192
- Number.isNaN(e) || this._debouncedOnColumnSpacingChange(e);
193
- }), this.api.onValueChanged(s.ROW_SPACING, (t) => {
194
- const e = parseInt(t);
195
- Number.isNaN(e) || this._debouncedOnRowSpacingChange(e);
196
- });
197
- }
198
- /**
199
- * Subscribe to store orientation changes
200
- * Updates column spacing visibility when layout changes via the layout control
201
- */
202
- _subscribeToOrientationChanges() {
203
- this.unsubscribeOrientation && this.unsubscribeOrientation(), this.unsubscribeOrientation = this.store.$subscribe((t) => {
204
- t.type === "patch object" && this._updateColumnSpacingVisibility();
205
- });
206
- }
207
- }
208
- export {
209
- w as SPACING_CONTROL_ID,
210
- q as SpacingControl
211
- };