@useinsider/guido 3.12.0-beta.ea5b317 → 3.12.0-beta.eb4ca1c

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 (38) hide show
  1. package/README.md +5 -0
  2. package/dist/@types/config/schemas.js +64 -50
  3. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue.js +1 -1
  4. package/dist/components/organisms/email-preview/desktop-preview/DesktopPreview.vue2.js +8 -8
  5. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue.js +5 -5
  6. package/dist/components/organisms/email-preview/mobile-preview/ContentView.vue2.js +10 -10
  7. package/dist/composables/useAllowlistToast.js +21 -0
  8. package/dist/composables/usePreviewInteractionGuard.js +36 -11
  9. package/dist/composables/useRecommendationPreview.js +61 -60
  10. package/dist/composables/useSave.js +44 -24
  11. package/dist/composables/useUserRole.js +13 -0
  12. package/dist/composables/validators/useAllowlistValidator.js +31 -0
  13. package/dist/enums/roles.js +4 -0
  14. package/dist/extensions/Blocks/Recommendation/constants/controlIds.js +1 -1
  15. package/dist/extensions/Blocks/Recommendation/controls/blockBackground/index.js +10 -0
  16. package/dist/extensions/Blocks/Recommendation/extension.js +23 -21
  17. package/dist/extensions/Blocks/Recommendation/settingsPanel.js +41 -40
  18. package/dist/extensions/Blocks/Unsubscribe/utils/constants.js +3 -2
  19. package/dist/extensions/Blocks/controlFactories.js +125 -75
  20. package/dist/guido.css +1 -1
  21. package/dist/services/stripoApi.js +18 -18
  22. package/dist/src/@types/config/schemas.d.ts +32 -0
  23. package/dist/src/composables/useAllowlistToast.d.ts +17 -0
  24. package/dist/src/composables/useConfig.d.ts +4 -0
  25. package/dist/src/composables/usePreviewInteractionGuard.d.ts +1 -1
  26. package/dist/src/composables/useUserRole.d.ts +8 -0
  27. package/dist/src/composables/validators/useAllowlistValidator.d.ts +9 -0
  28. package/dist/src/enums/roles.d.ts +9 -0
  29. package/dist/src/extensions/Blocks/Recommendation/constants/controlIds.d.ts +1 -0
  30. package/dist/src/extensions/Blocks/Recommendation/controls/blockBackground/index.d.ts +14 -0
  31. package/dist/src/extensions/Blocks/Recommendation/controls/index.d.ts +1 -0
  32. package/dist/src/extensions/Blocks/Unsubscribe/utils/constants.d.ts +1 -0
  33. package/dist/src/extensions/Blocks/controlFactories.d.ts +36 -0
  34. package/dist/src/stores/config.d.ts +36 -0
  35. package/dist/src/utils/urlSchemes.d.ts +6 -0
  36. package/dist/static/styles/components/base-input.css.js +6 -7
  37. package/dist/utils/urlSchemes.js +4 -0
  38. package/package.json +1 -1
@@ -115,6 +115,42 @@ export declare function createTextBackgroundColorControl(controlId: string, targ
115
115
  isVisible(_node: ImmutableHtmlNode): boolean;
116
116
  };
117
117
  };
118
+ /**
119
+ * Factory for a background-color control that paints a whole extension block (SD-145082).
120
+ *
121
+ * Base is `ButtonBackgroundColorBuiltInControl` because its `GENERAL.BACKGROUND_COLOR` form key
122
+ * round-trips through `getValues()`; the block-text base (`TextBlockBackgroundBuiltInControl`, the
123
+ * built-in this replaces) reports `textBlockBackgroundColor`, which our read path never sees. That
124
+ * borrowed base targets the block's Buy buttons, so `getTargetNodes` here is a GUARD that keeps it
125
+ * off the buttons — not the write path.
126
+ *
127
+ * The write is entirely ours (`getAdditionalModifications`): Stripo's built-in emits a stylesheet
128
+ * rule that inline styles from regeneration outrank (SD-143023), so it would silently no-op on the
129
+ * next edit. We write inline `background-color` + `bgcolor` on the block `<td>` instead — surviving
130
+ * regeneration and reaching Outlook, matching the migrator's convention.
131
+ */
132
+ export declare function createBlockBackgroundColorControl(controlId: string, blockRootSelector?: string): {
133
+ new (): {
134
+ getId(): string;
135
+ /** The parent control renders its own generic title; restore the block-level wording. */
136
+ getLabels(): {
137
+ title: string;
138
+ };
139
+ /** Guard: redirect the borrowed button parent onto the block `<td>` so it never paints the Buy buttons. */
140
+ getTargetNodes(root: ImmutableHtmlNode): ImmutableHtmlNode[];
141
+ /**
142
+ * Writes the picked background onto the block as an inline style plus a `bgcolor`
143
+ * attribute. This is the whole mechanism, not a mirror: the parent control's own
144
+ * write never reaches the block element (verified at runtime). `bgcolor` is the
145
+ * channel Outlook honours on a `<td>`, and matches what the migrator emits.
146
+ */
147
+ getAdditionalModifications(root: ImmutableHtmlNode): import("@stripoinc/ui-editor-extensions").TemplateModifier<import("@stripoinc/ui-editor-extensions").HtmlNodeModifier, import("@stripoinc/ui-editor-extensions").CssNodeModifier> | undefined;
148
+ getParentControlId(): string;
149
+ api: import("@stripoinc/ui-editor-extensions").ControlApi;
150
+ getModificationDescription(): import("@stripoinc/ui-editor-extensions").ModificationDescription | undefined;
151
+ isVisible(_node: ImmutableHtmlNode): boolean;
152
+ };
153
+ };
118
154
  /**
119
155
  * Factory function to create paddings controls for different block elements
120
156
  * When targetBlockId and containerSelector are not provided, applies directly to root
@@ -101,6 +101,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
101
101
  modulesDisabled: boolean;
102
102
  liquidSyntax: boolean;
103
103
  autosave: boolean;
104
+ allowlistEnabled: boolean;
104
105
  };
105
106
  blocks: {
106
107
  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")[];
@@ -140,6 +141,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
140
141
  };
141
142
  callbacks: {
142
143
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
144
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
143
145
  };
144
146
  } | null;
145
147
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => IdentityConfig | null;
@@ -238,6 +240,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
238
240
  modulesDisabled: boolean;
239
241
  liquidSyntax: boolean;
240
242
  autosave: boolean;
243
+ allowlistEnabled: boolean;
241
244
  };
242
245
  blocks: {
243
246
  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")[];
@@ -277,6 +280,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
277
280
  };
278
281
  callbacks: {
279
282
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
283
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
280
284
  };
281
285
  } | null;
282
286
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => PartnerConfig | null;
@@ -375,6 +379,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
375
379
  modulesDisabled: boolean;
376
380
  liquidSyntax: boolean;
377
381
  autosave: boolean;
382
+ allowlistEnabled: boolean;
378
383
  };
379
384
  blocks: {
380
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")[];
@@ -414,6 +419,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
414
419
  };
415
420
  callbacks: {
416
421
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
422
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
417
423
  };
418
424
  } | null;
419
425
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => TemplateConfig | null;
@@ -512,6 +518,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
512
518
  modulesDisabled: boolean;
513
519
  liquidSyntax: boolean;
514
520
  autosave: boolean;
521
+ allowlistEnabled: boolean;
515
522
  };
516
523
  blocks: {
517
524
  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")[];
@@ -551,6 +558,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
551
558
  };
552
559
  callbacks: {
553
560
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
561
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
554
562
  };
555
563
  } | null;
556
564
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => EditorConfig | null;
@@ -649,6 +657,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
649
657
  modulesDisabled: boolean;
650
658
  liquidSyntax: boolean;
651
659
  autosave: boolean;
660
+ allowlistEnabled: boolean;
652
661
  };
653
662
  blocks: {
654
663
  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")[];
@@ -688,6 +697,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
688
697
  };
689
698
  callbacks: {
690
699
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
700
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
691
701
  };
692
702
  } | null;
693
703
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => UIConfig | null;
@@ -786,6 +796,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
786
796
  modulesDisabled: boolean;
787
797
  liquidSyntax: boolean;
788
798
  autosave: boolean;
799
+ allowlistEnabled: boolean;
789
800
  };
790
801
  blocks: {
791
802
  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")[];
@@ -825,6 +836,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
825
836
  };
826
837
  callbacks: {
827
838
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
839
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
828
840
  };
829
841
  } | null;
830
842
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => FeaturesConfig | null;
@@ -923,6 +935,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
923
935
  modulesDisabled: boolean;
924
936
  liquidSyntax: boolean;
925
937
  autosave: boolean;
938
+ allowlistEnabled: boolean;
926
939
  };
927
940
  blocks: {
928
941
  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")[];
@@ -962,6 +975,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
962
975
  };
963
976
  callbacks: {
964
977
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
978
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
965
979
  };
966
980
  } | null;
967
981
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => BlocksConfig | null;
@@ -1060,6 +1074,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1060
1074
  modulesDisabled: boolean;
1061
1075
  liquidSyntax: boolean;
1062
1076
  autosave: boolean;
1077
+ allowlistEnabled: boolean;
1063
1078
  };
1064
1079
  blocks: {
1065
1080
  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")[];
@@ -1099,6 +1114,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1099
1114
  };
1100
1115
  callbacks: {
1101
1116
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1117
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1102
1118
  };
1103
1119
  } | null;
1104
1120
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => CompilerConfig | null;
@@ -1197,6 +1213,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1197
1213
  modulesDisabled: boolean;
1198
1214
  liquidSyntax: boolean;
1199
1215
  autosave: boolean;
1216
+ allowlistEnabled: boolean;
1200
1217
  };
1201
1218
  blocks: {
1202
1219
  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")[];
@@ -1236,6 +1253,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1236
1253
  };
1237
1254
  callbacks: {
1238
1255
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1256
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1239
1257
  };
1240
1258
  } | null;
1241
1259
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => CallbacksConfig | null;
@@ -1334,6 +1352,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1334
1352
  modulesDisabled: boolean;
1335
1353
  liquidSyntax: boolean;
1336
1354
  autosave: boolean;
1355
+ allowlistEnabled: boolean;
1337
1356
  };
1338
1357
  blocks: {
1339
1358
  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")[];
@@ -1373,6 +1392,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1373
1392
  };
1374
1393
  callbacks: {
1375
1394
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1395
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1376
1396
  };
1377
1397
  } | null;
1378
1398
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => string;
@@ -1471,6 +1491,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1471
1491
  modulesDisabled: boolean;
1472
1492
  liquidSyntax: boolean;
1473
1493
  autosave: boolean;
1494
+ allowlistEnabled: boolean;
1474
1495
  };
1475
1496
  blocks: {
1476
1497
  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")[];
@@ -1510,6 +1531,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1510
1531
  };
1511
1532
  callbacks: {
1512
1533
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1534
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1513
1535
  };
1514
1536
  } | null;
1515
1537
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => string;
@@ -1608,6 +1630,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1608
1630
  modulesDisabled: boolean;
1609
1631
  liquidSyntax: boolean;
1610
1632
  autosave: boolean;
1633
+ allowlistEnabled: boolean;
1611
1634
  };
1612
1635
  blocks: {
1613
1636
  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")[];
@@ -1647,6 +1670,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1647
1670
  };
1648
1671
  callbacks: {
1649
1672
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1673
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1650
1674
  };
1651
1675
  } | null;
1652
1676
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => string;
@@ -1745,6 +1769,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1745
1769
  modulesDisabled: boolean;
1746
1770
  liquidSyntax: boolean;
1747
1771
  autosave: boolean;
1772
+ allowlistEnabled: boolean;
1748
1773
  };
1749
1774
  blocks: {
1750
1775
  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")[];
@@ -1784,6 +1809,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1784
1809
  };
1785
1810
  callbacks: {
1786
1811
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1812
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1787
1813
  };
1788
1814
  } | null;
1789
1815
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => string;
@@ -1882,6 +1908,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1882
1908
  modulesDisabled: boolean;
1883
1909
  liquidSyntax: boolean;
1884
1910
  autosave: boolean;
1911
+ allowlistEnabled: boolean;
1885
1912
  };
1886
1913
  blocks: {
1887
1914
  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")[];
@@ -1921,6 +1948,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1921
1948
  };
1922
1949
  callbacks: {
1923
1950
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
1951
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
1924
1952
  };
1925
1953
  } | null;
1926
1954
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => number;
@@ -2019,6 +2047,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2019
2047
  modulesDisabled: boolean;
2020
2048
  liquidSyntax: boolean;
2021
2049
  autosave: boolean;
2050
+ allowlistEnabled: boolean;
2022
2051
  };
2023
2052
  blocks: {
2024
2053
  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")[];
@@ -2058,6 +2087,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2058
2087
  };
2059
2088
  callbacks: {
2060
2089
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
2090
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
2061
2091
  };
2062
2092
  } | null;
2063
2093
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => number;
@@ -2156,6 +2186,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2156
2186
  modulesDisabled: boolean;
2157
2187
  liquidSyntax: boolean;
2158
2188
  autosave: boolean;
2189
+ allowlistEnabled: boolean;
2159
2190
  };
2160
2191
  blocks: {
2161
2192
  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")[];
@@ -2195,6 +2226,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2195
2226
  };
2196
2227
  callbacks: {
2197
2228
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
2229
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
2198
2230
  };
2199
2231
  } | null;
2200
2232
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => string;
@@ -2293,6 +2325,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2293
2325
  modulesDisabled: boolean;
2294
2326
  liquidSyntax: boolean;
2295
2327
  autosave: boolean;
2328
+ allowlistEnabled: boolean;
2296
2329
  };
2297
2330
  blocks: {
2298
2331
  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")[];
@@ -2332,6 +2365,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2332
2365
  };
2333
2366
  callbacks: {
2334
2367
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
2368
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
2335
2369
  };
2336
2370
  } | null;
2337
2371
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => boolean;
@@ -2430,6 +2464,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2430
2464
  modulesDisabled: boolean;
2431
2465
  liquidSyntax: boolean;
2432
2466
  autosave: boolean;
2467
+ allowlistEnabled: boolean;
2433
2468
  };
2434
2469
  blocks: {
2435
2470
  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")[];
@@ -2469,6 +2504,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2469
2504
  };
2470
2505
  callbacks: {
2471
2506
  externalValidation?: import("@@/Types/config").ExternalValidationHandler | undefined;
2507
+ resolveAllowlistToast?: import("../@types/config/schemas").ResolveAllowlistToastHandler | undefined;
2472
2508
  };
2473
2509
  } | null;
2474
2510
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => (feature: keyof FeaturesConfig) => boolean;
@@ -0,0 +1,6 @@
1
+ /**
2
+ * URL schemes that are safe to follow from partner-authored email HTML. Shared so a
3
+ * future bypass fix lands in one place — the preview guard and the recommendation
4
+ * sanitizer both gate on it. Stored with the trailing colon to match `anchor.protocol`.
5
+ */
6
+ export declare const BASE_SAFE_URL_SCHEMES: readonly string[];
@@ -3,8 +3,12 @@ const n = `.base-input {
3
3
  border-radius: 4px;
4
4
  background-color: var(--guido-color-gray-0);
5
5
  align-items: center;
6
- height: 40px;
7
- max-height: 40px;
6
+ /* 40px is a floor, never a cap: \`.base-input\` is shared by every settings field,
7
+ including Stripo's own auto-height inputs (e.g. the link field) that expand on
8
+ focus. A fixed max-height clamped their inner box; keep 40px only as the floor. */
9
+ min-height: 40px;
10
+ height: auto;
11
+ max-height: none;
8
12
  box-sizing: content-box;
9
13
  outline: none;
10
14
  resize: vertical;
@@ -36,11 +40,6 @@ ue-contenteditable .base-input {
36
40
  line-height: 24px;
37
41
  }
38
42
 
39
- /* Image link input is auto-height; lift the fixed 40px cap so it can grow. */
40
- ue-contenteditable.link-autoheight-contenteditable .base-input {
41
- max-height: none;
42
- }
43
-
44
43
  ue-icon-component.icon-button.icon-clear-input {
45
44
  right: 2px;
46
45
  top: 2px;
@@ -0,0 +1,4 @@
1
+ const t = ["http:", "https:", "mailto:"];
2
+ export {
3
+ t as BASE_SAFE_URL_SCHEMES
4
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@useinsider/guido",
3
- "version": "3.12.0-beta.ea5b317",
3
+ "version": "3.12.0-beta.eb4ca1c",
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",