@useinsider/guido 3.2.0-beta.e01b42a → 3.2.0-beta.ec6228c

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 (109) hide show
  1. package/README.md +24 -0
  2. package/dist/@types/config/schemas.js +82 -68
  3. package/dist/components/Guido.vue.js +4 -4
  4. package/dist/components/Guido.vue2.js +92 -81
  5. package/dist/components/organisms/AutoSaveController.vue.js +17 -0
  6. package/dist/components/organisms/AutoSaveController.vue2.js +13 -0
  7. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue.js +7 -7
  8. package/dist/components/organisms/email-preview/desktop-preview/EmailSizeIndicator.vue2.js +12 -20
  9. package/dist/components/organisms/header/AutoSaveToggle.vue.js +22 -0
  10. package/dist/components/organisms/header/AutoSaveToggle.vue2.js +19 -0
  11. package/dist/components/organisms/header/EditorActions.vue.js +2 -2
  12. package/dist/components/organisms/header/EditorActions.vue2.js +51 -36
  13. package/dist/components/organisms/header/RightSlot.vue.js +11 -11
  14. package/dist/components/organisms/header/RightSlot.vue2.js +17 -13
  15. package/dist/components/organisms/save-as-template/SaveAsTemplateDrawer.vue2.js +18 -17
  16. package/dist/composables/useActionsApi.js +4 -4
  17. package/dist/composables/useAutoSave.js +68 -0
  18. package/dist/composables/useFullStoryBridge.js +14 -0
  19. package/dist/composables/useHtmlCompiler.js +23 -21
  20. package/dist/composables/useHtmlValidator.js +40 -38
  21. package/dist/composables/usePreviewMode.js +20 -16
  22. package/dist/composables/useSave.js +23 -15
  23. package/dist/composables/useStripo.js +52 -47
  24. package/dist/composables/validators/useLiquidValidator.js +42 -0
  25. package/dist/config/compiler/liquidCompilerRules.js +15 -0
  26. package/dist/config/compiler/recommendationCompilerRules.js +162 -43
  27. package/dist/config/compiler/unsubscribeCompilerRules.js +37 -37
  28. package/dist/config/compiler/utils/recommendationCompilerUtils.js +52 -46
  29. package/dist/config/migrator/checkboxMigrator.js +5 -3
  30. package/dist/config/migrator/radioButtonMigrator.js +14 -12
  31. package/dist/config/migrator/recommendationMigrator.js +1 -1
  32. package/dist/enums/extensions/recommendationBlock.js +14 -11
  33. package/dist/enums/recommendation.js +2 -2
  34. package/dist/extensions/Blocks/CouponBlock/template.js +24 -13
  35. package/dist/extensions/Blocks/Items/controls/price/singlePrice.js +38 -38
  36. package/dist/extensions/Blocks/Items/enums/productEnums.js +19 -7
  37. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  38. package/dist/extensions/Blocks/Recommendation/constants/selectors.js +27 -11
  39. package/dist/extensions/Blocks/Recommendation/controls/cardComposition/index.js +185 -172
  40. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/index.js +21 -18
  41. package/dist/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.js +99 -0
  42. package/dist/extensions/Blocks/Recommendation/controls/main/algorithm.js +6 -6
  43. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +3 -1
  44. package/dist/extensions/Blocks/Recommendation/controls/main/utils.js +94 -92
  45. package/dist/extensions/Blocks/Recommendation/controls/name/textTrim.js +27 -57
  46. package/dist/extensions/Blocks/Recommendation/controls/shared/textTrimCssRules.js +14 -0
  47. package/dist/extensions/Blocks/Recommendation/controls/spacing/index.js +31 -31
  48. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +18 -17
  49. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +29 -25
  50. package/dist/extensions/Blocks/Recommendation/templates/grid/elementRenderer.js +7 -5
  51. package/dist/extensions/Blocks/Recommendation/templates/grid/template.js +30 -29
  52. package/dist/extensions/Blocks/Recommendation/templates/index.js +7 -7
  53. package/dist/extensions/Blocks/Recommendation/templates/list/elementRenderer.js +3 -1
  54. package/dist/extensions/Blocks/Recommendation/templates/list/template.js +21 -21
  55. package/dist/extensions/Blocks/Recommendation/templates/utils.js +57 -50
  56. package/dist/extensions/Blocks/Recommendation/utils/filterUtil.js +17 -14
  57. package/dist/extensions/Blocks/Unsubscribe/block.js +11 -11
  58. package/dist/extensions/DynamicContent/dynamic-content.js +17 -12
  59. package/dist/guido.css +1 -1
  60. package/dist/package.json.js +1 -1
  61. package/dist/services/recommendationApi.js +15 -15
  62. package/dist/services/stripoApi.js +9 -9
  63. package/dist/services/templateLibraryApi.js +48 -46
  64. package/dist/src/@types/config/index.d.ts +1 -1
  65. package/dist/src/@types/config/schemas.d.ts +32 -0
  66. package/dist/src/@types/config/types.d.ts +3 -1
  67. package/dist/src/@types/generic.d.ts +0 -1
  68. package/dist/src/@types/save-as-template.d.ts +1 -0
  69. package/dist/src/components/organisms/AutoSaveController.vue.d.ts +2 -0
  70. package/dist/src/components/organisms/header/AutoSaveToggle.vue.d.ts +2 -0
  71. package/dist/src/composables/useActionsApi.d.ts +1 -1
  72. package/dist/src/composables/useAutoSave.d.ts +3 -0
  73. package/dist/src/composables/useConfig.d.ts +14 -0
  74. package/dist/src/composables/useFullStoryBridge.d.ts +11 -0
  75. package/dist/src/composables/validators/useLiquidValidator.d.ts +3 -0
  76. package/dist/src/config/compiler/liquidCompilerRules.d.ts +2 -0
  77. package/dist/src/config/compiler/utils/recommendationCompilerUtils.d.ts +1 -1
  78. package/dist/src/enums/extensions/recommendationBlock.d.ts +3 -0
  79. package/dist/src/extensions/Blocks/CouponBlock/template.d.ts +2 -0
  80. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +1 -0
  81. package/dist/src/extensions/Blocks/Recommendation/constants/index.d.ts +1 -1
  82. package/dist/src/extensions/Blocks/Recommendation/constants/selectors.d.ts +5 -0
  83. package/dist/src/extensions/Blocks/Recommendation/controls/cardComposition/index.d.ts +5 -0
  84. package/dist/src/extensions/Blocks/Recommendation/controls/customAttribute/index.d.ts +3 -0
  85. package/dist/src/extensions/Blocks/Recommendation/controls/customAttribute/textTrim.d.ts +35 -0
  86. package/dist/src/extensions/Blocks/Recommendation/controls/name/textTrim.d.ts +3 -20
  87. package/dist/src/extensions/Blocks/Recommendation/controls/shared/textTrimCssRules.d.ts +29 -0
  88. package/dist/src/extensions/Blocks/Recommendation/templates/grid/template.d.ts +4 -4
  89. package/dist/src/extensions/Blocks/Recommendation/templates/list/template.d.ts +3 -3
  90. package/dist/src/extensions/Blocks/Recommendation/templates/utils.d.ts +20 -3
  91. package/dist/src/extensions/Blocks/Recommendation/utils/tagName.d.ts +3 -3
  92. package/dist/src/services/templateLibraryApi.d.ts +1 -1
  93. package/dist/src/stores/autosave.d.ts +6 -0
  94. package/dist/src/stores/config.d.ts +126 -0
  95. package/dist/src/stores/preview.d.ts +3 -0
  96. package/dist/src/utils/genericUtil.d.ts +1 -1
  97. package/dist/src/utils/htmlCompiler.d.ts +2 -1
  98. package/dist/src/utils/timeUtil.d.ts +8 -0
  99. package/dist/static/styles/base.css.js +7 -2
  100. package/dist/static/styles/components/button.css.js +3 -2
  101. package/dist/static/styles/components/loader.css.js +4 -0
  102. package/dist/stores/autosave.js +11 -0
  103. package/dist/stores/preview.js +4 -3
  104. package/dist/utils/genericUtil.js +42 -20
  105. package/dist/utils/htmlCompiler.js +48 -41
  106. package/dist/utils/templatePreparation.js +36 -25
  107. package/dist/utils/timeUtil.js +19 -0
  108. package/dist/utils/tooltipUtils.js +4 -5
  109. package/package.json +3 -3
@@ -1,15 +1,29 @@
1
- import type { RecommendationProduct } from '@@/Types/recommendation';
1
+ import type { FiltersResponse, RecommendationProduct } from '@@/Types/recommendation';
2
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
3
  /**
4
4
  * Converts a snake_case attribute name to Title Case display name.
5
5
  * e.g., "rating_star" → "Rating Star"
6
6
  */
7
7
  export declare function toDisplayName(attrName: string): string;
8
+ /**
9
+ * Checks whether an attribute is a default (top-level) product attribute
10
+ * vs a custom product attribute (nested under `product_attributes`).
11
+ * Returns false when filterList is empty or the attribute is not found.
12
+ */
13
+ export declare function isDefaultAttribute(attrName: string, filterList: FiltersResponse): boolean;
14
+ /**
15
+ * Resolves the `product-attr` HTML attribute value based on attribute type from the filter list.
16
+ * - Default attributes → attribute name directly (e.g., "brand") → compiles to `{{1_0_brand}}`
17
+ * - Product attributes → "product_attribute.<name>" (e.g., "product_attribute.rating_star")
18
+ */
19
+ export declare function resolveProductAttrValue(attrName: string, filterList: FiltersResponse): string;
8
20
  /**
9
21
  * Callback that generates the cell HTML for a custom product attribute.
10
22
  * Layout-specific: grid returns `<td>…`, list returns `<tr><td>…</td></tr>`.
23
+ * @param productAttrValue - The resolved `product-attr` value (e.g., "brand" or "product_attribute.rating_star")
24
+ * @param content - The display content for the cell
11
25
  */
12
- export type CustomCellHtmlGetter = (attrName: string, content: string) => string;
26
+ export type CustomCellHtmlGetter = (productAttrValue: string, content: string) => string;
13
27
  /**
14
28
  * Symbol key for embedding custom attribute HTML in an ElementRenderer.
15
29
  * Grid and list renderers store their custom-attribute cell template under this key
@@ -28,8 +42,9 @@ export declare const CUSTOM_CELL_HTML: unique symbol;
28
42
  * alongside built-in ones, so template code can use a uniform lookup for all attributes.
29
43
  * @param baseRenderer - The built-in element renderer (grid or list), must include a [CUSTOM_CELL_HTML] entry
30
44
  * @param composition - Array of attribute keys including `customAttr:*` entries
45
+ * @param filterList - Filter list from the store, used to determine attribute type for correct product-attr resolution
31
46
  */
32
- export declare function buildElementRenderer(baseRenderer: ElementRenderer, composition: string[]): ElementRenderer;
47
+ export declare function buildElementRenderer(baseRenderer: ElementRenderer, composition: string[], filterList?: FiltersResponse): ElementRenderer;
33
48
  export type Orientation = 'list' | 'grid';
34
49
  /**
35
50
  * Options for prepareProductRows unified function
@@ -41,6 +56,8 @@ export interface PrepareProductRowsOptions {
41
56
  mobileProductsPerRow?: number;
42
57
  /** Array defining order of card elements */
43
58
  composition?: string[];
59
+ /** Filter list for attribute type resolution (default vs product attributes) */
60
+ filterList?: FiltersResponse;
44
61
  }
45
62
  /**
46
63
  * Element renderer interface for product card elements.
@@ -15,7 +15,7 @@ export interface NodeWithGetStyle {
15
15
  }
16
16
  /** Interface for nodes with parent method */
17
17
  export interface NodeWithParent {
18
- parent: () => ImmutableHtmlNode | undefined;
18
+ parent: () => ImmutableHtmlNode | null;
19
19
  }
20
20
  /**
21
21
  * Type guard to check if a node has getStyle method
@@ -38,13 +38,13 @@ export declare function isTdNode(node: unknown): node is ImmutableHtmlNode & Nod
38
38
  * @param property - The CSS property name
39
39
  * @returns The style value or null if not accessible
40
40
  */
41
- export declare function safeGetStyle(node: ImmutableHtmlNode | null | undefined, property: string): string | null | undefined;
41
+ export declare function safeGetStyle(node: ImmutableHtmlNode | null, property: string): string | null | undefined;
42
42
  /**
43
43
  * Safely retrieves the parent element of a node
44
44
  * @param node - The node to get the parent from
45
45
  * @returns The parent node or null if not accessible
46
46
  */
47
- export declare function safeGetParent(node: ImmutableHtmlNode | null | undefined): ImmutableHtmlNode | null;
47
+ export declare function safeGetParent(node: ImmutableHtmlNode | null): ImmutableHtmlNode | null;
48
48
  /**
49
49
  * Safely retrieves the tag name from a node.
50
50
  * Handles both standard DOM tagName property and Stripo's getTagName() method.
@@ -3,5 +3,5 @@ export declare const useTemplateLibraryApi: () => {
3
3
  getCategories: () => Promise<Category[]>;
4
4
  checkTemplateNameAvailability: (value: string) => Promise<boolean>;
5
5
  createCategory: (category: string) => Promise<string>;
6
- createTemplate: () => Promise<void>;
6
+ createTemplate: () => Promise<boolean>;
7
7
  };
@@ -0,0 +1,6 @@
1
+ export type AutosaveStatus = 'idle' | 'saving' | 'saved' | 'error';
2
+ export declare const useAutosaveStore: import("pinia").StoreDefinition<"guidoAutosave", {
3
+ isOn: boolean;
4
+ lastSavedAt: Date | null;
5
+ status: AutosaveStatus;
6
+ }, {}, {}>;
@@ -22,6 +22,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
22
22
  productType: 60 | 49 | 97;
23
23
  messageType: 1 | 2;
24
24
  username: string;
25
+ fallbackFont?: {
26
+ name: string;
27
+ family: string;
28
+ } | undefined;
25
29
  };
26
30
  template: {
27
31
  html: string;
@@ -35,6 +39,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
35
39
  value: string;
36
40
  } | undefined;
37
41
  }[];
42
+ customFieldAttributes: string[];
38
43
  selectedUnsubscribePages: number[];
39
44
  forceRecreate: boolean;
40
45
  };
@@ -61,6 +66,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
61
66
  displayConditions: boolean;
62
67
  unsubscribe: boolean;
63
68
  modulesDisabled: boolean;
69
+ liquidSyntax: boolean;
70
+ autosave: boolean;
64
71
  };
65
72
  blocks: {
66
73
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -119,6 +126,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
119
126
  productType: 60 | 49 | 97;
120
127
  messageType: 1 | 2;
121
128
  username: string;
129
+ fallbackFont?: {
130
+ name: string;
131
+ family: string;
132
+ } | undefined;
122
133
  };
123
134
  template: {
124
135
  html: string;
@@ -132,6 +143,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
132
143
  value: string;
133
144
  } | undefined;
134
145
  }[];
146
+ customFieldAttributes: string[];
135
147
  selectedUnsubscribePages: number[];
136
148
  forceRecreate: boolean;
137
149
  };
@@ -158,6 +170,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
158
170
  displayConditions: boolean;
159
171
  unsubscribe: boolean;
160
172
  modulesDisabled: boolean;
173
+ liquidSyntax: boolean;
174
+ autosave: boolean;
161
175
  };
162
176
  blocks: {
163
177
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -216,6 +230,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
216
230
  productType: 60 | 49 | 97;
217
231
  messageType: 1 | 2;
218
232
  username: string;
233
+ fallbackFont?: {
234
+ name: string;
235
+ family: string;
236
+ } | undefined;
219
237
  };
220
238
  template: {
221
239
  html: string;
@@ -229,6 +247,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
229
247
  value: string;
230
248
  } | undefined;
231
249
  }[];
250
+ customFieldAttributes: string[];
232
251
  selectedUnsubscribePages: number[];
233
252
  forceRecreate: boolean;
234
253
  };
@@ -255,6 +274,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
255
274
  displayConditions: boolean;
256
275
  unsubscribe: boolean;
257
276
  modulesDisabled: boolean;
277
+ liquidSyntax: boolean;
278
+ autosave: boolean;
258
279
  };
259
280
  blocks: {
260
281
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -313,6 +334,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
313
334
  productType: 60 | 49 | 97;
314
335
  messageType: 1 | 2;
315
336
  username: string;
337
+ fallbackFont?: {
338
+ name: string;
339
+ family: string;
340
+ } | undefined;
316
341
  };
317
342
  template: {
318
343
  html: string;
@@ -326,6 +351,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
326
351
  value: string;
327
352
  } | undefined;
328
353
  }[];
354
+ customFieldAttributes: string[];
329
355
  selectedUnsubscribePages: number[];
330
356
  forceRecreate: boolean;
331
357
  };
@@ -352,6 +378,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
352
378
  displayConditions: boolean;
353
379
  unsubscribe: boolean;
354
380
  modulesDisabled: boolean;
381
+ liquidSyntax: boolean;
382
+ autosave: boolean;
355
383
  };
356
384
  blocks: {
357
385
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -410,6 +438,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
410
438
  productType: 60 | 49 | 97;
411
439
  messageType: 1 | 2;
412
440
  username: string;
441
+ fallbackFont?: {
442
+ name: string;
443
+ family: string;
444
+ } | undefined;
413
445
  };
414
446
  template: {
415
447
  html: string;
@@ -423,6 +455,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
423
455
  value: string;
424
456
  } | undefined;
425
457
  }[];
458
+ customFieldAttributes: string[];
426
459
  selectedUnsubscribePages: number[];
427
460
  forceRecreate: boolean;
428
461
  };
@@ -449,6 +482,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
449
482
  displayConditions: boolean;
450
483
  unsubscribe: boolean;
451
484
  modulesDisabled: boolean;
485
+ liquidSyntax: boolean;
486
+ autosave: boolean;
452
487
  };
453
488
  blocks: {
454
489
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -507,6 +542,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
507
542
  productType: 60 | 49 | 97;
508
543
  messageType: 1 | 2;
509
544
  username: string;
545
+ fallbackFont?: {
546
+ name: string;
547
+ family: string;
548
+ } | undefined;
510
549
  };
511
550
  template: {
512
551
  html: string;
@@ -520,6 +559,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
520
559
  value: string;
521
560
  } | undefined;
522
561
  }[];
562
+ customFieldAttributes: string[];
523
563
  selectedUnsubscribePages: number[];
524
564
  forceRecreate: boolean;
525
565
  };
@@ -546,6 +586,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
546
586
  displayConditions: boolean;
547
587
  unsubscribe: boolean;
548
588
  modulesDisabled: boolean;
589
+ liquidSyntax: boolean;
590
+ autosave: boolean;
549
591
  };
550
592
  blocks: {
551
593
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -604,6 +646,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
604
646
  productType: 60 | 49 | 97;
605
647
  messageType: 1 | 2;
606
648
  username: string;
649
+ fallbackFont?: {
650
+ name: string;
651
+ family: string;
652
+ } | undefined;
607
653
  };
608
654
  template: {
609
655
  html: string;
@@ -617,6 +663,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
617
663
  value: string;
618
664
  } | undefined;
619
665
  }[];
666
+ customFieldAttributes: string[];
620
667
  selectedUnsubscribePages: number[];
621
668
  forceRecreate: boolean;
622
669
  };
@@ -643,6 +690,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
643
690
  displayConditions: boolean;
644
691
  unsubscribe: boolean;
645
692
  modulesDisabled: boolean;
693
+ liquidSyntax: boolean;
694
+ autosave: boolean;
646
695
  };
647
696
  blocks: {
648
697
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -701,6 +750,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
701
750
  productType: 60 | 49 | 97;
702
751
  messageType: 1 | 2;
703
752
  username: string;
753
+ fallbackFont?: {
754
+ name: string;
755
+ family: string;
756
+ } | undefined;
704
757
  };
705
758
  template: {
706
759
  html: string;
@@ -714,6 +767,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
714
767
  value: string;
715
768
  } | undefined;
716
769
  }[];
770
+ customFieldAttributes: string[];
717
771
  selectedUnsubscribePages: number[];
718
772
  forceRecreate: boolean;
719
773
  };
@@ -740,6 +794,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
740
794
  displayConditions: boolean;
741
795
  unsubscribe: boolean;
742
796
  modulesDisabled: boolean;
797
+ liquidSyntax: boolean;
798
+ autosave: boolean;
743
799
  };
744
800
  blocks: {
745
801
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -798,6 +854,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
798
854
  productType: 60 | 49 | 97;
799
855
  messageType: 1 | 2;
800
856
  username: string;
857
+ fallbackFont?: {
858
+ name: string;
859
+ family: string;
860
+ } | undefined;
801
861
  };
802
862
  template: {
803
863
  html: string;
@@ -811,6 +871,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
811
871
  value: string;
812
872
  } | undefined;
813
873
  }[];
874
+ customFieldAttributes: string[];
814
875
  selectedUnsubscribePages: number[];
815
876
  forceRecreate: boolean;
816
877
  };
@@ -837,6 +898,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
837
898
  displayConditions: boolean;
838
899
  unsubscribe: boolean;
839
900
  modulesDisabled: boolean;
901
+ liquidSyntax: boolean;
902
+ autosave: boolean;
840
903
  };
841
904
  blocks: {
842
905
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -895,6 +958,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
895
958
  productType: 60 | 49 | 97;
896
959
  messageType: 1 | 2;
897
960
  username: string;
961
+ fallbackFont?: {
962
+ name: string;
963
+ family: string;
964
+ } | undefined;
898
965
  };
899
966
  template: {
900
967
  html: string;
@@ -908,6 +975,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
908
975
  value: string;
909
976
  } | undefined;
910
977
  }[];
978
+ customFieldAttributes: string[];
911
979
  selectedUnsubscribePages: number[];
912
980
  forceRecreate: boolean;
913
981
  };
@@ -934,6 +1002,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
934
1002
  displayConditions: boolean;
935
1003
  unsubscribe: boolean;
936
1004
  modulesDisabled: boolean;
1005
+ liquidSyntax: boolean;
1006
+ autosave: boolean;
937
1007
  };
938
1008
  blocks: {
939
1009
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -992,6 +1062,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
992
1062
  productType: 60 | 49 | 97;
993
1063
  messageType: 1 | 2;
994
1064
  username: string;
1065
+ fallbackFont?: {
1066
+ name: string;
1067
+ family: string;
1068
+ } | undefined;
995
1069
  };
996
1070
  template: {
997
1071
  html: string;
@@ -1005,6 +1079,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1005
1079
  value: string;
1006
1080
  } | undefined;
1007
1081
  }[];
1082
+ customFieldAttributes: string[];
1008
1083
  selectedUnsubscribePages: number[];
1009
1084
  forceRecreate: boolean;
1010
1085
  };
@@ -1031,6 +1106,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1031
1106
  displayConditions: boolean;
1032
1107
  unsubscribe: boolean;
1033
1108
  modulesDisabled: boolean;
1109
+ liquidSyntax: boolean;
1110
+ autosave: boolean;
1034
1111
  };
1035
1112
  blocks: {
1036
1113
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1089,6 +1166,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1089
1166
  productType: 60 | 49 | 97;
1090
1167
  messageType: 1 | 2;
1091
1168
  username: string;
1169
+ fallbackFont?: {
1170
+ name: string;
1171
+ family: string;
1172
+ } | undefined;
1092
1173
  };
1093
1174
  template: {
1094
1175
  html: string;
@@ -1102,6 +1183,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1102
1183
  value: string;
1103
1184
  } | undefined;
1104
1185
  }[];
1186
+ customFieldAttributes: string[];
1105
1187
  selectedUnsubscribePages: number[];
1106
1188
  forceRecreate: boolean;
1107
1189
  };
@@ -1128,6 +1210,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1128
1210
  displayConditions: boolean;
1129
1211
  unsubscribe: boolean;
1130
1212
  modulesDisabled: boolean;
1213
+ liquidSyntax: boolean;
1214
+ autosave: boolean;
1131
1215
  };
1132
1216
  blocks: {
1133
1217
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1186,6 +1270,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1186
1270
  productType: 60 | 49 | 97;
1187
1271
  messageType: 1 | 2;
1188
1272
  username: string;
1273
+ fallbackFont?: {
1274
+ name: string;
1275
+ family: string;
1276
+ } | undefined;
1189
1277
  };
1190
1278
  template: {
1191
1279
  html: string;
@@ -1199,6 +1287,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1199
1287
  value: string;
1200
1288
  } | undefined;
1201
1289
  }[];
1290
+ customFieldAttributes: string[];
1202
1291
  selectedUnsubscribePages: number[];
1203
1292
  forceRecreate: boolean;
1204
1293
  };
@@ -1225,6 +1314,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1225
1314
  displayConditions: boolean;
1226
1315
  unsubscribe: boolean;
1227
1316
  modulesDisabled: boolean;
1317
+ liquidSyntax: boolean;
1318
+ autosave: boolean;
1228
1319
  };
1229
1320
  blocks: {
1230
1321
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1283,6 +1374,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1283
1374
  productType: 60 | 49 | 97;
1284
1375
  messageType: 1 | 2;
1285
1376
  username: string;
1377
+ fallbackFont?: {
1378
+ name: string;
1379
+ family: string;
1380
+ } | undefined;
1286
1381
  };
1287
1382
  template: {
1288
1383
  html: string;
@@ -1296,6 +1391,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1296
1391
  value: string;
1297
1392
  } | undefined;
1298
1393
  }[];
1394
+ customFieldAttributes: string[];
1299
1395
  selectedUnsubscribePages: number[];
1300
1396
  forceRecreate: boolean;
1301
1397
  };
@@ -1322,6 +1418,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1322
1418
  displayConditions: boolean;
1323
1419
  unsubscribe: boolean;
1324
1420
  modulesDisabled: boolean;
1421
+ liquidSyntax: boolean;
1422
+ autosave: boolean;
1325
1423
  };
1326
1424
  blocks: {
1327
1425
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1380,6 +1478,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1380
1478
  productType: 60 | 49 | 97;
1381
1479
  messageType: 1 | 2;
1382
1480
  username: string;
1481
+ fallbackFont?: {
1482
+ name: string;
1483
+ family: string;
1484
+ } | undefined;
1383
1485
  };
1384
1486
  template: {
1385
1487
  html: string;
@@ -1393,6 +1495,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1393
1495
  value: string;
1394
1496
  } | undefined;
1395
1497
  }[];
1498
+ customFieldAttributes: string[];
1396
1499
  selectedUnsubscribePages: number[];
1397
1500
  forceRecreate: boolean;
1398
1501
  };
@@ -1419,6 +1522,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1419
1522
  displayConditions: boolean;
1420
1523
  unsubscribe: boolean;
1421
1524
  modulesDisabled: boolean;
1525
+ liquidSyntax: boolean;
1526
+ autosave: boolean;
1422
1527
  };
1423
1528
  blocks: {
1424
1529
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1477,6 +1582,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1477
1582
  productType: 60 | 49 | 97;
1478
1583
  messageType: 1 | 2;
1479
1584
  username: string;
1585
+ fallbackFont?: {
1586
+ name: string;
1587
+ family: string;
1588
+ } | undefined;
1480
1589
  };
1481
1590
  template: {
1482
1591
  html: string;
@@ -1490,6 +1599,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1490
1599
  value: string;
1491
1600
  } | undefined;
1492
1601
  }[];
1602
+ customFieldAttributes: string[];
1493
1603
  selectedUnsubscribePages: number[];
1494
1604
  forceRecreate: boolean;
1495
1605
  };
@@ -1516,6 +1626,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1516
1626
  displayConditions: boolean;
1517
1627
  unsubscribe: boolean;
1518
1628
  modulesDisabled: boolean;
1629
+ liquidSyntax: boolean;
1630
+ autosave: boolean;
1519
1631
  };
1520
1632
  blocks: {
1521
1633
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1574,6 +1686,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1574
1686
  productType: 60 | 49 | 97;
1575
1687
  messageType: 1 | 2;
1576
1688
  username: string;
1689
+ fallbackFont?: {
1690
+ name: string;
1691
+ family: string;
1692
+ } | undefined;
1577
1693
  };
1578
1694
  template: {
1579
1695
  html: string;
@@ -1587,6 +1703,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1587
1703
  value: string;
1588
1704
  } | undefined;
1589
1705
  }[];
1706
+ customFieldAttributes: string[];
1590
1707
  selectedUnsubscribePages: number[];
1591
1708
  forceRecreate: boolean;
1592
1709
  };
@@ -1613,6 +1730,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1613
1730
  displayConditions: boolean;
1614
1731
  unsubscribe: boolean;
1615
1732
  modulesDisabled: boolean;
1733
+ liquidSyntax: boolean;
1734
+ autosave: boolean;
1616
1735
  };
1617
1736
  blocks: {
1618
1737
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -1671,6 +1790,10 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1671
1790
  productType: 60 | 49 | 97;
1672
1791
  messageType: 1 | 2;
1673
1792
  username: string;
1793
+ fallbackFont?: {
1794
+ name: string;
1795
+ family: string;
1796
+ } | undefined;
1674
1797
  };
1675
1798
  template: {
1676
1799
  html: string;
@@ -1684,6 +1807,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1684
1807
  value: string;
1685
1808
  } | undefined;
1686
1809
  }[];
1810
+ customFieldAttributes: string[];
1687
1811
  selectedUnsubscribePages: number[];
1688
1812
  forceRecreate: boolean;
1689
1813
  };
@@ -1710,6 +1834,8 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1710
1834
  displayConditions: boolean;
1711
1835
  unsubscribe: boolean;
1712
1836
  modulesDisabled: boolean;
1837
+ liquidSyntax: boolean;
1838
+ autosave: boolean;
1713
1839
  };
1714
1840
  blocks: {
1715
1841
  excludeDefaults: ("amp-accordion" | "amp-carousel" | "amp-form-controls" | "banner-block" | "button-block" | "html-block" | "image-block" | "menu-block" | "social-block" | "spacer-block" | "text-block" | "timer-block" | "video-block")[];
@@ -7,6 +7,7 @@ export declare const usePreviewStore: import("pinia").StoreDefinition<"guidoPrev
7
7
  templateHtml: string;
8
8
  isLoaded: boolean;
9
9
  isAMPErrorModalVisible: boolean;
10
+ emailSizeKB: number;
10
11
  } & import("pinia").PiniaCustomStateProperties<PreviewState>) => boolean;
11
12
  previewHtml(): string;
12
13
  hasAMP: (state: {
@@ -16,6 +17,7 @@ export declare const usePreviewStore: import("pinia").StoreDefinition<"guidoPrev
16
17
  templateHtml: string;
17
18
  isLoaded: boolean;
18
19
  isAMPErrorModalVisible: boolean;
20
+ emailSizeKB: number;
19
21
  } & import("pinia").PiniaCustomStateProperties<PreviewState>) => boolean;
20
22
  hasAMPErrors: (state: {
21
23
  emailFormat: EmailFormat;
@@ -24,6 +26,7 @@ export declare const usePreviewStore: import("pinia").StoreDefinition<"guidoPrev
24
26
  templateHtml: string;
25
27
  isLoaded: boolean;
26
28
  isAMPErrorModalVisible: boolean;
29
+ emailSizeKB: number;
27
30
  } & import("pinia").PiniaCustomStateProperties<PreviewState>) => boolean;
28
31
  showAMPErrorButton(): boolean;
29
32
  isAMPResponsive(): boolean;
@@ -1,6 +1,6 @@
1
1
  import type { DynamicContent, MergeTag } from '@@/Types/generic';
2
2
  export declare const mergeTagToDynamicContent: (mergeTag: MergeTag) => DynamicContent;
3
- export declare const dynamicContentToMergeTags: (dynamicContentList: DynamicContent[]) => MergeTag[];
3
+ export declare const dynamicContentToMergeTags: (dynamicContentList: DynamicContent[], liquidSyntax?: boolean) => MergeTag[];
4
4
  export declare const getCsrfToken: () => string;
5
5
  /**
6
6
  * URL Parameter utilities
@@ -1,8 +1,9 @@
1
+ import type { FallbackFont } from '@@/Types/config';
1
2
  import type { CompilerRule, CompilationResult, HtmlCompiler } from '@@/Types/html-compiler';
2
3
  export declare class HtmlCompilerEngine implements HtmlCompiler {
3
4
  private rules;
4
5
  constructor(rules?: CompilerRule[]);
5
- compile(html: string, rules?: CompilerRule[]): CompilationResult;
6
+ compile(html: string, rules?: CompilerRule[], fallbackFont?: FallbackFont): CompilationResult;
6
7
  private applyRule;
7
8
  private applyReplaceRule;
8
9
  private applyRegexRule;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Formats a Date as local time in 24-hour format.
3
+ * Pass `useTimezone = true` to append the UTC offset and city name — useful when the
4
+ * timestamp must clearly communicate the client's timezone.
5
+ * @example formatLocalTime(date) -> 12:20:02
6
+ * @example formatLocalTime(date, true) -> 12:20:02 (UTC+3 Istanbul)
7
+ */
8
+ export declare const formatLocalTime: (date: Date, useTimezone?: boolean) => string;
@@ -1,11 +1,16 @@
1
- const t = `.amp-input-list,
1
+ const n = `.amp-input-list,
2
2
  .button,
3
3
  .base-input,
4
4
  ue-stripe-thumb,
5
5
  .ue-stripe-thumb {
6
6
  transition: all .5s ease;
7
7
  }
8
+
9
+ :host {
10
+ height: 100% !important;
11
+ min-height: 0 !important;
12
+ }
8
13
  `;
9
14
  export {
10
- t as default
15
+ n as default
11
16
  };