@useinsider/guido 2.0.0-beta.c588e27 → 2.0.0-beta.c9db5fd
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/dist/@types/config/schemas.js +53 -39
- package/dist/components/organisms/header/RightSlot.vue2.js +10 -10
- package/dist/composables/useConfig.js +29 -27
- package/dist/composables/useSave.js +13 -11
- package/dist/config/migrator/recommendationMigrator.js +1 -1
- package/dist/extensions/Blocks/Items/controls/cardComposition.js +13 -4
- package/dist/extensions/Blocks/Recommendation/block.js +1 -1
- package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
- package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
- package/dist/extensions/Blocks/Recommendation/constants/selectors.js +11 -0
- package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
- package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +100 -0
- package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +243 -0
- package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
- package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +152 -0
- package/dist/extensions/Blocks/Recommendation/controls/main/index.js +370 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
- package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +76 -0
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +73 -0
- package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +73 -0
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +73 -0
- package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +73 -0
- package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
- package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +224 -0
- package/dist/extensions/Blocks/Recommendation/extension.js +39 -43
- package/dist/extensions/Blocks/Recommendation/recommendation.css.js +5 -0
- package/dist/extensions/Blocks/Recommendation/settingsPanel.js +127 -72
- package/dist/extensions/Blocks/Recommendation/store/recommendation.js +20 -20
- package/dist/extensions/Blocks/Recommendation/templates/horizontalElementRenderer.js +157 -0
- package/dist/extensions/Blocks/Recommendation/templates/horizontalTemplate.js +78 -0
- package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +67 -88
- package/dist/extensions/Blocks/Recommendation/templates/verticalElementRenderer.js +186 -0
- package/dist/extensions/Blocks/Recommendation/templates/verticalMigrationTemplate.js +256 -0
- package/dist/extensions/Blocks/Recommendation/templates/verticalTemplate.js +81 -0
- package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +25 -0
- package/dist/extensions/Blocks/Unsubscribe/extension.js +9 -9
- package/dist/extensions/Blocks/controlFactories.js +155 -121
- package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +361 -291
- package/dist/package.json.js +1 -1
- package/dist/src/@types/config/index.d.ts +2 -2
- package/dist/src/@types/config/schemas.d.ts +26 -0
- package/dist/src/@types/config/types.d.ts +7 -1
- package/dist/src/composables/useConfig.d.ts +6 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
- package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +19 -11
- package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +11 -0
- package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +19 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +41 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +95 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +23 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +50 -0
- package/dist/src/extensions/Blocks/Recommendation/{control.d.ts → controls/main/index.d.ts} +19 -3
- package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +16 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
- package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +77 -0
- package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/horizontalElementRenderer.d.ts +8 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/horizontalMigrationTemplate.d.ts +25 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/horizontalTemplate.d.ts +28 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +59 -21
- package/dist/src/extensions/Blocks/Recommendation/templates/verticalElementRenderer.d.ts +7 -0
- package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → verticalMigrationTemplate.d.ts} +11 -4
- package/dist/src/extensions/Blocks/Recommendation/templates/{blockTemplate.d.ts → verticalTemplate.d.ts} +13 -9
- package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
- package/dist/src/stores/config.d.ts +147 -1
- package/dist/static/styles/components/button.css.js +1 -1
- package/dist/static/styles/components/wide-panel.css.js +0 -4
- package/dist/static/styles/customEditorStyle.css.js +38 -2
- package/dist/stores/config.js +7 -0
- package/package.json +3 -3
- package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -103
- package/dist/extensions/Blocks/Recommendation/constants.js +0 -5
- package/dist/extensions/Blocks/Recommendation/control.js +0 -306
- package/dist/extensions/Blocks/Recommendation/controls/button/align.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/border.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/color.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/text.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/image/size.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/align.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/background.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/color.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/size.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/name/style.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/align.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/background.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/color.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/size.js +0 -13
- package/dist/extensions/Blocks/Recommendation/controls/price/style.js +0 -13
- package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -160
- package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -152
- package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +0 -28
- package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +0 -5
- package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +0 -5
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type { Orientation } from '@@/Types/recommendation';
|
|
2
|
+
import { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
|
|
3
|
+
import { CommonControl } from '../../../common-control';
|
|
4
|
+
export declare const SPACING_CONTROL_ID = "recommendation-spacing-control";
|
|
5
|
+
/**
|
|
6
|
+
* Control for managing spacing between product cards
|
|
7
|
+
* - Column spacing: horizontal gap between cards in the same row
|
|
8
|
+
* - Row spacing: vertical gap between different rows
|
|
9
|
+
*/
|
|
10
|
+
export declare class SpacingControl extends CommonControl {
|
|
11
|
+
private store;
|
|
12
|
+
private unsubscribeOrientation;
|
|
13
|
+
getId(): string;
|
|
14
|
+
getTemplate(): string;
|
|
15
|
+
onRender(): void;
|
|
16
|
+
onTemplateNodeUpdated(node: ImmutableHtmlNode): void;
|
|
17
|
+
/**
|
|
18
|
+
* Gets the current layout orientation from the block's data attribute
|
|
19
|
+
*/
|
|
20
|
+
_getCurrentLayout(): Orientation;
|
|
21
|
+
/**
|
|
22
|
+
* Updates column spacing visibility based on layout orientation
|
|
23
|
+
* Column spacing is hidden for horizontal layout (products are stacked vertically)
|
|
24
|
+
* Reads from store first for reliability, falls back to DOM
|
|
25
|
+
*/
|
|
26
|
+
_updateColumnSpacingVisibility(): void;
|
|
27
|
+
/**
|
|
28
|
+
* Reads spacing values from data attributes or returns defaults
|
|
29
|
+
*/
|
|
30
|
+
_setFormValues(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Gets stored column spacing from the first attribute row cell's padding.
|
|
33
|
+
* For vertical layout: cells inside .recommendation-attribute-row have padding applied.
|
|
34
|
+
* For horizontal layout: the parent of .product-card-wrapper has the padding.
|
|
35
|
+
* The padding is applied as "0 {halfSpacing}px", so we extract and multiply by 2.
|
|
36
|
+
*/
|
|
37
|
+
_getStoredColumnSpacing(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Gets stored row spacing from the first spacer element's height style
|
|
40
|
+
*/
|
|
41
|
+
_getStoredRowSpacing(): number;
|
|
42
|
+
/**
|
|
43
|
+
* Handles column spacing changes.
|
|
44
|
+
* For vertical layout: applies horizontal padding to all cells inside attribute rows.
|
|
45
|
+
* For horizontal layout: applies padding to parent of product card wrappers.
|
|
46
|
+
*/
|
|
47
|
+
_onColumnSpacingChange(spacing: number): void;
|
|
48
|
+
/**
|
|
49
|
+
* Handles row spacing changes
|
|
50
|
+
* Applies height to all spacer elements between product rows
|
|
51
|
+
*/
|
|
52
|
+
_onRowSpacingChange(spacing: number): void;
|
|
53
|
+
/**
|
|
54
|
+
* Stores column spacing value in block data attribute
|
|
55
|
+
*/
|
|
56
|
+
_storeColumnSpacing(spacing: number): void;
|
|
57
|
+
/**
|
|
58
|
+
* Stores row spacing value in block data attribute
|
|
59
|
+
*/
|
|
60
|
+
_storeRowSpacing(spacing: number): void;
|
|
61
|
+
_listenToFormUpdates(): void;
|
|
62
|
+
/**
|
|
63
|
+
* Debounced version of _onColumnSpacingChange
|
|
64
|
+
* Prevents excessive DOM updates when user rapidly adjusts the counter
|
|
65
|
+
*/
|
|
66
|
+
_debouncedOnColumnSpacingChange: import("@vueuse/shared").PromisifyFn<(spacing: number) => void>;
|
|
67
|
+
/**
|
|
68
|
+
* Debounced version of _onRowSpacingChange
|
|
69
|
+
* Prevents excessive DOM updates when user rapidly adjusts the counter
|
|
70
|
+
*/
|
|
71
|
+
_debouncedOnRowSpacingChange: import("@vueuse/shared").PromisifyFn<(spacing: number) => void>;
|
|
72
|
+
/**
|
|
73
|
+
* Subscribe to store orientation changes
|
|
74
|
+
* Updates column spacing visibility when layout changes via the layout control
|
|
75
|
+
*/
|
|
76
|
+
_subscribeToOrientationChanges(): void;
|
|
77
|
+
}
|
|
@@ -1,2 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recommendation Block Extension
|
|
3
|
+
*
|
|
4
|
+
* This extension provides a product recommendation block for email templates.
|
|
5
|
+
* Controls are organized by element type in the ./controls directory.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Build and export the Recommendation extension
|
|
9
|
+
*/
|
|
1
10
|
declare const _default: import("@stripoinc/ui-editor-extensions").Extension;
|
|
2
11
|
export default _default;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ElementRenderer } from './templateUtils';
|
|
2
|
+
/**
|
|
3
|
+
* Horizontal element renderer
|
|
4
|
+
* - Image and Button return `<td>` cells for the 3-column layout
|
|
5
|
+
* - Name and Prices return `<tr><td>` rows for the info cell table
|
|
6
|
+
* All elements have esd-block-* classes for Stripo selection
|
|
7
|
+
*/
|
|
8
|
+
export declare const horizontalElementRenderer: ElementRenderer;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { RecommendationProduct } from '@@/Types/recommendation';
|
|
2
|
+
import { DEFAULTS, getDefaultProducts } from './templateUtils';
|
|
3
|
+
/**
|
|
4
|
+
* Migration template for horizontal layout
|
|
5
|
+
* Used when migrating old recommendation blocks to horizontal format
|
|
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=\"ins-recommendation-v3-block-v2 esd-block-recommendation-v3-block esd-extension-block es-p20\"\n data-layout=\"horizontal\"\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
|
+
export declare function getMigrationTemplate(): string;
|
|
9
|
+
/**
|
|
10
|
+
* Generates a custom horizontal migration template with specified products
|
|
11
|
+
* @param products - Array of products to display
|
|
12
|
+
* @param title - Optional title for the block
|
|
13
|
+
* @param composition - Optional array defining order of card elements
|
|
14
|
+
* @returns Complete HTML template
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateMigrationTemplate(products: RecommendationProduct[], title?: string, composition?: string[]): string;
|
|
17
|
+
/**
|
|
18
|
+
* Prepares horizontal product rows for migration
|
|
19
|
+
* @param products - Array of products to display
|
|
20
|
+
* @param composition - Optional array defining order of card elements
|
|
21
|
+
* @returns HTML string for product rows
|
|
22
|
+
*/
|
|
23
|
+
export declare function prepareProductRows(products: RecommendationProduct[], composition?: string[]): string;
|
|
24
|
+
export { DEFAULTS, getDefaultProducts };
|
|
25
|
+
export default migrationTemplate;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RecommendationProduct } from '@@/Types/recommendation';
|
|
2
|
+
import { DEFAULTS, spacer, getDefaultProducts, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY } from './templateUtils';
|
|
3
|
+
/**
|
|
4
|
+
* Block template container for horizontal layout
|
|
5
|
+
* Uses native HTML elements for dynamic DOM update compatibility
|
|
6
|
+
* Horizontal layout: Each product is full width with 3 columns
|
|
7
|
+
* Layout: [Image (120px)] [Name + Prices (flexible)] [Button (100px)]
|
|
8
|
+
*/
|
|
9
|
+
declare const blockTemplate = "\n <td\n align=\"left\"\n class=\"ins-recommendation-v3-block-v2 esd-block-recommendation-v3-block es-p20\"\n data-layout=\"horizontal\">\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 <td\n class=\"esd-block-text es-p10t es-p10b es-p20l es-p20r\"\n align=\"center\">\n <p path=\"1\" style=\"font-size: 28px; color: #333333;\">\n <strong path=\"1,0\">{-{-TITLE-}-}</strong>\n </p>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n \n <tr>\n <td class=\"spacer\" style=\"height: 10px;\"></td>\n </tr>\n\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";
|
|
10
|
+
/**
|
|
11
|
+
* Generates a horizontal product card with 3-column layout
|
|
12
|
+
* Uses horizontalElementRenderer to render Image, Info content, and Button
|
|
13
|
+
* Layout: [Image (120px)] [Info table (flexible)] [Button (100px)]
|
|
14
|
+
* @param product - The product data
|
|
15
|
+
* @returns HTML string for a single product card row
|
|
16
|
+
*/
|
|
17
|
+
export declare function getHorizontalProductCard(product: RecommendationProduct): string;
|
|
18
|
+
/**
|
|
19
|
+
* Prepares horizontal product rows
|
|
20
|
+
* Each product is a full-width row with 3-column layout
|
|
21
|
+
* @param products - Array of products to display
|
|
22
|
+
* @returns HTML string for product rows
|
|
23
|
+
*/
|
|
24
|
+
export declare function prepareProductRows(products: RecommendationProduct[]): string;
|
|
25
|
+
export declare function getDefaultTemplate(): string;
|
|
26
|
+
export declare function generateBlockTemplate(products: RecommendationProduct[], title?: string): string;
|
|
27
|
+
export { DEFAULTS, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY, getDefaultProducts, spacer, };
|
|
28
|
+
export default blockTemplate;
|
|
@@ -1,44 +1,82 @@
|
|
|
1
1
|
import type { RecommendationProduct } from '@@/Types/recommendation';
|
|
2
|
+
import { ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON } from '../constants';
|
|
3
|
+
/**
|
|
4
|
+
* Element renderer interface for product card elements
|
|
5
|
+
* Keys are ATTR_PRODUCT_* constants for consistent naming
|
|
6
|
+
*/
|
|
2
7
|
export interface ElementRenderer {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
spacer: string;
|
|
11
|
-
blockTemplate: string;
|
|
12
|
-
productRow: string;
|
|
13
|
-
productCardWrapper: string;
|
|
14
|
-
elementRenderer: ElementRenderer;
|
|
8
|
+
[ATTR_PRODUCT_IMAGE]: (product: RecommendationProduct) => string;
|
|
9
|
+
[ATTR_PRODUCT_NAME]: (product: RecommendationProduct) => string;
|
|
10
|
+
[ATTR_PRODUCT_PRICE]: (product: RecommendationProduct) => string;
|
|
11
|
+
[ATTR_PRODUCT_OLD_PRICE]: (product: RecommendationProduct) => string;
|
|
12
|
+
[ATTR_PRODUCT_OMNIBUS_PRICE]: (product: RecommendationProduct) => string;
|
|
13
|
+
[ATTR_PRODUCT_OMNIBUS_DISCOUNT]: (product: RecommendationProduct) => string;
|
|
14
|
+
[ATTR_PRODUCT_BUTTON]: (product: RecommendationProduct) => string;
|
|
15
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Product card getter function type
|
|
18
|
+
* Used by prepareProductRows to generate individual product cards
|
|
19
|
+
*/
|
|
20
|
+
export type ProductCardGetter = (product: RecommendationProduct, composition?: string[]) => string;
|
|
16
21
|
export declare const DEFAULTS: {
|
|
17
22
|
TITLE: string;
|
|
18
23
|
DESCRIPTION: string;
|
|
19
24
|
};
|
|
20
|
-
export declare const spacer = "\n <tr>\n <td class=\"spacer\" style=\"height: 20px;\"></td>\n </tr>\n";
|
|
21
|
-
export declare const productRow = "\n <tr>\n <td>\n <table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n {-{-PRODUCTS-}-}\n </table>\n </td>\n </tr>\n";
|
|
22
|
-
export declare const productCardWrapper = "\n <td width=\"{-{-COLUMN_WIDTH-}-}\" style=\"padding: 0 5px;\" valign=\"top\" height=\"100%\">\n <table\n width=\"100%\"\n height=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\"\n class=\"product-card-wrapper\">\n <tr>\n <td\n class=\"product-attribute-cell\"\n valign=\"top\">\n <table cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\">\n <tbody>\n {-{-PRODUCT_CONTENT-}-}\n </tbody>\n </table>\n </td>\n </tr>\n </table>\n </td>\n";
|
|
23
25
|
export declare const DEFAULT_CARD_COMPOSITION: string[];
|
|
26
|
+
export declare const DEFAULT_CARD_VISIBILITY: Record<string, boolean>;
|
|
27
|
+
export declare const spacer = "\n <tr>\n <td class=\"spacer\" style=\"height: 10px;\"></td>\n </tr>\n";
|
|
28
|
+
export declare const productRow = "\n <tr class=\"recommendation-product-row\">\n <td>\n <table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\">\n {-{-PRODUCTS-}-}\n </table>\n </td>\n </tr>\n";
|
|
29
|
+
export declare const productCardWrapper = "\n <td width=\"{-{-COLUMN_WIDTH-}-}\" style=\"padding: 0 5px;\" valign=\"top\" height=\"100%\">\n <table\n width=\"100%\"\n height=\"100%\"\n cellpadding=\"0\"\n cellspacing=\"0\"\n border=\"0\"\n class=\"product-card-wrapper\">\n <tr>\n <td\n class=\"product-attribute-cell\"\n valign=\"top\">\n <table cellpadding=\"0\" cellspacing=\"0\" role=\"presentation\" width=\"100%\">\n <tbody>\n {-{-PRODUCT_CONTENT-}-}\n </tbody>\n </table>\n </td>\n </tr>\n </table>\n </td>\n";
|
|
30
|
+
/**
|
|
31
|
+
* Vertical product row template - wraps attribute rows for a set of products
|
|
32
|
+
* Uses a single table with rows for each attribute type, ensuring alignment across products
|
|
33
|
+
* Note: Product-card-wrapper table has height="100%" to support proper height inheritance
|
|
34
|
+
* for child product-card-segment elements with background colors
|
|
35
|
+
*/
|
|
36
|
+
export declare const verticalProductRowWrapper = "\n <tr class=\"recommendation-product-row\">\n <td>\n <table width=\"100%\" height=\"100%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" class=\"product-card-wrapper\">\n <tbody>\n {-{-ATTRIBUTE_ROWS-}-}\n </tbody>\n </table>\n </td>\n </tr>\n";
|
|
37
|
+
/**
|
|
38
|
+
* Single attribute row template - contains one attribute type from all products
|
|
39
|
+
*/
|
|
40
|
+
export declare const attributeRowTemplate = "\n <tr\n class=\"recommendation-attribute-row\"\n data-attribute-type=\"{-{-ATTR_TYPE-}-}\"\n data-visibility=\"{-{-VISIBILITY-}-}\"\n {-{-DISPLAY_STYLE-}-}>\n {-{-CELLS-}-}\n </tr>\n";
|
|
24
41
|
export declare function getDefaultProducts(): RecommendationProduct[];
|
|
25
42
|
/**
|
|
26
|
-
*
|
|
43
|
+
* Prepares product rows HTML for vertical/grid layout
|
|
44
|
+
* Groups products into rows with specified products per row
|
|
27
45
|
* @param products - Array of products to display
|
|
28
46
|
* @param productsPerRow - Number of products per row
|
|
29
|
-
* @param
|
|
47
|
+
* @param getProductCard - Function that generates HTML for a single product card
|
|
30
48
|
* @param composition - Optional array defining order of card elements
|
|
31
49
|
* @returns HTML string for product rows
|
|
32
50
|
*/
|
|
33
|
-
export declare function prepareProductRows(products: RecommendationProduct[], productsPerRow: number,
|
|
51
|
+
export declare function prepareProductRows(products: RecommendationProduct[], productsPerRow: number, getProductCard: ProductCardGetter, composition?: string[]): string;
|
|
52
|
+
/**
|
|
53
|
+
* Generates attribute-aligned product rows for vertical layout.
|
|
54
|
+
* Creates rows where each row contains one attribute type from all products.
|
|
55
|
+
* @param products - Array of products in this row group
|
|
56
|
+
* @param productsPerRow - Number of products per row (for column width calculation)
|
|
57
|
+
* @param elementRenderer - Object mapping attribute types to render functions
|
|
58
|
+
* @param composition - Array defining order of card elements
|
|
59
|
+
* @returns HTML string for attribute-aligned rows
|
|
60
|
+
*/
|
|
61
|
+
export declare function prepareVerticalAttributeRows(products: RecommendationProduct[], productsPerRow: number, elementRenderer: ElementRenderer, composition?: string[]): string;
|
|
62
|
+
/**
|
|
63
|
+
* Prepares vertical product rows with attribute-aligned structure
|
|
64
|
+
* Groups products into rows, then generates attribute-aligned HTML for each group
|
|
65
|
+
* @param products - Array of products to display
|
|
66
|
+
* @param productsPerRow - Number of products per row
|
|
67
|
+
* @param elementRenderer - Object mapping attribute types to render functions
|
|
68
|
+
* @param composition - Array defining order of card elements
|
|
69
|
+
* @returns HTML string for all product rows
|
|
70
|
+
*/
|
|
71
|
+
export declare function prepareVerticalProductRows(products: RecommendationProduct[], productsPerRow: number, elementRenderer: ElementRenderer, composition?: string[]): string;
|
|
34
72
|
/**
|
|
35
|
-
* Generates complete HTML template with dynamic products
|
|
73
|
+
* Generates complete HTML template with dynamic products
|
|
36
74
|
* @param blockTemplate - The base block template string
|
|
37
75
|
* @param products - Array of products to display
|
|
38
76
|
* @param productsPerRow - Number of products per row
|
|
39
|
-
* @param
|
|
77
|
+
* @param getProductCard - Function that generates HTML for a single product card
|
|
40
78
|
* @param title - Title for the block
|
|
41
79
|
* @param composition - Optional array defining order of card elements
|
|
42
80
|
* @returns Complete HTML template
|
|
43
81
|
*/
|
|
44
|
-
export declare function generateTemplate(blockTemplate: string, products: RecommendationProduct[], productsPerRow: number,
|
|
82
|
+
export declare function generateTemplate(blockTemplate: string, products: RecommendationProduct[], productsPerRow: number, getProductCard: ProductCardGetter, title?: string, composition?: string[]): string;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ElementRenderer } from './templateUtils';
|
|
2
|
+
/**
|
|
3
|
+
* Class name for outer cells in attribute rows
|
|
4
|
+
* Used by controls to reliably select direct children for spacing adjustments
|
|
5
|
+
*/
|
|
6
|
+
export declare const ATTRIBUTE_CELL_CLASS = "attribute-cell";
|
|
7
|
+
export declare const verticalElementRenderer: ElementRenderer;
|
|
@@ -1,9 +1,17 @@
|
|
|
1
1
|
import type { RecommendationProduct } from '@@/Types/recommendation';
|
|
2
|
-
import { DEFAULTS, getDefaultProducts } from './templateUtils';
|
|
2
|
+
import { DEFAULTS, getDefaultProducts, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY } from './templateUtils';
|
|
3
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=\"ins-recommendation-v3-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
|
+
/**
|
|
5
|
+
* Prepares migration product rows with attribute-aligned structure.
|
|
6
|
+
* @param products - Array of products to display
|
|
7
|
+
* @param productsPerRow - Number of products per row
|
|
8
|
+
* @param composition - Array defining element order
|
|
9
|
+
* @returns HTML string for product rows
|
|
10
|
+
*/
|
|
11
|
+
export declare function prepareProductRows(products: RecommendationProduct[], productsPerRow: number, composition?: string[]): string;
|
|
4
12
|
export declare function getMigrationTemplate(): string;
|
|
5
13
|
/**
|
|
6
|
-
* Generates a custom migration template with specified products and layout
|
|
14
|
+
* Generates a custom migration template with specified products and layout.
|
|
7
15
|
* @param products - Array of products to display
|
|
8
16
|
* @param productsPerRow - Number of products per row
|
|
9
17
|
* @param title - Optional title for the block
|
|
@@ -11,6 +19,5 @@ export declare function getMigrationTemplate(): string;
|
|
|
11
19
|
* @returns Complete HTML template
|
|
12
20
|
*/
|
|
13
21
|
export declare function generateMigrationTemplate(products: RecommendationProduct[], productsPerRow: number, title?: string, composition?: string[]): string;
|
|
14
|
-
export
|
|
15
|
-
export { DEFAULTS, getDefaultProducts };
|
|
22
|
+
export { DEFAULTS, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY, getDefaultProducts, };
|
|
16
23
|
export default migrationTemplate;
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import type { RecommendationProduct } from '@@/Types/recommendation';
|
|
2
|
-
import { DEFAULTS, getDefaultProducts, DEFAULT_CARD_COMPOSITION } from './templateUtils';
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import { DEFAULTS, spacer, getDefaultProducts, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY } from './templateUtils';
|
|
3
|
+
/**
|
|
4
|
+
* Block template container for vertical layout
|
|
5
|
+
* Uses native HTML elements for dynamic DOM update compatibility
|
|
6
|
+
*/
|
|
7
|
+
declare const blockTemplate = "\n <td align=\"left\" class=\"ins-recommendation-v3-block-v2 esd-block-recommendation-v3-block es-p20\">\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 <td\n class=\"esd-block-text es-p10t es-p10b es-p20l es-p20r\"\n align=\"center\">\n <p path=\"1\" style=\"font-size: 28px; color: #333333;\">\n <strong path=\"1,0\">{-{-TITLE-}-}</strong>\n </p>\n </td>\n </tr>\n </tbody>\n </table>\n </td>\n </tr>\n \n <tr>\n <td class=\"spacer\" style=\"height: 10px;\"></td>\n </tr>\n\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";
|
|
5
8
|
/**
|
|
6
|
-
*
|
|
9
|
+
* Prepares vertical product rows with attribute-aligned structure.
|
|
10
|
+
* Uses row-based rendering where each attribute type forms a single row across all products.
|
|
7
11
|
* @param products - Array of products to display
|
|
8
12
|
* @param productsPerRow - Number of products per row
|
|
9
|
-
* @param
|
|
10
|
-
* @
|
|
11
|
-
* @returns Complete HTML template
|
|
13
|
+
* @param composition - Array defining element order
|
|
14
|
+
* @returns HTML string for product rows
|
|
12
15
|
*/
|
|
13
|
-
export declare function generateBlockTemplate(products: RecommendationProduct[], productsPerRow: number, title?: string, composition?: string[]): string;
|
|
14
16
|
export declare function prepareProductRows(products: RecommendationProduct[], productsPerRow: number, composition?: string[]): string;
|
|
15
|
-
export
|
|
17
|
+
export declare function getDefaultTemplate(): string;
|
|
18
|
+
export declare function generateBlockTemplate(products: RecommendationProduct[], productsPerRow: number, title?: string, composition?: string[]): string;
|
|
19
|
+
export { DEFAULTS, DEFAULT_CARD_COMPOSITION, DEFAULT_CARD_VISIBILITY, getDefaultProducts, spacer, };
|
|
16
20
|
export default blockTemplate;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility for preserving text styling when updating innerHTML
|
|
3
|
+
*/
|
|
4
|
+
import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
|
|
5
|
+
/**
|
|
6
|
+
* Preserves existing style tags when updating text content
|
|
7
|
+
*
|
|
8
|
+
* When users apply text styles (bold, italic, etc.) in Stripo, the editor wraps
|
|
9
|
+
* content in tags like <strong>, <em>, <u>, <s>. This function extracts those
|
|
10
|
+
* style tags from the original HTML and re-applies them to the new text content.
|
|
11
|
+
* @example
|
|
12
|
+
* // Original: <span class="omnibus-text-before"><strong>Lowest price: </strong></span>
|
|
13
|
+
* // After calling preserveTextStyles(element, 'Best price: ')
|
|
14
|
+
* // Result: <strong>Best price: </strong>
|
|
15
|
+
* @param element - The DOM element or ImmutableHtmlNode containing the styled text
|
|
16
|
+
* @param newText - The new text content to insert
|
|
17
|
+
* @returns The new text wrapped in the original style tags
|
|
18
|
+
*/
|
|
19
|
+
export declare function preserveTextStyles(element: ImmutableHtmlNode | Element, newText: string): string;
|