@useinsider/guido 2.1.0-beta.786853a → 2.1.0-beta.7d0f92a

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 (133) hide show
  1. package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +15 -14
  2. package/dist/composables/useHtmlValidator.js +106 -84
  3. package/dist/composables/useRecommendation.js +54 -21
  4. package/dist/config/compiler/recommendationCompilerRules.js +45 -39
  5. package/dist/config/compiler/utils/recommendationCompilerUtils.js +116 -0
  6. package/dist/config/migrator/recommendationMigrator.js +2 -2
  7. package/dist/enums/extensions/recommendationBlock.js +1 -1
  8. package/dist/enums/recommendation.js +16 -15
  9. package/dist/extensions/Blocks/Recommendation/block.js +130 -9
  10. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  11. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  12. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +65 -0
  13. package/dist/extensions/Blocks/Recommendation/constants/layout.js +20 -0
  14. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +19 -0
  15. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  16. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  17. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  18. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  19. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +92 -0
  20. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +102 -0
  21. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +209 -0
  22. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +52 -0
  23. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +217 -0
  24. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +70 -0
  25. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +110 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +67 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +286 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +108 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextAfterControl.js → omnibusDiscount/textAfter.js} +16 -14
  33. package/dist/extensions/Blocks/Recommendation/controls/{omnibusDiscountTextBeforeControl.js → omnibusDiscount/textBefore.js} +16 -14
  34. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextAfterControl.js → omnibusPrice/textAfter.js} +16 -14
  36. package/dist/extensions/Blocks/Recommendation/controls/{omnibusPriceTextBeforeControl.js → omnibusPrice/textBefore.js} +14 -12
  37. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  38. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +222 -0
  39. package/dist/extensions/Blocks/Recommendation/extension.js +40 -17
  40. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +19 -3
  41. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  42. package/dist/extensions/Blocks/Recommendation/services/configService.js +240 -0
  43. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +21 -10
  44. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +230 -193
  45. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +233 -0
  46. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  47. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +69 -0
  48. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  49. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +174 -0
  50. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  51. package/dist/extensions/Blocks/Recommendation/templates/utils.js +122 -0
  52. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  53. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  54. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +26 -15
  55. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  56. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  57. package/dist/extensions/Blocks/controlFactories.js +125 -93
  58. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +223 -169
  59. package/dist/services/recommendationApi.js +10 -9
  60. package/dist/services/stripoApi.js +17 -20
  61. package/dist/services/templateLibraryApi.js +16 -13
  62. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  63. package/dist/src/composables/useRecommendation.d.ts +1 -0
  64. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +17 -0
  65. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +67 -0
  66. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  67. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +0 -24
  68. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +49 -0
  69. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  70. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +35 -0
  71. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +31 -0
  72. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  73. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  74. package/dist/src/extensions/Blocks/Recommendation/{cardCompositionControl.d.ts → controls/cardComposition/index.d.ts} +23 -3
  75. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  76. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +21 -589
  77. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  78. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  79. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +52 -0
  80. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +68 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +42 -0
  84. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  85. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +214 -0
  86. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  87. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +34 -0
  88. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  89. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  90. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  91. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  92. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  93. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  94. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  95. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  96. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +83 -0
  97. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  98. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  99. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  100. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +131 -468
  101. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  102. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → grid/migration.d.ts} +11 -4
  103. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  104. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +39 -0
  105. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  106. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  107. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  108. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +57 -0
  109. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  110. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +160 -0
  111. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  112. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  113. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  114. package/dist/static/styles/customEditorStyle.css.js +25 -2
  115. package/dist/utils/pairProductVariables.js +57 -56
  116. package/dist/utils/templatePreparation.js +15 -14
  117. package/package.json +1 -1
  118. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -187
  119. package/dist/extensions/Blocks/Recommendation/constants.js +0 -13
  120. package/dist/extensions/Blocks/Recommendation/control.js +0 -336
  121. package/dist/extensions/Blocks/Recommendation/controls/cardBackgroundColorControl.js +0 -68
  122. package/dist/extensions/Blocks/Recommendation/controls/index.js +0 -245
  123. package/dist/extensions/Blocks/Recommendation/controls/nameTextTrimControl.js +0 -74
  124. package/dist/extensions/Blocks/Recommendation/controls/spacingControl.js +0 -188
  125. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -181
  126. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -189
  127. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -209
  128. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -38
  129. package/dist/src/extensions/Blocks/Recommendation/controls/nameTextTrimControl.d.ts +0 -16
  130. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  131. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -52
  132. package/dist/static/templates/empty/index.html.js +0 -74
  133. package/dist/static/templates/empty/style.css.js +0 -779
@@ -1,548 +1,211 @@
1
1
  import type { Orientation, Languages, Currency, NumericSeparator, FiltersResponse, Filter, RecommendationProduct } from '@@/Types/recommendation';
2
- interface StoreState {
3
- recommendationCampaignUrls: Record<string, string>;
4
- recommendationConfigs: {
5
- cardsInRow: number;
6
- currencySettings: {
7
- name: string;
8
- value: string;
9
- symbol: string;
10
- alignment: string;
11
- decimalCount: string;
12
- decimalSeparator: NumericSeparator;
13
- thousandSeparator: NumericSeparator;
14
- };
15
- filters: Filter[];
16
- id: number;
17
- language: string;
18
- orientation: Orientation;
19
- productIds: string[];
20
- recommendedProducts: [];
21
- sendProductRequestFlag: false;
22
- shuffleProducts: false;
23
- strategy: string;
24
- textTrimming: boolean;
25
- unresponsive: boolean;
26
- size: string;
2
+ interface PerBlockConfigs {
3
+ cardsInRow: number;
4
+ currencySettings: {
5
+ name: string;
6
+ value: string;
7
+ symbol: string;
8
+ alignment: string;
9
+ decimalCount: string;
10
+ decimalSeparator: NumericSeparator;
11
+ thousandSeparator: NumericSeparator;
27
12
  };
13
+ filters: Filter[];
14
+ id: number;
15
+ language: string;
16
+ orientation: Orientation;
17
+ productIds: string[];
18
+ recommendedProducts: [];
19
+ sendProductRequestFlag: boolean;
20
+ shuffleProducts: boolean;
21
+ strategy: string;
22
+ textTrimming: boolean;
23
+ unresponsive: boolean;
24
+ size: string;
25
+ }
26
+ interface PerBlockState {
27
+ recommendationConfigs: PerBlockConfigs;
28
28
  recommendationProducts: RecommendationProduct[];
29
+ filterStatus: boolean;
30
+ filterSelectionDrawerStatus: boolean;
31
+ filterGroup: number;
32
+ }
33
+ interface StoreState {
34
+ recommendationCampaignUrls: Record<string, string>;
29
35
  activePredictiveAlgorithms: number[];
30
36
  languages: Languages;
31
37
  currencyList: Currency[];
32
- filterStatus: boolean;
33
- filterSelectionDrawerStatus: boolean;
34
38
  filterList: FiltersResponse;
35
- filterGroup: number;
39
+ blockStates: Record<number, PerBlockState>;
40
+ currentRecommendationId: number | null;
41
+ configVersion: number;
36
42
  }
37
43
  export declare const useRecommendationExtensionStore: import("pinia").StoreDefinition<"guidoRecommendationExtension", StoreState, {
38
- hasFilters: (state: {
44
+ /**
45
+ * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationConfigs
46
+ * This allows all existing code that reads `store.recommendationConfigs` to work unchanged.
47
+ */
48
+ recommendationConfigs(state: {
39
49
  recommendationCampaignUrls: Record<string, string>;
40
- recommendationConfigs: {
41
- cardsInRow: number;
42
- currencySettings: {
43
- name: string;
44
- value: string;
45
- symbol: string;
46
- alignment: string;
47
- decimalCount: string;
48
- decimalSeparator: NumericSeparator;
49
- thousandSeparator: NumericSeparator;
50
- };
51
- filters: {
52
- type: string;
53
- attribute: string;
54
- operatorReplace: string;
55
- operator: string;
56
- innerGroupOperator: string;
57
- outerGroupOperator: string;
58
- value: string;
59
- filterGroup: number;
60
- filterNumber: number;
61
- isValid: boolean;
62
- }[];
63
- id: number;
64
- language: string;
65
- orientation: Orientation;
66
- productIds: string[];
67
- recommendedProducts: [];
68
- sendProductRequestFlag: false;
69
- shuffleProducts: false;
70
- strategy: string;
71
- textTrimming: boolean;
72
- unresponsive: boolean;
73
- size: string;
74
- };
75
- recommendationProducts: {
76
- image_url: string;
77
- name: string;
78
- item_id: string;
79
- url: string;
80
- in_stock: number;
81
- price: {
82
- [key: string]: number;
83
- };
84
- locale: string;
85
- product_attributes: {
86
- [key: string]: string;
87
- };
88
- category: string[];
89
- discount: {
90
- [key: string]: number;
91
- };
92
- original_price: {
93
- [key: string]: number;
94
- };
95
- }[];
96
50
  activePredictiveAlgorithms: number[];
97
51
  languages: Languages;
98
52
  currencyList: {
99
53
  text: string;
100
54
  value: string;
101
55
  }[];
102
- filterStatus: boolean;
103
- filterSelectionDrawerStatus: boolean;
104
56
  filterList: FiltersResponse;
105
- filterGroup: number;
106
- } & import("pinia").PiniaCustomStateProperties<StoreState>) => boolean;
107
- getFilterGroupCount: (state: {
57
+ blockStates: Record<number, PerBlockState>;
58
+ currentRecommendationId: number | null;
59
+ configVersion: number;
60
+ } & import("pinia").PiniaCustomStateProperties<StoreState>): PerBlockConfigs;
61
+ /**
62
+ * Proxy getter: delegates to blockStates[currentRecommendationId].recommendationProducts
63
+ */
64
+ recommendationProducts(state: {
108
65
  recommendationCampaignUrls: Record<string, string>;
109
- recommendationConfigs: {
110
- cardsInRow: number;
111
- currencySettings: {
112
- name: string;
113
- value: string;
114
- symbol: string;
115
- alignment: string;
116
- decimalCount: string;
117
- decimalSeparator: NumericSeparator;
118
- thousandSeparator: NumericSeparator;
119
- };
120
- filters: {
121
- type: string;
122
- attribute: string;
123
- operatorReplace: string;
124
- operator: string;
125
- innerGroupOperator: string;
126
- outerGroupOperator: string;
127
- value: string;
128
- filterGroup: number;
129
- filterNumber: number;
130
- isValid: boolean;
131
- }[];
132
- id: number;
133
- language: string;
134
- orientation: Orientation;
135
- productIds: string[];
136
- recommendedProducts: [];
137
- sendProductRequestFlag: false;
138
- shuffleProducts: false;
139
- strategy: string;
140
- textTrimming: boolean;
141
- unresponsive: boolean;
142
- size: string;
143
- };
144
- recommendationProducts: {
145
- image_url: string;
146
- name: string;
147
- item_id: string;
148
- url: string;
149
- in_stock: number;
150
- price: {
151
- [key: string]: number;
152
- };
153
- locale: string;
154
- product_attributes: {
155
- [key: string]: string;
156
- };
157
- category: string[];
158
- discount: {
159
- [key: string]: number;
160
- };
161
- original_price: {
162
- [key: string]: number;
163
- };
164
- }[];
165
66
  activePredictiveAlgorithms: number[];
166
67
  languages: Languages;
167
68
  currencyList: {
168
69
  text: string;
169
70
  value: string;
170
71
  }[];
171
- filterStatus: boolean;
172
- filterSelectionDrawerStatus: boolean;
173
72
  filterList: FiltersResponse;
174
- filterGroup: number;
175
- } & import("pinia").PiniaCustomStateProperties<StoreState>) => number;
176
- getActivePredictiveAlgorithms: (state: {
73
+ blockStates: Record<number, PerBlockState>;
74
+ currentRecommendationId: number | null;
75
+ configVersion: number;
76
+ } & import("pinia").PiniaCustomStateProperties<StoreState>): RecommendationProduct[];
77
+ /**
78
+ * Proxy getter: delegates to blockStates[currentRecommendationId].filterSelectionDrawerStatus
79
+ */
80
+ filterSelectionDrawerStatus(state: {
177
81
  recommendationCampaignUrls: Record<string, string>;
178
- recommendationConfigs: {
179
- cardsInRow: number;
180
- currencySettings: {
181
- name: string;
182
- value: string;
183
- symbol: string;
184
- alignment: string;
185
- decimalCount: string;
186
- decimalSeparator: NumericSeparator;
187
- thousandSeparator: NumericSeparator;
188
- };
189
- filters: {
190
- type: string;
191
- attribute: string;
192
- operatorReplace: string;
193
- operator: string;
194
- innerGroupOperator: string;
195
- outerGroupOperator: string;
196
- value: string;
197
- filterGroup: number;
198
- filterNumber: number;
199
- isValid: boolean;
200
- }[];
201
- id: number;
202
- language: string;
203
- orientation: Orientation;
204
- productIds: string[];
205
- recommendedProducts: [];
206
- sendProductRequestFlag: false;
207
- shuffleProducts: false;
208
- strategy: string;
209
- textTrimming: boolean;
210
- unresponsive: boolean;
211
- size: string;
212
- };
213
- recommendationProducts: {
214
- image_url: string;
215
- name: string;
216
- item_id: string;
217
- url: string;
218
- in_stock: number;
219
- price: {
220
- [key: string]: number;
221
- };
222
- locale: string;
223
- product_attributes: {
224
- [key: string]: string;
225
- };
226
- category: string[];
227
- discount: {
228
- [key: string]: number;
229
- };
230
- original_price: {
231
- [key: string]: number;
232
- };
233
- }[];
234
82
  activePredictiveAlgorithms: number[];
235
83
  languages: Languages;
236
84
  currencyList: {
237
85
  text: string;
238
86
  value: string;
239
87
  }[];
240
- filterStatus: boolean;
241
- filterSelectionDrawerStatus: boolean;
242
88
  filterList: FiltersResponse;
243
- filterGroup: number;
244
- } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
245
- text: string;
246
- value: string;
247
- }[];
248
- getLanguages: (state: {
89
+ blockStates: Record<number, PerBlockState>;
90
+ currentRecommendationId: number | null;
91
+ configVersion: number;
92
+ } & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
93
+ /**
94
+ * Proxy getter: delegates to blockStates[currentRecommendationId].filterStatus
95
+ */
96
+ filterStatus(state: {
249
97
  recommendationCampaignUrls: Record<string, string>;
250
- recommendationConfigs: {
251
- cardsInRow: number;
252
- currencySettings: {
253
- name: string;
254
- value: string;
255
- symbol: string;
256
- alignment: string;
257
- decimalCount: string;
258
- decimalSeparator: NumericSeparator;
259
- thousandSeparator: NumericSeparator;
260
- };
261
- filters: {
262
- type: string;
263
- attribute: string;
264
- operatorReplace: string;
265
- operator: string;
266
- innerGroupOperator: string;
267
- outerGroupOperator: string;
268
- value: string;
269
- filterGroup: number;
270
- filterNumber: number;
271
- isValid: boolean;
272
- }[];
273
- id: number;
274
- language: string;
275
- orientation: Orientation;
276
- productIds: string[];
277
- recommendedProducts: [];
278
- sendProductRequestFlag: false;
279
- shuffleProducts: false;
280
- strategy: string;
281
- textTrimming: boolean;
282
- unresponsive: boolean;
283
- size: string;
284
- };
285
- recommendationProducts: {
286
- image_url: string;
287
- name: string;
288
- item_id: string;
289
- url: string;
290
- in_stock: number;
291
- price: {
292
- [key: string]: number;
293
- };
294
- locale: string;
295
- product_attributes: {
296
- [key: string]: string;
297
- };
298
- category: string[];
299
- discount: {
300
- [key: string]: number;
301
- };
302
- original_price: {
303
- [key: string]: number;
304
- };
305
- }[];
306
98
  activePredictiveAlgorithms: number[];
307
99
  languages: Languages;
308
100
  currencyList: {
309
101
  text: string;
310
102
  value: string;
311
103
  }[];
312
- filterStatus: boolean;
313
- filterSelectionDrawerStatus: boolean;
314
104
  filterList: FiltersResponse;
315
- filterGroup: number;
316
- } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
317
- text: string;
318
- value: string;
319
- }[];
320
- getCurrencySymbolList: (state: {
105
+ blockStates: Record<number, PerBlockState>;
106
+ currentRecommendationId: number | null;
107
+ configVersion: number;
108
+ } & import("pinia").PiniaCustomStateProperties<StoreState>): boolean;
109
+ /**
110
+ * Proxy getter: delegates to blockStates[currentRecommendationId].filterGroup
111
+ */
112
+ filterGroup(state: {
321
113
  recommendationCampaignUrls: Record<string, string>;
322
- recommendationConfigs: {
323
- cardsInRow: number;
324
- currencySettings: {
325
- name: string;
326
- value: string;
327
- symbol: string;
328
- alignment: string;
329
- decimalCount: string;
330
- decimalSeparator: NumericSeparator;
331
- thousandSeparator: NumericSeparator;
332
- };
333
- filters: {
334
- type: string;
335
- attribute: string;
336
- operatorReplace: string;
337
- operator: string;
338
- innerGroupOperator: string;
339
- outerGroupOperator: string;
340
- value: string;
341
- filterGroup: number;
342
- filterNumber: number;
343
- isValid: boolean;
344
- }[];
345
- id: number;
346
- language: string;
347
- orientation: Orientation;
348
- productIds: string[];
349
- recommendedProducts: [];
350
- sendProductRequestFlag: false;
351
- shuffleProducts: false;
352
- strategy: string;
353
- textTrimming: boolean;
354
- unresponsive: boolean;
355
- size: string;
356
- };
357
- recommendationProducts: {
358
- image_url: string;
359
- name: string;
360
- item_id: string;
361
- url: string;
362
- in_stock: number;
363
- price: {
364
- [key: string]: number;
365
- };
366
- locale: string;
367
- product_attributes: {
368
- [key: string]: string;
369
- };
370
- category: string[];
371
- discount: {
372
- [key: string]: number;
373
- };
374
- original_price: {
375
- [key: string]: number;
376
- };
114
+ activePredictiveAlgorithms: number[];
115
+ languages: Languages;
116
+ currencyList: {
117
+ text: string;
118
+ value: string;
377
119
  }[];
120
+ filterList: FiltersResponse;
121
+ blockStates: Record<number, PerBlockState>;
122
+ currentRecommendationId: number | null;
123
+ configVersion: number;
124
+ } & import("pinia").PiniaCustomStateProperties<StoreState>): number;
125
+ hasFilters(): boolean;
126
+ getFilterGroupCount(): number;
127
+ getActivePredictiveAlgorithms: (state: {
128
+ recommendationCampaignUrls: Record<string, string>;
378
129
  activePredictiveAlgorithms: number[];
379
130
  languages: Languages;
380
131
  currencyList: {
381
132
  text: string;
382
133
  value: string;
383
134
  }[];
384
- filterStatus: boolean;
385
- filterSelectionDrawerStatus: boolean;
386
135
  filterList: FiltersResponse;
387
- filterGroup: number;
136
+ blockStates: Record<number, PerBlockState>;
137
+ currentRecommendationId: number | null;
138
+ configVersion: number;
388
139
  } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
389
140
  text: string;
390
141
  value: string;
391
142
  }[];
392
- getFilterList: (state: {
143
+ getLanguages: (state: {
393
144
  recommendationCampaignUrls: Record<string, string>;
394
- recommendationConfigs: {
395
- cardsInRow: number;
396
- currencySettings: {
397
- name: string;
398
- value: string;
399
- symbol: string;
400
- alignment: string;
401
- decimalCount: string;
402
- decimalSeparator: NumericSeparator;
403
- thousandSeparator: NumericSeparator;
404
- };
405
- filters: {
406
- type: string;
407
- attribute: string;
408
- operatorReplace: string;
409
- operator: string;
410
- innerGroupOperator: string;
411
- outerGroupOperator: string;
412
- value: string;
413
- filterGroup: number;
414
- filterNumber: number;
415
- isValid: boolean;
416
- }[];
417
- id: number;
418
- language: string;
419
- orientation: Orientation;
420
- productIds: string[];
421
- recommendedProducts: [];
422
- sendProductRequestFlag: false;
423
- shuffleProducts: false;
424
- strategy: string;
425
- textTrimming: boolean;
426
- unresponsive: boolean;
427
- size: string;
428
- };
429
- recommendationProducts: {
430
- image_url: string;
431
- name: string;
432
- item_id: string;
433
- url: string;
434
- in_stock: number;
435
- price: {
436
- [key: string]: number;
437
- };
438
- locale: string;
439
- product_attributes: {
440
- [key: string]: string;
441
- };
442
- category: string[];
443
- discount: {
444
- [key: string]: number;
445
- };
446
- original_price: {
447
- [key: string]: number;
448
- };
449
- }[];
450
145
  activePredictiveAlgorithms: number[];
451
146
  languages: Languages;
452
147
  currencyList: {
453
148
  text: string;
454
149
  value: string;
455
150
  }[];
456
- filterStatus: boolean;
457
- filterSelectionDrawerStatus: boolean;
458
151
  filterList: FiltersResponse;
459
- filterGroup: number;
152
+ blockStates: Record<number, PerBlockState>;
153
+ currentRecommendationId: number | null;
154
+ configVersion: number;
460
155
  } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
461
156
  text: string;
462
157
  value: string;
463
- type: string;
464
158
  }[];
465
- getSelectedFilterGroup: (state: {
159
+ getCurrencySymbolList: (state: {
466
160
  recommendationCampaignUrls: Record<string, string>;
467
- recommendationConfigs: {
468
- cardsInRow: number;
469
- currencySettings: {
470
- name: string;
471
- value: string;
472
- symbol: string;
473
- alignment: string;
474
- decimalCount: string;
475
- decimalSeparator: NumericSeparator;
476
- thousandSeparator: NumericSeparator;
477
- };
478
- filters: {
479
- type: string;
480
- attribute: string;
481
- operatorReplace: string;
482
- operator: string;
483
- innerGroupOperator: string;
484
- outerGroupOperator: string;
485
- value: string;
486
- filterGroup: number;
487
- filterNumber: number;
488
- isValid: boolean;
489
- }[];
490
- id: number;
491
- language: string;
492
- orientation: Orientation;
493
- productIds: string[];
494
- recommendedProducts: [];
495
- sendProductRequestFlag: false;
496
- shuffleProducts: false;
497
- strategy: string;
498
- textTrimming: boolean;
499
- unresponsive: boolean;
500
- size: string;
501
- };
502
- recommendationProducts: {
503
- image_url: string;
504
- name: string;
505
- item_id: string;
506
- url: string;
507
- in_stock: number;
508
- price: {
509
- [key: string]: number;
510
- };
511
- locale: string;
512
- product_attributes: {
513
- [key: string]: string;
514
- };
515
- category: string[];
516
- discount: {
517
- [key: string]: number;
518
- };
519
- original_price: {
520
- [key: string]: number;
521
- };
522
- }[];
523
161
  activePredictiveAlgorithms: number[];
524
162
  languages: Languages;
525
163
  currencyList: {
526
164
  text: string;
527
165
  value: string;
528
166
  }[];
529
- filterStatus: boolean;
530
- filterSelectionDrawerStatus: boolean;
531
167
  filterList: FiltersResponse;
532
- filterGroup: number;
533
- } & import("pinia").PiniaCustomStateProperties<StoreState>) => (groupId: number) => {
534
- type: string;
535
- attribute: string;
536
- operatorReplace: string;
537
- operator: string;
538
- innerGroupOperator: string;
539
- outerGroupOperator: string;
168
+ blockStates: Record<number, PerBlockState>;
169
+ currentRecommendationId: number | null;
170
+ configVersion: number;
171
+ } & import("pinia").PiniaCustomStateProperties<StoreState>) => {
172
+ text: string;
173
+ value: string;
174
+ }[];
175
+ getFilterList(): {
176
+ text: string;
540
177
  value: string;
541
- filterGroup: number;
542
- filterNumber: number;
543
- isValid: boolean;
178
+ type: string;
544
179
  }[];
180
+ getSelectedFilterGroup(): (groupId: number) => Filter[];
545
181
  }, {
182
+ /**
183
+ * Sets the currently active block ID.
184
+ * Creates a new entry in blockStates if one doesn't exist.
185
+ */
186
+ setCurrentBlock(id: number): void;
187
+ /**
188
+ * Removes a block's state from the store.
189
+ * Resets currentRecommendationId if it was the deleted block.
190
+ */
191
+ removeBlockState(id: number): void;
192
+ /**
193
+ * Patches the current block's recommendationConfigs.
194
+ * Replaces `store.$patch({ recommendationConfigs: { ... } })` pattern.
195
+ */
196
+ patchCurrentBlockConfig(updates: Partial<PerBlockConfigs>, options?: {
197
+ triggerRefetch?: boolean;
198
+ }): void;
199
+ /**
200
+ * Opens the filter selection drawer for the current block.
201
+ * If no filters exist, initializes with a default empty filter
202
+ * so the user has a starting point for input.
203
+ */
204
+ openFilterDrawer(): void;
205
+ /**
206
+ * Closes the filter selection drawer for the current block
207
+ */
208
+ closeFilterDrawer(): void;
546
209
  fetchRecommendationCreateData(): Promise<void>;
547
210
  fetchRecommendationFilters(): Promise<void>;
548
211
  addFilterGroup(filterGroup: number): void;
@@ -0,0 +1,20 @@
1
+ import type { ElementRenderer } from '../utils';
2
+ /**
3
+ * Grid element renderer
4
+ * Each element returns a `<td>` containing a nested table structure:
5
+ * - Outer `<td>` has padding for column spacing
6
+ * - Inner `<table class="product-card-segment">` supports background color
7
+ * - Content is inside the inner table
8
+ *
9
+ * This structure allows:
10
+ * 1. Row-based alignment (all same attributes in one row)
11
+ * 2. Per-card background color via inner table
12
+ * 3. Column spacing via outer cell padding
13
+ */
14
+ export declare const DEFAULT_CELL_PADDING = "0 5px";
15
+ /**
16
+ * Class name for outer cells in attribute rows
17
+ * Used by controls to reliably select direct children for spacing adjustments
18
+ */
19
+ export declare const ATTRIBUTE_CELL_CLASS = "attribute-cell";
20
+ export declare const gridElementRenderer: ElementRenderer;