@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.
Files changed (64) hide show
  1. package/README.md +1 -0
  2. package/dist/@types/config/schemas.js +41 -39
  3. package/dist/@types/display-condition.js +25 -0
  4. package/dist/components/Guido.vue.js +6 -6
  5. package/dist/components/Guido.vue2.js +81 -79
  6. package/dist/components/organisms/display-conditions/CodeEditorField.vue.js +20 -0
  7. package/dist/components/organisms/display-conditions/CodeEditorField.vue2.js +30 -0
  8. package/dist/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue.js +30 -0
  9. package/dist/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue2.js +71 -0
  10. package/dist/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue.js +34 -0
  11. package/dist/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue2.js +57 -0
  12. package/dist/components/organisms/display-conditions/DisplayConditionsHost.vue.js +17 -0
  13. package/dist/components/organisms/display-conditions/DisplayConditionsHost.vue2.js +22 -0
  14. package/dist/composables/useBlocksConfig.js +32 -24
  15. package/dist/composables/useDisplayConditions.js +102 -0
  16. package/dist/config/compiler/utils/recommendationCompilerUtils.js +55 -53
  17. package/dist/enums/academy.js +1 -0
  18. package/dist/enums/display-condition.js +12 -0
  19. package/dist/extensions/Blocks/Recommendation/block.js +52 -37
  20. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +76 -16
  21. package/dist/extensions/Blocks/Recommendation/utils/captureStyleTemplates.js +16 -15
  22. package/dist/extensions/DisplayConditions/bridge.js +17 -0
  23. package/dist/extensions/DisplayConditions/constants.js +17 -0
  24. package/dist/extensions/DisplayConditions/control.js +178 -0
  25. package/dist/extensions/DisplayConditions/display-conditions.css.js +201 -0
  26. package/dist/extensions/DisplayConditions/extension.js +28 -0
  27. package/dist/extensions/DisplayConditions/iconsRegistry.js +20 -0
  28. package/dist/extensions/DisplayConditions/library.js +27 -0
  29. package/dist/extensions/DisplayConditions/settingsPanel.js +17 -0
  30. package/dist/guido.css +1 -1
  31. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +93 -92
  32. package/dist/node_modules/valibot/dist/index.js +297 -261
  33. package/dist/services/displayConditionApi.js +39 -0
  34. package/dist/src/@types/config/schemas.d.ts +4 -0
  35. package/dist/src/@types/display-condition.d.ts +59 -0
  36. package/dist/src/components/organisms/display-conditions/CodeEditorField.vue.d.ts +43 -0
  37. package/dist/src/components/organisms/display-conditions/DisplayConditionCreateDrawer.vue.d.ts +2 -0
  38. package/dist/src/components/organisms/display-conditions/DisplayConditionSelectDrawer.vue.d.ts +2 -0
  39. package/dist/src/components/organisms/display-conditions/DisplayConditionsHost.vue.d.ts +2 -0
  40. package/dist/src/composables/useConfig.d.ts +2 -0
  41. package/dist/src/composables/useDisplayConditions.d.ts +16 -0
  42. package/dist/src/enums/academy.d.ts +1 -0
  43. package/dist/src/enums/display-condition.d.ts +15 -0
  44. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +2 -0
  45. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +31 -17
  46. package/dist/src/extensions/DisplayConditions/bridge.d.ts +6 -0
  47. package/dist/src/extensions/DisplayConditions/constants.d.ts +14 -0
  48. package/dist/src/extensions/DisplayConditions/control.d.ts +23 -0
  49. package/dist/src/extensions/DisplayConditions/extension.d.ts +2 -0
  50. package/dist/src/extensions/DisplayConditions/iconsRegistry.d.ts +4 -0
  51. package/dist/src/extensions/DisplayConditions/library.d.ts +8 -0
  52. package/dist/src/extensions/DisplayConditions/settingsPanel.d.ts +5 -0
  53. package/dist/src/mock/api/display-conditions.d.ts +2 -0
  54. package/dist/src/services/displayConditionApi.d.ts +8 -0
  55. package/dist/src/stores/config.d.ts +166 -0
  56. package/dist/src/stores/display-condition.d.ts +81 -0
  57. package/dist/src/utils/displayCondition.d.ts +10 -0
  58. package/dist/src/utils/protectTableText.d.ts +2 -0
  59. package/dist/stores/config.js +13 -6
  60. package/dist/stores/display-condition.js +28 -0
  61. package/dist/utils/displayCondition.js +26 -0
  62. package/dist/utils/pairProductVariables.js +15 -14
  63. package/dist/utils/protectTableText.js +22 -0
  64. 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 {};
@@ -0,0 +1,2 @@
1
+ export declare function protectTableText(html: string): string;
2
+ export declare const restoreTableText: (html: string) => string;
@@ -1,8 +1,8 @@
1
- import { MessageType as r } from "../@types/config/schemas.js";
1
+ import { MessageType as a } from "../@types/config/schemas.js";
2
2
  import "../@types/config/defaults.js";
3
- import { parseConfig as a } from "../@types/config/validator.js";
4
- import { defineStore as o } from "pinia";
5
- const g = o("guido-config", {
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 === r.TRANSACTIONAL;
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 = a(i);
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 x, isCustomCurrencySymbol as Y } from "../extensions/Blocks/Items/constants/currency.js";
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 { unwrapProductNameLinks as v } from "./unwrapProductNameLink.js";
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 B(S, y, b) {
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 Z(S) {
18
- const y = q(S), b = new DOMParser().parseFromString(y, "text/html");
19
- v(b);
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, D, N;
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 = (D = h.itemLink) == null ? void 0 : D[g];
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(x.POSITION) || "before";
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(x.SYMBOL) || "").trim(), G = Y(H);
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 = (N = t.textContent) == null ? void 0 : N.trim();
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 && !B(A, $, t);
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("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}");
147
+ }), B(A.replaceAll("<!--{%", "{%").replaceAll("%}-->", "%}").replaceAll("&lt;!--{%", "{%").replaceAll("%}--&gt;", "%}"));
147
148
  }
148
149
  export {
149
- Z as pairProductVariables
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.1",
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",