@useinsider/guido 2.0.0-beta.59a25d3 → 2.0.0-beta.5c09f2c

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 (198) hide show
  1. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue.js +3 -3
  2. package/dist/components/organisms/email-preview/amp/AmpErrorModal.vue2.js +1 -1
  3. package/dist/components/organisms/email-preview/amp/AmpToggle.vue.js +7 -6
  4. package/dist/components/organisms/header/EditorActions.vue.js +5 -4
  5. package/dist/components/organisms/header/MiddleSlot.vue.js +7 -7
  6. package/dist/components/organisms/header/version-history/VersionHistory.vue.js +5 -5
  7. package/dist/composables/useActionsApi.js +33 -30
  8. package/dist/config/migrator/recommendationMigrator.js +2 -2
  9. package/dist/extensions/Blocks/Items/controls/cardComposition.js +13 -4
  10. package/dist/extensions/Blocks/Recommendation/block.js +40 -6
  11. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +4 -0
  12. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +4 -0
  13. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +64 -0
  14. package/dist/extensions/Blocks/Recommendation/constants/layout.js +20 -0
  15. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +19 -0
  16. package/dist/extensions/Blocks/Recommendation/controls/button/index.js +64 -0
  17. package/dist/extensions/Blocks/Recommendation/controls/cardBackground/index.js +80 -0
  18. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +232 -0
  19. package/dist/extensions/Blocks/Recommendation/controls/image/index.js +19 -0
  20. package/dist/extensions/Blocks/Recommendation/controls/layout/index.js +96 -0
  21. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +110 -0
  22. package/dist/extensions/Blocks/Recommendation/controls/main/currency.js +204 -0
  23. package/dist/extensions/Blocks/Recommendation/controls/main/filters.js +54 -0
  24. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +201 -0
  25. package/dist/extensions/Blocks/Recommendation/controls/main/locale.js +74 -0
  26. package/dist/extensions/Blocks/Recommendation/controls/main/productLayout.js +118 -0
  27. package/dist/extensions/Blocks/Recommendation/controls/main/shuffle.js +71 -0
  28. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +286 -0
  29. package/dist/extensions/Blocks/Recommendation/controls/name/index.js +46 -0
  30. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +76 -0
  31. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/index.js +44 -0
  32. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.js +48 -0
  33. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.js +73 -0
  34. package/dist/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.js +73 -0
  35. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/index.js +48 -0
  36. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.js +73 -0
  37. package/dist/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.js +73 -0
  38. package/dist/extensions/Blocks/Recommendation/controls/price/index.js +44 -0
  39. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +222 -0
  40. package/dist/extensions/Blocks/Recommendation/extension.js +40 -43
  41. package/dist/extensions/Blocks/Recommendation/iconsRegistry.js +19 -3
  42. package/dist/extensions/Blocks/Recommendation/recommendation.css.js +13 -4
  43. package/dist/extensions/Blocks/Recommendation/services/configService.js +239 -0
  44. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +128 -72
  45. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +41 -36
  46. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +233 -0
  47. package/dist/extensions/Blocks/Recommendation/templates/grid/migration.js +251 -0
  48. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +69 -0
  49. package/dist/extensions/Blocks/Recommendation/templates/index.js +12 -0
  50. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +174 -0
  51. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +73 -0
  52. package/dist/extensions/Blocks/Recommendation/templates/utils.js +121 -0
  53. package/dist/extensions/Blocks/Recommendation/types/nodeConfig.js +6 -0
  54. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +9 -9
  55. package/dist/extensions/Blocks/Recommendation/utils/preserveTextStyles.js +36 -0
  56. package/dist/extensions/Blocks/Recommendation/utils/priceFormatter.js +29 -0
  57. package/dist/extensions/Blocks/Recommendation/utils/tagName.js +46 -0
  58. package/dist/extensions/Blocks/controlFactories.js +155 -121
  59. package/dist/guido.css +1 -1
  60. package/dist/node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js +424 -297
  61. package/dist/package.json.js +1 -1
  62. package/dist/services/recommendationApi.js +10 -9
  63. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +1 -1
  64. package/dist/src/composables/useActionsApi.d.ts +1 -0
  65. package/dist/src/extensions/Blocks/Recommendation/block.d.ts +34 -0
  66. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +13 -0
  67. package/dist/src/extensions/Blocks/Recommendation/{constants.d.ts → constants/controlIds.d.ts} +19 -11
  68. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +49 -0
  69. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +13 -0
  70. package/dist/src/extensions/Blocks/Recommendation/constants/layout.d.ts +35 -0
  71. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +31 -0
  72. package/dist/src/extensions/Blocks/Recommendation/controls/button/index.d.ts +143 -0
  73. package/dist/src/extensions/Blocks/Recommendation/controls/cardBackground/index.d.ts +31 -0
  74. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +95 -0
  75. package/dist/src/extensions/Blocks/Recommendation/controls/image/index.d.ts +35 -0
  76. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +24 -0
  77. package/dist/src/extensions/Blocks/Recommendation/controls/layout/index.d.ts +37 -0
  78. package/dist/src/extensions/Blocks/Recommendation/controls/main/algorithm.d.ts +29 -0
  79. package/dist/src/extensions/Blocks/Recommendation/controls/main/currency.d.ts +45 -0
  80. package/dist/src/extensions/Blocks/Recommendation/controls/main/filters.d.ts +22 -0
  81. package/dist/src/extensions/Blocks/Recommendation/controls/main/index.d.ts +56 -0
  82. package/dist/src/extensions/Blocks/Recommendation/controls/main/locale.d.ts +24 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/main/productLayout.d.ts +42 -0
  84. package/dist/src/extensions/Blocks/Recommendation/controls/main/shuffle.d.ts +23 -0
  85. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +214 -0
  86. package/dist/src/extensions/Blocks/Recommendation/controls/name/index.d.ts +97 -0
  87. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +16 -0
  88. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/index.d.ts +95 -0
  89. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/index.d.ts +100 -0
  90. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textAfter.d.ts +15 -0
  91. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusDiscount/textBefore.d.ts +15 -0
  92. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/index.d.ts +100 -0
  93. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textAfter.d.ts +15 -0
  94. package/dist/src/extensions/Blocks/Recommendation/controls/omnibusPrice/textBefore.d.ts +15 -0
  95. package/dist/src/extensions/Blocks/Recommendation/controls/price/index.d.ts +95 -0
  96. package/dist/src/extensions/Blocks/Recommendation/controls/spacing/index.d.ts +83 -0
  97. package/dist/src/extensions/Blocks/Recommendation/extension.d.ts +9 -0
  98. package/dist/src/extensions/Blocks/Recommendation/services/configService.d.ts +151 -0
  99. package/dist/src/extensions/Blocks/Recommendation/services/index.d.ts +6 -0
  100. package/dist/src/extensions/Blocks/Recommendation/store/recommendation.d.ts +17 -16
  101. package/dist/src/extensions/Blocks/Recommendation/templates/grid/elementRenderer.d.ts +20 -0
  102. package/dist/src/extensions/Blocks/Recommendation/templates/{migrationTemplate.d.ts → grid/migration.d.ts} +11 -4
  103. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +33 -0
  104. package/dist/src/extensions/Blocks/Recommendation/templates/index.d.ts +39 -0
  105. package/dist/src/extensions/Blocks/Recommendation/templates/list/elementRenderer.d.ts +8 -0
  106. package/dist/src/extensions/Blocks/Recommendation/templates/list/migration.d.ts +25 -0
  107. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +18 -0
  108. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +54 -0
  109. package/dist/src/extensions/Blocks/Recommendation/types/index.d.ts +7 -0
  110. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +154 -0
  111. package/dist/src/extensions/Blocks/Recommendation/utils/preserveTextStyles.d.ts +19 -0
  112. package/dist/src/extensions/Blocks/Recommendation/utils/priceFormatter.d.ts +33 -0
  113. package/dist/src/extensions/Blocks/Recommendation/utils/stylePreserver.d.ts +113 -0
  114. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +77 -0
  115. package/dist/src/stores/editor.d.ts +21 -0
  116. package/dist/static/styles/components/wide-panel.css.js +1 -5
  117. package/dist/static/styles/customEditorStyle.css.js +38 -2
  118. package/dist/stores/editor.js +1 -0
  119. package/dist/utils/templatePreparation.js +17 -17
  120. package/package.json +3 -3
  121. package/dist/extensions/Blocks/Recommendation/cardCompositionControl.js +0 -103
  122. package/dist/extensions/Blocks/Recommendation/constants.js +0 -5
  123. package/dist/extensions/Blocks/Recommendation/control.js +0 -306
  124. package/dist/extensions/Blocks/Recommendation/controls/button/align.js +0 -13
  125. package/dist/extensions/Blocks/Recommendation/controls/button/border.js +0 -13
  126. package/dist/extensions/Blocks/Recommendation/controls/button/borderRadius.js +0 -13
  127. package/dist/extensions/Blocks/Recommendation/controls/button/color.js +0 -13
  128. package/dist/extensions/Blocks/Recommendation/controls/button/fitToContent.js +0 -13
  129. package/dist/extensions/Blocks/Recommendation/controls/button/fontFamily.js +0 -13
  130. package/dist/extensions/Blocks/Recommendation/controls/button/margins.js +0 -13
  131. package/dist/extensions/Blocks/Recommendation/controls/button/paddings.js +0 -13
  132. package/dist/extensions/Blocks/Recommendation/controls/button/text.js +0 -13
  133. package/dist/extensions/Blocks/Recommendation/controls/button/textSize.js +0 -13
  134. package/dist/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.js +0 -13
  135. package/dist/extensions/Blocks/Recommendation/controls/image/margins.js +0 -13
  136. package/dist/extensions/Blocks/Recommendation/controls/image/size.js +0 -13
  137. package/dist/extensions/Blocks/Recommendation/controls/name/align.js +0 -13
  138. package/dist/extensions/Blocks/Recommendation/controls/name/background.js +0 -13
  139. package/dist/extensions/Blocks/Recommendation/controls/name/color.js +0 -13
  140. package/dist/extensions/Blocks/Recommendation/controls/name/fontFamily.js +0 -13
  141. package/dist/extensions/Blocks/Recommendation/controls/name/paddings.js +0 -13
  142. package/dist/extensions/Blocks/Recommendation/controls/name/size.js +0 -13
  143. package/dist/extensions/Blocks/Recommendation/controls/name/style.js +0 -13
  144. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/align.js +0 -13
  145. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/background.js +0 -13
  146. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/color.js +0 -13
  147. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.js +0 -13
  148. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/paddings.js +0 -13
  149. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/size.js +0 -13
  150. package/dist/extensions/Blocks/Recommendation/controls/oldPrice/style.js +0 -13
  151. package/dist/extensions/Blocks/Recommendation/controls/price/align.js +0 -13
  152. package/dist/extensions/Blocks/Recommendation/controls/price/background.js +0 -13
  153. package/dist/extensions/Blocks/Recommendation/controls/price/color.js +0 -13
  154. package/dist/extensions/Blocks/Recommendation/controls/price/fontFamily.js +0 -13
  155. package/dist/extensions/Blocks/Recommendation/controls/price/paddings.js +0 -13
  156. package/dist/extensions/Blocks/Recommendation/controls/price/size.js +0 -13
  157. package/dist/extensions/Blocks/Recommendation/controls/price/style.js +0 -13
  158. package/dist/extensions/Blocks/Recommendation/templates/blockTemplate.js +0 -160
  159. package/dist/extensions/Blocks/Recommendation/templates/migrationTemplate.js +0 -152
  160. package/dist/extensions/Blocks/Recommendation/templates/templateUtils.js +0 -180
  161. package/dist/src/extensions/Blocks/Recommendation/cardCompositionControl.d.ts +0 -28
  162. package/dist/src/extensions/Blocks/Recommendation/control.d.ts +0 -35
  163. package/dist/src/extensions/Blocks/Recommendation/controls/button/align.d.ts +0 -5
  164. package/dist/src/extensions/Blocks/Recommendation/controls/button/border.d.ts +0 -5
  165. package/dist/src/extensions/Blocks/Recommendation/controls/button/borderRadius.d.ts +0 -5
  166. package/dist/src/extensions/Blocks/Recommendation/controls/button/color.d.ts +0 -5
  167. package/dist/src/extensions/Blocks/Recommendation/controls/button/fitToContent.d.ts +0 -5
  168. package/dist/src/extensions/Blocks/Recommendation/controls/button/fontFamily.d.ts +0 -5
  169. package/dist/src/extensions/Blocks/Recommendation/controls/button/margins.d.ts +0 -5
  170. package/dist/src/extensions/Blocks/Recommendation/controls/button/paddings.d.ts +0 -5
  171. package/dist/src/extensions/Blocks/Recommendation/controls/button/text.d.ts +0 -5
  172. package/dist/src/extensions/Blocks/Recommendation/controls/button/textSize.d.ts +0 -5
  173. package/dist/src/extensions/Blocks/Recommendation/controls/button/textStyleAndFontColor.d.ts +0 -5
  174. package/dist/src/extensions/Blocks/Recommendation/controls/image/margins.d.ts +0 -5
  175. package/dist/src/extensions/Blocks/Recommendation/controls/image/size.d.ts +0 -5
  176. package/dist/src/extensions/Blocks/Recommendation/controls/name/align.d.ts +0 -5
  177. package/dist/src/extensions/Blocks/Recommendation/controls/name/background.d.ts +0 -5
  178. package/dist/src/extensions/Blocks/Recommendation/controls/name/color.d.ts +0 -5
  179. package/dist/src/extensions/Blocks/Recommendation/controls/name/fontFamily.d.ts +0 -5
  180. package/dist/src/extensions/Blocks/Recommendation/controls/name/paddings.d.ts +0 -5
  181. package/dist/src/extensions/Blocks/Recommendation/controls/name/size.d.ts +0 -5
  182. package/dist/src/extensions/Blocks/Recommendation/controls/name/style.d.ts +0 -5
  183. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/align.d.ts +0 -5
  184. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/background.d.ts +0 -5
  185. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/color.d.ts +0 -5
  186. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/fontFamily.d.ts +0 -5
  187. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/paddings.d.ts +0 -5
  188. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/size.d.ts +0 -5
  189. package/dist/src/extensions/Blocks/Recommendation/controls/oldPrice/style.d.ts +0 -5
  190. package/dist/src/extensions/Blocks/Recommendation/controls/price/align.d.ts +0 -5
  191. package/dist/src/extensions/Blocks/Recommendation/controls/price/background.d.ts +0 -5
  192. package/dist/src/extensions/Blocks/Recommendation/controls/price/color.d.ts +0 -5
  193. package/dist/src/extensions/Blocks/Recommendation/controls/price/fontFamily.d.ts +0 -5
  194. package/dist/src/extensions/Blocks/Recommendation/controls/price/paddings.d.ts +0 -5
  195. package/dist/src/extensions/Blocks/Recommendation/controls/price/size.d.ts +0 -5
  196. package/dist/src/extensions/Blocks/Recommendation/controls/price/style.d.ts +0 -5
  197. package/dist/src/extensions/Blocks/Recommendation/templates/blockTemplate.d.ts +0 -16
  198. package/dist/src/extensions/Blocks/Recommendation/templates/templateUtils.d.ts +0 -44
@@ -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;
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Price Formatting Utilities
3
+ *
4
+ * Provides functions for formatting prices according to currency settings.
5
+ * Used to format prices displayed in recommendation product cards.
6
+ */
7
+ import type { CurrencyConfig } from '../types/nodeConfig';
8
+ /**
9
+ * Options for formatting a price
10
+ */
11
+ export interface FormatPriceOptions {
12
+ /** The numeric price value */
13
+ price: number;
14
+ /** Currency configuration */
15
+ currency: CurrencyConfig;
16
+ }
17
+ /**
18
+ * Formats a numeric price according to currency settings
19
+ * @example
20
+ * // Returns: "$ 1,999.99"
21
+ * formatPrice({ price: 1999.99, currency: currencyConfig })
22
+ * @param options - Formatting options
23
+ * @returns Formatted price string
24
+ */
25
+ export declare function formatPrice(options: FormatPriceOptions): string;
26
+ /**
27
+ * Parses a formatted price string back to a number
28
+ * Useful for extracting numeric values from formatted price displays
29
+ * @param formattedPrice - The formatted price string
30
+ * @param currency - Currency configuration for parsing
31
+ * @returns Parsed numeric value or NaN if parsing fails
32
+ */
33
+ export declare function parseFormattedPrice(formattedPrice: string, currency: CurrencyConfig): number;
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Style Preserver Utility
3
+ *
4
+ * Captures and restores element styles during block regeneration.
5
+ * This ensures user styling is preserved when:
6
+ * - Layout changes (vertical <-> horizontal)
7
+ * - Cards per row changes
8
+ * - Composition order changes
9
+ *
10
+ * Works with the node config system to provide complete style persistence.
11
+ */
12
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
13
+ import { ModificationDescription } from '@stripoinc/ui-editor-extensions';
14
+ /**
15
+ * Style properties that can be captured for text elements
16
+ */
17
+ export interface TextElementStyles {
18
+ fontSize?: string;
19
+ fontFamily?: string;
20
+ fontWeight?: string;
21
+ fontStyle?: string;
22
+ color?: string;
23
+ textAlign?: string;
24
+ lineHeight?: string;
25
+ textDecoration?: string;
26
+ }
27
+ /**
28
+ * Style properties for button elements
29
+ */
30
+ export interface ButtonElementStyles extends TextElementStyles {
31
+ backgroundColor?: string;
32
+ borderRadius?: string;
33
+ border?: string;
34
+ padding?: string;
35
+ }
36
+ /**
37
+ * Style properties for image elements
38
+ */
39
+ export interface ImageElementStyles {
40
+ width?: string;
41
+ height?: string;
42
+ maxWidth?: string;
43
+ }
44
+ /**
45
+ * Complete captured styles for a recommendation block
46
+ */
47
+ export interface CapturedStyles {
48
+ /** Product name text styles */
49
+ name: TextElementStyles;
50
+ /** Current price text styles */
51
+ price: TextElementStyles;
52
+ /** Original/old price text styles */
53
+ oldPrice: TextElementStyles;
54
+ /** Omnibus price text styles */
55
+ omnibusPrice: TextElementStyles;
56
+ /** Omnibus discount text styles */
57
+ omnibusDiscount: TextElementStyles;
58
+ /** CTA button styles */
59
+ button: ButtonElementStyles;
60
+ /** Product image styles */
61
+ image: ImageElementStyles;
62
+ /** Card background color */
63
+ cardBackgroundColor: string | null;
64
+ /** Column spacing in pixels */
65
+ columnSpacing: number;
66
+ /** Row spacing in pixels */
67
+ rowSpacing: number;
68
+ /** Element composition order */
69
+ composition: string[];
70
+ /** Element visibility flags */
71
+ visibility: Record<string, boolean>;
72
+ }
73
+ type DocumentModifier = {
74
+ modifyHtml: (node: ImmutableHtmlNode) => {
75
+ setStyle: (prop: string, value: string) => DocumentModifier;
76
+ };
77
+ apply: (description: ModificationDescription) => void;
78
+ };
79
+ /**
80
+ * Capture all styles from a recommendation block
81
+ *
82
+ * Call this BEFORE any operation that regenerates the block HTML.
83
+ * The captured styles can then be restored after regeneration.
84
+ * @example
85
+ * // Before layout change
86
+ * const styles = captureStyles(this.currentNode);
87
+ *
88
+ * // ... regenerate block HTML ...
89
+ *
90
+ * // After regeneration
91
+ * restoreStyles(this.currentNode, this.api.getDocumentModifier(), styles);
92
+ * @param node - The block node to capture styles from
93
+ * @returns Complete captured styles object
94
+ */
95
+ export declare function captureStyles(node: ImmutableHtmlNode | null | undefined): CapturedStyles;
96
+ /**
97
+ * Restore captured styles to a regenerated block
98
+ *
99
+ * Call this AFTER regenerating block HTML to reapply user styling.
100
+ * @example
101
+ * restoreStyles(this.currentNode, this.api.getDocumentModifier(), capturedStyles);
102
+ * @param node - The block node to restore styles to
103
+ * @param modifier - Document modifier for applying changes
104
+ * @param styles - Previously captured styles
105
+ */
106
+ export declare function restoreStyles(node: ImmutableHtmlNode | null | undefined, modifier: DocumentModifier, styles: CapturedStyles): void;
107
+ /**
108
+ * Check if styles have meaningful content worth restoring
109
+ * @param styles - Captured styles to check
110
+ * @returns True if styles contain restorable content
111
+ */
112
+ export declare function hasRestorableStyles(styles: CapturedStyles): boolean;
113
+ export {};
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Node Type Guards and Tag Name Utilities
3
+ *
4
+ * Provides type-safe utilities for working with ImmutableHtmlNode.
5
+ * Handles both standard DOM properties and Stripo's custom methods.
6
+ */
7
+ import type { ImmutableHtmlNode } from '@stripoinc/ui-editor-extensions';
8
+ /** Interface for nodes with standard tagName property */
9
+ interface NodeWithTagName {
10
+ tagName: string;
11
+ }
12
+ /** Interface for nodes with getStyle method */
13
+ export interface NodeWithGetStyle {
14
+ getStyle: (property: string) => string | null | undefined;
15
+ }
16
+ /** Interface for nodes with parent method */
17
+ export interface NodeWithParent {
18
+ parent: () => ImmutableHtmlNode | null;
19
+ }
20
+ /**
21
+ * Type guard to check if a node has getStyle method
22
+ * @param node - The node to check
23
+ */
24
+ export declare function hasGetStyle(node: unknown): node is NodeWithGetStyle;
25
+ /**
26
+ * Type guard to check if a node has parent method
27
+ * @param node - The node to check
28
+ */
29
+ export declare function hasParent(node: unknown): node is NodeWithParent;
30
+ /**
31
+ * Type guard to check if a node is a TD element
32
+ * @param node - The node to check
33
+ */
34
+ export declare function isTdNode(node: unknown): node is ImmutableHtmlNode & NodeWithTagName;
35
+ /**
36
+ * Safely retrieves a style value from a node
37
+ * @param node - The node to get the style from
38
+ * @param property - The CSS property name
39
+ * @returns The style value or null if not accessible
40
+ */
41
+ export declare function safeGetStyle(node: ImmutableHtmlNode | null, property: string): string | null | undefined;
42
+ /**
43
+ * Safely retrieves the parent element of a node
44
+ * @param node - The node to get the parent from
45
+ * @returns The parent node or null if not accessible
46
+ */
47
+ export declare function safeGetParent(node: ImmutableHtmlNode | null): ImmutableHtmlNode | null;
48
+ /**
49
+ * Safely retrieves the tag name from a node.
50
+ * Handles both standard DOM tagName property and Stripo's getTagName() method.
51
+ * @param node - The node to get the tag name from
52
+ * @param defaultValue - Default value if tag name cannot be determined (default: 'UNKNOWN')
53
+ * @returns The uppercase tag name
54
+ */
55
+ export declare function getTagName(node: ImmutableHtmlNode | null | undefined, defaultValue?: string): string;
56
+ /**
57
+ * Checks if a tag name represents a table cell element.
58
+ * Includes standard TD and Stripo's custom block types (BLOCK_IMAGE, BLOCK_BUTTON).
59
+ * @param tagName - The tag name to check (case-insensitive)
60
+ * @returns True if the tag represents a table cell
61
+ */
62
+ export declare function isTableCellTag(tagName: string): boolean;
63
+ /**
64
+ * Checks if a node is a table cell element.
65
+ * Combines getTagName and isTableCellTag for convenience.
66
+ * @param node - The node to check
67
+ * @returns True if the node is a table cell element
68
+ */
69
+ export declare function isTableCellNode(node: ImmutableHtmlNode | null | undefined): boolean;
70
+ /**
71
+ * Gets the appropriate CSS display value for showing a table element.
72
+ * Table cells use 'table-cell', table rows use 'table-row'.
73
+ * @param node - The table element node
74
+ * @returns The CSS display value ('table-cell' or 'table-row')
75
+ */
76
+ export declare function getTableDisplayValue(node: ImmutableHtmlNode | null | undefined): 'table-cell' | 'table-row';
77
+ export {};
@@ -9,6 +9,27 @@ export declare const useEditorStore: import("pinia").StoreDefinition<"guidoEdito
9
9
  isStripoInitialized: boolean;
10
10
  templateId: string;
11
11
  }, {
12
+ isEditorToolbarVisible: (state: {
13
+ loadingStatus: boolean;
14
+ isCodeEditorOpen: boolean;
15
+ isSaveAsTemplateDrawerOpen: boolean;
16
+ isVersionHistoryOpen: boolean;
17
+ isPreviewModeOpen: boolean;
18
+ editorVisualMode: string;
19
+ hasChanges: boolean;
20
+ isStripoInitialized: boolean;
21
+ templateId: string;
22
+ } & import("pinia").PiniaCustomStateProperties<{
23
+ loadingStatus: boolean;
24
+ isCodeEditorOpen: boolean;
25
+ isSaveAsTemplateDrawerOpen: boolean;
26
+ isVersionHistoryOpen: boolean;
27
+ isPreviewModeOpen: boolean;
28
+ editorVisualMode: string;
29
+ hasChanges: boolean;
30
+ isStripoInitialized: boolean;
31
+ templateId: string;
32
+ }>) => boolean;
12
33
  isUndoButtonDisabled: (state: {
13
34
  loadingStatus: boolean;
14
35
  isCodeEditorOpen: boolean;
@@ -6,10 +6,6 @@ ue-main-editor-container[panel-position=SETTINGS_BLOCKS] ue-wide-panel {
6
6
  right: calc(100% - calc(var(--ue-spacing-step, 5px) * 3) - 425px);
7
7
  }
8
8
 
9
- ue-main-tabs-panel-component .fixed-panel-header {
10
- display: none;
11
- }
12
-
13
9
  /* Remove with this writing task DT-28355 */
14
10
  ue-description a {
15
11
  display: none;
@@ -64,7 +60,7 @@ ue-control-panel,
64
60
 
65
61
  .control-panel-header {
66
62
  grid-template-columns: repeat(12, 1fr);
67
- padding: 0;
63
+ padding: 16px 0px 16px 16px;
68
64
  }
69
65
 
70
66
  .control-panel-header > * {
@@ -19,10 +19,46 @@ const n = `.esd-x,
19
19
  box-shadow: none;
20
20
  }
21
21
  .ins-product-cart ue-node-actions,
22
- .ins-recommendation-v3-block-v2 .product-attribute-cell ue-node-actions,
23
- .ins-recommendation-v3-block-v2 .product-attribute-cell ue-node-panel {
22
+ /* Horizontal layout - hide for info, image, and button cells */
23
+ .ins-recommendation-v3-block-v2 .product-info-cell ue-node-actions,
24
+ .ins-recommendation-v3-block-v2 .product-info-cell ue-node-panel,
25
+ .ins-recommendation-v3-block-v2 .product-image-cell ue-node-actions,
26
+ .ins-recommendation-v3-block-v2 .product-image-cell ue-node-panel,
27
+ .ins-recommendation-v3-block-v2 .button-cell ue-node-actions,
28
+ .ins-recommendation-v3-block-v2 .button-cell ue-node-panel,
29
+ /* Vertical layout - hide for product-card-segment inner cells */
30
+ .ins-recommendation-v3-block-v2 .product-card-segment ue-node-actions,
31
+ .ins-recommendation-v3-block-v2 .product-card-segment ue-node-panel,
32
+ /* Hide for specific product attribute cells in both layouts */
33
+ .ins-recommendation-v3-block-v2 .product-image ue-node-actions,
34
+ .ins-recommendation-v3-block-v2 .product-image ue-node-panel,
35
+ .ins-recommendation-v3-block-v2 .product-name ue-node-actions,
36
+ .ins-recommendation-v3-block-v2 .product-name ue-node-panel,
37
+ .ins-recommendation-v3-block-v2 .product-price ue-node-actions,
38
+ .ins-recommendation-v3-block-v2 .product-price ue-node-panel,
39
+ .ins-recommendation-v3-block-v2 .product-old-price ue-node-actions,
40
+ .ins-recommendation-v3-block-v2 .product-old-price ue-node-panel,
41
+ .ins-recommendation-v3-block-v2 .product-omnibus-price ue-node-actions,
42
+ .ins-recommendation-v3-block-v2 .product-omnibus-price ue-node-panel,
43
+ .ins-recommendation-v3-block-v2 .product-omnibus-discount ue-node-actions,
44
+ .ins-recommendation-v3-block-v2 .product-omnibus-discount ue-node-panel,
45
+ .ins-recommendation-v3-block-v2 .product-button ue-node-actions,
46
+ .ins-recommendation-v3-block-v2 .product-button ue-node-panel {
24
47
  display: none !important;
25
48
  }
49
+
50
+ /* Apply to the table cell (td) with text-trim-enabled class */
51
+ .text-trim-enabled {
52
+ max-width: 0 !important;
53
+ }
54
+
55
+ .text-trim-enabled p {
56
+ overflow: hidden !important;
57
+ text-overflow: ellipsis !important;
58
+ white-space: nowrap !important;
59
+ margin: 0 !important;
60
+ display: block !important;
61
+ }
26
62
  `;
27
63
  export {
28
64
  n as default
@@ -13,6 +13,7 @@ const o = e("guidoEditor", {
13
13
  }),
14
14
  getters: {
15
15
  // Middle Slot
16
+ isEditorToolbarVisible: (i) => !i.isVersionHistoryOpen && !i.isPreviewModeOpen,
16
17
  isUndoButtonDisabled: (i) => i.loadingStatus || i.isPreviewModeOpen,
17
18
  isRedoButtonDisabled: (i) => i.loadingStatus || i.isPreviewModeOpen,
18
19
  isCodeEditorButtonDisabled: (i) => i.loadingStatus || i.isPreviewModeOpen,
@@ -1,29 +1,29 @@
1
- import { useActionsApi as S } from "../composables/useActionsApi.js";
2
- import { useHtmlCompiler as b } from "../composables/useHtmlCompiler.js";
3
- import { useDynamicContentStore as f } from "../stores/dynamic-content.js";
4
- import { useUnsubscribeStore as C } from "../stores/unsubscribe.js";
5
- const z = () => {
6
- const i = f(), t = C(), { getCompiledEmail: o, getTemplateData: s } = S(), { compileHtml: n } = b();
1
+ import { useActionsApi as b } from "../composables/useActionsApi.js";
2
+ import { useHtmlCompiler as f } from "../composables/useHtmlCompiler.js";
3
+ import { useDynamicContentStore as C } from "../stores/dynamic-content.js";
4
+ import { useUnsubscribeStore as T } from "../stores/unsubscribe.js";
5
+ const P = () => {
6
+ const i = C(), t = T(), { getCompiledEmail: o, getTemplateData: s, editorSave: n } = b(), { compileHtml: a } = f();
7
7
  return {
8
8
  prepareTemplateDetails: async () => {
9
- const { html: a, ampHtml: m = "", ampErrors: r = [] } = await o({
9
+ const { html: r, ampHtml: m = "", ampErrors: c = [] } = await o({
10
10
  minimize: !0,
11
11
  resetDataSavedFlag: !1
12
- }), { html: c, css: l, syncModulesIds: p = [] } = await s(), { compiledHtml: u, stats: e, appliedRules: d } = n(a), g = i.getSelectedDynamicContentList;
13
- return console.debug("HTML Compilation Stats:", {
12
+ }), { html: l, css: p, syncModulesIds: u = [] } = await s(), { compiledHtml: d, stats: e, appliedRules: g } = a(r), S = i.getSelectedDynamicContentList;
13
+ return n(), console.debug("HTML Compilation Stats:", {
14
14
  originalSize: e.originalSize,
15
15
  compiledSize: e.compiledSize,
16
16
  reduction: `${e.reductionPercentage.toFixed(2)}%`,
17
- appliedRules: d,
17
+ appliedRules: g,
18
18
  executionTime: `${e.executionTime.toFixed(2)}ms`
19
19
  }), {
20
- dynamicContentList: g,
21
- compiledHtml: u,
22
- rawHtml: c,
23
- css: l,
20
+ dynamicContentList: S,
21
+ compiledHtml: d,
22
+ rawHtml: l,
23
+ css: p,
24
24
  ampHtml: m,
25
- ampErrors: r,
26
- modules: p,
25
+ ampErrors: c,
26
+ modules: u,
27
27
  recommendation: {
28
28
  campaignUrls: {},
29
29
  configs: {}
@@ -37,5 +37,5 @@ const z = () => {
37
37
  };
38
38
  };
39
39
  export {
40
- z as useTemplatePreparation
40
+ P as useTemplatePreparation
41
41
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "2.0.0-beta.59a25d3",
3
+ "version": "2.0.0-beta.5c09f2c",
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",
@@ -31,7 +31,7 @@
31
31
  "author": "",
32
32
  "license": "ISC",
33
33
  "dependencies": {
34
- "@stripoinc/ui-editor-extensions": "3.3.0",
34
+ "@stripoinc/ui-editor-extensions": "3.5.0",
35
35
  "@useinsider/design-system-vue": "0.14.20",
36
36
  "@vueuse/core": "11.3.0",
37
37
  "lodash-es": "4.17.21",
@@ -85,7 +85,7 @@
85
85
  },
86
86
  "guido": {
87
87
  "stripo": {
88
- "version": "2.47.0"
88
+ "version": "2.52.0"
89
89
  }
90
90
  }
91
91
  }
@@ -1,103 +0,0 @@
1
- var m = Object.defineProperty;
2
- var y = (n, o, i) => o in n ? m(n, o, { enumerable: !0, configurable: !0, writable: !0, value: i }) : n[o] = i;
3
- var a = (n, o, i) => y(n, typeof o != "symbol" ? o + "" : o, i);
4
- import { ModificationDescription as u } from "../../../node_modules/@stripoinc/ui-editor-extensions/dist/esm/index.js";
5
- import { CommonControl as b } from "../common-control.js";
6
- const h = "ui-elements-recommendation-card-composition", s = [
7
- { key: "productImage", label: "Product Image", visible: !0 },
8
- { key: "productName", label: "Product Name", visible: !0 },
9
- { key: "productPrice", label: "Product Price", visible: !0 },
10
- { key: "productOriginalPrice", label: "Product Original Price", visible: !0 },
11
- { key: "productButton", label: "Product Button", visible: !0 }
12
- ];
13
- class g extends b {
14
- constructor() {
15
- super(...arguments);
16
- a(this, "currentComposition", []);
17
- a(this, "currentVisibility", {});
18
- }
19
- getId() {
20
- return h;
21
- }
22
- getTemplate() {
23
- const i = s.map((e) => ({
24
- key: e.key,
25
- label: e.label,
26
- content: `
27
- <div style="display: flex; align-items: center; justify-content: space-between;
28
- padding: 8px; gap: 8px;">
29
- <span style="flex: 1;">${e.label}</span>
30
- ${this._GuToggle(`visibility_${e.key}`)}
31
- </div>
32
- `
33
- }));
34
- return `
35
- <div class="container">
36
- ${this._GuLabel({ text: "Card Element Order & Visibility" })}
37
- ${this._GuOrderable("cardComposition", i)}
38
- </div>
39
- `;
40
- }
41
- onRender() {
42
- this._initializeComposition(), this.api.onValueChanged("cardComposition", (i) => {
43
- this.currentComposition = i, this._applyCompositionToBlock(i);
44
- }), s.forEach((i) => {
45
- this.api.onValueChanged(`visibility_${i.key}`, (e) => {
46
- this.currentVisibility[i.key] = e, this._applyVisibilityToBlock();
47
- });
48
- });
49
- }
50
- onTemplateNodeUpdated(i) {
51
- super.onTemplateNodeUpdated(i), this._initializeComposition();
52
- }
53
- /**
54
- * Initialize the composition order and visibility from the block or use defaults
55
- */
56
- _initializeComposition() {
57
- var p;
58
- const i = (p = this.currentNode) == null ? void 0 : p.querySelector(".ins-recommendation-v3-block-v2");
59
- let e = null, l = null;
60
- if (i && "getAttribute" in i && (e = i.getAttribute("data-card-composition"), l = i.getAttribute("data-card-visibility")), e) {
61
- const t = e.split(",").filter(Boolean), r = s.map((c) => c.key);
62
- t.every((c) => r.includes(c)) && t.length > 0 ? this.currentComposition = t : this.currentComposition = r;
63
- } else
64
- this.currentComposition = s.map((t) => t.key);
65
- if (l)
66
- try {
67
- const t = JSON.parse(l);
68
- this.currentVisibility = t;
69
- } catch {
70
- this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
71
- }
72
- else
73
- this.currentVisibility = s.reduce((t, r) => (t[r.key] = r.visible, t), {});
74
- const d = {
75
- cardComposition: this.currentComposition
76
- };
77
- s.forEach((t) => {
78
- d[`visibility_${t.key}`] = this.currentVisibility[t.key] ?? !0;
79
- }), this.api.updateValues(d);
80
- }
81
- /**
82
- * Apply the reordered composition to the block's HTML structure
83
- */
84
- _applyCompositionToBlock(i) {
85
- if (!this.currentNode)
86
- return;
87
- const e = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
88
- e && this.api.getDocumentModifier().modifyHtml(e).setAttribute("data-card-composition", i.join(",")).apply(new u("Stored card composition order"));
89
- }
90
- /**
91
- * Apply visibility changes to the block's HTML structure
92
- */
93
- _applyVisibilityToBlock() {
94
- if (!this.currentNode)
95
- return;
96
- const i = this.currentNode.querySelector(".ins-recommendation-v3-block-v2");
97
- i && this.api.getDocumentModifier().modifyHtml(i).setAttribute("data-card-visibility", JSON.stringify(this.currentVisibility)).apply(new u("Stored card visibility settings"));
98
- }
99
- }
100
- export {
101
- h as COMPOSITION_CONTROL_BLOCK_ID,
102
- g as RecommendationCardCompositionControl
103
- };
@@ -1,5 +0,0 @@
1
- var o = /* @__PURE__ */ ((c) => (c.BUTTON = "recommendation-block-button", c.NAME = "recommendation-block-name", c.PRICE = "recommendation-block-price", c.OLD_PRICE = "recommendation-block-old-price", c.IMAGE = "recommendation-block-image", c))(o || {}), r = /* @__PURE__ */ ((c) => (c.BUTTON_ALIGN = "recommendation-block-button-align-control", c.BUTTON_BORDER = "recommendation-block-button-border-control", c.BUTTON_BORDER_RADIUS = "recommendation-block-button-border-radius-control", c.BUTTON_COLOR = "recommendation-block-button-color-control", c.BUTTON_FIT_TO_CONTENT = "recommendation-block-button-fit-to-content-control", c.BUTTON_FONT_FAMILY = "recommendation-block-button-font-family-control", c.BUTTON_MARGINS = "recommendation-block-button-margins-control", c.BUTTON_PADDINGS = "recommendation-block-button-paddings-control", c.BUTTON_TEXT = "recommendation-block-button-text-control", c.BUTTON_TEXT_SIZE = "recommendation-block-button-text-size-control", c.BUTTON_TEXT_STYLE_AND_FONT_COLOR = "recommendation-block-button-text-style-and-font-color-control", c.NAME_ALIGN = "recommendation-block-name-align-control", c.NAME_BACKGROUND = "recommendation-block-name-background-control", c.NAME_COLOR = "recommendation-block-name-color-control", c.NAME_FONT_FAMILY = "recommendation-block-name-font-family-control", c.NAME_PADDINGS = "recommendation-block-name-paddings-control", c.NAME_SIZE = "recommendation-block-name-size-control", c.NAME_STYLE = "recommendation-block-name-style-control", c.PRICE_ALIGN = "recommendation-block-price-align-control", c.PRICE_BACKGROUND = "recommendation-block-price-background-control", c.PRICE_COLOR = "recommendation-block-price-color-control", c.PRICE_FONT_FAMILY = "recommendation-block-price-font-family-control", c.PRICE_PADDINGS = "recommendation-block-price-paddings-control", c.PRICE_SIZE = "recommendation-block-price-size-control", c.PRICE_STYLE = "recommendation-block-price-style-control", c.OLD_PRICE_ALIGN = "recommendation-block-old-price-align-control", c.OLD_PRICE_BACKGROUND = "recommendation-block-old-price-background-control", c.OLD_PRICE_COLOR = "recommendation-block-old-price-color-control", c.OLD_PRICE_FONT_FAMILY = "recommendation-block-old-price-font-family-control", c.OLD_PRICE_PADDINGS = "recommendation-block-old-price-paddings-control", c.OLD_PRICE_SIZE = "recommendation-block-old-price-size-control", c.OLD_PRICE_STYLE = "recommendation-block-old-price-style-control", c.IMAGE_SIZE = "recommendation-block-image-size-control", c.IMAGE_MARGINS = "recommendation-block-image-margins-control", c))(r || {});
2
- export {
3
- o as RecommendationBlockId,
4
- r as RecommendationControlId
5
- };