@useinsider/guido 3.17.0 → 3.18.0-beta.a0b94e0

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 (119) hide show
  1. package/README.md +6 -5
  2. package/dist/@types/config/schemas.js +7 -6
  3. package/dist/components/Guido.vue.js +10 -10
  4. package/dist/components/Guido.vue2.js +82 -76
  5. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +21 -0
  6. package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +106 -0
  7. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.js +17 -0
  8. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +57 -0
  9. package/dist/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue.js +19 -0
  10. package/dist/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue2.js +63 -0
  11. package/dist/composables/useCustomInterfaceAppearance.js +52 -38
  12. package/dist/composables/useModuleRepair.js +33 -0
  13. package/dist/composables/useRecommendation.js +41 -34
  14. package/dist/composables/useSave.js +30 -29
  15. package/dist/composables/useStripo.js +15 -15
  16. package/dist/composables/useSyncModuleExtractor.js +15 -13
  17. package/dist/composables/validators/useSyncModuleBlockValidator.js +24 -0
  18. package/dist/config/i18n/en/labels.json.js +1 -1
  19. package/dist/config/migrator/index.js +9 -8
  20. package/dist/config/migrator/itemsBlockMigrator.js +197 -137
  21. package/dist/config/migrator/recommendation/compositionMapper.js +20 -20
  22. package/dist/config/migrator/recommendation/extractors.js +29 -24
  23. package/dist/config/migrator/recommendation/htmlBuilder.js +116 -130
  24. package/dist/config/migrator/recommendation/settingsMapper.js +17 -17
  25. package/dist/config/migrator/recommendationMigrator.js +31 -25
  26. package/dist/config/migrator/recommendationTitleMigrator.js +119 -0
  27. package/dist/enums/academy.js +2 -1
  28. package/dist/enums/date.js +5 -3
  29. package/dist/enums/extensions/recommendationBlock.js +3 -1
  30. package/dist/extensions/Blocks/Items/block.js +118 -49
  31. package/dist/extensions/Blocks/Items/constants/cardLayout.js +20 -0
  32. package/dist/extensions/Blocks/Items/constants/currency.js +25 -0
  33. package/dist/extensions/Blocks/Items/controls/name/trimming.js +18 -17
  34. package/dist/extensions/Blocks/Items/controls/price/currencyLocation.js +25 -24
  35. package/dist/extensions/Blocks/Items/controls/price/currencySymbol.js +12 -11
  36. package/dist/extensions/Blocks/Items/controls/settingsControl.js +114 -105
  37. package/dist/extensions/Blocks/Items/enums/productEnums.js +14 -9
  38. package/dist/extensions/Blocks/Items/layouts/horizontal.html.js +11 -9
  39. package/dist/extensions/Blocks/Items/template.js +189 -179
  40. package/dist/extensions/Blocks/Items/utils/constants.js +4 -0
  41. package/dist/extensions/Blocks/Recommendation/block.js +35 -29
  42. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +1 -1
  43. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  44. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +29 -27
  45. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +35 -28
  46. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +309 -236
  47. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +241 -180
  48. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +124 -0
  49. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +1 -0
  50. package/dist/extensions/Blocks/Recommendation/controls/title/index.js +44 -0
  51. package/dist/extensions/Blocks/Recommendation/extension.js +31 -29
  52. package/dist/extensions/Blocks/Recommendation/services/configService.js +54 -36
  53. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +23 -4
  54. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +175 -79
  55. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +3 -3
  56. package/dist/extensions/Blocks/Recommendation/templates/titleRows.js +33 -0
  57. package/dist/extensions/Blocks/Recommendation/templates/utils.js +85 -107
  58. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +22 -0
  59. package/dist/extensions/Blocks/Recommendation/utils/recommendationBlockCount.js +10 -6
  60. package/dist/extensions/Blocks/common-control.js +22 -19
  61. package/dist/guido.css +1 -1
  62. package/dist/services/recommendationApi.js +69 -30
  63. package/dist/src/@types/config/schemas.d.ts +2 -0
  64. package/dist/src/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.d.ts +3 -0
  65. package/dist/src/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.d.ts +2 -0
  66. package/dist/src/components/organisms/extensions/recommendation/StrategyInfoBoxContent.vue.d.ts +15 -0
  67. package/dist/src/composables/useConfig.d.ts +2 -0
  68. package/dist/src/composables/useModuleRepair.d.ts +18 -0
  69. package/dist/src/composables/useRecommendation.d.ts +1 -0
  70. package/dist/src/composables/useSyncModuleExtractor.d.ts +2 -0
  71. package/dist/src/composables/validators/useSyncModuleBlockValidator.d.ts +3 -0
  72. package/dist/src/config/migrator/recommendation/extractors.d.ts +8 -0
  73. package/dist/src/config/migrator/recommendationTitleMigrator.d.ts +5 -0
  74. package/dist/src/enums/academy.d.ts +1 -0
  75. package/dist/src/enums/date.d.ts +1 -0
  76. package/dist/src/enums/extensions/recommendationBlock.d.ts +2 -0
  77. package/dist/src/extensions/Blocks/Items/block.d.ts +35 -0
  78. package/dist/src/extensions/Blocks/Items/constants/cardLayout.d.ts +44 -0
  79. package/dist/src/extensions/Blocks/Items/constants/currency.d.ts +43 -0
  80. package/dist/src/extensions/Blocks/Items/enums/productEnums.d.ts +3 -0
  81. package/dist/src/extensions/Blocks/Items/template.d.ts +19 -0
  82. package/dist/src/extensions/Blocks/Items/utils/constants.d.ts +6 -0
  83. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +2 -1
  84. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +7 -0
  85. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +3 -6
  86. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +2 -2
  87. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +12 -0
  88. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +11 -0
  89. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
  90. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +44 -8
  91. package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +16 -0
  92. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +1 -0
  93. package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +86 -0
  94. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +12 -1
  95. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +176 -10
  96. package/dist/src/extensions/Blocks/Recommendation/templates/titleRows.d.ts +13 -0
  97. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +7 -0
  98. package/dist/src/extensions/Blocks/Recommendation/utils/nodeConfigWriter.d.ts +31 -0
  99. package/dist/src/extensions/Blocks/Recommendation/utils/recommendationBlockCount.d.ts +6 -2
  100. package/dist/src/extensions/Blocks/common-control.d.ts +4 -1
  101. package/dist/src/mock/api/recommendation-strategies.d.ts +2 -0
  102. package/dist/src/services/recommendationApi.d.ts +4 -1
  103. package/dist/src/stores/config.d.ts +18 -0
  104. package/dist/src/stores/save-as-template.d.ts +4 -3
  105. package/dist/src/utils/genericUtil.d.ts +5 -0
  106. package/dist/src/utils/itemsCurrencyRepair.d.ts +17 -0
  107. package/dist/static/assets/icons/line-change.svg.js +5 -0
  108. package/dist/static/assets/icons/line-delete.svg.js +5 -0
  109. package/dist/static/assets/icons/line-plus.svg.js +5 -0
  110. package/dist/static/styles/components/recommendation-strategy.css.js +155 -0
  111. package/dist/static/styles/customEditorStyle.css.js +3 -1
  112. package/dist/utils/dateUtil.js +23 -10
  113. package/dist/utils/genericUtil.js +28 -27
  114. package/dist/utils/itemsCurrencyRepair.js +39 -0
  115. package/dist/utils/pairProductVariables.js +77 -77
  116. package/dist/utils/templatePreparation.js +35 -34
  117. package/package.json +3 -2
  118. package/dist/composables/useModuleDynamicContentRepair.js +0 -37
  119. package/dist/src/composables/useModuleDynamicContentRepair.d.ts +0 -13
@@ -104,6 +104,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
104
104
  autosave: boolean;
105
105
  allowlistEnabled: boolean;
106
106
  linkTrackingIds: boolean;
107
+ reusableRecommendationStrategy: boolean;
107
108
  };
108
109
  blocks: {
109
110
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -244,6 +245,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
244
245
  autosave: boolean;
245
246
  allowlistEnabled: boolean;
246
247
  linkTrackingIds: boolean;
248
+ reusableRecommendationStrategy: boolean;
247
249
  };
248
250
  blocks: {
249
251
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -384,6 +386,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
384
386
  autosave: boolean;
385
387
  allowlistEnabled: boolean;
386
388
  linkTrackingIds: boolean;
389
+ reusableRecommendationStrategy: boolean;
387
390
  };
388
391
  blocks: {
389
392
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -524,6 +527,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
524
527
  autosave: boolean;
525
528
  allowlistEnabled: boolean;
526
529
  linkTrackingIds: boolean;
530
+ reusableRecommendationStrategy: boolean;
527
531
  };
528
532
  blocks: {
529
533
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -664,6 +668,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
664
668
  autosave: boolean;
665
669
  allowlistEnabled: boolean;
666
670
  linkTrackingIds: boolean;
671
+ reusableRecommendationStrategy: boolean;
667
672
  };
668
673
  blocks: {
669
674
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -804,6 +809,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
804
809
  autosave: boolean;
805
810
  allowlistEnabled: boolean;
806
811
  linkTrackingIds: boolean;
812
+ reusableRecommendationStrategy: boolean;
807
813
  };
808
814
  blocks: {
809
815
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -944,6 +950,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
944
950
  autosave: boolean;
945
951
  allowlistEnabled: boolean;
946
952
  linkTrackingIds: boolean;
953
+ reusableRecommendationStrategy: boolean;
947
954
  };
948
955
  blocks: {
949
956
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1084,6 +1091,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1084
1091
  autosave: boolean;
1085
1092
  allowlistEnabled: boolean;
1086
1093
  linkTrackingIds: boolean;
1094
+ reusableRecommendationStrategy: boolean;
1087
1095
  };
1088
1096
  blocks: {
1089
1097
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1224,6 +1232,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1224
1232
  autosave: boolean;
1225
1233
  allowlistEnabled: boolean;
1226
1234
  linkTrackingIds: boolean;
1235
+ reusableRecommendationStrategy: boolean;
1227
1236
  };
1228
1237
  blocks: {
1229
1238
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1364,6 +1373,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1364
1373
  autosave: boolean;
1365
1374
  allowlistEnabled: boolean;
1366
1375
  linkTrackingIds: boolean;
1376
+ reusableRecommendationStrategy: boolean;
1367
1377
  };
1368
1378
  blocks: {
1369
1379
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1504,6 +1514,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1504
1514
  autosave: boolean;
1505
1515
  allowlistEnabled: boolean;
1506
1516
  linkTrackingIds: boolean;
1517
+ reusableRecommendationStrategy: boolean;
1507
1518
  };
1508
1519
  blocks: {
1509
1520
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1644,6 +1655,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1644
1655
  autosave: boolean;
1645
1656
  allowlistEnabled: boolean;
1646
1657
  linkTrackingIds: boolean;
1658
+ reusableRecommendationStrategy: boolean;
1647
1659
  };
1648
1660
  blocks: {
1649
1661
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1784,6 +1796,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1784
1796
  autosave: boolean;
1785
1797
  allowlistEnabled: boolean;
1786
1798
  linkTrackingIds: boolean;
1799
+ reusableRecommendationStrategy: boolean;
1787
1800
  };
1788
1801
  blocks: {
1789
1802
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1924,6 +1937,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1924
1937
  autosave: boolean;
1925
1938
  allowlistEnabled: boolean;
1926
1939
  linkTrackingIds: boolean;
1940
+ reusableRecommendationStrategy: boolean;
1927
1941
  };
1928
1942
  blocks: {
1929
1943
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2064,6 +2078,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2064
2078
  autosave: boolean;
2065
2079
  allowlistEnabled: boolean;
2066
2080
  linkTrackingIds: boolean;
2081
+ reusableRecommendationStrategy: boolean;
2067
2082
  };
2068
2083
  blocks: {
2069
2084
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2204,6 +2219,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2204
2219
  autosave: boolean;
2205
2220
  allowlistEnabled: boolean;
2206
2221
  linkTrackingIds: boolean;
2222
+ reusableRecommendationStrategy: boolean;
2207
2223
  };
2208
2224
  blocks: {
2209
2225
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2344,6 +2360,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2344
2360
  autosave: boolean;
2345
2361
  allowlistEnabled: boolean;
2346
2362
  linkTrackingIds: boolean;
2363
+ reusableRecommendationStrategy: boolean;
2347
2364
  };
2348
2365
  blocks: {
2349
2366
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -2486,6 +2503,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2486
2503
  autosave: boolean;
2487
2504
  allowlistEnabled: boolean;
2488
2505
  linkTrackingIds: boolean;
2506
+ reusableRecommendationStrategy: boolean;
2489
2507
  };
2490
2508
  blocks: {
2491
2509
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1,3 +1,4 @@
1
+ import type { RecommendationCampaignUrlValue } from '@@/Types/recommendation';
1
2
  import type { MappedCategory } from '@@/Types/save-as-template';
2
3
  interface StoreState {
3
4
  templateName: string;
@@ -5,7 +6,7 @@ interface StoreState {
5
6
  selectedCategories: MappedCategory[];
6
7
  skeletonStatus: boolean;
7
8
  recommendation: {
8
- campaignUrls: Record<string, string>;
9
+ campaignUrls: Record<string, RecommendationCampaignUrlValue>;
9
10
  configs: Record<string, string>;
10
11
  };
11
12
  unsubscribe: {
@@ -30,7 +31,7 @@ export declare const useSaveAsTemplateStore: import("pinia").StoreDefinition<"gu
30
31
  }[];
31
32
  skeletonStatus: boolean;
32
33
  recommendation: {
33
- campaignUrls: Record<string, string>;
34
+ campaignUrls: Record<string, RecommendationCampaignUrlValue>;
34
35
  configs: Record<string, string>;
35
36
  };
36
37
  unsubscribe: {
@@ -54,7 +55,7 @@ export declare const useSaveAsTemplateStore: import("pinia").StoreDefinition<"gu
54
55
  }[];
55
56
  skeletonStatus: boolean;
56
57
  recommendation: {
57
- campaignUrls: Record<string, string>;
58
+ campaignUrls: Record<string, RecommendationCampaignUrlValue>;
58
59
  configs: Record<string, string>;
59
60
  };
60
61
  unsubscribe: {
@@ -25,3 +25,8 @@ export declare const getCsrfToken: () => string;
25
25
  export declare const getUrlParams: () => URLSearchParams;
26
26
  export declare const getUrlParam: (paramName: string, defaultValue?: string) => string;
27
27
  export declare const replaceString: (string?: string, values?: Record<string, string | number>, isRemoveEmptyValues?: boolean) => string;
28
+ /**
29
+ * Narrows an unknown API value to a printable string; anything that is neither
30
+ * a string nor a number becomes ''.
31
+ */
32
+ export declare const asText: (value: unknown) => string;
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Heals stale price currency attributes on every v2 Items block inside a dropped
3
+ * saved module, driving `data-curency` / `data-currency_symbol` from each block's
4
+ * `esd-ext-config`. A saved module can serialize attrs that no longer match its
5
+ * config; the server-side export reads those exact attrs, so left stale they ship
6
+ * the wrong currency position/symbol.
7
+ *
8
+ * Pure `string → string`. Returns the original string untouched when nothing needs
9
+ * healing (0 blocks, all in sync) so the caller's `html !== currentHtml` guard stays
10
+ * meaningful. Fail-open: any parse fault returns the input unchanged.
11
+ *
12
+ * The module `<td>` stripe has no table context, so it is wrapped before parsing —
13
+ * a bare `<td>` root is otherwise dropped by the HTML parser (same reason
14
+ * recommendationMigrator wraps). If the wrap fails to capture the blocks (non-`<td>`
15
+ * root foster-parented out), it bails to the original string.
16
+ */
17
+ export declare function repairItemsCurrencyAttributes(html: string): string;
@@ -0,0 +1,5 @@
1
+ const l = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M17.768 11.694a1.03 1.03 0 0 1-1.465 0 1.051 1.051 0 0 1 0-1.478L17.51 9H9a1 1 0 1 1 0-2h8.509l-1.206-1.216a1.051 1.051 0 0 1 0-1.478 1.03 1.03 0 0 1 1.465 0l2.929 2.955c.404.408.404 1.07 0 1.478l-2.93 2.955zM3.303 15.261a1.051 1.051 0 0 0 0 1.478l2.93 2.955a1.03 1.03 0 0 0 1.464 0 1.051 1.051 0 0 0 0-1.478L6.49 17H15a1 1 0 1 0 0-2H6.491l1.206-1.216a1.051 1.051 0 0 0 0-1.478 1.03 1.03 0 0 0-1.465 0l-2.929 2.955z"/></svg>
2
+ `;
3
+ export {
4
+ l as default
5
+ };
@@ -0,0 +1,5 @@
1
+ const a = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M10 3a2 2 0 0 0-2 2v2H5a1 1 0 0 0 0 2h1v10a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2V9h1a1 1 0 1 0 0-2h-3V5a2 2 0 0 0-2-2h-4zm4 4h-4V5h4v2zm-4 2h6v10H8V9h2zm2 2a1 1 0 0 0-1 1v4a1 1 0 1 0 2 0v-4a1 1 0 0 0-1-1z"></path></svg>
2
+ `;
3
+ export {
4
+ a as default
5
+ };
@@ -0,0 +1,5 @@
1
+ const a = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 5a1 1 0 0 0-1 1v5H6a1 1 0 1 0 0 2h5v5a1 1 0 1 0 2 0v-5h5a1 1 0 1 0 0-2h-5V6a1 1 0 0 0-1-1z"></path></svg>
2
+ `;
3
+ export {
4
+ a as default
5
+ };
@@ -0,0 +1,155 @@
1
+ const n = `.strategy-control-header {
2
+ padding: 16px 16px 0;
3
+ }
4
+
5
+ .strategy-control-title {
6
+ margin: 0;
7
+ color: var(--guido-color-gray-800);
8
+ font-size: 16px;
9
+ font-weight: 600;
10
+ line-height: 24px;
11
+ }
12
+
13
+ .strategy-control-description-row {
14
+ padding: 8px 16px 16px;
15
+ }
16
+
17
+ .strategy-control-description {
18
+ margin: 0;
19
+ color: var(--guido-color-gray-600);
20
+ font-size: 13px;
21
+ line-height: 16px;
22
+ }
23
+
24
+ .strategy-control-description a {
25
+ color: var(--guido-color-primary-500);
26
+ text-decoration: underline;
27
+ }
28
+
29
+ .recommendation-controls-container .container.strategy-control-cta-row {
30
+ grid-template-columns: repeat(2, minmax(0, 180px));
31
+ justify-content: start;
32
+ gap: 16px;
33
+ padding: 0 16px 16px;
34
+ }
35
+
36
+ .strategy-control-cta {
37
+ width: 100%;
38
+ }
39
+
40
+ .strategy-control-cta > .button {
41
+ display: flex;
42
+ gap: 8px;
43
+ justify-content: center;
44
+ width: 100%;
45
+ border: none;
46
+ font-size: 15px;
47
+ font-weight: 400;
48
+ line-height: 24px;
49
+ white-space: nowrap;
50
+ }
51
+
52
+ .strategy-control-cta.primary > .button:disabled,
53
+ .strategy-control-cta.primary > .button.disabled {
54
+ opacity: 1;
55
+ color: var(--guido-color-gray-800);
56
+ cursor: default;
57
+ }
58
+
59
+ .strategy-control-name-band {
60
+ display: flex;
61
+ align-items: center;
62
+ min-height: 48px;
63
+ padding: 0 16px;
64
+ background-color: var(--guido-color-gray-0);
65
+ }
66
+
67
+ .strategy-control-name {
68
+ color: var(--guido-color-gray-800);
69
+ font-size: 15px;
70
+ font-weight: 600;
71
+ line-height: 24px;
72
+ }
73
+
74
+ .strategy-control-actions {
75
+ display: flex;
76
+ align-items: center;
77
+ padding: 16px;
78
+ }
79
+
80
+ .strategy-control-action {
81
+ display: inline-flex;
82
+ align-items: center;
83
+ padding: 0;
84
+ border: none;
85
+ background: none;
86
+ font-size: 15px;
87
+ font-weight: 400;
88
+ line-height: 24px;
89
+ cursor: pointer;
90
+ }
91
+
92
+ .strategy-control-action > span {
93
+ padding: 0 8px;
94
+ }
95
+
96
+ .strategy-control-action::before,
97
+ .strategy-control-cta.on > .button::before {
98
+ content: '';
99
+ flex: none;
100
+ width: 24px;
101
+ height: 24px;
102
+ background-color: currentcolor;
103
+ mask-repeat: no-repeat;
104
+ mask-position: center;
105
+ mask-size: 24px 24px;
106
+ }
107
+
108
+ .strategy-control-action--change::before {
109
+ mask-image: var(--guido-icon-line-change);
110
+ }
111
+
112
+ .strategy-control-action--remove::before {
113
+ mask-image: var(--guido-icon-line-delete);
114
+ }
115
+
116
+ .strategy-control-cta.on > .button::before {
117
+ mask-image: var(--guido-icon-line-plus);
118
+ }
119
+
120
+ .strategy-control-action--change {
121
+ color: var(--guido-color-primary-500);
122
+ }
123
+
124
+ .strategy-control-action--remove {
125
+ color: var(--guido-color-danger-500);
126
+ }
127
+
128
+ .strategy-control-action:hover {
129
+ text-decoration: underline;
130
+ }
131
+
132
+ .recommendation-controls-container:not(.strategy-block) .strategy-control-container,
133
+ .recommendation-controls-container.strategy-block .product-count-control-container,
134
+ .recommendation-controls-container.strategy-block .algorithm-control-container,
135
+ .recommendation-controls-container.strategy-block .filters-control-container,
136
+ .recommendation-controls-container.strategy-block .shuffle-control-container {
137
+ display: none;
138
+ }
139
+
140
+ .recommendation-controls-container.strategy-block {
141
+ display: flex;
142
+ flex-direction: column;
143
+ }
144
+
145
+ .recommendation-controls-container.strategy-block .price-placement-control-container {
146
+ order: 1;
147
+ }
148
+
149
+ .recommendation-controls-container.strategy-block .product-layout-control-container {
150
+ order: 2;
151
+ }
152
+ `;
153
+ export {
154
+ n as default
155
+ };
@@ -43,7 +43,9 @@ const n = `.esd-x,
43
43
  .recommendation-block-v2 .product-omnibus-discount ue-node-actions,
44
44
  .recommendation-block-v2 .product-omnibus-discount ue-node-panel,
45
45
  .recommendation-block-v2 .product-button ue-node-actions,
46
- .recommendation-block-v2 .product-button ue-node-panel {
46
+ .recommendation-block-v2 .product-button ue-node-panel,
47
+ .recommendation-block-v2 .ins-recommendation-title ue-node-actions,
48
+ .recommendation-block-v2 .ins-recommendation-title ue-node-panel {
47
49
  display: none !important;
48
50
  }
49
51
 
@@ -1,10 +1,19 @@
1
- import { DEFAULT_LOCALE as r, DEFAULT as o } from "../enums/date.js";
2
- const c = () => {
1
+ import { DEFAULT_LOCALE as n, DEFAULT as a, DEFAULT_TZ as c } from "../enums/date.js";
2
+ const m = (t) => t ? t instanceof Date ? t : typeof t == "string" ? t.length === 10 && !Number.isNaN(Number(t)) ? new Date(Number(t) * 1e3) : new Date(t) : typeof t == "number" ? t.toString().length === 10 ? new Date(t * 1e3) : new Date(t) : /* @__PURE__ */ new Date() : /* @__PURE__ */ new Date(), s = () => {
3
3
  const t = window.l10n;
4
- return (t == null ? void 0 : t.locale) === o ? r : (t == null ? void 0 : t.locale) || r;
5
- };
6
- new Intl.DateTimeFormat().resolvedOptions().timeZone;
7
- const i = (t) => {
4
+ return (t == null ? void 0 : t.locale) === a ? n : (t == null ? void 0 : t.locale) || n;
5
+ }, u = new Intl.DateTimeFormat().resolvedOptions().timeZone, f = () => {
6
+ const t = window.l10n;
7
+ return (t == null ? void 0 : t.timezone) || u || c;
8
+ }, D = (t, e = s(), r = f()) => {
9
+ const o = {
10
+ year: "numeric",
11
+ month: "2-digit",
12
+ day: "2-digit",
13
+ timeZone: r
14
+ }, i = m(t);
15
+ return new Intl.DateTimeFormat(e, o).format(i);
16
+ }, T = (t) => {
8
17
  if (!t)
9
18
  return "";
10
19
  const e = new Date(t);
@@ -16,9 +25,13 @@ const i = (t) => {
16
25
  second: "2-digit",
17
26
  hour12: !1
18
27
  }).format(e);
19
- }, m = (t) => t ? Math.floor(Date.now() / 1e3) >= t : !1;
28
+ }, h = (t) => t ? Math.floor(Date.now() / 1e3) >= t : !1;
20
29
  export {
21
- i as formatPatchDate,
22
- m as isAfterDate,
23
- c as locale
30
+ m as convertToDateObject,
31
+ T as formatPatchDate,
32
+ D as formatShortDate,
33
+ h as isAfterDate,
34
+ u as localTz,
35
+ s as locale,
36
+ f as timezone
24
37
  };
@@ -1,26 +1,26 @@
1
- const o = (l) => {
2
- const a = l.value.match(/\{\{([^}]+)\}\}/)[1].split("|").map((t) => t.trim()), [c] = a, r = {
3
- text: l.label,
4
- value: c || ""
1
+ const o = (t) => {
2
+ const a = t.value.match(/\{\{([^}]+)\}\}/)[1].split("|").map((l) => l.trim()), [s] = a, r = {
3
+ text: t.label,
4
+ value: s || ""
5
5
  };
6
6
  if (a.length >= 2) {
7
- const [, t, e] = a;
8
- if (t.startsWith("default:")) {
9
- let n = t.slice(8).trim();
7
+ const [, l, e] = a;
8
+ if (l.startsWith("default:")) {
9
+ let n = l.slice(8).trim();
10
10
  n.startsWith('"') && n.endsWith('"') && (n = n.slice(1, -1)), r.fallback = n;
11
11
  } else {
12
- const n = t.includes("=") ? { key: t.split("=")[0].trim(), value: t.split("=")[1].trim() } : null;
13
- n ? r.format = n : e || (r.fallback = t), e && (r.fallback = e);
12
+ const n = l.includes("=") ? { key: l.split("=")[0].trim(), value: l.split("=")[1].trim() } : null;
13
+ n ? r.format = n : e || (r.fallback = l), e && (r.fallback = e);
14
14
  }
15
15
  }
16
16
  return r;
17
- }, f = (l, s = !1) => l.map((a) => {
17
+ }, f = (t, c = !1) => t.map((a) => {
18
18
  if (a.format)
19
19
  return {
20
20
  label: `${a.text} | ${a.format.key}=${a.format.value}`,
21
21
  value: `{{${a.value}|${a.format.key}=${a.format.value}}}`
22
22
  };
23
- if (s) {
23
+ if (c) {
24
24
  if (!a.fallback)
25
25
  return {
26
26
  label: a.text,
@@ -36,33 +36,34 @@ const o = (l) => {
36
36
  label: a.fallback ? `${a.text} | ${a.fallback}` : a.text,
37
37
  value: a.fallback ? `{{${a.value}|${a.fallback}}}` : `{{${a.value}}}`
38
38
  };
39
- }), b = (l) => {
40
- const s = [], a = /* @__PURE__ */ new Set(), c = (t) => {
41
- Array.isArray(t) && t.forEach((e) => {
39
+ }), b = (t) => {
40
+ const c = [], a = /* @__PURE__ */ new Set(), s = (l) => {
41
+ Array.isArray(l) && l.forEach((e) => {
42
42
  const n = [...e.children ?? [], ...e.select_items ?? []];
43
43
  if (n.length > 0) {
44
- c(n);
44
+ s(n);
45
45
  return;
46
46
  }
47
47
  const u = e.text || e.tag_text;
48
- u && e.value && !a.has(e.value) && (a.add(e.value), s.push({ text: u, value: e.value }));
48
+ u && e.value && !a.has(e.value) && (a.add(e.value), c.push({ text: u, value: e.value }));
49
49
  });
50
- }, [r] = Object.values(l ?? {});
51
- return c(r), s;
52
- }, v = (l, s, a = !1) => {
53
- const c = new Set(l.map((t) => t.value)), r = s.filter((t) => c.has(t.value) ? !1 : (c.add(t.value), !0));
50
+ }, [r] = Object.values(t ?? {});
51
+ return s(r), c;
52
+ }, i = (t, c, a = !1) => {
53
+ const s = new Set(t.map((l) => l.value)), r = c.filter((l) => s.has(l.value) ? !1 : (s.add(l.value), !0));
54
54
  return [
55
- ...f(l, a),
55
+ ...f(t, a),
56
56
  ...f(r, a)
57
57
  ];
58
- }, i = () => {
59
- var l;
60
- return ((l = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : l.getAttribute("content")) ?? "";
61
- };
58
+ }, v = () => {
59
+ var t;
60
+ return ((t = document.head.querySelector('meta[name="csrf-token"]')) == null ? void 0 : t.getAttribute("content")) ?? "";
61
+ }, k = (t) => typeof t == "string" ? t : typeof t == "number" ? String(t) : "";
62
62
  export {
63
- v as buildMergeTagEntries,
63
+ k as asText,
64
+ i as buildMergeTagEntries,
64
65
  f as dynamicContentToMergeTags,
65
66
  b as flattenDynamicContentList,
66
- i as getCsrfToken,
67
+ v as getCsrfToken,
67
68
  o as mergeTagToDynamicContent
68
69
  };
@@ -0,0 +1,39 @@
1
+ import { currencyAttrTargets as u, ITEMS_CURRENCY_ATTR as c } from "../extensions/Blocks/Items/constants/currency.js";
2
+ import { ItemsBlockId as l } from "../extensions/Blocks/Items/enums/controlEnums.js";
3
+ const s = "items-block-v2";
4
+ function f(e) {
5
+ const i = e.getAttribute("esd-ext-config");
6
+ if (!i)
7
+ return !1;
8
+ let t, r;
9
+ try {
10
+ ({ position: t, symbol: r } = u(JSON.parse(i)));
11
+ } catch {
12
+ return !1;
13
+ }
14
+ let o = !1;
15
+ return e.querySelectorAll(`.${l.PRICE} p`).forEach((n) => {
16
+ t !== void 0 && n.getAttribute(c.POSITION) !== t && (n.setAttribute(c.POSITION, t), o = !0), r !== void 0 && n.getAttribute(c.SYMBOL) !== r && (n.setAttribute(c.SYMBOL, r), o = !0);
17
+ }), o;
18
+ }
19
+ function S(e) {
20
+ if (typeof e != "string" || !e.includes(s))
21
+ return e;
22
+ try {
23
+ const t = new DOMParser().parseFromString(
24
+ `<table><tbody><tr>${e}</tr></tbody></table>`,
25
+ "text/html"
26
+ ).querySelector("tr"), r = t.querySelectorAll(`.${s}`);
27
+ if (r.length === 0)
28
+ return e;
29
+ let o = !1;
30
+ return r.forEach((n) => {
31
+ f(n) && (o = !0);
32
+ }), o ? t.innerHTML : e;
33
+ } catch (i) {
34
+ return console.error("Failed to repair items currency on module add:", i), e;
35
+ }
36
+ }
37
+ export {
38
+ S as repairItemsCurrencyAttributes
39
+ };