@useinsider/guido 3.19.0-beta.5794c8d → 3.19.0-beta.5ffd236

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 (51) hide show
  1. package/dist/@types/config/schemas.js +104 -91
  2. package/dist/components/Guido.vue.js +6 -6
  3. package/dist/components/Guido.vue2.js +96 -85
  4. package/dist/components/organisms/base/AuthErrorModal.vue.js +18 -0
  5. package/dist/components/organisms/base/AuthErrorModal.vue2.js +42 -0
  6. package/dist/components/wrappers/WpModal.vue.js +1 -1
  7. package/dist/components/wrappers/WpModal.vue2.js +4 -3
  8. package/dist/composables/useAuthError.js +52 -0
  9. package/dist/composables/useAutoSave.js +11 -11
  10. package/dist/composables/useCortexBlueprintBridge.js +122 -54
  11. package/dist/composables/useEmailTemplateApplier.js +111 -50
  12. package/dist/composables/useHttp.js +64 -54
  13. package/dist/composables/useStripo.js +24 -20
  14. package/dist/composables/useToaster.js +17 -15
  15. package/dist/composables/validators/useLiquidValidator.js +15 -15
  16. package/dist/config/migrator/index.js +14 -13
  17. package/dist/config/migrator/recommendationMigrator.js +28 -21
  18. package/dist/config/migrator/recommendationPartnerMigrator.js +56 -0
  19. package/dist/enums/extensions/recommendationBlock.js +30 -29
  20. package/dist/extensions/Blocks/Recommendation/block.js +15 -14
  21. package/dist/extensions/Blocks/Recommendation/controls/main/index.js +45 -38
  22. package/dist/extensions/Blocks/Recommendation/controls/main/strategy.js +72 -49
  23. package/dist/extensions/Blocks/Recommendation/store/recommendation.js +29 -29
  24. package/dist/extensions/Blocks/Recommendation/utils/partnerScope.js +25 -0
  25. package/dist/guido.css +1 -1
  26. package/dist/src/@types/config/schemas.d.ts +16 -0
  27. package/dist/src/components/organisms/base/AuthErrorModal.vue.d.ts +2 -0
  28. package/dist/src/components/wrappers/WpModal.vue.d.ts +5 -1
  29. package/dist/src/composables/useAuthError.d.ts +12 -0
  30. package/dist/src/composables/useConfig.d.ts +2 -0
  31. package/dist/src/composables/useCortexBlueprintBridge.d.ts +2 -3
  32. package/dist/src/composables/useEmailTemplateApplier.d.ts +18 -5
  33. package/dist/src/composables/useGuidoActions.d.ts +2 -0
  34. package/dist/src/composables/useHttp.d.ts +2 -0
  35. package/dist/src/config/migrator/index.d.ts +2 -1
  36. package/dist/src/config/migrator/recommendationPartnerMigrator.d.ts +19 -0
  37. package/dist/src/enums/extensions/recommendationBlock.d.ts +1 -1
  38. package/dist/src/extensions/Blocks/Recommendation/types/nodeConfig.d.ts +6 -0
  39. package/dist/src/extensions/Blocks/Recommendation/utils/partnerScope.d.ts +33 -0
  40. package/dist/src/mock/cortexChatStore.d.ts +12 -0
  41. package/dist/src/stores/config.d.ts +20 -0
  42. package/dist/src/stores/guido-email-editor.d.ts +20 -10
  43. package/dist/src/stores/onboarding.d.ts +4 -0
  44. package/dist/src/stores/recommendation.d.ts +5 -0
  45. package/dist/src/utils/dateUtil.d.ts +10 -0
  46. package/dist/src/utils/genericUtil.d.ts +3 -0
  47. package/dist/static/styles/components/recommendation-strategy.css.js +9 -0
  48. package/dist/static/styles/components/version-history.css.js +2 -6
  49. package/dist/stores/guido-email-editor.js +3 -1
  50. package/dist/stores/onboarding.js +4 -0
  51. package/package.json +2 -1
package/dist/guido.css CHANGED
@@ -1 +1 @@
1
- @charset "UTF-8";.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-c61cc8ea]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-36867e2e]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-36867e2e]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-36867e2e]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
1
+ @charset "UTF-8";.auth-error-modal[data-v-b4d7ae51]{position:relative;z-index:145}.gap-16[data-v-5553d071],.gap-16[data-v-0e1b0c54]{gap:16px}[data-v-73199fa4] .in-button-v2__wrapper{line-height:0}[data-v-22226124] .in-segments-wrapper__button_selected,[data-v-22226124] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb;color:#0010ac;border-color:#0010ac}[data-v-2cb418af] .in-progress-wrapper__progress p span:last-child{display:none!important}[data-v-2cb418af] .in-progress-description-status{display:none!important}.view-options-wrapper[data-v-87033101]{position:relative;display:inline-block}.new-tag[data-v-87033101]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-87033101] .guido__view-option-selection-desktop svg,[data-v-87033101] .guido__view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-87033101] .in-segments-wrapper__button_selected,[data-v-87033101] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-87033101] .in-tooltip-wrapper-v2__icon{cursor:pointer}.editor-toolbar[data-v-173c3a40]{gap:4px}.version-history-item[data-v-ee4b9c3f]{flex-basis:200px}.version-history[data-v-fad98586]{gap:8px}.version-history__toolbar[data-v-fad98586]{gap:4px}.view-options-wrapper[data-v-6ebabfe4]{position:relative;display:inline-block}.new-tag[data-v-6ebabfe4]{position:absolute;top:-8px;right:-16px;z-index:10}[data-v-6ebabfe4] .guido__verion-history-view-option-selection-desktop svg,[data-v-6ebabfe4] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-6ebabfe4] .in-segments-wrapper__button_selected,[data-v-6ebabfe4] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}[data-v-6ebabfe4] .in-tooltip-wrapper-v2__icon{cursor:pointer}.auto-save-toggle[data-v-2c964af4]{position:relative}.auto-save-toggle__info-box[data-v-2c964af4]{position:absolute;top:100%;left:0;z-index:10;width:280px}.editor-actions[data-v-c61cc8ea]{gap:4px}.header-wrapper[data-v-d11dd577]{min-width:1000px}.guido-loading__wrapper[data-v-07c4b2d8]{height:100%;top:75px!important;bottom:0!important}.guido-editor__wrapper[data-v-c404d230]{--ribbon-offset: 0px;position:relative;width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__container[data-v-c404d230]{width:100%;height:calc(100vh - 128px - var(--ribbon-offset))}.guido-editor__no-header[data-v-c404d230]{height:calc(100vh - 75px - var(--ribbon-offset))}[data-v-293f1c47] .in-breadcrumb-wrapper__links{cursor:pointer}.templates-wrapper[data-v-91a26acd]{gap:16px;grid-template-columns:repeat(3,1fr)}.templates-wrapper .template-wrapper[data-v-91a26acd]{cursor:pointer}.templates-wrapper .template-wrapper .template-container[data-v-91a26acd]{height:274px;padding:2px;transition:none}.templates-wrapper .template-wrapper .template-container.selected[data-v-91a26acd]{padding:1px}.templates-wrapper .template-wrapper .template-container .thumbnail[data-v-91a26acd]{object-fit:cover;transform:scale(1)}[data-v-b9a93c6e] .guido__verion-history-view-option-selection-desktop svg,[data-v-b9a93c6e] .guido__verion-history-view-option-selection-mobile svg{margin:0 0 0 2px}[data-v-b9a93c6e] .in-segments-wrapper__button_selected,[data-v-b9a93c6e] .in-segments-wrapper__button_selected:hover{background-color:#dae1fb}.error-list[data-v-c3fd5d4b]{gap:16px}.desktop-browser-header[data-v-d86c5af5]{height:79px;min-height:79px}.desktop-browser-header__left[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:378px}.desktop-browser-header__center[data-v-d86c5af5]{height:79px;background-repeat:repeat-x;background-size:auto 100%;background-position:left top}.desktop-browser-header__right[data-v-d86c5af5]{-webkit-user-drag:none;height:79px;width:112px}.desktop-preview[data-v-cf946232]{min-width:602px;height:70vh;min-height:583px;border-radius:10px}.desktop-preview iframe[data-v-cf946232]{min-height:504px}.iframe-wrapper[data-v-f255b2bb]{width:258px}.iframe-scaled[data-v-f255b2bb]{width:320px;height:124.0310077519%;transform:scale(.80625);transform-origin:top left}.cropped-text[data-v-eb3d05d7]{width:220px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-preview-wrapper__phone[data-v-3f472f96]{width:282px}.mobile-preview-wrapper__phone img[data-v-3f472f96]{object-fit:cover;border-radius:44px}.mobile-preview-wrapper__content[data-v-3f472f96]{width:258px;height:450px;left:12px}[data-v-6bcaca8a] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-f16f20f8] .vueperslides__bullets{pointer-events:none!important}[data-v-f16f20f8] .vueperslides__parallax-wrapper{padding-bottom:110px!important}[data-v-bb3cca55] .vueperslides__bullets{pointer-events:none!important}[data-v-bb3cca55] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-19d8cb42] .vueperslides__bullets,[data-v-ec2027ff] .vueperslides__bullets,[data-v-b09e80c4] .vueperslides__bullets{pointer-events:none!important}[data-v-b09e80c4] .vueperslides__parallax-wrapper{height:110px!important;padding-bottom:110px!important}[data-v-9bdef600] .vueperslides__parallax-wrapper{padding-bottom:110px!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd]{width:100%;max-width:none}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-skeleton{width:100%!important}.assign-strategy-drawer-content .assign-strategy-select[data-v-6ce48dfd] .in-dropdown-box__container{width:413px}.assign-strategy-drawer .spaced-dot-sep{background-image:linear-gradient(90deg,#91949f 20%,#fff0 0);background-position:center bottom;background-repeat:repeat-x;background-size:5px 1px}.assign-strategy-drawer .spaced-dot-sep--top{background-position:center top}.assign-strategy-drawer .spaced-dot-sep--fc-n:first-child{background:none}.legacy-strategy-updated-modal[data-v-da2225a1]{position:relative;z-index:145}
@@ -278,6 +278,14 @@ export declare const TemplateSchema: v.ObjectSchema<{
278
278
  * mount. Non-numbers still fail, like every other field in this schema.
279
279
  */
280
280
  readonly trackIdCounter: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, number>]>, 0>;
281
+ /**
282
+ * The variation's saved `recommendationCampaignUrls`, keyed by block id. A block
283
+ * that still names a strategy but has no entry here had it dropped by a
284
+ * cross-account duplicate, so Guido resets it on load (SD-151945). Omit it and
285
+ * that check is off, and so is any non-object value such as `null`, because a reset
286
+ * cannot be undone. Hosts send `[]` for an empty map.
287
+ */
288
+ readonly recommendationCampaignUrls: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnknownSchema, v.TransformAction<unknown, Record<string, unknown> | undefined>]>, undefined>;
281
289
  /** Migration-only inputs (legacy block configs) */
282
290
  readonly migration: v.OptionalSchema<v.ObjectSchema<{
283
291
  /**
@@ -701,6 +709,14 @@ export declare const GuidoConfigSchema: v.ObjectSchema<{
701
709
  * mount. Non-numbers still fail, like every other field in this schema.
702
710
  */
703
711
  readonly trackIdCounter: v.OptionalSchema<v.SchemaWithPipe<readonly [v.NumberSchema<undefined>, v.TransformAction<number, number>]>, 0>;
712
+ /**
713
+ * The variation's saved `recommendationCampaignUrls`, keyed by block id. A block
714
+ * that still names a strategy but has no entry here had it dropped by a
715
+ * cross-account duplicate, so Guido resets it on load (SD-151945). Omit it and
716
+ * that check is off, and so is any non-object value such as `null`, because a reset
717
+ * cannot be undone. Hosts send `[]` for an empty map.
718
+ */
719
+ readonly recommendationCampaignUrls: v.OptionalSchema<v.SchemaWithPipe<readonly [v.UnknownSchema, v.TransformAction<unknown, Record<string, unknown> | undefined>]>, undefined>;
704
720
  /** Migration-only inputs (legacy block configs) */
705
721
  readonly migration: v.OptionalSchema<v.ObjectSchema<{
706
722
  /**
@@ -0,0 +1,2 @@
1
+ declare const _default: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue/types/v3-component-options.js").ComponentOptionsMixin, import("vue/types/v3-component-options.js").ComponentOptionsMixin, {}, string, Readonly<import("vue").ExtractPropTypes<{}>>, {}>;
2
+ export default _default;
@@ -3,6 +3,7 @@ type __VLS_Props = {
3
3
  id: string;
4
4
  title: string;
5
5
  description?: string;
6
+ state?: 'default' | 'primary' | 'warning' | 'danger';
6
7
  size?: 'X-small' | 'small' | 'medium' | 'large';
7
8
  footerButtonOptions?: FooterButtonGroup;
8
9
  closeButtonStatus?: boolean;
@@ -15,6 +16,7 @@ type __VLS_Slots = {} & {
15
16
  };
16
17
  declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
17
18
  description: string;
19
+ state: string;
18
20
  size: string;
19
21
  footerButtonOptions: undefined;
20
22
  closeButtonStatus: boolean;
@@ -26,6 +28,7 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<
26
28
  "secondary-action": () => void;
27
29
  }, string, Readonly<import("vue").ExtractPropTypes<__VLS_WithDefaults<__VLS_TypePropsToOption<__VLS_Props>, {
28
30
  description: string;
31
+ state: string;
29
32
  size: string;
30
33
  footerButtonOptions: undefined;
31
34
  closeButtonStatus: boolean;
@@ -34,9 +37,10 @@ declare const __VLS_component: import("vue").DefineComponent<__VLS_WithDefaults<
34
37
  }>>>, {
35
38
  size: "X-small" | "small" | "medium" | "large";
36
39
  description: string;
37
- closeOnOutsideClick: boolean;
40
+ state: "default" | "primary" | "warning" | "danger";
38
41
  footerButtonOptions: FooterButtonGroup;
39
42
  closeButtonStatus: boolean;
43
+ closeOnOutsideClick: boolean;
40
44
  footerStatus: boolean;
41
45
  }>;
42
46
  declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
@@ -0,0 +1,12 @@
1
+ export interface AuthErrorState {
2
+ status: number;
3
+ data: Record<string, unknown> | null;
4
+ }
5
+ export declare const isPanelOrigin: (url: string) => boolean;
6
+ export declare const reportAuthError: (status: number, body: string, url: string) => void;
7
+ export declare const useAuthError: () => {
8
+ authError: import("vue").Ref<{
9
+ status: number;
10
+ data: Record<string, unknown> | null;
11
+ } | null>;
12
+ };
@@ -43,6 +43,7 @@ export declare const useConfig: () => {
43
43
  selectedUnsubscribePages: number[];
44
44
  forceRecreate: boolean;
45
45
  trackIdCounter: number;
46
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
46
47
  migration: {
47
48
  recommendationConfigs: {
48
49
  [x: string]: {
@@ -180,6 +181,7 @@ export declare const useConfig: () => {
180
181
  selectedUnsubscribePages: number[];
181
182
  forceRecreate: boolean;
182
183
  trackIdCounter: number;
184
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
183
185
  migration: {
184
186
  recommendationConfigs: {
185
187
  [x: string]: {
@@ -17,12 +17,11 @@
17
17
  * - `error` segments (and message-level `isError` / `isCancelled`) trigger
18
18
  * a localized toaster.
19
19
  *
20
+ * Every apply settles into a terminal `applyAcks` entry, so cortex moves its button on the write, not the click.
21
+ *
20
22
  * In dev (`import.meta.env.DEV`) every observed segment + message-level flag
21
23
  * change is also `console.debug`-logged with the prefix `[guido:cortex]` so a
22
24
  * developer can watch the agent stream in real time. In production this is
23
25
  * gated behind `localStorage.guido:debug:ai === '1'`.
24
- *
25
- * If cortex-fe isn't loaded the chat store is undefined and the bridge is a
26
- * no-op (intentional — Guido must still work standalone).
27
26
  */
28
27
  export declare const useCortexBlueprintBridge: () => void;
@@ -1,4 +1,16 @@
1
1
  type ApplyStatus = 'pending' | 'applying' | 'applied' | 'failed';
2
+ /**
3
+ * Terminal outcome of an apply; every promise here settles with one, since the bridge acks on it.
4
+ * `superseded`: a newer payload for the same key replaced this one and owns the ack.
5
+ */
6
+ export type ApplyOutcome = {
7
+ status: 'applied';
8
+ } | {
9
+ status: 'failed';
10
+ error: unknown;
11
+ } | {
12
+ status: 'superseded';
13
+ };
2
14
  /**
3
15
  * Applies email_template blueprints from the chat agent to the Stripo editor.
4
16
  *
@@ -9,18 +21,19 @@ type ApplyStatus = 'pending' | 'applying' | 'applied' | 'failed';
9
21
  * - manual Apply click (first apply): immediate.
10
22
  * - blueprint_update after the user has applied once: debounced 250 ms trailing
11
23
  * so rapid mid-stream updates don't thrash updateHtmlAndCss.
24
+ * - a click before Stripo is ready is queued and flushed when `isStripoInitialized` flips.
12
25
  */
13
26
  export declare const useEmailTemplateApplier: () => {
14
27
  applyStatus: import("vue").Ref<Record<string, ApplyStatus>>;
15
- markPending: (blueprintId: string) => void;
16
- applyTemplate: (blueprintId: string, data: {
28
+ markPending: (key: string) => void;
29
+ applyTemplate: (key: string, data: {
17
30
  html?: string;
18
31
  css?: string;
19
- }) => void;
20
- applyTemplateDebounced: (blueprintId: string, data: {
32
+ }) => Promise<ApplyOutcome>;
33
+ applyTemplateDebounced: (key: string, data: {
21
34
  html?: string;
22
35
  css?: string;
23
- }) => void;
36
+ }) => Promise<ApplyOutcome>;
24
37
  };
25
38
  export declare const resetEmailTemplateApplier: () => void;
26
39
  export {};
@@ -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;
@@ -16,6 +16,7 @@ export interface HttpError {
16
16
  status?: number;
17
17
  statusText?: string;
18
18
  response?: Response;
19
+ authReported?: boolean;
19
20
  }
20
21
  export declare const useHttp: (defaultOptions?: HttpOptions) => {
21
22
  loading: import("vue").ComputedRef<boolean>;
@@ -65,6 +66,7 @@ export declare const useHttp: (defaultOptions?: HttpOptions) => {
65
66
  json: () => Promise<any>;
66
67
  text: () => Promise<string>;
67
68
  } | undefined;
69
+ authReported?: boolean | undefined;
68
70
  } | null>;
69
71
  hasError: import("vue").ComputedRef<boolean>;
70
72
  request: <T = unknown>(method: HttpMethod, url: string, data?: unknown, options?: HttpOptions) => Promise<HttpResponse<T>>;
@@ -1,2 +1,3 @@
1
1
  import type { LegacyRecommendationConfig } from '@@/Types/config';
2
- export declare const migrate: (html: string, recommendationConfigs?: Record<string, LegacyRecommendationConfig>) => Promise<string>;
2
+ import { type PartnerScopeMigrationOptions } from './recommendationPartnerMigrator';
3
+ export declare const migrate: (html: string, recommendationConfigs?: Record<string, LegacyRecommendationConfig>, partnerScope?: PartnerScopeMigrationOptions) => Promise<string>;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Empties recommendation blocks copied in from another account and stamps the
3
+ * current one, before the editor ever sees the template (SD-151945).
4
+ *
5
+ * Runs at load rather than on document change: the stamp makes it a one-time
6
+ * pass per template, the campaign-URL rule only ever applies to the loaded HTML,
7
+ * and Stripo takes the result as the original document, so nothing is dirtied.
8
+ */
9
+ export interface PartnerScopeMigrationOptions {
10
+ partnerName: string;
11
+ /** `undefined` when the host does not pass the map — the unstamped check is then off. */
12
+ campaignUrls?: Record<string, unknown>;
13
+ rrsEnabled: boolean;
14
+ }
15
+ /**
16
+ * @param html Template HTML, already normalized by `migrateRecommendation`.
17
+ * @returns Migrated HTML, or the original when no block needed a reset or a stamp.
18
+ */
19
+ export declare function migrateRecommendationPartnerScope(html: string, { partnerName, campaignUrls, rrsEnabled }: PartnerScopeMigrationOptions): string;
@@ -8,8 +8,8 @@ export declare const URLS: {
8
8
  NEWSLETTER_RECOMMENDATIONS_PATH: string;
9
9
  MIGRATE_STRATEGIES_PATH: string;
10
10
  TEMPLATE_MIGRATE_STRATEGIES_PATH: string;
11
- RECOMMENDATION_STRATEGY_CREATE_PATH: string;
12
11
  };
12
+ export declare const strategyCreatePath: () => string;
13
13
  export declare const strategyEditPath: (strategyId: string | number) => string;
14
14
  export declare const MIGRATION_PATHS: Record<RrsMigrationTarget['scope'], string>;
15
15
  export declare const QUERY_PARAMS: {
@@ -83,6 +83,12 @@ export interface RecommendationNodeConfig {
83
83
  */
84
84
  filters: Filter[];
85
85
  strategyId: string;
86
+ /**
87
+ * Account (`config.partner.name`) that last wrote the strategy config. Strategy ids and
88
+ * attribute types are account-scoped, so a block opened under another account is reset.
89
+ * Absent on blocks saved before SD-151945.
90
+ */
91
+ partnerName?: string;
86
92
  /**
87
93
  * Layout orientation
88
94
  * - 'grid': Products in a grid, attributes aligned across products
@@ -0,0 +1,33 @@
1
+ import type { RecommendationNodeConfig } from '../types/nodeConfig';
2
+ /**
3
+ * Mirrors the backend's `RecommendationCampaignUrls::isDefined`: a legacy feed URL
4
+ * string or an entry that names a strategy.
5
+ */
6
+ export declare function isDefinedCampaignUrl(value: unknown): boolean;
7
+ export interface PartnerScopeInputs {
8
+ config: Pick<RecommendationNodeConfig, 'strategyId' | 'partnerName'>;
9
+ blockId: number;
10
+ partnerName: string;
11
+ /** `undefined` when the host does not pass the map — the unstamped check is then off. */
12
+ campaignUrls: Record<string, unknown> | undefined;
13
+ /** With RRS off `buildCampaignUrl` drops the block's map entry, so the map says nothing. */
14
+ rrsEnabled: boolean;
15
+ }
16
+ /**
17
+ * Whether a block carries another account's strategy config (SD-151945).
18
+ *
19
+ * A stamped block is judged by its stamp. An unstamped one predates the stamp, so it
20
+ * falls back to the backend's own signal: a cross-account duplicate drops the block's
21
+ * strategy entry from the campaign URL map but leaves the HTML untouched. That signal
22
+ * only holds while RRS is on, and only for the HTML the host loaded — which is what
23
+ * the caller, a load-time migrator, runs on.
24
+ */
25
+ export declare function carriesForeignPartnerConfig({ config, blockId, partnerName, campaignUrls, rrsEnabled }: PartnerScopeInputs): boolean;
26
+ /**
27
+ * Whether an unstamped block's ownership can be decided at all. `carriesForeignPartnerConfig`
28
+ * answers `false` both for "clean" and for "cannot tell", and stamping on the latter would
29
+ * record a foreign block as this account's and silence every later check. A block with no
30
+ * strategy reference has nothing foreign to carry, so it is always decidable.
31
+ */
32
+ export declare function canJudgeUnstampedBlock({ config, campaignUrls, rrsEnabled }: Pick<PartnerScopeInputs, 'config' | 'campaignUrls' | 'rrsEnabled'>): boolean;
33
+ export declare function withoutCustomAttributes(composition: string[]): string[];
@@ -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;
@@ -48,6 +48,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
48
48
  selectedUnsubscribePages: number[];
49
49
  forceRecreate: boolean;
50
50
  trackIdCounter: number;
51
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
51
52
  migration: {
52
53
  recommendationConfigs: {
53
54
  [x: string]: {
@@ -191,6 +192,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
191
192
  selectedUnsubscribePages: number[];
192
193
  forceRecreate: boolean;
193
194
  trackIdCounter: number;
195
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
194
196
  migration: {
195
197
  recommendationConfigs: {
196
198
  [x: string]: {
@@ -334,6 +336,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
334
336
  selectedUnsubscribePages: number[];
335
337
  forceRecreate: boolean;
336
338
  trackIdCounter: number;
339
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
337
340
  migration: {
338
341
  recommendationConfigs: {
339
342
  [x: string]: {
@@ -477,6 +480,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
477
480
  selectedUnsubscribePages: number[];
478
481
  forceRecreate: boolean;
479
482
  trackIdCounter: number;
483
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
480
484
  migration: {
481
485
  recommendationConfigs: {
482
486
  [x: string]: {
@@ -620,6 +624,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
620
624
  selectedUnsubscribePages: number[];
621
625
  forceRecreate: boolean;
622
626
  trackIdCounter: number;
627
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
623
628
  migration: {
624
629
  recommendationConfigs: {
625
630
  [x: string]: {
@@ -763,6 +768,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
763
768
  selectedUnsubscribePages: number[];
764
769
  forceRecreate: boolean;
765
770
  trackIdCounter: number;
771
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
766
772
  migration: {
767
773
  recommendationConfigs: {
768
774
  [x: string]: {
@@ -906,6 +912,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
906
912
  selectedUnsubscribePages: number[];
907
913
  forceRecreate: boolean;
908
914
  trackIdCounter: number;
915
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
909
916
  migration: {
910
917
  recommendationConfigs: {
911
918
  [x: string]: {
@@ -1049,6 +1056,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1049
1056
  selectedUnsubscribePages: number[];
1050
1057
  forceRecreate: boolean;
1051
1058
  trackIdCounter: number;
1059
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1052
1060
  migration: {
1053
1061
  recommendationConfigs: {
1054
1062
  [x: string]: {
@@ -1192,6 +1200,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1192
1200
  selectedUnsubscribePages: number[];
1193
1201
  forceRecreate: boolean;
1194
1202
  trackIdCounter: number;
1203
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1195
1204
  migration: {
1196
1205
  recommendationConfigs: {
1197
1206
  [x: string]: {
@@ -1335,6 +1344,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1335
1344
  selectedUnsubscribePages: number[];
1336
1345
  forceRecreate: boolean;
1337
1346
  trackIdCounter: number;
1347
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1338
1348
  migration: {
1339
1349
  recommendationConfigs: {
1340
1350
  [x: string]: {
@@ -1478,6 +1488,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1478
1488
  selectedUnsubscribePages: number[];
1479
1489
  forceRecreate: boolean;
1480
1490
  trackIdCounter: number;
1491
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1481
1492
  migration: {
1482
1493
  recommendationConfigs: {
1483
1494
  [x: string]: {
@@ -1621,6 +1632,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1621
1632
  selectedUnsubscribePages: number[];
1622
1633
  forceRecreate: boolean;
1623
1634
  trackIdCounter: number;
1635
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1624
1636
  migration: {
1625
1637
  recommendationConfigs: {
1626
1638
  [x: string]: {
@@ -1764,6 +1776,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1764
1776
  selectedUnsubscribePages: number[];
1765
1777
  forceRecreate: boolean;
1766
1778
  trackIdCounter: number;
1779
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1767
1780
  migration: {
1768
1781
  recommendationConfigs: {
1769
1782
  [x: string]: {
@@ -1907,6 +1920,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
1907
1920
  selectedUnsubscribePages: number[];
1908
1921
  forceRecreate: boolean;
1909
1922
  trackIdCounter: number;
1923
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
1910
1924
  migration: {
1911
1925
  recommendationConfigs: {
1912
1926
  [x: string]: {
@@ -2050,6 +2064,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2050
2064
  selectedUnsubscribePages: number[];
2051
2065
  forceRecreate: boolean;
2052
2066
  trackIdCounter: number;
2067
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
2053
2068
  migration: {
2054
2069
  recommendationConfigs: {
2055
2070
  [x: string]: {
@@ -2193,6 +2208,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2193
2208
  selectedUnsubscribePages: number[];
2194
2209
  forceRecreate: boolean;
2195
2210
  trackIdCounter: number;
2211
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
2196
2212
  migration: {
2197
2213
  recommendationConfigs: {
2198
2214
  [x: string]: {
@@ -2336,6 +2352,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2336
2352
  selectedUnsubscribePages: number[];
2337
2353
  forceRecreate: boolean;
2338
2354
  trackIdCounter: number;
2355
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
2339
2356
  migration: {
2340
2357
  recommendationConfigs: {
2341
2358
  [x: string]: {
@@ -2479,6 +2496,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2479
2496
  selectedUnsubscribePages: number[];
2480
2497
  forceRecreate: boolean;
2481
2498
  trackIdCounter: number;
2499
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
2482
2500
  migration: {
2483
2501
  recommendationConfigs: {
2484
2502
  [x: string]: {
@@ -2622,6 +2640,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2622
2640
  selectedUnsubscribePages: number[];
2623
2641
  forceRecreate: boolean;
2624
2642
  trackIdCounter: number;
2643
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
2625
2644
  migration: {
2626
2645
  recommendationConfigs: {
2627
2646
  [x: string]: {
@@ -2767,6 +2786,7 @@ export declare const useConfigStore: import("pinia").StoreDefinition<"guido-conf
2767
2786
  selectedUnsubscribePages: number[];
2768
2787
  forceRecreate: boolean;
2769
2788
  trackIdCounter: number;
2789
+ recommendationCampaignUrls?: Record<string, unknown> | undefined;
2770
2790
  migration: {
2771
2791
  recommendationConfigs: {
2772
2792
  [x: string]: {
@@ -1,3 +1,13 @@
1
+ /** Terminal outcome of an editor write, keyed by `${blueprintId}:${version}`. */
2
+ export interface ApplyAck {
3
+ status: 'applied' | 'failed';
4
+ /** The `applyRequestedAt` of the click this ack answers — lets cortex drop stale acks. */
5
+ requestedAt: number;
6
+ /** Strictly increasing per key, so two acks in the same millisecond still order. */
7
+ ackAt: number;
8
+ /** Stringified — cortex JSON-clones store-derived payloads, an Error would not survive. */
9
+ error?: string;
10
+ }
1
11
  /** The published editor snapshot — the shape a consumer reads off the shared store. */
2
12
  export interface GuidoEmailEditorState {
3
13
  /** Current Stripo HTML — stripe tables only, no DOCTYPE/wrapper. */
@@ -8,6 +18,10 @@ export interface GuidoEmailEditorState {
8
18
  lastUpdatedAt: number;
9
19
  /** Template id from the editor config, so a consumer can scope per-template. */
10
20
  templateId: string;
21
+ /** True while a mounted Guido bridge is consuming the chat store. Gates cortex's Apply button. */
22
+ bridgeActive: boolean;
23
+ /** `${blueprintId}:${version}` → terminal outcome of the editor write, written only after it settles. */
24
+ applyAcks: Record<string, ApplyAck>;
11
25
  }
12
26
  /**
13
27
  * Outbound contract Guido publishes to the host's shared Pinia singleton so a
@@ -18,17 +32,11 @@ export interface GuidoEmailEditorState {
18
32
  * Published as `@useinsider/guido/editor-state` and from the root barrel, so a
19
33
  * consumer imports this store instead of re-declaring one under the same id.
20
34
  *
21
- * State + getters only, no actions. `useGuidoStateBridge` is the only intended
22
- * writer, but that is Guido's own convention rather than something the store
23
- * enforces: publishing the definition hands a consumer `$patch` as well, exactly
24
- * as the runtime `pinia._s` probe always did.
35
+ * State-only by contract: cortex-fe reads `pinia.state.value['guidoEmailEditor']`, which misses
36
+ * actions and getters. Intended writers: `useGuidoStateBridge` and `useCortexBlueprintBridge`.
25
37
  *
26
- * Store id `guidoEmailEditor` is cross-MFE: cortex-fe reads it via
27
- * `pinia._s.get('guidoEmailEditor')` at runtime rather than importing it, so the
28
- * id stays part of the contract. The internal Guido editor store keeps id
29
- * `guidoEditor` — these are intentionally separate. The internal store carries
30
- * UI state a consumer should not see; this public store carries the contract
31
- * Guido is willing to share.
38
+ * The id `guidoEmailEditor` is part of the cross-MFE contract; the internal
39
+ * store `guidoEditor` is intentionally separate.
32
40
  */
33
41
  export declare const useGuidoEmailEditorStore: import("pinia").StoreDefinition<"guidoEmailEditor", GuidoEmailEditorState, {
34
42
  /** True once the bridge has published at least one snapshot. */
@@ -37,5 +45,7 @@ export declare const useGuidoEmailEditorStore: import("pinia").StoreDefinition<"
37
45
  css: string;
38
46
  lastUpdatedAt: number;
39
47
  templateId: string;
48
+ bridgeActive: boolean;
49
+ applyAcks: Record<string, ApplyAck>;
40
50
  } & import("pinia").PiniaCustomStateProperties<GuidoEmailEditorState>) => boolean;
41
51
  }, {}>;
@@ -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
@@ -52,6 +52,15 @@ const n = `.strategy-control-header {
52
52
  mask-size: 24px 24px;
53
53
  }
54
54
 
55
+ .strategy-control-notice--error {
56
+ border-color: var(--guido-color-border-onpage-message-error);
57
+ background-color: var(--guido-color-background-onpage-message-error);
58
+ }
59
+
60
+ .strategy-control-notice--error::before {
61
+ background-color: var(--guido-color-border-onpage-message-error);
62
+ }
63
+
55
64
  .strategy-control-notice-text {
56
65
  margin: 0;
57
66
  padding: 4px 0;
@@ -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
  };