@useinsider/guido 3.17.0-beta.3ff6ea0 → 3.17.0-beta.6255bfc
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.
- package/README.md +1 -0
- package/dist/@types/config/schemas.js +12 -6
- package/dist/components/Guido.vue.js +2 -2
- package/dist/components/Guido.vue2.js +31 -30
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.js +18 -0
- package/dist/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue2.js +66 -0
- package/dist/composables/useCustomInterfaceAppearance.js +52 -38
- package/dist/composables/useRecommendation.js +52 -44
- package/dist/composables/useStripo.js +14 -14
- package/dist/config/migrator/index.js +8 -9
- package/dist/config/migrator/recommendation/compositionMapper.js +20 -20
- package/dist/config/migrator/recommendation/extractors.js +24 -29
- package/dist/config/migrator/recommendation/htmlBuilder.js +130 -116
- package/dist/config/migrator/recommendation/settingsMapper.js +19 -17
- package/dist/config/migrator/recommendationMigrator.js +15 -16
- package/dist/enums/academy.js +2 -1
- package/dist/enums/date.js +4 -3
- package/dist/enums/extensions/recommendationBlock.js +4 -1
- package/dist/extensions/Blocks/Recommendation/block.js +26 -21
- package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +1 -1
- package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
- package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +26 -25
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +28 -34
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +256 -323
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +178 -165
- package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +142 -0
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +0 -1
- package/dist/extensions/Blocks/Recommendation/extension.js +29 -31
- package/dist/extensions/Blocks/Recommendation/services/configService.js +35 -35
- package/dist/extensions/Blocks/Recommendation/settingsPanel.js +4 -23
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +251 -110
- package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +3 -3
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +107 -85
- package/dist/extensions/Blocks/common-control.js +22 -19
- package/dist/guido.css +1 -1
- package/dist/services/recommendationApi.js +75 -30
- package/dist/src/@types/config/schemas.d.ts +12 -0
- package/dist/src/components/organisms/extensions/recommendation/AssignStrategyDrawer.vue.d.ts +3 -0
- package/dist/src/components/wrappers/WpModal.vue.d.ts +1 -1
- package/dist/src/composables/useConfig.d.ts +2 -0
- package/dist/src/composables/useRecommendation.d.ts +1 -0
- package/dist/src/config/migrator/recommendation/extractors.d.ts +0 -8
- package/dist/src/enums/academy.d.ts +1 -0
- package/dist/src/enums/extensions/recommendationBlock.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +1 -2
- package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +0 -7
- package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +7 -7
- package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +2 -2
- package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +0 -10
- package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +0 -10
- package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +15 -3
- package/dist/src/extensions/Blocks/Recommendation/controls/main/strategy.d.ts +30 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +0 -1
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +206 -10
- package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +6 -0
- package/dist/src/extensions/Blocks/common-control.d.ts +4 -1
- package/dist/src/mock/api/recommendation-strategies.d.ts +63 -0
- package/dist/src/services/recommendationApi.d.ts +4 -1
- package/dist/src/stores/config.d.ts +18 -0
- package/dist/src/utils/strategyInfoBox.d.ts +22 -0
- package/dist/static/assets/icons/line-change.svg.js +5 -0
- package/dist/static/assets/icons/line-delete.svg.js +5 -0
- package/dist/static/assets/icons/line-plus.svg.js +5 -0
- package/dist/static/styles/components/recommendation-strategy.css.js +188 -0
- package/dist/static/styles/customEditorStyle.css.js +1 -3
- package/dist/utils/dateUtil.js +29 -10
- package/dist/utils/strategyInfoBox.js +37 -0
- package/dist/utils/templatePreparation.js +37 -34
- package/package.json +2 -1
- package/dist/config/migrator/recommendationTitleMigrator.js +0 -119
- package/dist/extensions/Blocks/Recommendation/controls/title/index.js +0 -44
- package/dist/extensions/Blocks/Recommendation/templates/titleRows.js +0 -33
- package/dist/src/config/migrator/recommendationTitleMigrator.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +0 -86
- package/dist/src/extensions/Blocks/Recommendation/templates/titleRows.d.ts +0 -13
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export declare const MOCK_RRS_STRATEGIES: ({
|
|
2
|
+
strategy_id: number;
|
|
3
|
+
name: string;
|
|
4
|
+
status: string;
|
|
5
|
+
suitable_channels: string;
|
|
6
|
+
suitable_page_types: string;
|
|
7
|
+
algorithm: string;
|
|
8
|
+
algorithm_used: string;
|
|
9
|
+
method: string;
|
|
10
|
+
size: number;
|
|
11
|
+
filters: string;
|
|
12
|
+
shuffle: number;
|
|
13
|
+
attribute_affinity: number;
|
|
14
|
+
exclude_view: number;
|
|
15
|
+
exclude_purchase: number;
|
|
16
|
+
exclude_cart: number;
|
|
17
|
+
manual_merchandising_products: string;
|
|
18
|
+
fallback_config: null;
|
|
19
|
+
channelNames: string;
|
|
20
|
+
campaignCount: {
|
|
21
|
+
active: number;
|
|
22
|
+
passive: number;
|
|
23
|
+
test: number;
|
|
24
|
+
};
|
|
25
|
+
created_at: string;
|
|
26
|
+
updated_at: string;
|
|
27
|
+
last_updated_by: string;
|
|
28
|
+
mixed_strategies?: undefined;
|
|
29
|
+
exclude_view_duration?: undefined;
|
|
30
|
+
exclude_view_duration_type?: undefined;
|
|
31
|
+
} | {
|
|
32
|
+
strategy_id: number;
|
|
33
|
+
name: string;
|
|
34
|
+
status: string;
|
|
35
|
+
suitable_channels: string;
|
|
36
|
+
suitable_page_types: string;
|
|
37
|
+
algorithm: string;
|
|
38
|
+
algorithm_used: string;
|
|
39
|
+
mixed_strategies: string;
|
|
40
|
+
method: string;
|
|
41
|
+
size: number;
|
|
42
|
+
filters: string;
|
|
43
|
+
shuffle: number;
|
|
44
|
+
attribute_affinity: number;
|
|
45
|
+
exclude_view: number;
|
|
46
|
+
exclude_view_duration: number;
|
|
47
|
+
exclude_view_duration_type: string;
|
|
48
|
+
exclude_purchase: number;
|
|
49
|
+
exclude_cart: number;
|
|
50
|
+
manual_merchandising_products: string;
|
|
51
|
+
fallback_config: null;
|
|
52
|
+
channelNames: string;
|
|
53
|
+
campaignCount: {
|
|
54
|
+
active: number;
|
|
55
|
+
passive: number;
|
|
56
|
+
test: number;
|
|
57
|
+
};
|
|
58
|
+
created_at: string;
|
|
59
|
+
updated_at: string;
|
|
60
|
+
last_updated_by: string;
|
|
61
|
+
})[];
|
|
62
|
+
declare const _default: import("msw").HttpHandler[];
|
|
63
|
+
export default _default;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type { InitialResponse, FiltersResponse, RecommendationProduct, RecommendationProductsParams } from '@@/Types/recommendation';
|
|
1
|
+
import type { InitialResponse, FiltersResponse, RecommendationProduct, RecommendationProductsParams, RrsEndpointGenerateResponse, RrsStrategy } from '@@/Types/recommendation';
|
|
2
2
|
export declare const useRecommendationApi: () => {
|
|
3
3
|
fetchRecommendationCreateData: () => Promise<InitialResponse>;
|
|
4
4
|
fetchRecommendationFilters: () => Promise<FiltersResponse>;
|
|
5
5
|
fetchRecommendationProducts: (strategy: string, params: RecommendationProductsParams) => Promise<RecommendationProduct[]>;
|
|
6
|
+
fetchRecommendationProductsByUrl: (url: string) => Promise<RecommendationProduct[]>;
|
|
7
|
+
fetchRecommendationStrategies: () => Promise<RrsStrategy[]>;
|
|
8
|
+
generateStrategyEndpoint: (strategy: RrsStrategy, currency: string) => Promise<RrsEndpointGenerateResponse>;
|
|
6
9
|
};
|
|
@@ -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")[];
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { RrsStrategy } from '@@/Types/recommendation';
|
|
2
|
+
import { useTranslations } from '@@/Composables/useTranslations';
|
|
3
|
+
export declare const STRATEGY_INFO_BOX_CLASS = "assign-strategy-info-box";
|
|
4
|
+
/**
|
|
5
|
+
* Props for the design system info box that previews a strategy on hover.
|
|
6
|
+
*
|
|
7
|
+
* The box is InSelect's own per-option feature: the dropdown v-binds this whole
|
|
8
|
+
* object onto `<in-info-box>`, so `titleText`/`descriptionText` are all it takes
|
|
9
|
+
* — no slot component. Both go through the design system's sanitizer, and every
|
|
10
|
+
* partner-supplied value is escaped here before it reaches that markup.
|
|
11
|
+
*
|
|
12
|
+
* `trans` is injectable because callers map this over a whole listing, and
|
|
13
|
+
* `useTranslations()` rebuilds its dictionary and memo cache on every call.
|
|
14
|
+
*/
|
|
15
|
+
export declare const buildStrategyInfoBoxProps: (strategy: RrsStrategy, trans?: ReturnType<typeof useTranslations>) => {
|
|
16
|
+
id: string;
|
|
17
|
+
theme: string;
|
|
18
|
+
variant: string;
|
|
19
|
+
className: string;
|
|
20
|
+
titleText: string;
|
|
21
|
+
descriptionText: string;
|
|
22
|
+
};
|
|
@@ -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 C = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M15.97 7H16.09C16.3342 7.02199 16.5619 7.13294 16.7296 7.31178C16.8974 7.49062 16.9936 7.72487 17 7.97V8.09L16.24 16.36C16.1547 17.3188 15.7266 18.2147 15.0341 18.8833C14.3416 19.552 13.4312 19.9484 12.47 20L12.26 20.01H7.74C6.77775 20.0102 5.84767 19.6635 5.12033 19.0335C4.39298 18.4035 3.91712 17.5324 3.78 16.58L3.76 16.38L3 8.08C2.9803 7.94999 2.9864 7.81738 3.01796 7.68973C3.04951 7.56207 3.1059 7.44189 3.1839 7.33603C3.34143 7.12224 3.57744 6.97978 3.84 6.94C4.10256 6.90022 4.37018 6.96637 4.58397 7.1239C4.68983 7.2019 4.77929 7.29999 4.84724 7.41256C4.91519 7.52514 4.9603 7.64999 4.98 7.78L5 7.9L5.75 16.17C5.78903 16.644 5.99569 17.0886 6.3329 17.4239C6.67011 17.7593 7.1158 17.9636 7.59 18L7.74 18.01H12.26C12.7328 18.0094 13.1901 17.8413 13.5507 17.5356C13.9113 17.2299 14.152 16.8063 14.23 16.34L14.25 16.19L15 7.92C15.022 7.67577 15.1329 7.44813 15.3118 7.28036C15.4906 7.11258 15.7249 7.01637 15.97 7.01V7ZM8 9C8.24568 8.99822 8.48341 9.08695 8.66785 9.24926C8.85229 9.41157 8.97052 9.63609 9 9.88V15C9.00788 15.1313 8.98982 15.2629 8.94684 15.3873C8.90387 15.5116 8.83682 15.6262 8.74953 15.7247C8.66225 15.8231 8.55643 15.9034 8.43812 15.9609C8.31981 16.0185 8.19132 16.0521 8.06 16.06C7.79478 16.0759 7.53411 15.9858 7.33532 15.8095C7.13653 15.6332 7.01591 15.3852 7 15.12V10C7 9.73478 7.10536 9.48043 7.29289 9.29289C7.48043 9.10536 7.73478 9 8 9ZM12 9C12.2457 8.99822 12.4834 9.08695 12.6679 9.24926C12.8523 9.41157 12.9705 9.63609 13 9.88V15C13.0159 15.2652 12.9258 15.5259 12.7495 15.7247C12.5732 15.9235 12.3252 16.0441 12.06 16.06C11.7948 16.0759 11.5341 15.9858 11.3353 15.8095C11.1365 15.6332 11.0159 15.3852 11 15.12V10C11 9.73478 11.1054 9.48043 11.2929 9.29289C11.4804 9.10536 11.7348 9 12 9ZM3 6C2.73478 6.01591 2.47411 5.92582 2.27532 5.74953C2.07653 5.57325 1.95591 5.32522 1.94 5.06C1.92409 4.79478 2.01418 4.53411 2.19047 4.33532C2.36675 4.13653 2.61478 4.01591 2.88 4H6.23L6.66 2.3C6.8129 1.67693 7.16151 1.11929 7.65466 0.708933C8.14781 0.298574 8.75952 0.0571152 9.4 0.02H10.45C11.0881 0.0203866 11.7094 0.224211 12.2237 0.60186C12.7381 0.979509 13.1186 1.51131 13.31 2.12L13.36 2.28L13.79 3.99H17C17.2652 3.97409 17.5259 4.06418 17.7247 4.24047C17.9235 4.41675 18.0441 4.66478 18.06 4.93C18.0759 5.19522 17.9858 5.45589 17.8095 5.65468C17.6332 5.85347 17.3852 5.97409 17.12 5.99H3V6ZM10.44 2.03H9.57C9.36856 2.0306 9.17199 2.09201 9.00605 2.20621C8.8401 2.32041 8.71252 2.48206 8.64 2.67L8.6 2.78L8.3 4H11.72L11.42 2.78C11.3746 2.60092 11.2805 2.4379 11.1481 2.30905C11.0157 2.18019 10.8502 2.09053 10.67 2.05L10.55 2.03H10.45H10.44Z"/></svg>
|
|
2
|
+
`;
|
|
3
|
+
export {
|
|
4
|
+
C as default
|
|
5
|
+
};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
const C = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M10 4C10.2457 3.99823 10.4834 4.08695 10.6679 4.24926C10.8523 4.41157 10.9705 4.63609 11 4.88V9H15C15.2652 8.98409 15.5259 9.07418 15.7247 9.25047C15.9235 9.42675 16.0441 9.67478 16.06 9.94C16.0759 10.2052 15.9858 10.4659 15.8095 10.6647C15.6332 10.8635 15.3852 10.9841 15.12 11H11V15C11.0159 15.2652 10.9258 15.5259 10.7495 15.7247C10.5732 15.9235 10.3252 16.0441 10.06 16.06C9.79478 16.0759 9.53411 15.9858 9.33532 15.8095C9.13653 15.6332 9.01591 15.3852 9 15.12V11H5C4.73478 11.0159 4.47411 10.9258 4.27532 10.7495C4.07653 10.5732 3.95591 10.3252 3.94 10.06C3.92409 9.79478 4.01418 9.53411 4.19047 9.33532C4.36675 9.13653 4.61478 9.01591 4.88 9H9V5C9 4.73478 9.10536 4.48043 9.29289 4.29289C9.48043 4.10536 9.73478 4 10 4Z"/></svg>
|
|
2
|
+
`;
|
|
3
|
+
export {
|
|
4
|
+
C as default
|
|
5
|
+
};
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
const n = `/* Recommendation Strategy section of the recommendation block's settings panel
|
|
2
|
+
(SD-149105). Scoped to the section's own classes/ids so nothing leaks into
|
|
3
|
+
other blocks' controls. Measurements come from the Figma frames
|
|
4
|
+
4880:44449 (empty) and 4826:7513 (assigned). */
|
|
5
|
+
|
|
6
|
+
.strategy-control-header {
|
|
7
|
+
padding: 16px 16px 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.strategy-control-title {
|
|
11
|
+
margin: 0;
|
|
12
|
+
color: var(--guido-color-gray-800);
|
|
13
|
+
font-size: 16px;
|
|
14
|
+
font-weight: 600;
|
|
15
|
+
line-height: 24px;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.strategy-control-description-row {
|
|
19
|
+
padding: 8px 16px 16px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.strategy-control-description {
|
|
23
|
+
margin: 0;
|
|
24
|
+
color: var(--guido-color-gray-600);
|
|
25
|
+
font-size: 13px;
|
|
26
|
+
line-height: 16px;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.strategy-control-description a {
|
|
30
|
+
color: var(--guido-color-primary-500);
|
|
31
|
+
text-decoration: underline;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/* Assign + Create are two fixed 180px columns, left-aligned — not a stretched
|
|
35
|
+
half-and-half. The ancestor is load-bearing: it out-specifies the editor's own
|
|
36
|
+
\`.container.two-columns\` grid, which otherwise wins and leaves the CTAs uneven. */
|
|
37
|
+
.recommendation-controls-container .container.strategy-control-cta-row {
|
|
38
|
+
grid-template-columns: repeat(2, minmax(0, 180px));
|
|
39
|
+
justify-content: start;
|
|
40
|
+
gap: 16px;
|
|
41
|
+
padding: 0 16px 16px;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* The editor's grid does not stretch its items and the visible pill is the inner
|
|
45
|
+
\`.button\`, not the \`ue-button\` host — so both need the width or the two CTAs
|
|
46
|
+
come out sized to their own captions. */
|
|
47
|
+
.strategy-control-cta {
|
|
48
|
+
width: 100%;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.strategy-control-cta > .button {
|
|
52
|
+
display: flex;
|
|
53
|
+
gap: 8px;
|
|
54
|
+
justify-content: center;
|
|
55
|
+
width: 100%;
|
|
56
|
+
border: none;
|
|
57
|
+
font-size: 15px;
|
|
58
|
+
font-weight: 400;
|
|
59
|
+
line-height: 24px;
|
|
60
|
+
white-space: nowrap;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Secondary action keeps full contrast while disabled — the round trip ships
|
|
64
|
+
in a later phase, but the design shows it as a normal grey button. */
|
|
65
|
+
.strategy-control-cta.primary > .button:disabled,
|
|
66
|
+
.strategy-control-cta.primary > .button.disabled {
|
|
67
|
+
opacity: 1;
|
|
68
|
+
color: var(--guido-color-gray-800);
|
|
69
|
+
cursor: default;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/* The assigned strategy's name sits in a band that spans the whole panel, so it
|
|
73
|
+
carries its own 16px inset instead of inheriting the section's. */
|
|
74
|
+
.strategy-control-name-band {
|
|
75
|
+
display: flex;
|
|
76
|
+
align-items: center;
|
|
77
|
+
min-height: 48px;
|
|
78
|
+
padding: 0 16px;
|
|
79
|
+
background-color: var(--guido-color-gray-0);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.strategy-control-name {
|
|
83
|
+
color: var(--guido-color-gray-800);
|
|
84
|
+
font-size: 15px;
|
|
85
|
+
font-weight: 600;
|
|
86
|
+
line-height: 24px;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
.strategy-control-actions {
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
padding: 16px;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.strategy-control-action {
|
|
96
|
+
display: inline-flex;
|
|
97
|
+
align-items: center;
|
|
98
|
+
padding: 0;
|
|
99
|
+
border: none;
|
|
100
|
+
background: none;
|
|
101
|
+
font-size: 15px;
|
|
102
|
+
font-weight: 400;
|
|
103
|
+
line-height: 24px;
|
|
104
|
+
cursor: pointer;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/* The label carries the gap on both sides, which is also what separates Change
|
|
108
|
+
from Remove — matching the design's button wrappers. */
|
|
109
|
+
.strategy-control-action > span {
|
|
110
|
+
padding: 0 8px;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/* Icons are masks rather than inline SVG — Stripo rebuilds the control markup
|
|
114
|
+
through Angular, which recreates <svg> outside the SVG namespace so it never
|
|
115
|
+
paints. A mask is a background, so it survives that round trip. The glyphs
|
|
116
|
+
live in static/assets/icons and reach these vars via useCustomInterfaceAppearance. */
|
|
117
|
+
.strategy-control-action::before,
|
|
118
|
+
.strategy-control-cta.on > .button::before {
|
|
119
|
+
content: '';
|
|
120
|
+
flex: none;
|
|
121
|
+
width: 24px;
|
|
122
|
+
height: 24px;
|
|
123
|
+
background-color: currentcolor;
|
|
124
|
+
mask-repeat: no-repeat;
|
|
125
|
+
mask-position: center;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/* The design system's \`line-change\` glyph fills its 24px box; the 20px glyphs
|
|
129
|
+
are centred inside the same box, as the design draws them. */
|
|
130
|
+
.strategy-control-action--change::before {
|
|
131
|
+
mask-size: 24px 24px;
|
|
132
|
+
mask-image: var(--guido-icon-line-change);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.strategy-control-action--remove::before {
|
|
136
|
+
mask-size: 20px 20px;
|
|
137
|
+
mask-image: var(--guido-icon-line-delete);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
.strategy-control-cta.on > .button::before {
|
|
141
|
+
mask-size: 20px 20px;
|
|
142
|
+
mask-image: var(--guido-icon-line-plus);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.strategy-control-action--change {
|
|
146
|
+
color: var(--guido-color-primary-500);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.strategy-control-action--remove {
|
|
150
|
+
color: var(--guido-color-danger-500);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.strategy-control-action:hover {
|
|
154
|
+
text-decoration: underline;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Per-block controls (SD-149105). With the flag on the panel carries BOTH the
|
|
158
|
+
legacy and the strategy controls — Stripo reuses one panel across blocks of
|
|
159
|
+
the same type and never re-runs getTemplate() on a switch — and
|
|
160
|
+
\`.strategy-block\` picks which set the selected block shows. */
|
|
161
|
+
.recommendation-controls-container:not(.strategy-block) .strategy-control-container,
|
|
162
|
+
.recommendation-controls-container.strategy-block .product-count-control-container,
|
|
163
|
+
.recommendation-controls-container.strategy-block .algorithm-control-container,
|
|
164
|
+
.recommendation-controls-container.strategy-block .filters-control-container,
|
|
165
|
+
.recommendation-controls-container.strategy-block .shuffle-control-container {
|
|
166
|
+
display: none;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/* The RRS panel's order (Figma 4826:7513) is the legacy DOM order with these
|
|
170
|
+
two sent to the end; everything else already lands where the design wants it.
|
|
171
|
+
Only \`.strategy-block\` becomes a flex container, so a legacy block keeps plain
|
|
172
|
+
block flow and stays exactly what it is with the flag off. */
|
|
173
|
+
.recommendation-controls-container.strategy-block {
|
|
174
|
+
display: flex;
|
|
175
|
+
flex-direction: column;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.recommendation-controls-container.strategy-block .price-placement-control-container {
|
|
179
|
+
order: 1;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.recommendation-controls-container.strategy-block .product-layout-control-container {
|
|
183
|
+
order: 2;
|
|
184
|
+
}
|
|
185
|
+
`;
|
|
186
|
+
export {
|
|
187
|
+
n as default
|
|
188
|
+
};
|
|
@@ -43,9 +43,7 @@ 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
|
|
47
|
-
.recommendation-block-v2 .ins-recommendation-title ue-node-actions,
|
|
48
|
-
.recommendation-block-v2 .ins-recommendation-title ue-node-panel {
|
|
46
|
+
.recommendation-block-v2 .product-button ue-node-panel {
|
|
49
47
|
display: none !important;
|
|
50
48
|
}
|
|
51
49
|
|
package/dist/utils/dateUtil.js
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
import { DEFAULT_LOCALE as
|
|
2
|
-
const
|
|
1
|
+
import { DEFAULT_LOCALE as a, DEFAULT as c, DEFAULT_TZ as s } 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(), u = () => {
|
|
3
3
|
const t = window.l10n;
|
|
4
|
-
return (t == null ? void 0 : t.locale) ===
|
|
5
|
-
}
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
return (t == null ? void 0 : t.locale) === c ? a : (t == null ? void 0 : t.locale) || a;
|
|
5
|
+
}, f = new Intl.DateTimeFormat().resolvedOptions().timeZone, D = () => {
|
|
6
|
+
const t = window.l10n;
|
|
7
|
+
return (t == null ? void 0 : t.timezone) || f || s;
|
|
8
|
+
}, i = /* @__PURE__ */ new Map(), l = (t, e) => {
|
|
9
|
+
const r = `${t}|${e}`, n = i.get(r);
|
|
10
|
+
if (n)
|
|
11
|
+
return n;
|
|
12
|
+
const o = new Intl.DateTimeFormat(t, {
|
|
13
|
+
year: "numeric",
|
|
14
|
+
month: "2-digit",
|
|
15
|
+
day: "2-digit",
|
|
16
|
+
timeZone: e
|
|
17
|
+
});
|
|
18
|
+
return i.set(r, o), o;
|
|
19
|
+
}, T = (t, e = u(), r = D()) => {
|
|
20
|
+
const n = m(t);
|
|
21
|
+
return l(e, r).format(n);
|
|
22
|
+
}, g = (t) => {
|
|
8
23
|
if (!t)
|
|
9
24
|
return "";
|
|
10
25
|
const e = new Date(t);
|
|
@@ -16,9 +31,13 @@ const i = (t) => {
|
|
|
16
31
|
second: "2-digit",
|
|
17
32
|
hour12: !1
|
|
18
33
|
}).format(e);
|
|
19
|
-
},
|
|
34
|
+
}, w = (t) => t ? Math.floor(Date.now() / 1e3) >= t : !1;
|
|
20
35
|
export {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
36
|
+
m as convertToDateObject,
|
|
37
|
+
g as formatPatchDate,
|
|
38
|
+
T as formatShortDate,
|
|
39
|
+
w as isAfterDate,
|
|
40
|
+
f as localTz,
|
|
41
|
+
u as locale,
|
|
42
|
+
D as timezone
|
|
24
43
|
};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useTranslations as m } from "../composables/useTranslations.js";
|
|
2
|
+
import { formatShortDate as u } from "./dateUtil.js";
|
|
3
|
+
import { escapeHtml as c } from "./htmlEscape.js";
|
|
4
|
+
const n = "assign-strategy-info-box", a = (e) => typeof e == "string" ? e : typeof e == "number" ? String(e) : "", p = (e, t) => {
|
|
5
|
+
const r = a(e.algorithm) === "MIXED" ? t("discovery-strategy.mixed-algorithm") : t("discovery-strategy.single-algorithm"), i = a(e.algorithm_used).split(",").map((o) => o.trim()).filter(Boolean).map((o) => t(`recommendation-algorithm-names.${o.replaceAll("_", "-").toLowerCase()}`));
|
|
6
|
+
return i.length ? `${r} · ${i.join(", ")}` : r;
|
|
7
|
+
}, g = (e, t) => [
|
|
8
|
+
[e.exclude_view, "discovery-strategy.exclude-recently-view-items"],
|
|
9
|
+
[e.exclude_purchase, "discovery-strategy.exclude-recently-purchased-items"],
|
|
10
|
+
[e.exclude_cart, "discovery-strategy.exclude-recently-added-cart-items"]
|
|
11
|
+
].filter(([r]) => Number(r) === 1).map(([, r]) => t(r)).join(", "), h = (e) => a(
|
|
12
|
+
e.manual_merchandising || e.manual_merchandising_products
|
|
13
|
+
).trim(), _ = (e) => {
|
|
14
|
+
const t = e.filters;
|
|
15
|
+
if (!t)
|
|
16
|
+
return 0;
|
|
17
|
+
try {
|
|
18
|
+
const r = typeof t == "string" ? JSON.parse(t) : t;
|
|
19
|
+
return Array.isArray(r) ? r.reduce((i, o) => i + (Array.isArray(o) ? o.length : 1), 0) : 0;
|
|
20
|
+
} catch {
|
|
21
|
+
return 0;
|
|
22
|
+
}
|
|
23
|
+
}, s = (e, t) => `<div class="${n}__row"><span class="${n}__label">${c(e)}</span><span class="${n}__value">${c(t)}</span></div>`, v = (e, t = m()) => {
|
|
24
|
+
const r = t("recommendation-strategy.none"), i = a(e.updated_at || e.created_at), o = _(e), d = i ? c(t("recommendation-strategy.last-updated-on", { value: u(i) })) : "", l = d ? `<div class="${n}__updated">${d}</div>` : "";
|
|
25
|
+
return {
|
|
26
|
+
id: `strategy-info-${e.strategy_id}`,
|
|
27
|
+
theme: "light",
|
|
28
|
+
variant: "information",
|
|
29
|
+
className: n,
|
|
30
|
+
titleText: c(a(e.name)),
|
|
31
|
+
descriptionText: l + s(t("gpt-app-builder.algorithms-and-method"), p(e, t)) + s(t("gpt-app-builder.exclusions"), g(e, t) || r) + s(t("discovery-strategy.filters"), o ? String(o) : r) + s(t("action-builder.manual-merchandising"), h(e) || r)
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
export {
|
|
35
|
+
n as STRATEGY_INFO_BOX_CLASS,
|
|
36
|
+
v as buildStrategyInfoBoxProps
|
|
37
|
+
};
|