@useinsider/guido 3.21.1 → 3.21.2-beta.cfc5be2
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 +41 -39
- package/dist/@types/display-condition.js +25 -0
- package/dist/components/Guido.vue.js +6 -6
- package/dist/components/Guido.vue2.js +81 -79
- package/dist/components/organisms/display-conditions/CodeEditorField.vue.js +20 -0
- package/dist/components/organisms/display-conditions/CodeEditorField.vue2.js +30 -0
- package/dist/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue.js +30 -0
- package/dist/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue2.js +71 -0
- package/dist/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue.js +34 -0
- package/dist/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue2.js +57 -0
- package/dist/components/organisms/display-conditions/DisplayConditionsHost.vue.js +17 -0
- package/dist/components/organisms/display-conditions/DisplayConditionsHost.vue2.js +22 -0
- package/dist/composables/useBlocksConfig.js +32 -24
- package/dist/composables/useDisplayConditions.js +102 -0
- package/dist/config/compiler/utils/recommendationCompilerUtils.js +55 -53
- package/dist/enums/academy.js +1 -0
- package/dist/enums/display-condition.js +12 -0
- package/dist/extensions/Blocks/Recommendation/block.js +52 -37
- package/dist/extensions/Blocks/Recommendation/controls/image/index.js +76 -16
- package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +16 -15
- package/dist/extensions/DisplayConditions/bridge.js +17 -0
- package/dist/extensions/DisplayConditions/constants.js +17 -0
- package/dist/extensions/DisplayConditions/control.js +178 -0
- package/dist/extensions/DisplayConditions/display-conditions.css.js +201 -0
- package/dist/extensions/DisplayConditions/extension.js +28 -0
- package/dist/extensions/DisplayConditions/iconsRegistry.js +20 -0
- package/dist/extensions/DisplayConditions/library.js +27 -0
- package/dist/extensions/DisplayConditions/settingsPanel.js +17 -0
- package/dist/guido.css +1 -1
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +93 -92
- package/dist/node_modules/valibot/dist/index.js +297 -261
- package/dist/services/displayConditionApi.js +39 -0
- package/dist/src/@types/config/schemas.d.ts +4 -0
- package/dist/src/@types/display-condition.d.ts +59 -0
- package/dist/src/components/organisms/display-conditions/CodeEditorField.vue.d.ts +43 -0
- package/dist/src/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue.d.ts +2 -0
- package/dist/src/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue.d.ts +2 -0
- package/dist/src/components/organisms/display-conditions/DisplayConditionsHost.vue.d.ts +2 -0
- package/dist/src/composables/useConfig.d.ts +2 -0
- package/dist/src/composables/useDisplayConditions.d.ts +16 -0
- package/dist/src/enums/academy.d.ts +1 -0
- package/dist/src/enums/display-condition.d.ts +15 -0
- package/dist/src/extensions/Blocks/Recommendation/block.d.ts +2 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +31 -17
- package/dist/src/extensions/DisplayConditions/bridge.d.ts +6 -0
- package/dist/src/extensions/DisplayConditions/constants.d.ts +14 -0
- package/dist/src/extensions/DisplayConditions/control.d.ts +23 -0
- package/dist/src/extensions/DisplayConditions/extension.d.ts +2 -0
- package/dist/src/extensions/DisplayConditions/iconsRegistry.d.ts +4 -0
- package/dist/src/extensions/DisplayConditions/library.d.ts +8 -0
- package/dist/src/extensions/DisplayConditions/settingsPanel.d.ts +5 -0
- package/dist/src/mock/api/display-conditions.d.ts +2 -0
- package/dist/src/services/displayConditionApi.d.ts +8 -0
- package/dist/src/stores/config.d.ts +166 -0
- package/dist/src/stores/display-condition.d.ts +81 -0
- package/dist/src/utils/displayCondition.d.ts +10 -0
- package/dist/src/utils/protectTableText.d.ts +2 -0
- package/dist/stores/config.js +13 -6
- package/dist/stores/display-condition.js +28 -0
- package/dist/utils/displayCondition.js +26 -0
- package/dist/utils/pairProductVariables.js +15 -14
- package/dist/utils/protectTableText.js +22 -0
- package/package.json +1 -1
|
@@ -94,6 +94,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
94
94
|
ui: {
|
|
95
95
|
showHeader: boolean;
|
|
96
96
|
backButtonLabel?: string | undefined;
|
|
97
|
+
externalDisplayConditions: boolean;
|
|
97
98
|
};
|
|
98
99
|
features: {
|
|
99
100
|
dynamicContent: boolean;
|
|
@@ -239,6 +240,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
239
240
|
ui: {
|
|
240
241
|
showHeader: boolean;
|
|
241
242
|
backButtonLabel?: string | undefined;
|
|
243
|
+
externalDisplayConditions: boolean;
|
|
242
244
|
};
|
|
243
245
|
features: {
|
|
244
246
|
dynamicContent: boolean;
|
|
@@ -384,6 +386,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
384
386
|
ui: {
|
|
385
387
|
showHeader: boolean;
|
|
386
388
|
backButtonLabel?: string | undefined;
|
|
389
|
+
externalDisplayConditions: boolean;
|
|
387
390
|
};
|
|
388
391
|
features: {
|
|
389
392
|
dynamicContent: boolean;
|
|
@@ -529,6 +532,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
529
532
|
ui: {
|
|
530
533
|
showHeader: boolean;
|
|
531
534
|
backButtonLabel?: string | undefined;
|
|
535
|
+
externalDisplayConditions: boolean;
|
|
532
536
|
};
|
|
533
537
|
features: {
|
|
534
538
|
dynamicContent: boolean;
|
|
@@ -674,6 +678,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
674
678
|
ui: {
|
|
675
679
|
showHeader: boolean;
|
|
676
680
|
backButtonLabel?: string | undefined;
|
|
681
|
+
externalDisplayConditions: boolean;
|
|
677
682
|
};
|
|
678
683
|
features: {
|
|
679
684
|
dynamicContent: boolean;
|
|
@@ -819,6 +824,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
819
824
|
ui: {
|
|
820
825
|
showHeader: boolean;
|
|
821
826
|
backButtonLabel?: string | undefined;
|
|
827
|
+
externalDisplayConditions: boolean;
|
|
822
828
|
};
|
|
823
829
|
features: {
|
|
824
830
|
dynamicContent: boolean;
|
|
@@ -964,6 +970,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
964
970
|
ui: {
|
|
965
971
|
showHeader: boolean;
|
|
966
972
|
backButtonLabel?: string | undefined;
|
|
973
|
+
externalDisplayConditions: boolean;
|
|
967
974
|
};
|
|
968
975
|
features: {
|
|
969
976
|
dynamicContent: boolean;
|
|
@@ -1109,6 +1116,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1109
1116
|
ui: {
|
|
1110
1117
|
showHeader: boolean;
|
|
1111
1118
|
backButtonLabel?: string | undefined;
|
|
1119
|
+
externalDisplayConditions: boolean;
|
|
1112
1120
|
};
|
|
1113
1121
|
features: {
|
|
1114
1122
|
dynamicContent: boolean;
|
|
@@ -1254,6 +1262,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1254
1262
|
ui: {
|
|
1255
1263
|
showHeader: boolean;
|
|
1256
1264
|
backButtonLabel?: string | undefined;
|
|
1265
|
+
externalDisplayConditions: boolean;
|
|
1257
1266
|
};
|
|
1258
1267
|
features: {
|
|
1259
1268
|
dynamicContent: boolean;
|
|
@@ -1399,6 +1408,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1399
1408
|
ui: {
|
|
1400
1409
|
showHeader: boolean;
|
|
1401
1410
|
backButtonLabel?: string | undefined;
|
|
1411
|
+
externalDisplayConditions: boolean;
|
|
1402
1412
|
};
|
|
1403
1413
|
features: {
|
|
1404
1414
|
dynamicContent: boolean;
|
|
@@ -1544,6 +1554,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1544
1554
|
ui: {
|
|
1545
1555
|
showHeader: boolean;
|
|
1546
1556
|
backButtonLabel?: string | undefined;
|
|
1557
|
+
externalDisplayConditions: boolean;
|
|
1547
1558
|
};
|
|
1548
1559
|
features: {
|
|
1549
1560
|
dynamicContent: boolean;
|
|
@@ -1689,6 +1700,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1689
1700
|
ui: {
|
|
1690
1701
|
showHeader: boolean;
|
|
1691
1702
|
backButtonLabel?: string | undefined;
|
|
1703
|
+
externalDisplayConditions: boolean;
|
|
1692
1704
|
};
|
|
1693
1705
|
features: {
|
|
1694
1706
|
dynamicContent: boolean;
|
|
@@ -1834,6 +1846,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1834
1846
|
ui: {
|
|
1835
1847
|
showHeader: boolean;
|
|
1836
1848
|
backButtonLabel?: string | undefined;
|
|
1849
|
+
externalDisplayConditions: boolean;
|
|
1837
1850
|
};
|
|
1838
1851
|
features: {
|
|
1839
1852
|
dynamicContent: boolean;
|
|
@@ -1979,6 +1992,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
1979
1992
|
ui: {
|
|
1980
1993
|
showHeader: boolean;
|
|
1981
1994
|
backButtonLabel?: string | undefined;
|
|
1995
|
+
externalDisplayConditions: boolean;
|
|
1982
1996
|
};
|
|
1983
1997
|
features: {
|
|
1984
1998
|
dynamicContent: boolean;
|
|
@@ -2124,6 +2138,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
2124
2138
|
ui: {
|
|
2125
2139
|
showHeader: boolean;
|
|
2126
2140
|
backButtonLabel?: string | undefined;
|
|
2141
|
+
externalDisplayConditions: boolean;
|
|
2127
2142
|
};
|
|
2128
2143
|
features: {
|
|
2129
2144
|
dynamicContent: boolean;
|
|
@@ -2269,6 +2284,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
2269
2284
|
ui: {
|
|
2270
2285
|
showHeader: boolean;
|
|
2271
2286
|
backButtonLabel?: string | undefined;
|
|
2287
|
+
externalDisplayConditions: boolean;
|
|
2272
2288
|
};
|
|
2273
2289
|
features: {
|
|
2274
2290
|
dynamicContent: boolean;
|
|
@@ -2414,6 +2430,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
2414
2430
|
ui: {
|
|
2415
2431
|
showHeader: boolean;
|
|
2416
2432
|
backButtonLabel?: string | undefined;
|
|
2433
|
+
externalDisplayConditions: boolean;
|
|
2417
2434
|
};
|
|
2418
2435
|
features: {
|
|
2419
2436
|
dynamicContent: boolean;
|
|
@@ -2571,6 +2588,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
2571
2588
|
ui: {
|
|
2572
2589
|
showHeader: boolean;
|
|
2573
2590
|
backButtonLabel?: string | undefined;
|
|
2591
|
+
externalDisplayConditions: boolean;
|
|
2574
2592
|
};
|
|
2575
2593
|
features: {
|
|
2576
2594
|
dynamicContent: boolean;
|
|
@@ -2716,6 +2734,153 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
2716
2734
|
ui: {
|
|
2717
2735
|
showHeader: boolean;
|
|
2718
2736
|
backButtonLabel?: string | undefined;
|
|
2737
|
+
externalDisplayConditions: boolean;
|
|
2738
|
+
};
|
|
2739
|
+
features: {
|
|
2740
|
+
dynamicContent: boolean;
|
|
2741
|
+
saveAsTemplate: boolean;
|
|
2742
|
+
versionHistory: boolean;
|
|
2743
|
+
testMessage: boolean;
|
|
2744
|
+
displayConditions: boolean;
|
|
2745
|
+
unsubscribe: boolean;
|
|
2746
|
+
modulesDisabled: boolean;
|
|
2747
|
+
liquidSyntax: boolean;
|
|
2748
|
+
autosave: boolean;
|
|
2749
|
+
allowlistEnabled: boolean;
|
|
2750
|
+
linkTrackingIds: boolean;
|
|
2751
|
+
allowSaveWithErrors: boolean;
|
|
2752
|
+
reusableRecommendationStrategy: boolean;
|
|
2753
|
+
};
|
|
2754
|
+
blocks: {
|
|
2755
|
+
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")[];
|
|
2756
|
+
includeCustoms: ("dynamic-content" | "checkbox-block" | "radio-button-block" | "recommendation-block" | "unsubscribe-block" | "coupon-block" | "items-block")[];
|
|
2757
|
+
};
|
|
2758
|
+
compiler: {
|
|
2759
|
+
customRules: ({
|
|
2760
|
+
type: "replace";
|
|
2761
|
+
search: string;
|
|
2762
|
+
replacement: string;
|
|
2763
|
+
replaceAll?: boolean | undefined;
|
|
2764
|
+
id: string;
|
|
2765
|
+
description?: string | undefined;
|
|
2766
|
+
priority: number;
|
|
2767
|
+
} | {
|
|
2768
|
+
type: "regex";
|
|
2769
|
+
pattern: string;
|
|
2770
|
+
replacement: string;
|
|
2771
|
+
flags?: string | undefined;
|
|
2772
|
+
id: string;
|
|
2773
|
+
description?: string | undefined;
|
|
2774
|
+
priority: number;
|
|
2775
|
+
} | {
|
|
2776
|
+
type: "remove";
|
|
2777
|
+
targets: string[];
|
|
2778
|
+
id: string;
|
|
2779
|
+
description?: string | undefined;
|
|
2780
|
+
priority: number;
|
|
2781
|
+
} | {
|
|
2782
|
+
type: "custom";
|
|
2783
|
+
processor: (html: string) => string;
|
|
2784
|
+
id: string;
|
|
2785
|
+
description?: string | undefined;
|
|
2786
|
+
priority: number;
|
|
2787
|
+
})[];
|
|
2788
|
+
ignoreDefaultRules: boolean;
|
|
2789
|
+
};
|
|
2790
|
+
callbacks: {
|
|
2791
|
+
externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
|
|
2792
|
+
};
|
|
2793
|
+
} | null;
|
|
2794
|
+
} & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => boolean;
|
|
2795
|
+
/**
|
|
2796
|
+
* Check if the Insider display-condition UI replaces Stripo's
|
|
2797
|
+
*/
|
|
2798
|
+
externalDisplayConditions: (state: {
|
|
2799
|
+
initialized: boolean;
|
|
2800
|
+
config: {
|
|
2801
|
+
identity: {
|
|
2802
|
+
templateId: string;
|
|
2803
|
+
userId: string;
|
|
2804
|
+
variationId?: string | undefined;
|
|
2805
|
+
campaignId?: string | undefined;
|
|
2806
|
+
templateLibraryId?: string | undefined;
|
|
2807
|
+
};
|
|
2808
|
+
partner: {
|
|
2809
|
+
name: string;
|
|
2810
|
+
productType: 60 | 49 | 97;
|
|
2811
|
+
messageType: 1 | 2;
|
|
2812
|
+
username: string;
|
|
2813
|
+
fallbackFont?: {
|
|
2814
|
+
name: string;
|
|
2815
|
+
family: string;
|
|
2816
|
+
} | undefined;
|
|
2817
|
+
};
|
|
2818
|
+
template: {
|
|
2819
|
+
html: string;
|
|
2820
|
+
css: string;
|
|
2821
|
+
preselectedDynamicContent: {
|
|
2822
|
+
text: string;
|
|
2823
|
+
value: string;
|
|
2824
|
+
fallback?: string | undefined;
|
|
2825
|
+
format?: {
|
|
2826
|
+
key: string;
|
|
2827
|
+
value: string;
|
|
2828
|
+
} | undefined;
|
|
2829
|
+
}[];
|
|
2830
|
+
dynamicContentList: {
|
|
2831
|
+
[x: string]: import("../library").DynamicContentNode[];
|
|
2832
|
+
};
|
|
2833
|
+
customFieldAttributes: string[];
|
|
2834
|
+
selectedUnsubscribePages: number[];
|
|
2835
|
+
forceRecreate: boolean;
|
|
2836
|
+
trackIdCounter: number;
|
|
2837
|
+
recommendationCampaignUrls?: Record<string, unknown> | undefined;
|
|
2838
|
+
migration: {
|
|
2839
|
+
recommendationConfigs: {
|
|
2840
|
+
[x: string]: {
|
|
2841
|
+
id?: number | undefined;
|
|
2842
|
+
decimalCount?: string | number | undefined;
|
|
2843
|
+
productIds?: unknown[] | undefined;
|
|
2844
|
+
sendProductRequestFlag?: boolean | undefined;
|
|
2845
|
+
shuffleProducts?: boolean | undefined;
|
|
2846
|
+
filters?: unknown[] | undefined;
|
|
2847
|
+
currency?: string | undefined;
|
|
2848
|
+
currencySettings?: unknown;
|
|
2849
|
+
language?: string | undefined;
|
|
2850
|
+
strategy?: string | undefined;
|
|
2851
|
+
recommendedProducts?: unknown[] | undefined;
|
|
2852
|
+
cardsInRow?: number | undefined;
|
|
2853
|
+
mobileRightPadding?: number | undefined;
|
|
2854
|
+
mobileLeftPadding?: number | undefined;
|
|
2855
|
+
unresponsive?: boolean | undefined;
|
|
2856
|
+
orientation?: string | undefined;
|
|
2857
|
+
textTrimming?: boolean | undefined;
|
|
2858
|
+
blockType?: string | undefined;
|
|
2859
|
+
size?: string | number | undefined;
|
|
2860
|
+
verticalResponsiveness?: boolean | undefined;
|
|
2861
|
+
isPriceMovedToNextLine?: boolean | undefined;
|
|
2862
|
+
isPriceDeletedForZeroSale?: boolean | undefined;
|
|
2863
|
+
} & {
|
|
2864
|
+
[key: string]: unknown;
|
|
2865
|
+
};
|
|
2866
|
+
};
|
|
2867
|
+
};
|
|
2868
|
+
};
|
|
2869
|
+
editor: {
|
|
2870
|
+
locale: string;
|
|
2871
|
+
translationsPath: string;
|
|
2872
|
+
migrationDate: number;
|
|
2873
|
+
emailHeader: {
|
|
2874
|
+
senderName: string;
|
|
2875
|
+
subject: string;
|
|
2876
|
+
};
|
|
2877
|
+
savedModulesFolderName: string;
|
|
2878
|
+
defaultModulesFolderName: string;
|
|
2879
|
+
};
|
|
2880
|
+
ui: {
|
|
2881
|
+
showHeader: boolean;
|
|
2882
|
+
backButtonLabel?: string | undefined;
|
|
2883
|
+
externalDisplayConditions: boolean;
|
|
2719
2884
|
};
|
|
2720
2885
|
features: {
|
|
2721
2886
|
dynamicContent: boolean;
|
|
@@ -2863,6 +3028,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
|
|
|
2863
3028
|
ui: {
|
|
2864
3029
|
showHeader: boolean;
|
|
2865
3030
|
backButtonLabel?: string | undefined;
|
|
3031
|
+
externalDisplayConditions: boolean;
|
|
2866
3032
|
};
|
|
2867
3033
|
features: {
|
|
2868
3034
|
dynamicContent: boolean;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { AppliedDisplayCondition, SavedDisplayCondition } from '@@/Types/display-condition';
|
|
2
|
+
export type DisplayConditionView = 'none' | 'create' | 'select';
|
|
3
|
+
export type DisplayConditionListStatus = 'idle' | 'loading' | 'loaded' | 'error';
|
|
4
|
+
interface DisplayConditionState {
|
|
5
|
+
view: DisplayConditionView;
|
|
6
|
+
editing: AppliedDisplayCondition | null;
|
|
7
|
+
list: SavedDisplayCondition[];
|
|
8
|
+
listStatus: DisplayConditionListStatus;
|
|
9
|
+
pendingDelete: SavedDisplayCondition | null;
|
|
10
|
+
}
|
|
11
|
+
export declare const useDisplayConditionStore: import("pinia").StoreDefinition<"guidoDisplayCondition", DisplayConditionState, {
|
|
12
|
+
isCreateOpen: (state: {
|
|
13
|
+
view: DisplayConditionView;
|
|
14
|
+
editing: {
|
|
15
|
+
id: number;
|
|
16
|
+
name: string;
|
|
17
|
+
description: string;
|
|
18
|
+
beforeScript: string;
|
|
19
|
+
afterScript: string;
|
|
20
|
+
extraData?: string | undefined;
|
|
21
|
+
} | null;
|
|
22
|
+
list: {
|
|
23
|
+
id: number;
|
|
24
|
+
name: string;
|
|
25
|
+
description: string;
|
|
26
|
+
syntax: "liquid" | "pongo";
|
|
27
|
+
method: "codeOnly" | "logicBuilder";
|
|
28
|
+
codeBefore: string;
|
|
29
|
+
codeAfter: string;
|
|
30
|
+
createdAt?: string | undefined;
|
|
31
|
+
}[];
|
|
32
|
+
listStatus: DisplayConditionListStatus;
|
|
33
|
+
pendingDelete: {
|
|
34
|
+
id: number;
|
|
35
|
+
name: string;
|
|
36
|
+
description: string;
|
|
37
|
+
syntax: "liquid" | "pongo";
|
|
38
|
+
method: "codeOnly" | "logicBuilder";
|
|
39
|
+
codeBefore: string;
|
|
40
|
+
codeAfter: string;
|
|
41
|
+
createdAt?: string | undefined;
|
|
42
|
+
} | null;
|
|
43
|
+
} & import("pinia").PiniaCustomStateProperties<DisplayConditionState>) => boolean;
|
|
44
|
+
isSelectOpen: (state: {
|
|
45
|
+
view: DisplayConditionView;
|
|
46
|
+
editing: {
|
|
47
|
+
id: number;
|
|
48
|
+
name: string;
|
|
49
|
+
description: string;
|
|
50
|
+
beforeScript: string;
|
|
51
|
+
afterScript: string;
|
|
52
|
+
extraData?: string | undefined;
|
|
53
|
+
} | null;
|
|
54
|
+
list: {
|
|
55
|
+
id: number;
|
|
56
|
+
name: string;
|
|
57
|
+
description: string;
|
|
58
|
+
syntax: "liquid" | "pongo";
|
|
59
|
+
method: "codeOnly" | "logicBuilder";
|
|
60
|
+
codeBefore: string;
|
|
61
|
+
codeAfter: string;
|
|
62
|
+
createdAt?: string | undefined;
|
|
63
|
+
}[];
|
|
64
|
+
listStatus: DisplayConditionListStatus;
|
|
65
|
+
pendingDelete: {
|
|
66
|
+
id: number;
|
|
67
|
+
name: string;
|
|
68
|
+
description: string;
|
|
69
|
+
syntax: "liquid" | "pongo";
|
|
70
|
+
method: "codeOnly" | "logicBuilder";
|
|
71
|
+
codeBefore: string;
|
|
72
|
+
codeAfter: string;
|
|
73
|
+
createdAt?: string | undefined;
|
|
74
|
+
} | null;
|
|
75
|
+
} & import("pinia").PiniaCustomStateProperties<DisplayConditionState>) => boolean;
|
|
76
|
+
}, {
|
|
77
|
+
openCreate(editing?: AppliedDisplayCondition | null): void;
|
|
78
|
+
openSelect(): void;
|
|
79
|
+
close(): void;
|
|
80
|
+
}>;
|
|
81
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AppliedDisplayCondition, DisplayConditionSource } from '@@/Types/display-condition';
|
|
2
|
+
export declare const parseSource: (condition: AppliedDisplayCondition | null | undefined) => DisplayConditionSource | null;
|
|
3
|
+
type ConditionLike = Omit<AppliedDisplayCondition, 'description'> & {
|
|
4
|
+
description?: string | null;
|
|
5
|
+
};
|
|
6
|
+
export declare const toAppliedCondition: (condition: ConditionLike | null | undefined) => AppliedDisplayCondition | null;
|
|
7
|
+
export declare const nextConditionId: () => number;
|
|
8
|
+
export type CodeField = 'codeBefore' | 'codeAfter';
|
|
9
|
+
export declare const findInvalidCodeFields: (codeBefore: string, codeAfter: string) => CodeField[];
|
|
10
|
+
export {};
|
package/dist/stores/config.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { MessageType as
|
|
1
|
+
import { MessageType as a } from "../@types/config/schemas.js";
|
|
2
2
|
import "../@types/config/defaults.js";
|
|
3
|
-
import { parseConfig as
|
|
4
|
-
import { defineStore as
|
|
5
|
-
const g =
|
|
3
|
+
import { parseConfig as o } from "../@types/config/validator.js";
|
|
4
|
+
import { defineStore as l } from "pinia";
|
|
5
|
+
const g = l("guido-config", {
|
|
6
6
|
state: () => ({
|
|
7
7
|
initialized: !1,
|
|
8
8
|
config: null
|
|
@@ -132,7 +132,7 @@ const g = o("guido-config", {
|
|
|
132
132
|
* consumers stay safe in setup where a raw config read snapshots null (SD-147945).
|
|
133
133
|
*/
|
|
134
134
|
isTransactional() {
|
|
135
|
-
return this.messageType ===
|
|
135
|
+
return this.messageType === a.TRANSACTIONAL;
|
|
136
136
|
},
|
|
137
137
|
/**
|
|
138
138
|
* Soft-save policy: may the editor persist a template with validation errors?
|
|
@@ -158,6 +158,13 @@ const g = o("guido-config", {
|
|
|
158
158
|
var e, t;
|
|
159
159
|
return ((t = (e = i.config) == null ? void 0 : e.ui) == null ? void 0 : t.showHeader) ?? !0;
|
|
160
160
|
},
|
|
161
|
+
/**
|
|
162
|
+
* Check if the Insider display-condition UI replaces Stripo's
|
|
163
|
+
*/
|
|
164
|
+
externalDisplayConditions: (i) => {
|
|
165
|
+
var e, t, n, r;
|
|
166
|
+
return (((t = (e = i.config) == null ? void 0 : e.ui) == null ? void 0 : t.externalDisplayConditions) ?? !1) && (((r = (n = i.config) == null ? void 0 : n.features) == null ? void 0 : r.displayConditions) ?? !0);
|
|
167
|
+
},
|
|
161
168
|
/**
|
|
162
169
|
* Check if a specific feature is enabled.
|
|
163
170
|
* Returns false before init (config null) so header controls don't
|
|
@@ -174,7 +181,7 @@ const g = o("guido-config", {
|
|
|
174
181
|
* Initialize the config store with validated configuration
|
|
175
182
|
*/
|
|
176
183
|
init(i) {
|
|
177
|
-
const e =
|
|
184
|
+
const e = o(i);
|
|
178
185
|
this.config = e, this.initialized = !0;
|
|
179
186
|
},
|
|
180
187
|
/**
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { defineStore as i } from "pinia";
|
|
2
|
+
const n = i("guidoDisplayCondition", {
|
|
3
|
+
state: () => ({
|
|
4
|
+
view: "none",
|
|
5
|
+
editing: null,
|
|
6
|
+
list: [],
|
|
7
|
+
listStatus: "idle",
|
|
8
|
+
pendingDelete: null
|
|
9
|
+
}),
|
|
10
|
+
getters: {
|
|
11
|
+
isCreateOpen: (e) => e.view === "create",
|
|
12
|
+
isSelectOpen: (e) => e.view === "select"
|
|
13
|
+
},
|
|
14
|
+
actions: {
|
|
15
|
+
openCreate(e = null) {
|
|
16
|
+
this.editing = e, this.view = "create";
|
|
17
|
+
},
|
|
18
|
+
openSelect() {
|
|
19
|
+
this.editing = null, this.view = "select";
|
|
20
|
+
},
|
|
21
|
+
close() {
|
|
22
|
+
this.view = "none", this.pendingDelete = null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
export {
|
|
27
|
+
n as useDisplayConditionStore
|
|
28
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DisplayConditionSourceType as d } from "../enums/display-condition.js";
|
|
2
|
+
const m = (e) => {
|
|
3
|
+
if (!e)
|
|
4
|
+
return null;
|
|
5
|
+
try {
|
|
6
|
+
return JSON.parse(e.extraData ?? "{}").source === d.INLINE ? "inline" : "saved";
|
|
7
|
+
} catch {
|
|
8
|
+
return "saved";
|
|
9
|
+
}
|
|
10
|
+
}, E = (e) => !e || !(e.name || e.beforeScript || e.afterScript) ? null : { ...e, description: e.description ?? "" };
|
|
11
|
+
let o = 0;
|
|
12
|
+
const w = () => (o = Math.max(Date.now(), o + 1), o), f = /{%-?\s*(\w+)[\s\S]*?-?%}/g, p = /{%[\s\S]*?%}|{{[\s\S]*?}}/g, u = /{%-?\s*(comment|raw)\s*-?%}[\s\S]*?{%-?\s*end\1\s*-?%}/g, l = /* @__PURE__ */ new Set(["if", "unless", "for", "case", "capture", "tablerow", "comment"]), h = /* @__PURE__ */ new Set(["else", "elsif", "elif", "when"]), S = (e) => /{%|%}|{{|}}/.test(e.replace(p, "")), C = (e, c) => {
|
|
13
|
+
const t = /* @__PURE__ */ new Set(), r = [];
|
|
14
|
+
return [["codeBefore", e], ["codeAfter", c]].forEach(([n, i]) => {
|
|
15
|
+
const a = i.replace(u, "");
|
|
16
|
+
S(a) && t.add(n), Array.from(a.matchAll(f), (s) => s[1]).forEach((s) => {
|
|
17
|
+
l.has(s) ? r.push(s) : s.startsWith("end") && l.has(s.slice(3)) ? r.pop() !== s.slice(3) && t.add(n) : h.has(s) && !r.length && t.add(n);
|
|
18
|
+
});
|
|
19
|
+
}), r.length && t.add("codeAfter"), [...t];
|
|
20
|
+
};
|
|
21
|
+
export {
|
|
22
|
+
C as findInvalidCodeFields,
|
|
23
|
+
w as nextConditionId,
|
|
24
|
+
m as parseSource,
|
|
25
|
+
E as toAppliedCondition
|
|
26
|
+
};
|
|
@@ -1,28 +1,29 @@
|
|
|
1
|
-
import { ITEMS_CURRENCY_ATTR as
|
|
1
|
+
import { ITEMS_CURRENCY_ATTR as N, isCustomCurrencySymbol as Y } from "../extensions/Blocks/Items/constants/currency.js";
|
|
2
2
|
import { productPairs as w } from "../extensions/Blocks/Items/enums/productEnums.js";
|
|
3
3
|
import { escapeReplacement as X } from "../extensions/Blocks/Items/utils/nodeConfigUtils.js";
|
|
4
4
|
import { preserveTextStyles as P } from "./preserveTextStyles.js";
|
|
5
|
-
import {
|
|
5
|
+
import { protectTableText as v, restoreTableText as B } from "./protectTableText.js";
|
|
6
|
+
import { unwrapProductNameLinks as j } from "./unwrapProductNameLink.js";
|
|
6
7
|
const O = {
|
|
7
8
|
CART_ITEMS: "ins_apr",
|
|
8
9
|
BROWSED_ITEMS: "browsed_item",
|
|
9
10
|
PURCHASED_ITEMS: "purchased_item"
|
|
10
11
|
}, q = (S) => S.replaceAll("{%", "<!--{%").replaceAll("%}", "%}-->");
|
|
11
|
-
function
|
|
12
|
+
function Q(S, y, b) {
|
|
12
13
|
let h = y;
|
|
13
14
|
for (; h > 0 && /\s/.test(S[h - 1]); )
|
|
14
15
|
h -= 1;
|
|
15
16
|
return b.some((I) => S.endsWith(I, h));
|
|
16
17
|
}
|
|
17
|
-
function
|
|
18
|
-
const y = q(S), b = new DOMParser().parseFromString(y, "text/html");
|
|
19
|
-
|
|
18
|
+
function rt(S) {
|
|
19
|
+
const y = q(v(S)), b = new DOMParser().parseFromString(y, "text/html");
|
|
20
|
+
j(b);
|
|
20
21
|
const h = w.PAIRS_FOR_EXTENSION;
|
|
21
22
|
Object.entries(h).forEach(([n, d]) => {
|
|
22
23
|
b.querySelectorAll(".ins-product-td").forEach((r) => {
|
|
23
24
|
const E = r.getAttribute("data-number") || "1", m = r.getAttribute("data-type") || "CART_ITEMS";
|
|
24
25
|
r.querySelectorAll(`[product-attr="${n}"]`).forEach((t) => {
|
|
25
|
-
var $, F,
|
|
26
|
+
var $, F, x, D;
|
|
26
27
|
const g = t.getAttribute("data-type") || m, o = t.getAttribute("data-number") || E, f = d[g];
|
|
27
28
|
if (f)
|
|
28
29
|
switch (n) {
|
|
@@ -40,7 +41,7 @@ function Z(S) {
|
|
|
40
41
|
}
|
|
41
42
|
const i = (F = ($ = h.name) == null ? void 0 : $[g]) == null ? void 0 : F.ATTR;
|
|
42
43
|
if (i && e.setAttribute("alt", `{{${i}_${o}}}`), a) {
|
|
43
|
-
const s = (
|
|
44
|
+
const s = (x = h.itemLink) == null ? void 0 : x[g];
|
|
44
45
|
if (s) {
|
|
45
46
|
const _ = s.HREF, R = s.DEFAULT_HREF || "#!", u = a.href;
|
|
46
47
|
(u === "#" || u === "" || u.endsWith("#!") || u.endsWith(R) || u === `${window.location.href}${R}` || !u || u === window.location.href) && (a.href = `{{${_}_${o}}}`);
|
|
@@ -60,18 +61,18 @@ function Z(S) {
|
|
|
60
61
|
}
|
|
61
62
|
case "price":
|
|
62
63
|
case "originalPrice": {
|
|
63
|
-
const e = f, a = t.getAttribute("data-formated"), l = t.getAttribute("data-single_price"), c = a === "true", i = l === "true", s = t.getAttribute(
|
|
64
|
+
const e = f, a = t.getAttribute("data-formated"), l = t.getAttribute("data-single_price"), c = a === "true", i = l === "true", s = t.getAttribute(N.POSITION) || "before";
|
|
64
65
|
let _;
|
|
65
66
|
i ? _ = c ? e.SINGLE_PRICE_FORMATTED : e.SINGLE_PRICE : _ = c ? e.PRICE_FORMATTED : e.PRICE;
|
|
66
67
|
const R = e.CURRENCY;
|
|
67
68
|
let u = `{{${_}_${o}}}`;
|
|
68
|
-
const H = (t.getAttribute(
|
|
69
|
+
const H = (t.getAttribute(N.SYMBOL) || "").trim(), G = Y(H);
|
|
69
70
|
let C = "";
|
|
70
71
|
G ? C = H : R && (C = `{{${R}_${o}}}`), C && (u = s === "after" ? `${u} ${C}` : `${C} ${u}`), t.innerHTML = P(t, u);
|
|
71
72
|
break;
|
|
72
73
|
}
|
|
73
74
|
case "quantity": {
|
|
74
|
-
const e = f, a = e.ATTR, l = [e.DEFAULT, ...e.LEGACY_DEFAULTS], c = (
|
|
75
|
+
const e = f, a = e.ATTR, l = [e.DEFAULT, ...e.LEGACY_DEFAULTS], c = (D = t.textContent) == null ? void 0 : D.trim();
|
|
75
76
|
c && l.includes(c) && (t.innerHTML = P(t, `{{${a}_${o}}}`));
|
|
76
77
|
break;
|
|
77
78
|
}
|
|
@@ -139,12 +140,12 @@ function Z(S) {
|
|
|
139
140
|
const E = w.PAIRS_FOR_EXTENSION.price[d].PRICE, m = w.PAIRS_FOR_EXTENSION.originalPrice[d].PRICE, T = `{% if ${E}_${n} != ${m}_${n} %}`, t = [T, q(T)];
|
|
140
141
|
let g = "", o = 0, f = 0, $ = A.indexOf(r);
|
|
141
142
|
for (; $ !== -1; ) {
|
|
142
|
-
const F = p[f] === !0 && !
|
|
143
|
+
const F = p[f] === !0 && !Q(A, $, t);
|
|
143
144
|
g += A.slice(o, $) + (F ? `${T}${r}{% endif %}` : r), o = $ + r.length, f += 1, $ = A.indexOf(r, o);
|
|
144
145
|
}
|
|
145
146
|
A = g + A.slice(o);
|
|
146
|
-
}), A.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}");
|
|
147
|
+
}), B(A.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}"));
|
|
147
148
|
}
|
|
148
149
|
export {
|
|
149
|
-
|
|
150
|
+
rt as pairProductVariables
|
|
150
151
|
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const c = "guido-table-text:", l = new RegExp(`<!--${c}([A-Za-z0-9+/=]*)-->`, "g"), i = /<!--[\s\S]*?-->|\{%[\s\S]*?%\}|<[a-zA-Z/!?](?:[^>"']|"[^"]*"|'[^']*')*>|[^<{]+|[<{]/g, o = /* @__PURE__ */ new Set(["table", "tbody", "thead", "tfoot", "tr"]), T = /* @__PURE__ */ new Set([...o, "td", "th", "caption"]), d = (s) => btoa(unescape(encodeURIComponent(s))), f = (s) => decodeURIComponent(escape(atob(s))), p = (s) => {
|
|
2
|
+
const e = /^<(\/?)([a-zA-Z][\w-]*)/.exec(s);
|
|
3
|
+
return { name: e ? e[2].toLowerCase() : "", closing: e ? e[1] === "/" : !1 };
|
|
4
|
+
};
|
|
5
|
+
function u(s) {
|
|
6
|
+
const e = [];
|
|
7
|
+
let a = !1;
|
|
8
|
+
return s.replace(i, (t) => {
|
|
9
|
+
if (t.startsWith("<!--") || t.startsWith("{%"))
|
|
10
|
+
return t;
|
|
11
|
+
if (t.length > 1 && t.startsWith("<")) {
|
|
12
|
+
const { name: n, closing: r } = p(t);
|
|
13
|
+
return a = T.has(n), a && (r ? e.includes(n) && e.splice(e.lastIndexOf(n)) : e.push(n)), t;
|
|
14
|
+
}
|
|
15
|
+
return a && o.has(e[e.length - 1] ?? "") && t.trim() ? `<!--${c}${d(t)}-->` : t;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
const E = (s) => s.replace(l, (e, a) => f(a));
|
|
19
|
+
export {
|
|
20
|
+
u as protectTableText,
|
|
21
|
+
E as restoreTableText
|
|
22
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useinsider/guido",
|
|
3
|
-
"version": "3.21.
|
|
3
|
+
"version": "3.21.2-beta.cfc5be2",
|
|
4
4
|
"description": "Guido is a Vue + TypeScript wrapper for Email Plugin. Easily embed the email editor in your Vue applications.",
|
|
5
5
|
"main": "./dist/guido.umd.cjs",
|
|
6
6
|
"module": "./dist/library.js",
|