@useinsider/guido 2.1.0-beta.e2d48fe → 2.1.0-beta.e4c3fa1

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 (183) hide show
  1. package/README.md +36 -0
  2. package/dist/@types/config/schemas.js +70 -65
  3. package/dist/components/Guido.vue.js +1 -1
  4. package/dist/components/Guido.vue2.js +69 -58
  5. package/dist/components/organisms/base/Toaster.vue.js +4 -4
  6. package/dist/components/organisms/base/Toaster.vue2.js +12 -9
  7. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +5 -5
  8. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
  9. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +15 -14
  10. package/dist/components/organisms/header/HeaderWrapper.vue.js +9 -9
  11. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue.js +1 -1
  12. package/dist/components/organisms/unsubscribe/UnsubscribePageSelection.vue2.js +19 -19
  13. package/dist/composables/useActionsApi.js +15 -13
  14. package/dist/composables/useBlocksConfig.js +26 -16
  15. package/dist/composables/useHtmlValidator.js +114 -104
  16. package/dist/composables/useRecommendation.js +54 -21
  17. package/dist/composables/useStripo.js +25 -23
  18. package/dist/composables/useVersionHistoryApi.js +1 -1
  19. package/dist/config/compiler/recommendationCompilerRules.js +45 -39
  20. package/dist/config/compiler/utils/recommendationCompilerUtils.js +121 -0
  21. package/dist/config/i18n/en/index.js +11 -0
  22. package/dist/config/i18n/en/labels.json.js +7 -0
  23. package/dist/config/i18n/en/toasters.json.js +56 -0
  24. package/dist/config/i18n/en/tooltips.json.js +82 -0
  25. package/dist/config/i18n/index.js +7 -0
  26. package/dist/config/migrator/itemsBlockMigrator.js +127 -122
  27. package/dist/config/migrator/recommendationMigrator.js +2 -2
  28. package/dist/enums/defaults.js +8 -4
  29. package/dist/enums/extensions/recommendationBlock.js +1 -1
  30. package/dist/enums/recommendation.js +16 -15
  31. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +29 -29
  32. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +29 -29
  33. package/dist/extensions/Blocks/Items/controls/price/formattedPrice.js +31 -29
  34. package/dist/extensions/Blocks/Items/controls/price/hideDiscount.js +0 -1
  35. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +29 -27
  36. package/dist/extensions/Blocks/Items/settingsPanel.js +10 -15
  37. package/dist/extensions/Blocks/Recommendation/block.js +133 -9
  38. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  39. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  40. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +69 -0
  41. package/dist/extensions/Blocks/Recommendation/constants/layout.js +24 -0
  42. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +22 -0
  43. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  44. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  45. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  46. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  47. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +102 -0
  48. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +102 -0
  49. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +207 -0
  50. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +52 -0
  51. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +321 -0
  52. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +70 -0
  53. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +168 -0
  54. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +67 -0
  55. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +361 -0
  56. package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +21 -0
  57. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  58. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +108 -0
  59. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  60. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  61. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextAfterControl.js → omnibusDiscount/textAfter.js} +16 -14
  62. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextBeforeControl.js → omnibusDiscount/textBefore.js} +16 -14
  63. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  64. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextAfterControl.js → omnibusPrice/textAfter.js} +16 -14
  65. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextBeforeControl.js → omnibusPrice/textBefore.js} +14 -12
  66. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  67. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +345 -0
  68. package/dist/extensions/Blocks/Recommendation/extension.js +40 -17
  69. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +19 -3
  70. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  71. package/dist/extensions/Blocks/Recommendation/services/configService.js +240 -0
  72. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +21 -10
  73. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +297 -209
  74. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +228 -0
  75. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  76. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +66 -0
  77. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  78. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +169 -0
  79. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  80. package/dist/extensions/Blocks/Recommendation/templates/utils.js +134 -0
  81. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  82. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  83. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +26 -15
  84. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  85. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  86. package/dist/extensions/Blocks/Unsubscribe/block.js +29 -29
  87. package/dist/extensions/Blocks/Unsubscribe/control.js +12 -9
  88. package/dist/extensions/Blocks/Unsubscribe/elements/preview.js +13 -11
  89. package/dist/extensions/Blocks/Unsubscribe/styles.css.js +31 -1
  90. package/dist/extensions/Blocks/controlFactories.js +125 -93
  91. package/dist/extensions/ModulesTabIcons/extension.js +17 -0
  92. package/dist/guido.css +1 -1
  93. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +317 -193
  94. package/dist/services/recommendationApi.js +11 -8
  95. package/dist/services/stripoApi.js +20 -17
  96. package/dist/services/templateLibraryApi.js +16 -13
  97. package/dist/src/@types/config/schemas.d.ts +8 -0
  98. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  99. package/dist/src/composables/useConfig.d.ts +4 -0
  100. package/dist/src/composables/useRecommendation.d.ts +1 -0
  101. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +17 -0
  102. package/dist/src/config/i18n/en/index.d.ts +1 -0
  103. package/dist/src/config/i18n/index.d.ts +16 -0
  104. package/dist/src/enums/defaults.d.ts +4 -0
  105. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +67 -0
  106. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  107. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +0 -24
  108. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +55 -0
  109. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  110. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +45 -0
  111. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +40 -0
  112. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  113. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  114. package/dist/src/extensions/Blocks/Recommendation/{cardCompositionControl.d.ts → controls/cardComposition/index.d.ts} +23 -3
  115. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  116. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +21 -589
  117. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  118. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  119. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +52 -0
  120. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  121. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +102 -0
  122. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  123. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +60 -0
  124. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  125. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +231 -0
  126. package/dist/src/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.d.ts +29 -0
  127. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  128. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +34 -0
  129. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  130. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  131. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  132. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  133. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  134. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  135. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  136. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  137. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +115 -0
  138. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  139. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  140. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  141. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +139 -468
  142. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  143. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → grid/migration.d.ts} +11 -4
  144. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  145. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +41 -0
  146. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  147. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  148. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  149. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +66 -0
  150. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  151. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +174 -0
  152. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  153. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  154. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  155. package/dist/src/extensions/Blocks/Unsubscribe/control.d.ts +1 -0
  156. package/dist/src/extensions/ModulesTabIcons/extension.d.ts +2 -0
  157. package/dist/src/stores/config.d.ts +36 -0
  158. package/dist/static/styles/components/notification.css.js +19 -0
  159. package/dist/static/styles/components/tools.css.js +6 -2
  160. package/dist/static/styles/components/version-history.css.js +10 -2
  161. package/dist/static/styles/components/wide-panel.css.js +18 -2
  162. package/dist/static/styles/customEditorStyle.css.js +35 -11
  163. package/dist/static/styles/variables.css.js +2 -0
  164. package/dist/static/templates/empty/index.html.js +74 -0
  165. package/dist/static/templates/empty/style.css.js +779 -0
  166. package/dist/stores/unsubscribe.js +37 -34
  167. package/dist/utils/pairProductVariables.js +57 -56
  168. package/dist/utils/templatePreparation.js +15 -14
  169. package/package.json +1 -1
  170. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -187
  171. package/dist/extensions/Blocks/Recommendation/constants.js +0 -13
  172. package/dist/extensions/Blocks/Recommendation/control.js +0 -336
  173. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  174. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  175. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  176. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  177. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -181
  178. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -189
  179. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -209
  180. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -38
  181. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  182. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  183. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -52
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Spacing Control
3
+ *
4
+ * Manages spacing between product cards:
5
+ * - Column spacing: horizontal gap between cards in the same row
6
+ * - Row spacing: vertical gap between different rows
7
+ *
8
+ * Desktop and mobile have independent spacing controls that toggle
9
+ * visibility based on Stripo's editor preview mode (desktop/mobile).
10
+ *
11
+ * Configuration is stored via node config (persists with template).
12
+ * Actual spacing is applied to DOM elements via inline styles.
13
+ */
14
+ import { type ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
15
+ import { CommonControl } from '../../../common-control';
16
+ export declare const SPACING_CONTROL_ID = "recommendation-spacing-control";
17
+ /**
18
+ * Control for managing spacing between product cards
19
+ * - Column spacing: horizontal gap between cards in the same row
20
+ * - Row spacing: vertical gap between different rows
21
+ * - Separate controls for desktop and mobile with device-mode toggling
22
+ */
23
+ export declare class SpacingControl extends CommonControl {
24
+ private store;
25
+ private unsubscribeOrientation;
26
+ getId(): string;
27
+ getTemplate(): string;
28
+ onRender(): void;
29
+ onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
30
+ onDestroy(): void;
31
+ /**
32
+ * Checks if the editor is currently in mobile preview mode
33
+ * using Stripo's EditorStatePropertyType API.
34
+ */
35
+ _isMobileMode(): boolean;
36
+ /**
37
+ * Updates spacing control visibility based on layout orientation, editor mode,
38
+ * and products-per-row count.
39
+ * - List layout: hide column spacing (products are full-width)
40
+ * - Desktop mode: show desktop spacing, hide mobile spacing
41
+ * - Mobile mode: show mobile spacing, hide desktop spacing
42
+ * - 1 product per row: hide column spacing (no gap between single column)
43
+ */
44
+ _updateSpacingVisibility(): void;
45
+ /**
46
+ * Reads spacing values from node config first, falls back to DOM styles.
47
+ * DOM fallback is only used for legacy templates that lack node config.
48
+ */
49
+ _setFormValues(): void;
50
+ /**
51
+ * Gets stored column spacing from the first attribute row cell's padding.
52
+ * Scoped to the desktop container for accurate readings.
53
+ * For grid layout: cells inside .recommendation-attribute-row have padding applied.
54
+ * For list layout: the parent of .product-card-wrapper has the padding.
55
+ * The padding is applied as "0 {halfSpacing}px", so we extract and multiply by 2.
56
+ */
57
+ _getStoredColumnSpacing(): number;
58
+ /**
59
+ * Gets stored row spacing from the first spacer element's height style
60
+ * Scoped to the desktop container for accurate readings.
61
+ */
62
+ _getStoredRowSpacing(): number;
63
+ /**
64
+ * Handles column spacing changes for desktop.
65
+ * Applies horizontal padding only to the desktop container elements.
66
+ */
67
+ _onColumnSpacingChange(spacing: number): void;
68
+ /**
69
+ * Handles row spacing changes for desktop.
70
+ * Applies height only to spacer elements in the desktop container.
71
+ */
72
+ _onRowSpacingChange(spacing: number): void;
73
+ /**
74
+ * Handles column spacing changes for mobile.
75
+ * Applies horizontal padding only to the mobile container elements.
76
+ */
77
+ _onMobileColumnSpacingChange(spacing: number): void;
78
+ /**
79
+ * Handles row spacing changes for mobile.
80
+ * Applies height only to spacer elements in the mobile container.
81
+ */
82
+ _onMobileRowSpacingChange(spacing: number): void;
83
+ /**
84
+ * Stores a spacing value as a data attribute on the block root element
85
+ */
86
+ _storeDataAttribute(attr: string, spacing: number): void;
87
+ _listenToFormUpdates(): void;
88
+ /**
89
+ * Debounced version of _onColumnSpacingChange
90
+ * Prevents excessive DOM updates when user rapidly adjusts the counter
91
+ */
92
+ _debouncedOnColumnSpacingChange: import("@vueuse/shared").PromisifyFn<(spacing: number) => void>;
93
+ /**
94
+ * Debounced version of _onRowSpacingChange
95
+ */
96
+ _debouncedOnRowSpacingChange: import("@vueuse/shared").PromisifyFn<(spacing: number) => void>;
97
+ /**
98
+ * Debounced version of _onMobileColumnSpacingChange
99
+ */
100
+ _debouncedOnMobileColumnSpacingChange: import("@vueuse/shared").PromisifyFn<(spacing: number) => void>;
101
+ /**
102
+ * Debounced version of _onMobileRowSpacingChange
103
+ */
104
+ _debouncedOnMobileRowSpacingChange: import("@vueuse/shared").PromisifyFn<(spacing: number) => void>;
105
+ /**
106
+ * Subscribe to store orientation changes
107
+ * Updates spacing visibility when layout changes via the layout control
108
+ */
109
+ _subscribeToOrientationChanges(): void;
110
+ /**
111
+ * Subscribes to editor preview mode changes via Stripo API.
112
+ * Toggles which spacing controls (desktop/mobile) are visible.
113
+ */
114
+ _subscribeToEditorModeChanges(): void;
115
+ }
@@ -1,2 +1,11 @@
1
+ /**
2
+ * Recommendation Block Extension
3
+ *
4
+ * This extension provides a product recommendation block for email templates.
5
+ * Controls are organized by element type in the ./controls directory.
6
+ */
7
+ /**
8
+ * Build and export the Recommendation extension
9
+ */
1
10
  declare const _default: import("@stripoinc/ui-editor-extensions").Extension;
2
11
  export default _default;
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Recommendation Config Service
3
+ *
4
+ * Service for managing Recommendation block configuration via Stripo's node config API.
5
+ * This replaces the Pinia store for persistent configuration data.
6
+ *
7
+ * Key features:
8
+ * - Reads/writes config to/from node using `getNodeConfig`/`setNodeConfig`
9
+ * - Configuration persists with the template HTML
10
+ * - Each block has independent configuration (no global state)
11
+ * - Integrates with Stripo's undo/redo via `ModificationDescription`
12
+ *
13
+ * Usage pattern similar to legacy `blockConfigurationService`:
14
+ * @example
15
+ * // Read config
16
+ * const config = RecommendationConfigService.getConfig(node);
17
+ * // Update config
18
+ * RecommendationConfigService.updateConfig(api, node, { strategy: 'mostPopular' }, 'Changed algorithm');
19
+ * @see https://plugin.stripo.email/extensions/reference/blocks/Block
20
+ */
21
+ import type { RecommendationNodeConfig, PartialNodeConfig } from '../types/nodeConfig';
22
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
23
+ import { ModificationDescription } from '@stripoinc/ui-editor-extensions';
24
+ /**
25
+ * Stripo Extension API interface for document modifications
26
+ * Extracted to allow type-safe usage without importing full Stripo types
27
+ */
28
+ interface DocumentModifier {
29
+ modifyHtml: (node: ImmutableHtmlNode) => {
30
+ setNodeConfig: (config: Record<string, unknown>) => DocumentModifier;
31
+ setAttribute: (name: string, value: string) => DocumentModifier;
32
+ setStyle: (prop: string, value: string) => DocumentModifier;
33
+ setInnerHtml: (html: string) => DocumentModifier;
34
+ };
35
+ apply: (desc: ModificationDescription) => void;
36
+ }
37
+ interface DocumentModifierApi {
38
+ getDocumentModifier: () => DocumentModifier;
39
+ }
40
+ /**
41
+ * Service for managing Recommendation block configuration
42
+ *
43
+ * All methods are static for easy usage without instantiation.
44
+ * The service follows the same patterns as the legacy `blockConfigurationService`.
45
+ */
46
+ export declare class RecommendationConfigService {
47
+ /**
48
+ * Get configuration from a node, with defaults for missing values
49
+ *
50
+ * This is the primary way to read configuration from a block.
51
+ * Always returns a complete config object with defaults merged in.
52
+ * @example
53
+ * const config = RecommendationConfigService.getConfig(this.currentNode);
54
+ * console.log(config.strategy); // 'mostPopular'
55
+ * @param node - The immutable HTML node to read config from
56
+ * @returns Complete configuration with defaults for missing values
57
+ */
58
+ static getConfig(node: ImmutableHtmlNode | null | undefined): RecommendationNodeConfig;
59
+ /**
60
+ * Check if a node has valid configuration stored
61
+ *
62
+ * Used for migration detection - returns false for legacy templates
63
+ * that need their configuration migrated.
64
+ * @param node - The immutable HTML node to check
65
+ * @returns True if node has valid config with version number
66
+ */
67
+ static hasConfig(node: ImmutableHtmlNode | null | undefined): boolean;
68
+ /**
69
+ * Get the configuration version from a node
70
+ * @param node - The immutable HTML node to check
71
+ * @returns Config version number, or 0 if no config exists
72
+ */
73
+ static getConfigVersion(node: ImmutableHtmlNode | null | undefined): number;
74
+ /**
75
+ * Update specific configuration values
76
+ *
77
+ * Merges the updates with existing config and persists to node.
78
+ * This is the primary way to update configuration from controls.
79
+ * @example
80
+ * RecommendationConfigService.updateConfig(
81
+ * this.api,
82
+ * this.currentNode,
83
+ * { strategy: 'complementaryItems' },
84
+ * 'Changed recommendation algorithm'
85
+ * );
86
+ * @param api - Stripo extension API with document modifier
87
+ * @param node - The immutable HTML node to update
88
+ * @param updates - Partial config with values to update
89
+ * @param description - Human-readable description for undo/redo
90
+ * @returns The new complete configuration
91
+ */
92
+ static updateConfig(api: DocumentModifierApi, node: ImmutableHtmlNode, updates: PartialNodeConfig, description: string): RecommendationNodeConfig;
93
+ /**
94
+ * Initialize configuration for a new block
95
+ *
96
+ * Called when a block is first created (dropped into template).
97
+ * Can optionally merge in partial config from migration.
98
+ * @example
99
+ * // In Block.onCreated lifecycle
100
+ * RecommendationConfigService.initializeConfig(this.api, node);
101
+ * @param api - Stripo extension API with document modifier
102
+ * @param node - The immutable HTML node to initialize
103
+ * @param partialConfig - Optional partial config to merge with defaults
104
+ * @returns The initialized configuration
105
+ */
106
+ static initializeConfig(api: DocumentModifierApi, node: ImmutableHtmlNode, partialConfig?: PartialNodeConfig): RecommendationNodeConfig;
107
+ /**
108
+ * Save complete configuration to a node
109
+ *
110
+ * Low-level method - prefer `updateConfig` or `initializeConfig` in most cases.
111
+ * @param api - Stripo extension API with document modifier
112
+ * @param node - The immutable HTML node to save to
113
+ * @param config - Complete configuration to save
114
+ * @param description - Human-readable description for undo/redo
115
+ */
116
+ static saveConfig(api: DocumentModifierApi, node: ImmutableHtmlNode, config: RecommendationNodeConfig, description: string): void;
117
+ /**
118
+ * Migrate configuration from legacy data-attributes
119
+ *
120
+ * Reads existing data-attributes and creates a proper node config.
121
+ * Used when loading templates created before node config was implemented.
122
+ * @param api - Stripo extension API with document modifier
123
+ * @param node - The block node to migrate
124
+ * @returns The migrated configuration
125
+ */
126
+ static migrateFromDataAttributes(api: DocumentModifierApi, node: ImmutableHtmlNode): RecommendationNodeConfig;
127
+ /**
128
+ * Check if configuration needs migration
129
+ * @param node - The block node to check
130
+ * @returns True if migration is needed
131
+ */
132
+ static needsMigration(node: ImmutableHtmlNode | null | undefined): boolean;
133
+ /**
134
+ * Clone default config to avoid mutations
135
+ */
136
+ private static cloneDefaults;
137
+ /**
138
+ * Merge partial config with defaults
139
+ *
140
+ * Deep merges nested objects like currency, omnibus settings.
141
+ */
142
+ private static mergeWithDefaults;
143
+ /**
144
+ * Deep merge for nested objects
145
+ *
146
+ * Recursively merges source into target, preserving existing values
147
+ * that aren't explicitly overwritten.
148
+ */
149
+ private static deepMerge;
150
+ }
151
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Recommendation Extension Services
3
+ *
4
+ * This module re-exports all services for the Recommendation extension.
5
+ */
6
+ export { RecommendationConfigService } from './configService';