@useinsider/guido 2.2.0-beta.fa4cec8 → 3.0.0-beta.2235a35
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 +41 -2
- package/dist/@types/config/schemas.js +1 -1
- package/dist/components/Guido.vue.js +1 -1
- package/dist/components/Guido.vue2.js +66 -66
- package/dist/components/organisms/base/Toaster.vue.js +4 -4
- package/dist/components/organisms/base/Toaster.vue2.js +12 -9
- package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +5 -5
- package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +2 -2
- package/dist/components/organisms/extensions/recommendation/FilterItem.vue.js +11 -13
- package/dist/components/organisms/extensions/recommendation/FilterItem.vue2.js +54 -23
- package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue.js +7 -5
- package/dist/components/organisms/extensions/recommendation/FilterSelectionDrawer.vue2.js +34 -21
- package/dist/components/organisms/extensions/recommendation/Filters.vue.js +11 -11
- package/dist/components/organisms/extensions/recommendation/Filters.vue2.js +48 -36
- package/dist/components/organisms/extensions/recommendation/LogicAdapter.vue2.js +11 -9
- package/dist/composables/useRecommendation.js +9 -9
- package/dist/composables/useSave.js +16 -12
- package/dist/composables/useStripo.js +66 -62
- package/dist/composables/useStripoEventHandler.js +27 -12
- package/dist/composables/useSyncModuleExtractor.js +45 -0
- package/dist/config/compiler/utils/recommendationCompilerUtils.js +1 -1
- package/dist/config/migrator/recommendationMigrator.js +1 -1
- package/dist/enums/unsubscribe.js +25 -21
- package/dist/extensions/Blocks/Recommendation/block.js +1 -1
- package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +36 -33
- package/dist/extensions/Blocks/Recommendation/constants/layout.js +16 -14
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +15 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/index.js +9 -9
- package/dist/extensions/Blocks/Recommendation/controls/image/index.js +1 -1
- package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +41 -29
- package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +16 -16
- package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +30 -32
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +194 -104
- package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +9 -9
- package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +46 -38
- package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +16 -16
- package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +291 -217
- package/dist/extensions/Blocks/Recommendation/controls/mobileLayout/cssRules.js +14 -14
- package/dist/extensions/Blocks/Recommendation/controls/name/index.js +10 -10
- package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +5 -5
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +14 -14
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +9 -9
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +3 -3
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +1 -1
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +9 -9
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +3 -3
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +13 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/index.js +3 -3
- package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +223 -99
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +172 -85
- package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +2 -2
- package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +1 -1
- package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +2 -2
- package/dist/extensions/Blocks/Recommendation/templates/utils.js +32 -32
- package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +8 -8
- package/dist/extensions/Blocks/Recommendation/validation/filterSchema.js +29 -0
- package/dist/guido.css +1 -1
- package/dist/services/stripoApi.js +55 -19
- package/dist/src/@types/config/schemas.d.ts +1 -1
- package/dist/src/@types/events.d.ts +38 -2
- package/dist/src/App.vue.d.ts +0 -1
- package/dist/src/components/Guido.vue.d.ts +2 -2
- package/dist/src/components/organisms/extensions/recommendation/FilterItem.vue.d.ts +1 -0
- package/dist/src/components/organisms/extensions/recommendation/Filters.vue.d.ts +17 -1
- package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -1
- package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -1
- package/dist/src/composables/useGuidoActions.d.ts +1 -1
- package/dist/src/composables/useSave.d.ts +2 -2
- package/dist/src/composables/useStripo.d.ts +2 -2
- package/dist/src/composables/useSyncModuleExtractor.d.ts +4 -0
- package/dist/src/enums/unsubscribe.d.ts +3 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +6 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +3 -3
- package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +6 -2
- package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +8 -1
- package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +38 -10
- package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +27 -14
- package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +50 -17
- package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +19 -2
- package/dist/src/extensions/Blocks/Recommendation/templates/grid/migration.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +4 -2
- package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +1 -1
- package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +8 -0
- package/dist/src/extensions/Blocks/Recommendation/validation/filterSchema.d.ts +15 -0
- package/dist/src/main.d.ts +3 -1
- package/dist/src/mock/api/settings.d.ts +2 -0
- package/dist/src/services/stripoApi.d.ts +5 -0
- package/dist/src/stores/editor.d.ts +23 -0
- package/dist/src/utils/templatePreparation.d.ts +1 -1
- package/dist/static/styles/customEditorStyle.css.js +50 -23
- package/dist/stores/editor.js +2 -1
- package/dist/utils/templatePreparation.js +1 -1
- package/package.json +2 -2
|
@@ -31,6 +31,8 @@ interface PerBlockState {
|
|
|
31
31
|
filterGroup: number;
|
|
32
32
|
/** Whether initial API data (filters, algorithms, products) has been fetched for this block */
|
|
33
33
|
isInitialized: boolean;
|
|
34
|
+
/** Snapshot of filters taken when the drawer opens, used to revert on cancel */
|
|
35
|
+
filterSnapshot: Filter[] | null;
|
|
34
36
|
}
|
|
35
37
|
interface StoreState {
|
|
36
38
|
recommendationCampaignUrls: Record<string, string>;
|
|
@@ -125,7 +127,9 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
125
127
|
configVersion: number;
|
|
126
128
|
} & import("pinia").PiniaCustomStateProperties<StoreState>): number;
|
|
127
129
|
hasFilters(): boolean;
|
|
130
|
+
hasValidFilters(): boolean;
|
|
128
131
|
getFilterGroupCount(): number;
|
|
132
|
+
getUniqueFilterGroups(): number[];
|
|
129
133
|
getActivePredictiveAlgorithms: (state: {
|
|
130
134
|
recommendationCampaignUrls: Record<string, string>;
|
|
131
135
|
activePredictiveAlgorithms: number[];
|
|
@@ -203,23 +207,36 @@ export declare const useRecommendationExtensionStore: import("pinia").StoreDefin
|
|
|
203
207
|
patchCurrentBlockConfig(updates: Partial<PerBlockConfigs>, options?: {
|
|
204
208
|
triggerRefetch?: boolean;
|
|
205
209
|
}): void;
|
|
210
|
+
/**
|
|
211
|
+
* Creates a filter with the first available attribute and operator pre-selected.
|
|
212
|
+
*/
|
|
213
|
+
createDefaultFilter(filterGroup: number, filterNumber: number): Filter;
|
|
206
214
|
/**
|
|
207
215
|
* Opens the filter selection drawer for the current block.
|
|
208
|
-
*
|
|
216
|
+
* Saves a snapshot of current filters for cancel/revert.
|
|
217
|
+
* If no filters exist, initializes with a default filter
|
|
209
218
|
* so the user has a starting point for input.
|
|
210
219
|
*/
|
|
211
220
|
openFilterDrawer(): void;
|
|
212
221
|
/**
|
|
213
|
-
* Closes the filter selection drawer for the current block
|
|
222
|
+
* Closes the filter selection drawer for the current block.
|
|
223
|
+
* Called after successful apply — discards the snapshot.
|
|
214
224
|
*/
|
|
215
225
|
closeFilterDrawer(): void;
|
|
226
|
+
/**
|
|
227
|
+
* Cancels the filter selection drawer and reverts filters
|
|
228
|
+
* to the snapshot taken when the drawer was opened.
|
|
229
|
+
*/
|
|
230
|
+
cancelFilterDrawer(): void;
|
|
216
231
|
fetchRecommendationCreateData(): Promise<void>;
|
|
217
232
|
fetchRecommendationFilters(): Promise<void>;
|
|
218
233
|
addFilterGroup(filterGroup: number): void;
|
|
234
|
+
deleteFilterGroup(groupId: number): void;
|
|
219
235
|
updateFilter(updatedFilter: Filter): void;
|
|
220
236
|
deleteFilter(filter: Filter): void;
|
|
221
237
|
addFilter(filter: Filter): void;
|
|
222
238
|
generateFilterQuery(): string;
|
|
223
239
|
fetchRecommendationProducts(): Promise<void>;
|
|
240
|
+
_doFetchProducts(): Promise<void>;
|
|
224
241
|
}>;
|
|
225
242
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { RecommendationProduct } from '@@/Types/recommendation';
|
|
2
2
|
import { DEFAULTS, getDefaultProducts, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY } from '../utils';
|
|
3
|
-
declare const migrationTemplate = "\n <td\n align=\"left\"\n esd-extension-block-id=\"recommendation-block\"\n esd-handler-name=\"esd-extension-RecommendationBlock\"\n class=\"
|
|
3
|
+
declare const migrationTemplate = "\n <td\n align=\"left\"\n esd-extension-block-id=\"recommendation-block\"\n esd-handler-name=\"esd-extension-RecommendationBlock\"\n class=\"recommendation-block-v2 esd-block-recommendation-v3-block esd-extension-block es-p20\"\n >\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td align=\"center\">\n <table\n class=\"container\"\n width=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\">\n <tbody>\n <tr>\n <td>\n <table\n width=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\">\n <tbody>\n <tr>\n {-{-TITLE-}-}\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td class=\"spacer\" style=\"height: 20px;\"></td>\n </tr>\n <tr>\n <td>\n <table\n class=\"ins-recommendation-product-container\"\n width=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\"\n >\n {-{-PRODUCT_ROWS-}-}\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </table>\n </td>\n";
|
|
4
4
|
/**
|
|
5
5
|
* Prepares migration product rows with attribute-aligned structure.
|
|
6
6
|
* @param products - Array of products to display
|
|
@@ -24,14 +24,16 @@ export { DEFAULTS, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY, getDefault
|
|
|
24
24
|
export declare function prepareProductRows(products: RecommendationProduct[], layout: Orientation, options?: PrepareProductRowsOptions): string;
|
|
25
25
|
/**
|
|
26
26
|
* Generates the default template for a given layout.
|
|
27
|
-
*
|
|
27
|
+
* Grid layout includes both desktop and mobile product containers.
|
|
28
|
+
* List layout only populates the desktop container (list rows are responsive).
|
|
28
29
|
* @param layout - The layout orientation ('list' or 'grid')
|
|
29
30
|
* @returns Complete HTML template with default products
|
|
30
31
|
*/
|
|
31
32
|
export declare function getDefaultTemplate(layout?: Orientation): string;
|
|
32
33
|
/**
|
|
33
34
|
* Generates a complete block template with custom products.
|
|
34
|
-
*
|
|
35
|
+
* Grid layout includes both desktop and mobile product containers.
|
|
36
|
+
* List layout only populates the desktop container (list rows are responsive).
|
|
35
37
|
* @param products - Array of products to display
|
|
36
38
|
* @param layout - The layout orientation ('list' or 'grid')
|
|
37
39
|
* @param title - Title for the block
|
|
@@ -4,7 +4,7 @@ import { DEFAULTS, getDefaultProducts } from '../utils';
|
|
|
4
4
|
* Migration template for list layout
|
|
5
5
|
* Used when migrating old recommendation blocks to list format
|
|
6
6
|
*/
|
|
7
|
-
declare const migrationTemplate = "\n <td\n align=\"left\"\n esd-extension-block-id=\"recommendation-block\"\n esd-handler-name=\"esd-extension-RecommendationBlock\"\n class=\"
|
|
7
|
+
declare const migrationTemplate = "\n <td\n align=\"left\"\n esd-extension-block-id=\"recommendation-block\"\n esd-handler-name=\"esd-extension-RecommendationBlock\"\n class=\"recommendation-block-v2 esd-block-recommendation-v3-block\n esd-extension-block es-p20 es-m-p0 ins-recommendation-list-layout\"\n data-layout=\"list\"\n >\n <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n <tr>\n <td align=\"center\">\n <table\n class=\"container\"\n width=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\">\n <tbody>\n <tr>\n <td>\n <table\n width=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\">\n <tbody>\n <tr>\n {-{-TITLE-}-}\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n <tr>\n <td class=\"spacer\" style=\"height: 20px;\"></td>\n </tr>\n <tr>\n <td>\n <table\n class=\"ins-recommendation-product-container\"\n width=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\"\n >\n {-{-PRODUCT_ROWS-}-}\n </table>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n </table>\n </td>\n";
|
|
8
8
|
export declare function getMigrationTemplate(): string;
|
|
9
9
|
/**
|
|
10
10
|
* Generates a custom list migration template with specified products
|
|
@@ -61,6 +61,6 @@ export declare function getDefaultProducts(count?: number): RecommendationProduc
|
|
|
61
61
|
* @param instanceClass - Optional instance-specific class (e.g., 'ins-recommendation-v3-block-1')
|
|
62
62
|
* for CSS scoping per block instance. Must be included in the initial template HTML because
|
|
63
63
|
* Stripo's Angular rendering manages the class attribute and overwrites dynamic setAttribute changes.
|
|
64
|
-
* @returns HTML template string with {-{-TITLE-}-}, {-{-PRODUCT_ROWS-}-}, and {-{-MOBILE_PRODUCT_ROWS-}-} placeholders
|
|
64
|
+
* @returns HTML template string with {-{-TITLE-}-}, {-{-PRODUCT_ROWS-}-}, and {-{-MOBILE_PRODUCT_ROWS-}-} (grid only) placeholders
|
|
65
65
|
*/
|
|
66
66
|
export declare function createBlockTemplate(layout?: Orientation, instanceClass?: string): string;
|
|
@@ -106,6 +106,14 @@ export interface RecommendationNodeConfig {
|
|
|
106
106
|
* Vertical spacing between product rows in pixels
|
|
107
107
|
*/
|
|
108
108
|
rowSpacing: number;
|
|
109
|
+
/**
|
|
110
|
+
* Horizontal spacing between product cards on mobile in pixels (grid layout only)
|
|
111
|
+
*/
|
|
112
|
+
mobileColumnSpacing: number;
|
|
113
|
+
/**
|
|
114
|
+
* Vertical spacing between product rows on mobile in pixels
|
|
115
|
+
*/
|
|
116
|
+
mobileRowSpacing: number;
|
|
109
117
|
/**
|
|
110
118
|
* Order of card elements from top to bottom
|
|
111
119
|
* Array of ATTR_PRODUCT_* constants
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Filter } from '@@/Types/recommendation';
|
|
2
|
+
import * as v from 'valibot';
|
|
3
|
+
export declare const FilterSchema: v.ObjectSchema<{
|
|
4
|
+
readonly type: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
5
|
+
readonly attribute: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
6
|
+
readonly operator: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
7
|
+
readonly innerGroupOperator: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
8
|
+
readonly outerGroupOperator: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
9
|
+
readonly value: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.MinLengthAction<string, 1, undefined>]>;
|
|
10
|
+
readonly filterGroup: v.NumberSchema<undefined>;
|
|
11
|
+
readonly filterNumber: v.NumberSchema<undefined>;
|
|
12
|
+
readonly isValid: v.BooleanSchema<undefined>;
|
|
13
|
+
}, undefined>;
|
|
14
|
+
export declare function isFilterValid(filter: Filter): boolean;
|
|
15
|
+
export declare function getInvalidFilterFields(filter: Filter): Set<string>;
|
package/dist/src/main.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ModuleUpdatedParams, SyncModuleResponse, SyncModuleUnsubscribePayload } from '@@/Types/events';
|
|
1
2
|
import type { CustomFont, Template } from '@@/Types/stripo';
|
|
2
3
|
export declare const useStripoApi: () => {
|
|
3
4
|
getToken: () => Promise<string>;
|
|
@@ -5,4 +6,8 @@ export declare const useStripoApi: () => {
|
|
|
5
6
|
active: boolean;
|
|
6
7
|
})[]>;
|
|
7
8
|
getDefaultTemplate: () => Promise<Template>;
|
|
9
|
+
getSyncModulesStatus: () => Promise<boolean>;
|
|
10
|
+
updateSyncModule: (params: ModuleUpdatedParams) => Promise<boolean>;
|
|
11
|
+
getSyncModule: (moduleId: number) => Promise<SyncModuleResponse>;
|
|
12
|
+
setSyncModuleUnsubscriptionPages: (payload: SyncModuleUnsubscribePayload[]) => Promise<boolean>;
|
|
8
13
|
};
|
|
@@ -8,6 +8,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
8
8
|
hasChanges: boolean;
|
|
9
9
|
isStripoInitialized: boolean;
|
|
10
10
|
templateId: string;
|
|
11
|
+
syncModulesEnabled: boolean;
|
|
11
12
|
}, {
|
|
12
13
|
isEditorToolbarVisible: (state: {
|
|
13
14
|
loadingStatus: boolean;
|
|
@@ -19,6 +20,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
19
20
|
hasChanges: boolean;
|
|
20
21
|
isStripoInitialized: boolean;
|
|
21
22
|
templateId: string;
|
|
23
|
+
syncModulesEnabled: boolean;
|
|
22
24
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
23
25
|
loadingStatus: boolean;
|
|
24
26
|
isCodeEditorOpen: boolean;
|
|
@@ -29,6 +31,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
29
31
|
hasChanges: boolean;
|
|
30
32
|
isStripoInitialized: boolean;
|
|
31
33
|
templateId: string;
|
|
34
|
+
syncModulesEnabled: boolean;
|
|
32
35
|
}>) => boolean;
|
|
33
36
|
isUndoButtonDisabled: (state: {
|
|
34
37
|
loadingStatus: boolean;
|
|
@@ -40,6 +43,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
40
43
|
hasChanges: boolean;
|
|
41
44
|
isStripoInitialized: boolean;
|
|
42
45
|
templateId: string;
|
|
46
|
+
syncModulesEnabled: boolean;
|
|
43
47
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
44
48
|
loadingStatus: boolean;
|
|
45
49
|
isCodeEditorOpen: boolean;
|
|
@@ -50,6 +54,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
50
54
|
hasChanges: boolean;
|
|
51
55
|
isStripoInitialized: boolean;
|
|
52
56
|
templateId: string;
|
|
57
|
+
syncModulesEnabled: boolean;
|
|
53
58
|
}>) => boolean;
|
|
54
59
|
isRedoButtonDisabled: (state: {
|
|
55
60
|
loadingStatus: boolean;
|
|
@@ -61,6 +66,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
61
66
|
hasChanges: boolean;
|
|
62
67
|
isStripoInitialized: boolean;
|
|
63
68
|
templateId: string;
|
|
69
|
+
syncModulesEnabled: boolean;
|
|
64
70
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
65
71
|
loadingStatus: boolean;
|
|
66
72
|
isCodeEditorOpen: boolean;
|
|
@@ -71,6 +77,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
71
77
|
hasChanges: boolean;
|
|
72
78
|
isStripoInitialized: boolean;
|
|
73
79
|
templateId: string;
|
|
80
|
+
syncModulesEnabled: boolean;
|
|
74
81
|
}>) => boolean;
|
|
75
82
|
isCodeEditorButtonDisabled: (state: {
|
|
76
83
|
loadingStatus: boolean;
|
|
@@ -82,6 +89,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
82
89
|
hasChanges: boolean;
|
|
83
90
|
isStripoInitialized: boolean;
|
|
84
91
|
templateId: string;
|
|
92
|
+
syncModulesEnabled: boolean;
|
|
85
93
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
86
94
|
loadingStatus: boolean;
|
|
87
95
|
isCodeEditorOpen: boolean;
|
|
@@ -92,6 +100,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
92
100
|
hasChanges: boolean;
|
|
93
101
|
isStripoInitialized: boolean;
|
|
94
102
|
templateId: string;
|
|
103
|
+
syncModulesEnabled: boolean;
|
|
95
104
|
}>) => boolean;
|
|
96
105
|
isPreviewButtonDisabled: (state: {
|
|
97
106
|
loadingStatus: boolean;
|
|
@@ -103,6 +112,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
103
112
|
hasChanges: boolean;
|
|
104
113
|
isStripoInitialized: boolean;
|
|
105
114
|
templateId: string;
|
|
115
|
+
syncModulesEnabled: boolean;
|
|
106
116
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
107
117
|
loadingStatus: boolean;
|
|
108
118
|
isCodeEditorOpen: boolean;
|
|
@@ -113,6 +123,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
113
123
|
hasChanges: boolean;
|
|
114
124
|
isStripoInitialized: boolean;
|
|
115
125
|
templateId: string;
|
|
126
|
+
syncModulesEnabled: boolean;
|
|
116
127
|
}>) => boolean;
|
|
117
128
|
isViewOptionsDisabled: (state: {
|
|
118
129
|
loadingStatus: boolean;
|
|
@@ -124,6 +135,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
124
135
|
hasChanges: boolean;
|
|
125
136
|
isStripoInitialized: boolean;
|
|
126
137
|
templateId: string;
|
|
138
|
+
syncModulesEnabled: boolean;
|
|
127
139
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
128
140
|
loadingStatus: boolean;
|
|
129
141
|
isCodeEditorOpen: boolean;
|
|
@@ -134,6 +146,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
134
146
|
hasChanges: boolean;
|
|
135
147
|
isStripoInitialized: boolean;
|
|
136
148
|
templateId: string;
|
|
149
|
+
syncModulesEnabled: boolean;
|
|
137
150
|
}>) => boolean;
|
|
138
151
|
isVersionHistoryButtonDisabled: (state: {
|
|
139
152
|
loadingStatus: boolean;
|
|
@@ -145,6 +158,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
145
158
|
hasChanges: boolean;
|
|
146
159
|
isStripoInitialized: boolean;
|
|
147
160
|
templateId: string;
|
|
161
|
+
syncModulesEnabled: boolean;
|
|
148
162
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
149
163
|
loadingStatus: boolean;
|
|
150
164
|
isCodeEditorOpen: boolean;
|
|
@@ -155,6 +169,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
155
169
|
hasChanges: boolean;
|
|
156
170
|
isStripoInitialized: boolean;
|
|
157
171
|
templateId: string;
|
|
172
|
+
syncModulesEnabled: boolean;
|
|
158
173
|
}>) => boolean;
|
|
159
174
|
isExportButtonDisabled: (state: {
|
|
160
175
|
loadingStatus: boolean;
|
|
@@ -166,6 +181,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
166
181
|
hasChanges: boolean;
|
|
167
182
|
isStripoInitialized: boolean;
|
|
168
183
|
templateId: string;
|
|
184
|
+
syncModulesEnabled: boolean;
|
|
169
185
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
170
186
|
loadingStatus: boolean;
|
|
171
187
|
isCodeEditorOpen: boolean;
|
|
@@ -176,6 +192,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
176
192
|
hasChanges: boolean;
|
|
177
193
|
isStripoInitialized: boolean;
|
|
178
194
|
templateId: string;
|
|
195
|
+
syncModulesEnabled: boolean;
|
|
179
196
|
}>) => boolean;
|
|
180
197
|
isSaveAsButtonDisabled: (state: {
|
|
181
198
|
loadingStatus: boolean;
|
|
@@ -187,6 +204,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
187
204
|
hasChanges: boolean;
|
|
188
205
|
isStripoInitialized: boolean;
|
|
189
206
|
templateId: string;
|
|
207
|
+
syncModulesEnabled: boolean;
|
|
190
208
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
191
209
|
loadingStatus: boolean;
|
|
192
210
|
isCodeEditorOpen: boolean;
|
|
@@ -197,6 +215,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
197
215
|
hasChanges: boolean;
|
|
198
216
|
isStripoInitialized: boolean;
|
|
199
217
|
templateId: string;
|
|
218
|
+
syncModulesEnabled: boolean;
|
|
200
219
|
}>) => boolean;
|
|
201
220
|
isTestButtonDisabled: (state: {
|
|
202
221
|
loadingStatus: boolean;
|
|
@@ -208,6 +227,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
208
227
|
hasChanges: boolean;
|
|
209
228
|
isStripoInitialized: boolean;
|
|
210
229
|
templateId: string;
|
|
230
|
+
syncModulesEnabled: boolean;
|
|
211
231
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
212
232
|
loadingStatus: boolean;
|
|
213
233
|
isCodeEditorOpen: boolean;
|
|
@@ -218,6 +238,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
218
238
|
hasChanges: boolean;
|
|
219
239
|
isStripoInitialized: boolean;
|
|
220
240
|
templateId: string;
|
|
241
|
+
syncModulesEnabled: boolean;
|
|
221
242
|
}>) => boolean;
|
|
222
243
|
isSaveButtonDisabled: (state: {
|
|
223
244
|
loadingStatus: boolean;
|
|
@@ -229,6 +250,7 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
229
250
|
hasChanges: boolean;
|
|
230
251
|
isStripoInitialized: boolean;
|
|
231
252
|
templateId: string;
|
|
253
|
+
syncModulesEnabled: boolean;
|
|
232
254
|
} & import("pinia").PiniaCustomStateProperties<{
|
|
233
255
|
loadingStatus: boolean;
|
|
234
256
|
isCodeEditorOpen: boolean;
|
|
@@ -239,5 +261,6 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
|
|
|
239
261
|
hasChanges: boolean;
|
|
240
262
|
isStripoInitialized: boolean;
|
|
241
263
|
templateId: string;
|
|
264
|
+
syncModulesEnabled: boolean;
|
|
242
265
|
}>) => boolean;
|
|
243
266
|
}, {}>;
|
|
@@ -20,30 +20,30 @@ const n = `.esd-x,
|
|
|
20
20
|
}
|
|
21
21
|
.ins-product-cart ue-node-actions,
|
|
22
22
|
/* Horizontal layout - hide for info, image, and button cells */
|
|
23
|
-
.
|
|
24
|
-
.
|
|
25
|
-
.
|
|
26
|
-
.
|
|
27
|
-
.
|
|
28
|
-
.
|
|
23
|
+
.recommendation-block-v2 .product-info-cell ue-node-actions,
|
|
24
|
+
.recommendation-block-v2 .product-info-cell ue-node-panel,
|
|
25
|
+
.recommendation-block-v2 .product-image-cell ue-node-actions,
|
|
26
|
+
.recommendation-block-v2 .product-image-cell ue-node-panel,
|
|
27
|
+
.recommendation-block-v2 .button-cell ue-node-actions,
|
|
28
|
+
.recommendation-block-v2 .button-cell ue-node-panel,
|
|
29
29
|
/* Vertical layout - hide for product-card-segment inner cells */
|
|
30
|
-
.
|
|
31
|
-
.
|
|
30
|
+
.recommendation-block-v2 .product-card-segment ue-node-actions,
|
|
31
|
+
.recommendation-block-v2 .product-card-segment ue-node-panel,
|
|
32
32
|
/* Hide for specific product attribute cells in both layouts */
|
|
33
|
-
.
|
|
34
|
-
.
|
|
35
|
-
.
|
|
36
|
-
.
|
|
37
|
-
.
|
|
38
|
-
.
|
|
39
|
-
.
|
|
40
|
-
.
|
|
41
|
-
.
|
|
42
|
-
.
|
|
43
|
-
.
|
|
44
|
-
.
|
|
45
|
-
.
|
|
46
|
-
.
|
|
33
|
+
.recommendation-block-v2 .product-image ue-node-actions,
|
|
34
|
+
.recommendation-block-v2 .product-image ue-node-panel,
|
|
35
|
+
.recommendation-block-v2 .product-name ue-node-actions,
|
|
36
|
+
.recommendation-block-v2 .product-name ue-node-panel,
|
|
37
|
+
.recommendation-block-v2 .product-price ue-node-actions,
|
|
38
|
+
.recommendation-block-v2 .product-price ue-node-panel,
|
|
39
|
+
.recommendation-block-v2 .product-old-price ue-node-actions,
|
|
40
|
+
.recommendation-block-v2 .product-old-price ue-node-panel,
|
|
41
|
+
.recommendation-block-v2 .product-omnibus-price ue-node-actions,
|
|
42
|
+
.recommendation-block-v2 .product-omnibus-price ue-node-panel,
|
|
43
|
+
.recommendation-block-v2 .product-omnibus-discount ue-node-actions,
|
|
44
|
+
.recommendation-block-v2 .product-omnibus-discount ue-node-panel,
|
|
45
|
+
.recommendation-block-v2 .product-button ue-node-actions,
|
|
46
|
+
.recommendation-block-v2 .product-button ue-node-panel {
|
|
47
47
|
display: none !important;
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -52,7 +52,7 @@ const n = `.esd-x,
|
|
|
52
52
|
display: none;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
/* Mobile layout: when Stripo mobile mode is active, swap containers */
|
|
55
|
+
/* Mobile layout: when Stripo mobile mode is active, swap containers (grid layout only) */
|
|
56
56
|
.ue-mobile-mode .ins-recommendation-desktop-container {
|
|
57
57
|
display: none !important;
|
|
58
58
|
}
|
|
@@ -60,6 +60,33 @@ const n = `.esd-x,
|
|
|
60
60
|
.ue-mobile-mode .ins-recommendation-mobile-container {
|
|
61
61
|
display: table !important;
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
/* List layout: keep desktop container visible in mobile mode (list rows are inherently responsive)
|
|
65
|
+
Uses class selector instead of [data-layout="list"] for Gmail compatibility */
|
|
66
|
+
.ue-mobile-mode .ins-recommendation-list-layout .ins-recommendation-desktop-container {
|
|
67
|
+
display: table !important;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.ue-mobile-mode .ins-recommendation-list-layout .ins-recommendation-mobile-container {
|
|
71
|
+
display: none !important;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/* List layout mobile: reduce image and button width for better text readability */
|
|
75
|
+
.ue-mobile-mode .ins-recommendation-list-layout .product-image-cell {
|
|
76
|
+
width: 80px !important;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.ue-mobile-mode .ins-recommendation-list-layout .product-image-cell img {
|
|
80
|
+
max-width: 80px !important;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.ue-mobile-mode .ins-recommendation-list-layout .button-cell {
|
|
84
|
+
width: 80px !important;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.ue-mobile-mode .ins-recommendation-list-layout .product-info-cell {
|
|
88
|
+
padding: 5px 8px !important;
|
|
89
|
+
}
|
|
63
90
|
`;
|
|
64
91
|
export {
|
|
65
92
|
n as default
|
package/dist/stores/editor.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@useinsider/guido",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.0-beta.2235a35",
|
|
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",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"license": "ISC",
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@stripoinc/ui-editor-extensions": "3.5.0",
|
|
35
|
-
"@useinsider/design-system-vue": "0.14.
|
|
35
|
+
"@useinsider/design-system-vue": "0.14.28",
|
|
36
36
|
"@vueuse/core": "11.3.0",
|
|
37
37
|
"lodash-es": "4.17.21",
|
|
38
38
|
"pinia": "2.3.1",
|