@useinsider/guido 3.19.0-beta.cd75ff0 → 3.19.0-beta.cf43946

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 (61) hide show
  1. package/README.md +0 -1
  2. package/dist/@types/config/schemas.js +37 -39
  3. package/dist/components/Guido.vue.js +8 -8
  4. package/dist/components/Guido.vue2.js +65 -68
  5. package/dist/components/organisms/AutoSaveController.vue2.js +8 -10
  6. package/dist/components/organisms/header/EditorActions.vue.js +5 -5
  7. package/dist/components/organisms/header/EditorActions.vue2.js +46 -83
  8. package/dist/components/organisms/header/LeftSlot.vue.js +5 -5
  9. package/dist/components/organisms/header/LeftSlot.vue2.js +12 -16
  10. package/dist/components/wrappers/WpDrawer.vue.js +7 -9
  11. package/dist/components/wrappers/WpDrawer.vue2.js +1 -1
  12. package/dist/composables/useAutoSave.js +44 -46
  13. package/dist/composables/useHtmlCompiler.js +26 -37
  14. package/dist/composables/useHtmlValidator.js +0 -2
  15. package/dist/composables/useSave.js +45 -92
  16. package/dist/composables/validators/useCouponBlockValidator.js +21 -24
  17. package/dist/composables/validators/useUnsubscribeBlockValidator.js +27 -34
  18. package/dist/config/migrator/recommendationMigrator.js +28 -21
  19. package/dist/config/migrator/recommendationPartnerMigrator.js +36 -30
  20. package/dist/guido.css +1 -1
  21. package/dist/src/@types/config/schemas.d.ts +0 -4
  22. package/dist/src/components/Guido.vue.d.ts +1 -17
  23. package/dist/src/components/organisms/header/EditorActions.vue.d.ts +1 -17
  24. package/dist/src/components/organisms/header/HeaderWrapper.vue.d.ts +1 -17
  25. package/dist/src/components/organisms/header/RightSlot.vue.d.ts +1 -17
  26. package/dist/src/components/wrappers/WpDrawer.vue.d.ts +3 -4
  27. package/dist/src/composables/useAutoSave.d.ts +1 -4
  28. package/dist/src/composables/useConfig.d.ts +0 -2
  29. package/dist/src/composables/useGuidoActions.d.ts +2 -0
  30. package/dist/src/composables/useHtmlValidator.d.ts +0 -21
  31. package/dist/src/composables/useSave.d.ts +1 -6
  32. package/dist/src/composables/validators/useCouponBlockValidator.d.ts +0 -3
  33. package/dist/src/composables/validators/useUnsubscribeBlockValidator.d.ts +0 -10
  34. package/dist/src/mock/cortexChatStore.d.ts +12 -0
  35. package/dist/src/stores/config.d.ts +0 -32
  36. package/dist/src/stores/onboarding.d.ts +4 -0
  37. package/dist/src/stores/recommendation.d.ts +5 -0
  38. package/dist/src/utils/dateUtil.d.ts +10 -0
  39. package/dist/src/utils/genericUtil.d.ts +3 -0
  40. package/dist/src/utils/templatePreparation.d.ts +0 -30
  41. package/dist/static/styles/components/version-history.css.js +2 -6
  42. package/dist/stores/config.js +67 -84
  43. package/dist/stores/onboarding.js +4 -0
  44. package/dist/utils/templatePreparation.js +36 -39
  45. package/package.json +1 -1
  46. package/dist/components/organisms/validation/ValidationErrorDrawer.vue.js +0 -20
  47. package/dist/components/organisms/validation/ValidationErrorDrawer.vue2.js +0 -50
  48. package/dist/composables/useSaveValidation.js +0 -284
  49. package/dist/composables/useSaveValidationRollout.js +0 -20
  50. package/dist/enums/save-validation.js +0 -4
  51. package/dist/services/settingsApi.js +0 -11
  52. package/dist/src/@types/save-validation.d.ts +0 -19
  53. package/dist/src/components/organisms/validation/ValidationErrorDrawer.vue.d.ts +0 -2
  54. package/dist/src/composables/useSaveValidation.d.ts +0 -6
  55. package/dist/src/composables/useSaveValidationRollout.d.ts +0 -4
  56. package/dist/src/enums/save-validation.d.ts +0 -27
  57. package/dist/src/services/settingsApi.d.ts +0 -6
  58. package/dist/src/stores/save-validation.d.ts +0 -22
  59. package/dist/src/stores/setup-settings.d.ts +0 -4
  60. package/dist/stores/save-validation.js +0 -30
  61. package/dist/stores/setup-settings.js +0 -10
@@ -1,6 +1,3 @@
1
1
  type SaveSilent = () => Promise<unknown>;
2
- interface AutoSaveOptions {
3
- clearsChanges?: () => boolean;
4
- }
5
- export declare const useAutoSave: (saveSilent: SaveSilent, { clearsChanges }?: AutoSaveOptions) => void;
2
+ export declare const useAutoSave: (saveSilent: SaveSilent) => void;
6
3
  export {};
@@ -102,7 +102,6 @@ export declare const useConfig: () => {
102
102
  autosave: boolean;
103
103
  allowlistEnabled: boolean;
104
104
  linkTrackingIds: boolean;
105
- allowSaveWithErrors: boolean;
106
105
  reusableRecommendationStrategy: boolean;
107
106
  };
108
107
  blocks: {
@@ -241,7 +240,6 @@ export declare const useConfig: () => {
241
240
  autosave: boolean;
242
241
  allowlistEnabled: boolean;
243
242
  linkTrackingIds: boolean;
244
- allowSaveWithErrors: boolean;
245
243
  reusableRecommendationStrategy: boolean;
246
244
  } | null>;
247
245
  blocks: import("vue").ComputedRef<{
@@ -19,6 +19,8 @@ export declare const provideGuidoActions: (actions: {
19
19
  }) => void;
20
20
  /**
21
21
  * Provides individual Guido action handlers
22
+ * @deprecated No consumer in src/ and not exported from library.ts — provideGuidoActions
23
+ * provides all four keys itself. Slated for deletion, see the SD-667788 dead-code ledger.
22
24
  */
23
25
  export declare const provideBackHandler: (handler: BackHandler) => void;
24
26
  export declare const provideSaveStartHandler: (handler: SaveStartHandler) => void;
@@ -1,12 +1,5 @@
1
1
  import type { DynamicContent } from '@@/Types/generic';
2
2
  import type { FiltersResponse } from '@@/Types/recommendation';
3
- /**
4
- * Extracts recommendation block IDs directly from the HTML by parsing
5
- * the recommendation-id attribute on block elements.
6
- * This avoids depending on store state which may not be populated
7
- * when the settings panel hasn't been opened yet (e.g., saved templates).
8
- */
9
- export declare function getRecommendationBlockIds(html: string): string[];
10
3
  /**
11
4
  * Parses a `{{recoId_index_attributeName}}` variable (already stripped of the
12
5
  * braces/whitespace) into its recommendation id and attribute name. Returns
@@ -34,20 +27,6 @@ export declare function buildPartnerAttributeNameSet(filterList: FiltersResponse
34
27
  * before, so flagging it would false-positive on merge tags like `{{user.name}}`.
35
28
  */
36
29
  export declare function findInvalidCustomFields(html: string, validCustomFields: string[], recommendationBlockIds: string[], ignoredIds: Set<string>, ignoredAttributeNames: Set<string> | null): string[];
37
- /**
38
- * Returns the invalid `{{ ... }}` dynamic-content tags found in the HTML.
39
- *
40
- * A tag's variable name is the part before the first `|` (everything after it is the fallback).
41
- * Surrounding whitespace is always allowed (trimmed). A tag is valid only when the variable name
42
- * is an allowed system token, or it is a clean identifier (`[A-Za-z0-9_.]`) and — when a `|` is
43
- * present — the fallback after it is not empty. Otherwise the tag is invalid (e.g.
44
- * `{{Api Response: OA1 Main Item Url}}` — spaces/`:` — or `{{bounce|}}` — empty fallback).
45
- *
46
- * `data-*` block-config attribute values are excluded from the scan: blocks such as Items/cart
47
- * store product merge tags (`data-product_button_link="{{Abandoned Cart Item (1) Url}}"`) that the
48
- * backend resolves through its own pipeline, so they must not be treated as user-authored tags.
49
- */
50
- export declare function getInvalidDynamicContentTags(html: string): string[];
51
30
  export declare const useHtmlValidator: () => {
52
31
  validateHtml: (html: string, customFields: DynamicContent[], isOnSaveValidation?: boolean) => Promise<boolean>;
53
32
  };
@@ -1,9 +1,4 @@
1
1
  import type { SavedTemplateDetails } from '@@/Types/stripo';
2
- type SaveDetails = Omit<SavedTemplateDetails, 'metadata' | 'silent'>;
3
- type SaveResult = SaveDetails | undefined;
4
2
  export declare const useSave: () => {
5
- save: (suppressEmit?: boolean, silent?: boolean) => Promise<SaveResult>;
6
- saveWithErrors: () => Promise<SaveResult>;
7
- saveRawOnly: () => Promise<SaveResult>;
3
+ save: (suppressEmit?: boolean, silent?: boolean) => Promise<Omit<SavedTemplateDetails, "metadata" | "silent"> | undefined>;
8
4
  };
9
- export {};
@@ -1,6 +1,3 @@
1
- export declare const COUPON_TAG_MODIFIED_KEY = "newsletter.coupon-tag-modified";
2
- /** Pure core: the tag text of every coupon block whose code was modified. */
3
- export declare function findInvalidCouponBlocks(html: string): string[];
4
1
  export declare const useCouponBlockValidator: () => {
5
2
  validateCouponBlockTags: (html: string) => boolean;
6
3
  };
@@ -1,14 +1,4 @@
1
- declare const SINGLETON_BLOCK_RULES: {
2
- pageType: number;
3
- messageKey: string;
4
- }[];
5
- export declare const EMPTY_BLOCK_KEY = "unsubscription-preference.select-page-to-continue";
6
- /** Pure core: the singleton rules whose page type appears more than once. */
7
- export declare function findDuplicateUnsubPageTypes(html: string): typeof SINGLETON_BLOCK_RULES;
8
- /** Pure core: count of unsubscribe blocks with no page type or page list chosen. */
9
- export declare function countUnsubBlocksWithoutPage(html: string): number;
10
1
  export declare const useUnsubscribeBlockValidator: () => {
11
2
  validateUnsubscribeBlockUniqueness: (html: string) => boolean;
12
3
  validateUnsubscribeBlockHasTemplate: (html: string) => boolean;
13
4
  };
14
- export {};
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Dev-harness stand-in for the cortex-fe MFE's shared `chat` store.
3
+ *
4
+ * `useCortexBlueprintBridge` resolves that store by id off the host's pinia at
5
+ * Guido's setup time, so a store registered after mount is never seen. Installing
6
+ * it here — before `<Guido>` renders — lets e2e drive the bridge through its real
7
+ * registration path instead of re-invoking the composable by hand.
8
+ *
9
+ * Activated with `?chatStore=true`; the instance is exposed on `window` so a test
10
+ * can push agent messages into it.
11
+ */
12
+ export declare const installMockChatStore: () => void;
@@ -107,7 +107,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
107
107
  autosave: boolean;
108
108
  allowlistEnabled: boolean;
109
109
  linkTrackingIds: boolean;
110
- allowSaveWithErrors: boolean;
111
110
  reusableRecommendationStrategy: boolean;
112
111
  };
113
112
  blocks: {
@@ -252,7 +251,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
252
251
  autosave: boolean;
253
252
  allowlistEnabled: boolean;
254
253
  linkTrackingIds: boolean;
255
- allowSaveWithErrors: boolean;
256
254
  reusableRecommendationStrategy: boolean;
257
255
  };
258
256
  blocks: {
@@ -397,7 +395,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
397
395
  autosave: boolean;
398
396
  allowlistEnabled: boolean;
399
397
  linkTrackingIds: boolean;
400
- allowSaveWithErrors: boolean;
401
398
  reusableRecommendationStrategy: boolean;
402
399
  };
403
400
  blocks: {
@@ -542,7 +539,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
542
539
  autosave: boolean;
543
540
  allowlistEnabled: boolean;
544
541
  linkTrackingIds: boolean;
545
- allowSaveWithErrors: boolean;
546
542
  reusableRecommendationStrategy: boolean;
547
543
  };
548
544
  blocks: {
@@ -687,7 +683,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
687
683
  autosave: boolean;
688
684
  allowlistEnabled: boolean;
689
685
  linkTrackingIds: boolean;
690
- allowSaveWithErrors: boolean;
691
686
  reusableRecommendationStrategy: boolean;
692
687
  };
693
688
  blocks: {
@@ -832,7 +827,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
832
827
  autosave: boolean;
833
828
  allowlistEnabled: boolean;
834
829
  linkTrackingIds: boolean;
835
- allowSaveWithErrors: boolean;
836
830
  reusableRecommendationStrategy: boolean;
837
831
  };
838
832
  blocks: {
@@ -977,7 +971,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
977
971
  autosave: boolean;
978
972
  allowlistEnabled: boolean;
979
973
  linkTrackingIds: boolean;
980
- allowSaveWithErrors: boolean;
981
974
  reusableRecommendationStrategy: boolean;
982
975
  };
983
976
  blocks: {
@@ -1122,7 +1115,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1122
1115
  autosave: boolean;
1123
1116
  allowlistEnabled: boolean;
1124
1117
  linkTrackingIds: boolean;
1125
- allowSaveWithErrors: boolean;
1126
1118
  reusableRecommendationStrategy: boolean;
1127
1119
  };
1128
1120
  blocks: {
@@ -1267,7 +1259,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1267
1259
  autosave: boolean;
1268
1260
  allowlistEnabled: boolean;
1269
1261
  linkTrackingIds: boolean;
1270
- allowSaveWithErrors: boolean;
1271
1262
  reusableRecommendationStrategy: boolean;
1272
1263
  };
1273
1264
  blocks: {
@@ -1412,7 +1403,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1412
1403
  autosave: boolean;
1413
1404
  allowlistEnabled: boolean;
1414
1405
  linkTrackingIds: boolean;
1415
- allowSaveWithErrors: boolean;
1416
1406
  reusableRecommendationStrategy: boolean;
1417
1407
  };
1418
1408
  blocks: {
@@ -1557,7 +1547,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1557
1547
  autosave: boolean;
1558
1548
  allowlistEnabled: boolean;
1559
1549
  linkTrackingIds: boolean;
1560
- allowSaveWithErrors: boolean;
1561
1550
  reusableRecommendationStrategy: boolean;
1562
1551
  };
1563
1552
  blocks: {
@@ -1702,7 +1691,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1702
1691
  autosave: boolean;
1703
1692
  allowlistEnabled: boolean;
1704
1693
  linkTrackingIds: boolean;
1705
- allowSaveWithErrors: boolean;
1706
1694
  reusableRecommendationStrategy: boolean;
1707
1695
  };
1708
1696
  blocks: {
@@ -1847,7 +1835,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1847
1835
  autosave: boolean;
1848
1836
  allowlistEnabled: boolean;
1849
1837
  linkTrackingIds: boolean;
1850
- allowSaveWithErrors: boolean;
1851
1838
  reusableRecommendationStrategy: boolean;
1852
1839
  };
1853
1840
  blocks: {
@@ -1992,7 +1979,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1992
1979
  autosave: boolean;
1993
1980
  allowlistEnabled: boolean;
1994
1981
  linkTrackingIds: boolean;
1995
- allowSaveWithErrors: boolean;
1996
1982
  reusableRecommendationStrategy: boolean;
1997
1983
  };
1998
1984
  blocks: {
@@ -2137,7 +2123,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2137
2123
  autosave: boolean;
2138
2124
  allowlistEnabled: boolean;
2139
2125
  linkTrackingIds: boolean;
2140
- allowSaveWithErrors: boolean;
2141
2126
  reusableRecommendationStrategy: boolean;
2142
2127
  };
2143
2128
  blocks: {
@@ -2282,7 +2267,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2282
2267
  autosave: boolean;
2283
2268
  allowlistEnabled: boolean;
2284
2269
  linkTrackingIds: boolean;
2285
- allowSaveWithErrors: boolean;
2286
2270
  reusableRecommendationStrategy: boolean;
2287
2271
  };
2288
2272
  blocks: {
@@ -2427,7 +2411,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2427
2411
  autosave: boolean;
2428
2412
  allowlistEnabled: boolean;
2429
2413
  linkTrackingIds: boolean;
2430
- allowSaveWithErrors: boolean;
2431
2414
  reusableRecommendationStrategy: boolean;
2432
2415
  };
2433
2416
  blocks: {
@@ -2471,18 +2454,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2471
2454
  };
2472
2455
  } | null;
2473
2456
  } & import("pinia").PiniaCustomStateProperties<ConfigStoreState>) => number;
2474
- /**
2475
- * Transactional campaigns keep the hard save block. Reactive getter, so
2476
- * consumers stay safe in setup where a raw config read snapshots null (SD-147945).
2477
- */
2478
- isTransactional(): boolean;
2479
- /**
2480
- * Soft-save policy: may the editor persist a template with validation errors?
2481
- * Default true (host sets features.allowSaveWithErrors=false for transactional +
2482
- * unsub). Reactive getter defaulting true — reading via isFeatureEnabled would
2483
- * floor to false pre-init and momentarily hide the soft-save option (SD-147430).
2484
- */
2485
- allowSaveWithErrors(): boolean;
2486
2457
  /**
2487
2458
  * Get the username
2488
2459
  */
@@ -2584,7 +2555,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2584
2555
  autosave: boolean;
2585
2556
  allowlistEnabled: boolean;
2586
2557
  linkTrackingIds: boolean;
2587
- allowSaveWithErrors: boolean;
2588
2558
  reusableRecommendationStrategy: boolean;
2589
2559
  };
2590
2560
  blocks: {
@@ -2729,7 +2699,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2729
2699
  autosave: boolean;
2730
2700
  allowlistEnabled: boolean;
2731
2701
  linkTrackingIds: boolean;
2732
- allowSaveWithErrors: boolean;
2733
2702
  reusableRecommendationStrategy: boolean;
2734
2703
  };
2735
2704
  blocks: {
@@ -2876,7 +2845,6 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2876
2845
  autosave: boolean;
2877
2846
  allowlistEnabled: boolean;
2878
2847
  linkTrackingIds: boolean;
2879
- allowSaveWithErrors: boolean;
2880
2848
  reusableRecommendationStrategy: boolean;
2881
2849
  };
2882
2850
  blocks: {
@@ -1,5 +1,6 @@
1
1
  import type { OnboardingCardConfig, OnboardingType, OnboardingStoreState } from '@@/Types/onboarding';
2
2
  export declare const useOnboardingStore: import("pinia").StoreDefinition<"guidoOnboarding", OnboardingStoreState, {
3
+ /** @deprecated Components use the type-specific getters. Slated for deletion, see the SD-667788 dead-code ledger. */
3
4
  getOnboarding: (state: {
4
5
  onboardings: {
5
6
  newVersionPopup: {
@@ -390,6 +391,7 @@ export declare const useOnboardingStore: import("pinia").StoreDefinition<"guidoO
390
391
  };
391
392
  isFetched: boolean;
392
393
  } & import("pinia").PiniaCustomStateProperties<OnboardingStoreState>) => (type: OnboardingType) => boolean;
394
+ /** @deprecated Components use getGenericCurrentCard / getTextBlockCurrentCard. Slated for deletion, see the SD-667788 dead-code ledger. */
393
395
  getCurrentCard: (state: {
394
396
  onboardings: {
395
397
  newVersionPopup: {
@@ -2190,6 +2192,7 @@ export declare const useOnboardingStore: import("pinia").StoreDefinition<"guidoO
2190
2192
  close(type: OnboardingType): Promise<void>;
2191
2193
  next(type: OnboardingType): void;
2192
2194
  previous(type: OnboardingType): void;
2195
+ /** @deprecated No caller in src/. Slated for deletion, see the SD-667788 dead-code ledger. */
2193
2196
  updateCardPosition(type: OnboardingType, cardIndex: number, position: {
2194
2197
  top: string;
2195
2198
  position: string;
@@ -2198,6 +2201,7 @@ export declare const useOnboardingStore: import("pinia").StoreDefinition<"guidoO
2198
2201
  onDiscoverNowClicked(): Promise<void>;
2199
2202
  onRemindMeLater(): void;
2200
2203
  onNewVersionPopupClose(): Promise<void>;
2204
+ /** @deprecated No caller in src/. Slated for deletion, see the SD-667788 dead-code ledger. */
2201
2205
  isOnboardingActive(): boolean;
2202
2206
  fetchUserModalState(): Promise<void>;
2203
2207
  setUserModalState(modal: string, state: string, page: string): Promise<void>;
@@ -6,5 +6,10 @@ type RecommendationConfig = {
6
6
  interface StoreState {
7
7
  recommendationConfigs: RecommendationConfig[];
8
8
  }
9
+ /**
10
+ * @deprecated recommendationConfigs has no writer in src/, so the store is
11
+ * permanently empty and its only readers (useHtmlValidator.ts:496-497) are a
12
+ * no-op. Slated for deletion, see the SD-667788 dead-code ledger.
13
+ */
9
14
  export declare const useRecommendationStore: import("pinia").StoreDefinition<"guidoRecommendation", StoreState, {}, {}>;
10
15
  export {};
@@ -3,12 +3,22 @@
3
3
  * en-US -> MM/DD/YYYY
4
4
  * en-GB -> DD/MM/YYYY
5
5
  * tr-TR -> DD.MM.YYYY
6
+ *
7
+ * The non-string branches below are unreachable: the only caller chain is
8
+ * formatShortDate -> AssignStrategyDrawer.vue:74, which passes a non-empty string.
9
+ * The function itself is live — do not delete it with them.
6
10
  */
7
11
  export declare const convertToDateObject: (date: string | number | Date | null | undefined) => Date;
8
12
  export declare const locale: () => string;
9
13
  export declare const localTz: string;
10
14
  export declare const timezone: () => string;
15
+ /**
16
+ * @deprecated No caller in src/ and not exported from library.ts. Slated for deletion, see the SD-667788 dead-code ledger.
17
+ */
11
18
  export declare const hour12: () => boolean;
19
+ /**
20
+ * @deprecated No caller in src/ and not exported from library.ts. Slated for deletion, see the SD-667788 dead-code ledger.
21
+ */
12
22
  export declare const dateFormat: () => string;
13
23
  /**
14
24
  * @example 04/22/2024
@@ -24,6 +24,9 @@ export declare const getCsrfToken: () => string;
24
24
  */
25
25
  export declare const getUrlParams: () => URLSearchParams;
26
26
  export declare const getUrlParam: (paramName: string, defaultValue?: string) => string;
27
+ /**
28
+ * @deprecated No caller in src/. Slated for deletion, see the SD-667788 dead-code ledger.
29
+ */
27
30
  export declare const replaceString: (string?: string, values?: Record<string, string | number>, isRemoveEmptyValues?: boolean) => string;
28
31
  /**
29
32
  * Narrows an unknown API value to a printable string; anything that is neither
@@ -15,36 +15,6 @@ import type { SavedTemplateDetails } from '@@/Types/stripo';
15
15
  * same source), so it is reliably present regardless of how the block was added.
16
16
  */
17
17
  export declare function getHtmlReferencedUnsubscribePages(html: string): number[];
18
- /**
19
- * Hydrates the recommendation extension store from the persisted `esd-ext-config`
20
- * JSON blob on each `.recommendation-block-v2` element in the raw editor HTML.
21
- *
22
- * Why this runs before `compileHtml`:
23
- * The HTML compiler's `prepareRecommendationBlocks` rule asks
24
- * `useRecommendation.buildCampaignUrl(id)` to assemble each block's API URL
25
- * from `blockStates[id].recommendationConfigs`. That Pinia entry is normally
26
- * populated by `RecommendationBlockControl._syncNodeConfigToStore`, which
27
- * only fires when the user *selects* the block. Saving without ever
28
- * selecting a migrated block would otherwise build the URL from empty/
29
- * default state and the campaign URL would not be saved.
30
- *
31
- * Why we read raw HTML, not compiled HTML:
32
- * Stripo's `compileEmail()` strips editor-only attributes (`esd-*`) from the
33
- * compiled output, so `esd-ext-config` is gone by the time the compiler
34
- * pipeline sees the HTML. The raw HTML from `getTemplateData()` preserves
35
- * the attribute as the migrator wrote it.
36
- *
37
- * Reference data pre-load:
38
- * When the template has recommendation blocks, this also pre-loads the
39
- * shared reference data (languages / currency list) so the save-time
40
- * required-fields validator can check each block's locale and currency
41
- * against the partner's real options. Best-effort — on a fetch failure the
42
- * validator degrades to its empty-list guard (`requiredFields.ts`) instead
43
- * of blocking the save or stranding the Save button.
44
- */
45
- declare function hydrateRecommendationStoreFromRawHtml(rawHtml: string): Promise<void>;
46
18
  export declare const useTemplatePreparation: () => {
47
19
  prepareTemplateDetails: () => Promise<Omit<SavedTemplateDetails, "metadata">>;
48
- hydrateRecommendationStore: typeof hydrateRecommendationStoreFromRawHtml;
49
20
  };
50
- export {};
@@ -1,4 +1,4 @@
1
- const n = `.patch-session-container {
1
+ const r = `.patch-session-container {
2
2
  row-gap: 16px;
3
3
  }
4
4
 
@@ -28,11 +28,7 @@ ue-vh-patch.selected .patch-wrapper {
28
28
  .change-history-panel-wrapper .control-panel-header {
29
29
  padding: 16px 0 16px 16px;
30
30
  }
31
-
32
- .change-history-panel-wrapper .header-control-panel-label {
33
- grid-area: 1 / 1 / 2 / 12;
34
- }
35
31
  `;
36
32
  export {
37
- n as default
33
+ r as default
38
34
  };