@useinsider/guido 3.17.0-beta.6cedc6c → 3.17.0-beta.6f780fd

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 (87) hide show
  1. package/dist/@types/config/schemas.js +15 -13
  2. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue.js +6 -6
  3. package/dist/components/organisms/extensions/recommendation/RemoveStrategyModal.vue2.js +40 -35
  4. package/dist/components/organisms/header/AutoSaveStatus.vue.js +17 -0
  5. package/dist/components/organisms/header/AutoSaveStatus.vue2.js +21 -0
  6. package/dist/components/organisms/header/EditorActions.vue.js +13 -13
  7. package/dist/components/organisms/header/EditorActions.vue2.js +34 -50
  8. package/dist/components/organisms/header/EditorActionsMenu.vue.js +20 -0
  9. package/dist/components/organisms/header/EditorActionsMenu.vue2.js +39 -0
  10. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  11. package/dist/components/organisms/header/LeftSlot.vue2.js +28 -23
  12. package/dist/components/organisms/header/MiddleSlot.vue.js +4 -4
  13. package/dist/components/organisms/header/MiddleSlot.vue2.js +8 -7
  14. package/dist/components/organisms/header/RightSlot.vue.js +7 -6
  15. package/dist/components/organisms/header/RightSlot.vue2.js +17 -15
  16. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue.js +18 -0
  17. package/dist/components/organisms/header/accessibility/AccessibilityToolbar.vue2.js +37 -0
  18. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue.js +24 -0
  19. package/dist/components/organisms/header/accessibility/ColorVisionSelect.vue2.js +48 -0
  20. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue.js +18 -0
  21. package/dist/components/organisms/onboarding/EditorTabBarOnboarding.vue2.js +74 -0
  22. package/dist/components/organisms/onboarding/OnboardingWrapper.vue2.js +43 -34
  23. package/dist/composables/useAccessibilityApi.js +31 -0
  24. package/dist/composables/useCustomInterfaceAppearance.js +31 -28
  25. package/dist/composables/useStripo.js +14 -14
  26. package/dist/config/i18n/en/labels.json.js +29 -5
  27. package/dist/config/migrator/index.js +9 -8
  28. package/dist/config/migrator/recommendation/compositionMapper.js +20 -20
  29. package/dist/config/migrator/recommendation/extractors.js +29 -24
  30. package/dist/config/migrator/recommendation/htmlBuilder.js +116 -130
  31. package/dist/config/migrator/recommendationMigrator.js +30 -25
  32. package/dist/config/migrator/recommendationTitleMigrator.js +119 -0
  33. package/dist/extensions/Blocks/Recommendation/block.js +12 -11
  34. package/dist/extensions/Blocks/Recommendation/constants/blockIds.js +1 -1
  35. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  36. package/dist/extensions/Blocks/Recommendation/constants/defaultConfig.js +24 -22
  37. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +35 -28
  38. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +329 -257
  39. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +107 -105
  40. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +1 -0
  41. package/dist/extensions/Blocks/Recommendation/controls/title/index.js +44 -0
  42. package/dist/extensions/Blocks/Recommendation/extension.js +31 -29
  43. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +23 -4
  44. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +3 -3
  45. package/dist/extensions/Blocks/Recommendation/templates/titleRows.js +33 -0
  46. package/dist/extensions/Blocks/Recommendation/templates/utils.js +85 -107
  47. package/dist/extensions/Blocks/Recommendation/utils/nodeConfigWriter.js +9 -9
  48. package/dist/guido.css +1 -1
  49. package/dist/node_modules/@vueuse/core/index.js +102 -0
  50. package/dist/node_modules/@vueuse/shared/index.js +40 -28
  51. package/dist/sprite.svg +6 -0
  52. package/dist/src/@types/config/schemas.d.ts +4 -0
  53. package/dist/src/components/organisms/header/EditorActionsMenu.vue.d.ts +2 -0
  54. package/dist/src/components/organisms/header/accessibility/AccessibilityToolbar.vue.d.ts +2 -0
  55. package/dist/src/components/organisms/header/accessibility/ColorVisionSelect.vue.d.ts +2 -0
  56. package/dist/src/components/organisms/onboarding/EditorTabBarOnboarding.vue.d.ts +2 -0
  57. package/dist/src/composables/useAccessibilityApi.d.ts +15 -0
  58. package/dist/src/composables/useActionsApi.d.ts +2 -2
  59. package/dist/src/composables/useConfig.d.ts +2 -0
  60. package/dist/src/config/migrator/recommendation/extractors.d.ts +8 -0
  61. package/dist/src/config/migrator/recommendationTitleMigrator.d.ts +5 -0
  62. package/dist/src/extensions/Blocks/Recommendation/constants/blockIds.d.ts +2 -1
  63. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +7 -0
  64. package/dist/src/extensions/Blocks/Recommendation/constants/defaultConfig.d.ts +1 -0
  65. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  66. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +12 -0
  67. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +11 -0
  68. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
  69. package/dist/src/extensions/Blocks/Recommendation/controls/main/utils.d.ts +1 -0
  70. package/dist/src/extensions/Blocks/Recommendation/controls/title/index.d.ts +86 -0
  71. package/dist/src/extensions/Blocks/Recommendation/templates/titleRows.d.ts +13 -0
  72. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +6 -0
  73. package/dist/src/stores/config.d.ts +18 -0
  74. package/dist/src/stores/editor.d.ts +76 -0
  75. package/dist/src/stores/onboarding.d.ts +377 -0
  76. package/dist/src/stores/version-history.d.ts +1 -1
  77. package/dist/src/utils/timeUtil.d.ts +10 -0
  78. package/dist/static/styles/components/accessibility.css.js +137 -0
  79. package/dist/static/styles/customEditorStyle.css.js +3 -1
  80. package/dist/static/styles/variables.css.js +1 -0
  81. package/dist/stores/editor.js +4 -1
  82. package/dist/stores/onboarding.js +16 -11
  83. package/dist/utils/timeUtil.js +7 -17
  84. package/package.json +1 -1
  85. package/dist/components/organisms/header/AutoSaveToggle.vue.js +0 -22
  86. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +0 -19
  87. /package/dist/src/components/organisms/header/{AutoSaveToggle.vue.d.ts → AutoSaveStatus.vue.d.ts} +0 -0
@@ -0,0 +1,15 @@
1
+ import type { ColorVisionDeficiency } from '@@/Types/api/accessibility-api';
2
+ export declare const useAccessibilityApi: () => {
3
+ openAccessibilityTestingMode: () => void;
4
+ closeAccessibilityTestingMode: () => void;
5
+ toggleAccessibilityTestingMode: () => void;
6
+ isAccessibilityTestingModeOpen: () => boolean;
7
+ showImages: () => void;
8
+ hideImages: () => void;
9
+ toggleImages: () => void;
10
+ setColorVisionDeficiency: (type: ColorVisionDeficiency) => void;
11
+ getColorVisionDeficiency: () => ColorVisionDeficiency;
12
+ switchToDesktopPreview: () => void;
13
+ switchToMobilePreview: () => void;
14
+ toggleCodeEditor: () => void;
15
+ };
@@ -1,5 +1,5 @@
1
- import type { CompileEmailOptions } from '@@/Types/actions-api';
2
- import { GetCompiledEmailOptions, CompiledEmailResult, TemplateData } from '@@/Types/actions-api';
1
+ import type { CompileEmailOptions } from '@@/Types/api/actions-api';
2
+ import { GetCompiledEmailOptions, CompiledEmailResult, TemplateData } from '@@/Types/api/actions-api';
3
3
  export declare const useActionsApi: () => {
4
4
  getCompiledEmail: (options?: GetCompiledEmailOptions) => Promise<CompiledEmailResult>;
5
5
  getTemplateData: () => Promise<TemplateData>;
@@ -97,6 +97,7 @@ export declare const useConfig: () => {
97
97
  modulesDisabled: boolean;
98
98
  liquidSyntax: boolean;
99
99
  autosave: boolean;
100
+ accessibilityTesting: boolean;
100
101
  allowlistEnabled: boolean;
101
102
  linkTrackingIds: boolean;
102
103
  reusableRecommendationStrategy: boolean;
@@ -232,6 +233,7 @@ export declare const useConfig: () => {
232
233
  modulesDisabled: boolean;
233
234
  liquidSyntax: boolean;
234
235
  autosave: boolean;
236
+ accessibilityTesting: boolean;
235
237
  allowlistEnabled: boolean;
236
238
  linkTrackingIds: boolean;
237
239
  reusableRecommendationStrategy: boolean;
@@ -1,4 +1,12 @@
1
1
  export declare function extractTitleText(block: Element): string;
2
+ /**
3
+ * Fallback for legacy configs that carry no `p_recommendation_title` variable:
4
+ * the rendered HTML decides. A missing or `display: none` title container means
5
+ * the user never saw a title, so the migrated block keeps it toggled off.
6
+ * @param block - The legacy recommendation block element
7
+ * @returns True when the legacy block renders a visible title
8
+ */
9
+ export declare function hasVisibleTitle(block: Element): boolean;
2
10
  /**
3
11
  * Card background lives on either the block (`bgcolor`/`style`) or per-card
4
12
  * cells (`.product-card`). Returns empty string when no background is set —
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Runs before the document reaches the editor, so a legacy title is already a
3
+ * composition item on the first render — no post-load adoption pass.
4
+ */
5
+ export declare function migrateRecommendationTitle(html: string): string;
@@ -10,5 +10,6 @@ export declare enum RecommendationBlockId {
10
10
  OMNIBUS_PRICE = "recommendation-block-omnibus-price",
11
11
  OMNIBUS_DISCOUNT = "recommendation-block-omnibus-discount",
12
12
  IMAGE = "recommendation-block-image",
13
- CUSTOM_ATTRIBUTE = "recommendation-block-custom-attribute"
13
+ CUSTOM_ATTRIBUTE = "recommendation-block-custom-attribute",
14
+ TITLE = "recommendation-block-title"
14
15
  }
@@ -65,5 +65,12 @@ export declare enum RecommendationControlId {
65
65
  CUSTOM_ATTR_SIZE = "recommendation-block-custom-attr-size-control",
66
66
  CUSTOM_ATTR_STYLE = "recommendation-block-custom-attr-style-control",
67
67
  CUSTOM_ATTR_TEXT_TRIM = "recommendation-block-custom-attr-text-trim-control",
68
+ TITLE_ALIGN = "recommendation-block-title-align-control",
69
+ TITLE_BACKGROUND = "recommendation-block-title-background-control",
70
+ TITLE_COLOR = "recommendation-block-title-color-control",
71
+ TITLE_FONT_FAMILY = "recommendation-block-title-font-family-control",
72
+ TITLE_PADDINGS = "recommendation-block-title-paddings-control",
73
+ TITLE_SIZE = "recommendation-block-title-size-control",
74
+ TITLE_STYLE = "recommendation-block-title-style-control",
68
75
  SYNC_INFO_MESSAGE = "recommendation-block-sync-info-message"
69
76
  }
@@ -34,6 +34,7 @@ export declare const DEFAULT_COMPOSITION: string[];
34
34
  /**
35
35
  * Default visibility settings for card elements
36
36
  * Omnibus elements are hidden by default (not all regions require them)
37
+ * The block-level title is visible on a fresh drop.
37
38
  */
38
39
  export declare const DEFAULT_VISIBILITY: Record<string, boolean>;
39
40
  /**
@@ -8,6 +8,6 @@
8
8
  */
9
9
  export { RecommendationBlockId } from './blockIds';
10
10
  export { RecommendationControlId } from './controlIds';
11
- export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CSS_CLASS_SKIP_COMPILE, RECOMMENDATION_VARIABLE_BUILTIN_ATTRIBUTES, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_CUSTOM_PREFIX, ATTR_DATA_CARD_COMPOSITION, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR, SELECTOR_ATTRIBUTE_ROW, ATTR_DATA_ATTRIBUTE_TYPE, PRODUCT_ATTRIBUTE_PREFIX, BUILT_IN_DEFAULT_ATTRIBUTES, } from './selectors';
11
+ export { BLOCK_ROOT_SELECTOR, CONTAINER_SELECTOR, DESKTOP_CONTAINER_SELECTOR, MOBILE_CONTAINER_SELECTOR, MOBILE_ROW_SELECTOR, CSS_CLASS_RECO_BUTTON, CSS_CLASS_SKIP_COMPILE, RECOMMENDATION_VARIABLE_BUILTIN_ATTRIBUTES, CURRENCY_ATTR, ATTR_PRODUCT_IMAGE, ATTR_PRODUCT_NAME, ATTR_PRODUCT_PRICE, ATTR_PRODUCT_OLD_PRICE, ATTR_PRODUCT_OMNIBUS_PRICE, ATTR_PRODUCT_OMNIBUS_DISCOUNT, ATTR_PRODUCT_BUTTON, ATTR_RECOMMENDATION_TITLE, SELECTOR_TITLE_CELL, ATTR_CUSTOM_PREFIX, ATTR_DATA_CARD_COMPOSITION, ATTR_DATA_CUSTOM_ATTRIBUTES, ATTR_PRODUCT_ATTR, CSS_CLASS_ATTRIBUTE_ROW, CSS_CLASS_SPACER, SELECTOR_ATTRIBUTE_ROW, ATTR_DATA_ATTRIBUTE_TYPE, ATTR_DATA_VISIBILITY, PRODUCT_ATTRIBUTE_PREFIX, BUILT_IN_DEFAULT_ATTRIBUTES, } from './selectors';
12
12
  export { LAYOUT_VALUES, LAYOUT_OPTIONS, DEFAULT_PRODUCTS_PER_ROW, DEFAULT_CARDS_IN_ROW, DEFAULT_MOBILE_CARDS_IN_ROW, MAX_PRODUCT_COUNT, MIN_PRODUCT_COUNT, MAX_PRODUCTS_PER_ROW, MIN_PRODUCTS_PER_ROW, MAX_MOBILE_PRODUCTS_PER_ROW, MIN_MOBILE_PRODUCTS_PER_ROW, DEFAULT_COLUMN_SPACING, DEFAULT_ROW_SPACING, DEFAULT_MOBILE_COLUMN_SPACING, DEFAULT_MOBILE_ROW_SPACING, MIN_SPACING, MAX_SPACING, SPACING_STEP, } from './layout';
13
13
  export { DEFAULT_NODE_CONFIG, DEFAULT_CURRENCY, DEFAULT_COMPOSITION, DEFAULT_VISIBILITY, CURRENT_CONFIG_VERSION, PRE_RRS_CONFIG_VERSION, EXCLUDED_ALGORITHM_IDS, } from './defaultConfig';
@@ -58,6 +58,10 @@ export declare const ATTR_PRODUCT_OLD_PRICE = "productOldPrice";
58
58
  export declare const ATTR_PRODUCT_OMNIBUS_PRICE = "productOmnibusPrice";
59
59
  export declare const ATTR_PRODUCT_OMNIBUS_DISCOUNT = "productOmnibusDiscount";
60
60
  export declare const ATTR_PRODUCT_BUTTON = "productButton";
61
+ export declare const ATTR_RECOMMENDATION_TITLE = "recommendationTitle";
62
+ export declare const CSS_CLASS_TITLE_CELL = "ins-recommendation-title";
63
+ /** Title cell — the only `esd-block-text` living outside the product containers. */
64
+ export declare const SELECTOR_TITLE_CELL = ".ins-recommendation-title";
61
65
  /**
62
66
  * Custom attribute constants
63
67
  * Used for dynamically added product attributes in Card Composition
@@ -68,12 +72,20 @@ export declare const ATTR_CUSTOM_PREFIX = "customAttr:";
68
72
  export declare const ATTR_DATA_CUSTOM_ATTRIBUTES = "data-custom-attributes";
69
73
  /** HTML data attribute on the block root holding the comma-joined composition order */
70
74
  export declare const ATTR_DATA_CARD_COMPOSITION = "data-card-composition";
75
+ /** HTML attribute on the block root carrying its per-document unique id */
76
+ export declare const RECOMMENDATION_ID_ATTR = "recommendation-id";
71
77
  /** HTML attribute on <td> elements identifying the product attribute for compiler template variable generation */
72
78
  export declare const ATTR_PRODUCT_ATTR = "product-attr";
79
+ /** Class every composition attribute row carries — the visibility toggle and the compiler both key on it */
80
+ export declare const CSS_CLASS_ATTRIBUTE_ROW = "recommendation-attribute-row";
73
81
  /** Row wrapper of one composition entry inside a product card */
74
82
  export declare const SELECTOR_ATTRIBUTE_ROW = ".recommendation-attribute-row";
75
83
  /** HTML attribute on an attribute row holding its composition key */
76
84
  export declare const ATTR_DATA_ATTRIBUTE_TYPE = "data-attribute-type";
85
+ /** HTML attribute on an attribute row holding its visibility (`1` / `0`) */
86
+ export declare const ATTR_DATA_VISIBILITY = "data-visibility";
87
+ /** Class on the spacer cell of the row that trails a title */
88
+ export declare const CSS_CLASS_SPACER = "spacer";
77
89
  /** Prefix `resolveProductAttrValue` puts on custom (non-default) product attributes in `product-attr` values */
78
90
  export declare const PRODUCT_ATTRIBUTE_PREFIX = "product_attribute.";
79
91
  /**
@@ -33,6 +33,8 @@ export declare class RecommendationCardCompositionControl extends CommonControl
33
33
  private _normalizeComposition;
34
34
  private _readCustomAttributesFromNode;
35
35
  private _readVisibilityFromRows;
36
+ private _withTitlePresence;
37
+ private _hasTitle;
36
38
  private _getDefaultVisibilities;
37
39
  private _extractVisibilityFromRows;
38
40
  private _parseVisibilityValue;
@@ -187,6 +189,15 @@ export declare class RecommendationCardCompositionControl extends CommonControl
187
189
  */
188
190
  private _buildCompositionHtml;
189
191
  private _applyVisibilityToBlock;
192
+ private _applyTitleVisibilityToBlock;
193
+ private _resolveTitleInjection;
194
+ private _readTitleHtml;
195
+ private _findTitleRows;
196
+ private _findTitleRowsByClass;
197
+ private _isSpacerRow;
198
+ private _findTitleContainerBody;
199
+ private _readInnerHtml;
200
+ private _defaultTitleParagraph;
190
201
  /**
191
202
  * Finds the composition array index for the Nth custom attribute (0-based).
192
203
  * Scans left-to-right, counting only entries with the custom prefix.
@@ -11,6 +11,7 @@
11
11
  */
12
12
  export { RecommendationBlockControl, CONTROL_BLOCK_ID, AlgorithmControl, ALGORITHM_CONTROL_ID, LocaleControl, LOCALE_CONTROL_ID, CurrencyControl, CURRENCY_CONTROL_ID, ProductCountControl, PRODUCT_COUNT_CONTROL_ID, ProductLayoutControl, PRODUCT_LAYOUT_CONTROL_ID, FiltersControl, FILTERS_CONTROL_ID, ShuffleControl, SHUFFLE_CONTROL_ID, LayoutOrientationControl, LAYOUT_ORIENTATION_CONTROL_ID, PricePlacementControl, PRICE_PLACEMENT_CONTROL_ID, } from './main';
13
13
  export * from './main/utils';
14
+ export { TitleControls } from './title';
14
15
  export { NameControls } from './name';
15
16
  export { PriceControls } from './price';
16
17
  export { OldPriceControls } from './oldPrice';
@@ -70,6 +70,7 @@ export interface RegenerateProductRowsOptions {
70
70
  /** Optional: pass composition directly to avoid stale DOM reads after setAttribute */
71
71
  composition?: string[];
72
72
  }
73
+ export declare function getMainContainerTbody(currentNode: ImmutableHtmlNode): ImmutableHtmlNode | null;
73
74
  /**
74
75
  * Regenerates only the mobile product container rows and commits in a single apply().
75
76
  * Standalone entry point for callers that change mobile-only settings
@@ -0,0 +1,86 @@
1
+ export declare const TitleControls: {
2
+ readonly align: {
3
+ new (): {
4
+ getId(): string;
5
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
6
+ getParentControlId(): string;
7
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
8
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
9
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
10
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
11
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
12
+ };
13
+ };
14
+ readonly color: {
15
+ new (): {
16
+ getId(): string;
17
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
18
+ getParentControlId(): string;
19
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
20
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
21
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
22
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
23
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
24
+ };
25
+ };
26
+ readonly size: {
27
+ new (): {
28
+ getId(): string;
29
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
30
+ getParentControlId(): string;
31
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
32
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
33
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
34
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
35
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
36
+ };
37
+ };
38
+ readonly style: {
39
+ new (): {
40
+ getId(): string;
41
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
42
+ getParentControlId(): string;
43
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
44
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
45
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
46
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
47
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
48
+ };
49
+ };
50
+ readonly fontFamily: {
51
+ new (): {
52
+ getId(): string;
53
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
54
+ getParentControlId(): string;
55
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
56
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
57
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
58
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
59
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
60
+ };
61
+ };
62
+ readonly background: {
63
+ new (): {
64
+ getId(): string;
65
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
66
+ getAdditionalModifications(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
67
+ getParentControlId(): string;
68
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
69
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
70
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
71
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
72
+ };
73
+ };
74
+ readonly paddings: {
75
+ new (): {
76
+ getId(): string;
77
+ getTargetNodes(root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode[];
78
+ getParentControlId(): string;
79
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
80
+ getLabels(): import("@stripoinc/ui-editor-extensions").ControlLabels | undefined;
81
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
82
+ getAdditionalModifications(_root: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
83
+ isVisible(_node: import("@stripoinc/ui-editor-extensions").ImmutableHtmlNode): boolean;
84
+ };
85
+ };
86
+ };
@@ -0,0 +1,13 @@
1
+ export declare const DEFAULT_TITLE_TEXT = "You May Also Like!";
2
+ export declare const DEFAULT_TITLE_PARAGRAPH: string;
3
+ /**
4
+ * Builds the two block-level title rows: the title itself and the spacer below it.
5
+ * Both carry the same `recommendation-attribute-row` tagging a card attribute row has,
6
+ * so the Card Composition toggle hides the pair together and the compiler's
7
+ * `[data-visibility="0"]` sweep drops both — no leading gap when the title is off.
8
+ * @param paragraphHtml - Full `<p>` markup rendered inside the title cell
9
+ * @param visible - Whether the title starts visible
10
+ * @param spacerHeightPx - Height of the spacer row below the title
11
+ * @returns HTML string with the title row followed by its spacer row
12
+ */
13
+ export declare function buildTitleRows(paragraphHtml?: string, visible?: boolean, spacerHeightPx?: number): string;
@@ -139,6 +139,12 @@ export interface RecommendationNodeConfig {
139
139
  * Keys are ATTR_PRODUCT_* constants
140
140
  */
141
141
  visibility: Record<string, boolean>;
142
+ /**
143
+ * Snapshot of the block title's row markup before it's removed.
144
+ * Restored verbatim when the title is re-enabled.
145
+ * @default ''
146
+ */
147
+ previousTitleHtml: string;
142
148
  /**
143
149
  * Omnibus price text configuration
144
150
  * For EU Omnibus Directive compliance
@@ -102,6 +102,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
102
102
  modulesDisabled: boolean;
103
103
  liquidSyntax: boolean;
104
104
  autosave: boolean;
105
+ accessibilityTesting: boolean;
105
106
  allowlistEnabled: boolean;
106
107
  linkTrackingIds: boolean;
107
108
  reusableRecommendationStrategy: boolean;
@@ -243,6 +244,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
243
244
  modulesDisabled: boolean;
244
245
  liquidSyntax: boolean;
245
246
  autosave: boolean;
247
+ accessibilityTesting: boolean;
246
248
  allowlistEnabled: boolean;
247
249
  linkTrackingIds: boolean;
248
250
  reusableRecommendationStrategy: boolean;
@@ -384,6 +386,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
384
386
  modulesDisabled: boolean;
385
387
  liquidSyntax: boolean;
386
388
  autosave: boolean;
389
+ accessibilityTesting: boolean;
387
390
  allowlistEnabled: boolean;
388
391
  linkTrackingIds: boolean;
389
392
  reusableRecommendationStrategy: boolean;
@@ -525,6 +528,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
525
528
  modulesDisabled: boolean;
526
529
  liquidSyntax: boolean;
527
530
  autosave: boolean;
531
+ accessibilityTesting: boolean;
528
532
  allowlistEnabled: boolean;
529
533
  linkTrackingIds: boolean;
530
534
  reusableRecommendationStrategy: boolean;
@@ -666,6 +670,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
666
670
  modulesDisabled: boolean;
667
671
  liquidSyntax: boolean;
668
672
  autosave: boolean;
673
+ accessibilityTesting: boolean;
669
674
  allowlistEnabled: boolean;
670
675
  linkTrackingIds: boolean;
671
676
  reusableRecommendationStrategy: boolean;
@@ -807,6 +812,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
807
812
  modulesDisabled: boolean;
808
813
  liquidSyntax: boolean;
809
814
  autosave: boolean;
815
+ accessibilityTesting: boolean;
810
816
  allowlistEnabled: boolean;
811
817
  linkTrackingIds: boolean;
812
818
  reusableRecommendationStrategy: boolean;
@@ -948,6 +954,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
948
954
  modulesDisabled: boolean;
949
955
  liquidSyntax: boolean;
950
956
  autosave: boolean;
957
+ accessibilityTesting: boolean;
951
958
  allowlistEnabled: boolean;
952
959
  linkTrackingIds: boolean;
953
960
  reusableRecommendationStrategy: boolean;
@@ -1089,6 +1096,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1089
1096
  modulesDisabled: boolean;
1090
1097
  liquidSyntax: boolean;
1091
1098
  autosave: boolean;
1099
+ accessibilityTesting: boolean;
1092
1100
  allowlistEnabled: boolean;
1093
1101
  linkTrackingIds: boolean;
1094
1102
  reusableRecommendationStrategy: boolean;
@@ -1230,6 +1238,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1230
1238
  modulesDisabled: boolean;
1231
1239
  liquidSyntax: boolean;
1232
1240
  autosave: boolean;
1241
+ accessibilityTesting: boolean;
1233
1242
  allowlistEnabled: boolean;
1234
1243
  linkTrackingIds: boolean;
1235
1244
  reusableRecommendationStrategy: boolean;
@@ -1371,6 +1380,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1371
1380
  modulesDisabled: boolean;
1372
1381
  liquidSyntax: boolean;
1373
1382
  autosave: boolean;
1383
+ accessibilityTesting: boolean;
1374
1384
  allowlistEnabled: boolean;
1375
1385
  linkTrackingIds: boolean;
1376
1386
  reusableRecommendationStrategy: boolean;
@@ -1512,6 +1522,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1512
1522
  modulesDisabled: boolean;
1513
1523
  liquidSyntax: boolean;
1514
1524
  autosave: boolean;
1525
+ accessibilityTesting: boolean;
1515
1526
  allowlistEnabled: boolean;
1516
1527
  linkTrackingIds: boolean;
1517
1528
  reusableRecommendationStrategy: boolean;
@@ -1653,6 +1664,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1653
1664
  modulesDisabled: boolean;
1654
1665
  liquidSyntax: boolean;
1655
1666
  autosave: boolean;
1667
+ accessibilityTesting: boolean;
1656
1668
  allowlistEnabled: boolean;
1657
1669
  linkTrackingIds: boolean;
1658
1670
  reusableRecommendationStrategy: boolean;
@@ -1794,6 +1806,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1794
1806
  modulesDisabled: boolean;
1795
1807
  liquidSyntax: boolean;
1796
1808
  autosave: boolean;
1809
+ accessibilityTesting: boolean;
1797
1810
  allowlistEnabled: boolean;
1798
1811
  linkTrackingIds: boolean;
1799
1812
  reusableRecommendationStrategy: boolean;
@@ -1935,6 +1948,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1935
1948
  modulesDisabled: boolean;
1936
1949
  liquidSyntax: boolean;
1937
1950
  autosave: boolean;
1951
+ accessibilityTesting: boolean;
1938
1952
  allowlistEnabled: boolean;
1939
1953
  linkTrackingIds: boolean;
1940
1954
  reusableRecommendationStrategy: boolean;
@@ -2076,6 +2090,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2076
2090
  modulesDisabled: boolean;
2077
2091
  liquidSyntax: boolean;
2078
2092
  autosave: boolean;
2093
+ accessibilityTesting: boolean;
2079
2094
  allowlistEnabled: boolean;
2080
2095
  linkTrackingIds: boolean;
2081
2096
  reusableRecommendationStrategy: boolean;
@@ -2217,6 +2232,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2217
2232
  modulesDisabled: boolean;
2218
2233
  liquidSyntax: boolean;
2219
2234
  autosave: boolean;
2235
+ accessibilityTesting: boolean;
2220
2236
  allowlistEnabled: boolean;
2221
2237
  linkTrackingIds: boolean;
2222
2238
  reusableRecommendationStrategy: boolean;
@@ -2358,6 +2374,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2358
2374
  modulesDisabled: boolean;
2359
2375
  liquidSyntax: boolean;
2360
2376
  autosave: boolean;
2377
+ accessibilityTesting: boolean;
2361
2378
  allowlistEnabled: boolean;
2362
2379
  linkTrackingIds: boolean;
2363
2380
  reusableRecommendationStrategy: boolean;
@@ -2501,6 +2518,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2501
2518
  modulesDisabled: boolean;
2502
2519
  liquidSyntax: boolean;
2503
2520
  autosave: boolean;
2521
+ accessibilityTesting: boolean;
2504
2522
  allowlistEnabled: boolean;
2505
2523
  linkTrackingIds: boolean;
2506
2524
  reusableRecommendationStrategy: boolean;