@designcrowd/library.brand-page 6.0.0-undo-redo-1 → 6.0.1-ast-bg-shape

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 (72) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-Cbi1PSNS.js → CreatedOnBrandCrowd-de-de-Dxp4ebC_.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-B2ZTei1t.js → CreatedOnBrandCrowd-en-us-2m-52z9q.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-DGz8UfQQ.js → CreatedOnBrandCrowd-es-es-vyViBkgn.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-C4rUBQUM.js → CreatedOnBrandCrowd-fr-ca-WKIdCeR9.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-C4rUBQUM.js → CreatedOnBrandCrowd-fr-fr-WKIdCeR9.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Cw7sVI1F.js → CreatedOnBrandCrowd-pt-br-C5gZ1FOh.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Cw7sVI1F.js → CreatedOnBrandCrowd-pt-pt-C5gZ1FOh.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-DPSPgKj7.js → CreatedOnDcom-de-de-DvS2wMv_.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-AXXhwSXg.js → CreatedOnDcom-en-us-C9LSUVh8.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-DY8bmxi_.js → CreatedOnDcom-es-es-DTrd5sLX.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-D3QxYtYl.js → CreatedOnDcom-fr-ca-BRC4S6qm.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-KIt7qTPd.js → CreatedOnDcom-fr-fr-B0vfWw2S.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-Bv4bHhuR.js → CreatedOnDcom-pt-br-7SFPnAev.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-NNO1huza.js → CreatedOnDcom-pt-pt-DYLzspou.js} +1 -1
  15. package/lib/src/brand-page/models/index.d.ts +2 -0
  16. package/lib/src/brand-page/models/index.js +2 -0
  17. package/lib/src/brand-page/utils/logo.util.d.ts +0 -14
  18. package/lib/src/brand-page/utils/logo.util.js +0 -19
  19. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +19 -18
  20. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.js +3 -54
  21. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +1 -1
  22. package/lib/src/brand-page-maker/composables/useUndoRedoFlag.d.ts +7 -6
  23. package/lib/src/brand-page-maker/composables/useUndoRedoFlag.js +12 -7
  24. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +6 -0
  25. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +6 -2
  26. package/lib/src/{bundled-translations-BUyt4scr.js → bundled-translations-CgiJ3pXh.js} +1 -1
  27. package/lib/src/bundles/bundled-translations.json +9 -1
  28. package/lib/src/composables/useSnapshot.js +18 -18
  29. package/lib/src/index.mjs +1 -1
  30. package/lib/src/{lib-IDusUqYG.js → lib-Dfr7gLQv.js} +21806 -21593
  31. package/lib/src/metadata-builder/builders/footer-builder.js +103 -70
  32. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +7 -0
  33. package/lib/src/metadata-builder/builders/section-field-utils.js +1 -1
  34. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +3 -3
  35. package/lib/src/shared/background-settings/background-settings-models.d.ts +2 -2
  36. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +11 -0
  37. package/lib/src/shared/background-settings/composables/useBackgroundShapeControls.d.ts +40 -0
  38. package/lib/src/shared/background-settings/composables/useBackgroundShapeControls.js +58 -0
  39. package/lib/src/shared/background-settings/composables/useSingleBackgroundShape.d.ts +21 -0
  40. package/lib/src/shared/background-settings/composables/useSingleBackgroundShape.js +51 -0
  41. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +11 -1
  42. package/lib/src/shared/background-settings/store/background-settings-store.js +24 -0
  43. package/lib/src/shared/content-settings/components/radio-field/RadioField.mixin.d.ts +1 -1
  44. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +10 -0
  45. package/package.json +2 -2
  46. package/src/brand-page/models/index.ts +5 -0
  47. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
  48. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  49. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  50. package/src/brand-page/utils/logo.util.test.ts +1 -54
  51. package/src/brand-page/utils/logo.util.ts +0 -23
  52. package/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.ts +3 -88
  53. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +1 -1
  54. package/src/brand-page-maker/composables/useUndoRedoFlag.ts +13 -7
  55. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +16 -2
  56. package/src/bundles/bundled-translations.json +9 -1
  57. package/src/composables/useSnapshot.ts +19 -22
  58. package/src/metadata-builder/builders/footer-builder.test.ts +200 -1
  59. package/src/metadata-builder/builders/footer-builder.ts +151 -95
  60. package/src/metadata-builder/builders/section-field-utils.ts +1 -1
  61. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +3 -3
  62. package/src/shared/background-settings/background-settings-models.ts +3 -2
  63. package/src/shared/background-settings/components/BackgroundSettings.vue +79 -114
  64. package/src/shared/background-settings/components/MultiBackgroundShapes.vue +304 -0
  65. package/src/shared/background-settings/components/SingleBackgroundShape.vue +106 -0
  66. package/src/shared/background-settings/components/i18n/background-settings.json +9 -1
  67. package/src/shared/background-settings/composables/useBackgroundShapeControls.ts +124 -0
  68. package/src/shared/background-settings/composables/useSingleBackgroundShape.ts +82 -0
  69. package/src/shared/background-settings/store/background-settings-store.ts +44 -0
  70. package/lib/src/metadata-builder/builders/reorder-pages-builder.d.ts +0 -13
  71. package/lib/src/metadata-builder/builders/reorder-pages-builder.js +0 -49
  72. package/src/metadata-builder/builders/reorder-pages-builder.ts +0 -80
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-IDusUqYG.js";
2
+ import { _ as t } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-IDusUqYG.js";
2
+ import { _ as e } from "./lib-Dfr7gLQv.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-IDusUqYG.js";
2
+ import { _ as e } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-IDusUqYG.js";
2
+ import { _ as e } from "./lib-Dfr7gLQv.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-IDusUqYG.js";
2
+ import { _ as e } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-IDusUqYG.js";
2
+ import { _ as e } from "./lib-Dfr7gLQv.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-IDusUqYG.js";
2
+ import { _ as M } from "./lib-Dfr7gLQv.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-IDusUqYG.js";
2
+ import { _ as M } from "./lib-Dfr7gLQv.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -26,11 +26,13 @@ export declare class BackgroundShape {
26
26
  constructor(option?: Partial<BackgroundShape>);
27
27
  }
28
28
  export type BackgroundStyle = Partial<Omit<BrandPageCssStyle, 'backgroundColor'>>;
29
+ export type BackgroundShapeMode = 'single' | 'multiple';
29
30
  export declare class BackgroundStyles {
30
31
  style: BackgroundStyle;
31
32
  backgroundShapeStyle: BackgroundStyle;
32
33
  backgroundImageUrl: string;
33
34
  backgroundShapes: BackgroundShape[];
35
+ shapeMode?: BackgroundShapeMode;
34
36
  personalisationRole?: PersonalisationRole;
35
37
  media?: AbstractMedia;
36
38
  mediaOverlayStyle: BrandPageCssStyle;
@@ -46,6 +46,7 @@ export class BackgroundStyles {
46
46
  backgroundShapeStyle;
47
47
  backgroundImageUrl;
48
48
  backgroundShapes;
49
+ shapeMode;
49
50
  personalisationRole;
50
51
  media;
51
52
  mediaOverlayStyle;
@@ -53,6 +54,7 @@ export class BackgroundStyles {
53
54
  this.backgroundImageUrl = option.backgroundImageUrl || '';
54
55
  this.backgroundShapes = (option.backgroundShapes ||
55
56
  []);
57
+ this.shapeMode = option.shapeMode;
56
58
  this.style = option.style || {
57
59
  background: '',
58
60
  };
@@ -30,20 +30,6 @@ export declare const calculateOptimizedLogoDimensions: (logoData: {
30
30
  width: string;
31
31
  height: string;
32
32
  };
33
- /**
34
- * Resolves the "current" logo image from a brand-page MODEL (the raw,
35
- * deserialized shape — not the live stores, whose contents are wrapped in
36
- * `settings.content`).
37
- *
38
- * Brand-site keeps its logo in the page header; brand-page and brand-contact
39
- * keep it as a logo CONTENT block on the home page — the same `isBrandSite ?
40
- * header : content` split the logo-settings store getters/setter use. This is
41
- * the single source of truth for model-level logo reads: initial load and
42
- * history-restore both call it so the two paths can't drift. They previously
43
- * hard-coded `=== brandPage`, which silently excluded brand-contact and read a
44
- * stale header logo on undo.
45
- */
46
- export declare const getLogoImageFromModel: (model: BrandPageModel) => LogoImageModel | undefined;
47
33
  export declare const recalculateLogoContentDimensions: (pageData: any, editableLogoVariations: {
48
34
  variationId: number;
49
35
  width: number;
@@ -225,25 +225,6 @@ export const calculateOptimizedLogoDimensions = (logoData, currentWidth, current
225
225
  }
226
226
  return { width: currentWidth, height: currentHeight };
227
227
  };
228
- /**
229
- * Resolves the "current" logo image from a brand-page MODEL (the raw,
230
- * deserialized shape — not the live stores, whose contents are wrapped in
231
- * `settings.content`).
232
- *
233
- * Brand-site keeps its logo in the page header; brand-page and brand-contact
234
- * keep it as a logo CONTENT block on the home page — the same `isBrandSite ?
235
- * header : content` split the logo-settings store getters/setter use. This is
236
- * the single source of truth for model-level logo reads: initial load and
237
- * history-restore both call it so the two paths can't drift. They previously
238
- * hard-coded `=== brandPage`, which silently excluded brand-contact and read a
239
- * stale header logo on undo.
240
- */
241
- export const getLogoImageFromModel = (model) => {
242
- if (model.brandPageType === BRAND_PAGE_TYPES.brandSite) {
243
- return model.pageHeaderDesktop?.logoImage;
244
- }
245
- return model.pages?.[0]?.contents?.find(isLogoContent)?.logoImage;
246
- };
247
228
  export const recalculateLogoContentDimensions = async (pageData, editableLogoVariations, logoImage, isPrePurchase) => {
248
229
  try {
249
230
  let logoData;
@@ -1,15 +1,14 @@
1
1
  import type { BackgroundStylesConfigOption } from '@brand-page-maker/models/background-styles-config';
2
2
  import type { UserMediaItem, UserMediaItemWithDimensions } from 'src/shared/my-uploads/models';
3
- interface BackgroundShapePosition {
4
- name: string;
5
- screenLeft: number;
6
- screenTop: number;
7
- originLeft: number;
8
- originTop: number;
9
- scalePercentage: number;
10
- opacityPercentage: number;
11
- }
12
3
  declare const _default: import("vue").DefineComponent<{}, {
4
+ backgroundShapes: import("vue").ComputedRef<import("@shared/background-settings/composables/useBackgroundShapeControls").BackgroundShapePosition[]>;
5
+ onShapeScreenXChange: (index: number, value: number) => void;
6
+ onShapeScreenYChange: (index: number, value: number) => void;
7
+ onShapeOriginXChange: (index: number, value: number) => void;
8
+ onShapeOriginYChange: (index: number, value: number) => void;
9
+ onShapeSizeChange: (index: number, value: number | string) => void;
10
+ onShapeOpacityChange: (index: number, value: number | string) => void;
11
+ onDeleteShape: (index: number) => void;
13
12
  logoTheme: import("vue").ComputedRef<{
14
13
  logoTextColor: {
15
14
  rgb: string;
@@ -180,6 +179,7 @@ declare const _default: import("vue").DefineComponent<{}, {
180
179
  wordBreak?: string | undefined;
181
180
  };
182
181
  }[];
182
+ shapeMode?: import("../../../brand-page").BackgroundShapeMode | undefined;
183
183
  personalisationRole?: import("../../../brand-page").PersonalisationRole | undefined;
184
184
  media?: {
185
185
  type: import("../../../brand-page").MediaTypes;
@@ -282,6 +282,9 @@ declare const _default: import("vue").DefineComponent<{}, {
282
282
  backgroundStyle: import("../../../brand-page").BackgroundStyle;
283
283
  }): void;
284
284
  setBackgroundShapes(payload: import("../../../brand-page").BackgroundShape[]): void;
285
+ setShapeMode(payload: {
286
+ shapeMode: import("../../../brand-page").BackgroundShapeMode;
287
+ }): void;
285
288
  setBackgroundPersonalisationRole(payload: {
286
289
  personalisationRole: import("../../../brand-page").PersonalisationRole | undefined;
287
290
  }): void;
@@ -299,6 +302,13 @@ declare const _default: import("vue").DefineComponent<{}, {
299
302
  deleteBackgroundShape({ shapeIndex }: {
300
303
  shapeIndex: number;
301
304
  }): void;
305
+ replaceBackgroundShape({ shapeIndex, shapeUrl, width, height, aspectRatio, }: {
306
+ shapeIndex: number;
307
+ shapeUrl: string;
308
+ width?: number;
309
+ height?: number;
310
+ aspectRatio?: number;
311
+ }): void;
302
312
  setLogoColors({ logoColors }: import("../../../shared/background-settings/background-settings-models").SetLogoColorsPayload): void;
303
313
  clearUserImageBackgroundImageUrl(): void;
304
314
  setAdminBackgroundOptionDefaultValues(): void;
@@ -332,18 +342,9 @@ declare const _default: import("vue").DefineComponent<{}, {
332
342
  readonly backgroundShapeStyle: "backgroundShapeStyle";
333
343
  };
334
344
  }, {
335
- backgroundShapes(): BackgroundShapePosition[];
336
345
  colorPickerValue(): (key: BackgroundStylesConfigOption) => string;
337
346
  backgroundShapeUrl(): string;
338
347
  }, {
339
- onShapeSettingChange(index: number, updatedSettings: any): void;
340
- onShapeScreenXChange(index: number, value: any): void;
341
- onShapeScreenYChange(index: number, value: any): void;
342
- onShapeOriginXChange(index: number, value: any): void;
343
- onShapeOriginYChange(index: number, value: any): void;
344
- onShapeSizeChange(index: number, value: any): void;
345
- onShapeOpacityChange(index: number, value: any): void;
346
- onDeleteShape(index: number): void;
347
348
  onColorMatchToggled(option: BackgroundStylesConfigOption, value: boolean): void;
348
349
  onColorPickerInput(option: BackgroundStylesConfigOption, value: string | Event): void;
349
350
  onBackgroundShapeSelected(shape: UserMediaItemWithDimensions): void;
@@ -2,6 +2,7 @@ import { computed, defineComponent } from 'vue';
2
2
  import { BackgroundStylesConfigOptions } from '@brand-page-maker/models/background-styles-config';
3
3
  import { STYLE_THEME_KEYS } from '@brand-page/constants';
4
4
  import { useUiBackgroundSettingsStore } from '@shared/background-settings/store';
5
+ import { useBackgroundShapeControls } from '@shared/background-settings/composables/useBackgroundShapeControls';
5
6
  import { assertUnreachable, isAnEvent } from '../../../helpers/ts.helper';
6
7
  import { isColorMatched } from '@brand-page-maker/utils';
7
8
  import { useUiStore } from '@brand-page-maker/stores';
@@ -14,6 +15,8 @@ export default defineComponent({
14
15
  backgroundStyles: computed(() => backgroundSettingsStore.backgroundStyles),
15
16
  uiStore,
16
17
  backgroundSettingsStore,
18
+ // Per-shape placement/size/opacity mapping + handlers (shared with the customer panel)
19
+ ...useBackgroundShapeControls(),
17
20
  };
18
21
  },
19
22
  data() {
@@ -27,24 +30,6 @@ export default defineComponent({
27
30
  };
28
31
  },
29
32
  computed: {
30
- backgroundShapes() {
31
- return (this.backgroundStyles.backgroundShapes?.map((shape) => {
32
- const translate = shape.style.transform
33
- ?.match(/\((.*)\)/)
34
- ?.pop()
35
- ?.split(',');
36
- return {
37
- name: shape.name,
38
- screenLeft: parseInt(shape.style.left?.replace('%', '') || '50'),
39
- screenTop: parseInt(shape.style.top?.replace('%', '') || '50'),
40
- originLeft: parseInt(translate ? translate[0] : '-50'),
41
- originTop: parseInt(translate ? translate[1] : '-50'),
42
- scalePercentage: Math.round(parseFloat(shape.style.transform.match(/(?:scale)\(([^)]+)\)/)?.pop() ||
43
- '1') * 100),
44
- opacityPercentage: Math.round(parseFloat(shape.style.opacity || '1') * 100),
45
- };
46
- }) || []);
47
- },
48
33
  colorPickerValue() {
49
34
  return (key) => {
50
35
  switch (key) {
@@ -83,42 +68,6 @@ export default defineComponent({
83
68
  });
84
69
  },
85
70
  methods: {
86
- onShapeSettingChange(index, updatedSettings) {
87
- const scale = (this.backgroundShapes[index]?.scalePercentage / 100 || 1).toFixed(2);
88
- const opacity = (this.backgroundShapes[index]?.opacityPercentage / 100 || 1).toFixed(2);
89
- this.backgroundSettingsStore.setBackgroundShapeSettings({
90
- index,
91
- ...this.backgroundShapes[index],
92
- scale,
93
- opacity,
94
- ...updatedSettings,
95
- });
96
- },
97
- onShapeScreenXChange(index, value) {
98
- this.onShapeSettingChange(index, { screenLeft: value });
99
- },
100
- onShapeScreenYChange(index, value) {
101
- this.onShapeSettingChange(index, { screenTop: value });
102
- },
103
- onShapeOriginXChange(index, value) {
104
- this.onShapeSettingChange(index, { originLeft: value });
105
- },
106
- onShapeOriginYChange(index, value) {
107
- this.onShapeSettingChange(index, { originTop: value });
108
- },
109
- onShapeSizeChange(index, value) {
110
- this.onShapeSettingChange(index, {
111
- scale: (parseFloat(value) / 100).toFixed(2),
112
- });
113
- },
114
- onShapeOpacityChange(index, value) {
115
- this.onShapeSettingChange(index, {
116
- opacity: (parseFloat(value) / 100).toFixed(2),
117
- });
118
- },
119
- onDeleteShape(index) {
120
- this.backgroundSettingsStore.deleteBackgroundShape({ shapeIndex: index });
121
- },
122
71
  onColorMatchToggled(option, value) {
123
72
  this.isColorMatch[option] = value;
124
73
  switch (option) {
@@ -196,7 +196,7 @@ export default defineComponent({
196
196
  this.brandPageMakerStore.setIsBrandPageLoaded(true);
197
197
  // Capture baseline for undo/redo when the feature is active for this
198
198
  // session — see useUndoRedoFlag.ts for the gate (LaunchDarkly flag +
199
- // non-admin maker; all three brands).
199
+ // brand-site + non-admin maker).
200
200
  if (useUndoRedoFlag().value) {
201
201
  useHistoryStore().captureBaseline();
202
202
  }
@@ -1,15 +1,16 @@
1
1
  import { type ComputedRef } from 'vue';
2
2
  /**
3
- * Returns whether undo/redo is active for the current maker session. Both
4
- * conditions must hold:
3
+ * Returns whether undo/redo is active for the current maker session. All
4
+ * three conditions must hold:
5
5
  *
6
6
  * 1. `userStore.features.canUseUndoRedo` is true. The flag is populated by
7
7
  * the consumer (BrandCrowd.Net / web-renderer) via the
8
8
  * `WebsiteDesignUserFeatures.CanUseUndoRedo` boolean on the ViewModel —
9
- * same precedent as RichTextEditor / GettyVideos / AITextGenerator. The
10
- * one flag governs all three brands (brand-site, brand-page,
11
- * brand-contact) — there is no per-brand gating.
12
- * 2. The session is NOT in admin-maker mode (`userStore.isAdmin`). The
9
+ * same precedent as RichTextEditor / GettyVideos / AITextGenerator.
10
+ * 2. The maker is a brand-site (Website Maker). V1 scope is brand-site
11
+ * only; brand-page (single-page profile) and brand-contact (vCard) are
12
+ * out of scope.
13
+ * 3. The session is NOT in admin-maker mode (`userStore.isAdmin`). The
13
14
  * admin maker uses the same components but a different editing flow
14
15
  * (template authoring) where undo/redo is out of scope.
15
16
  */
@@ -1,20 +1,25 @@
1
1
  import { computed } from 'vue';
2
2
  import { useBrandPageMakerUserStore } from '@brand-page-maker/stores/user';
3
+ import { useBrandPageMakerStore } from '@brand-page-maker/stores/brandpage-maker/brandpage-maker-store';
3
4
  /**
4
- * Returns whether undo/redo is active for the current maker session. Both
5
- * conditions must hold:
5
+ * Returns whether undo/redo is active for the current maker session. All
6
+ * three conditions must hold:
6
7
  *
7
8
  * 1. `userStore.features.canUseUndoRedo` is true. The flag is populated by
8
9
  * the consumer (BrandCrowd.Net / web-renderer) via the
9
10
  * `WebsiteDesignUserFeatures.CanUseUndoRedo` boolean on the ViewModel —
10
- * same precedent as RichTextEditor / GettyVideos / AITextGenerator. The
11
- * one flag governs all three brands (brand-site, brand-page,
12
- * brand-contact) — there is no per-brand gating.
13
- * 2. The session is NOT in admin-maker mode (`userStore.isAdmin`). The
11
+ * same precedent as RichTextEditor / GettyVideos / AITextGenerator.
12
+ * 2. The maker is a brand-site (Website Maker). V1 scope is brand-site
13
+ * only; brand-page (single-page profile) and brand-contact (vCard) are
14
+ * out of scope.
15
+ * 3. The session is NOT in admin-maker mode (`userStore.isAdmin`). The
14
16
  * admin maker uses the same components but a different editing flow
15
17
  * (template authoring) where undo/redo is out of scope.
16
18
  */
17
19
  export function useUndoRedoFlag() {
18
20
  const userStore = useBrandPageMakerUserStore();
19
- return computed(() => userStore.features.canUseUndoRedo && !userStore.isAdmin);
21
+ const brandPageMakerStore = useBrandPageMakerStore();
22
+ return computed(() => userStore.features.canUseUndoRedo &&
23
+ brandPageMakerStore.isBrandSite &&
24
+ !userStore.isAdmin);
20
25
  }
@@ -148,6 +148,7 @@ export declare const useAiCheckpointStore: import("pinia").StoreDefinition<"aiCh
148
148
  wordBreak?: string | undefined;
149
149
  };
150
150
  }[];
151
+ shapeMode?: import("../../../brand-page/models").BackgroundShapeMode | undefined;
151
152
  personalisationRole?: import("../../../brand-page/models").PersonalisationRole | undefined;
152
153
  media?: {
153
154
  type: import("../../../brand-page/models").MediaTypes;
@@ -5257,6 +5258,7 @@ export declare const useAiCheckpointStore: import("pinia").StoreDefinition<"aiCh
5257
5258
  wordBreak?: string | undefined;
5258
5259
  };
5259
5260
  }[];
5261
+ shapeMode?: import("../../../brand-page/models").BackgroundShapeMode | undefined;
5260
5262
  personalisationRole?: import("../../../brand-page/models").PersonalisationRole | undefined;
5261
5263
  media?: {
5262
5264
  type: import("../../../brand-page/models").MediaTypes;
@@ -10372,6 +10374,7 @@ export declare const useAiCheckpointStore: import("pinia").StoreDefinition<"aiCh
10372
10374
  wordBreak?: string | undefined;
10373
10375
  };
10374
10376
  }[];
10377
+ shapeMode?: import("../../../brand-page/models").BackgroundShapeMode | undefined;
10375
10378
  personalisationRole?: import("../../../brand-page/models").PersonalisationRole | undefined;
10376
10379
  media?: {
10377
10380
  type: import("../../../brand-page/models").MediaTypes;
@@ -15481,6 +15484,7 @@ export declare const useAiCheckpointStore: import("pinia").StoreDefinition<"aiCh
15481
15484
  wordBreak?: string | undefined;
15482
15485
  };
15483
15486
  }[];
15487
+ shapeMode?: import("../../../brand-page/models").BackgroundShapeMode | undefined;
15484
15488
  personalisationRole?: import("../../../brand-page/models").PersonalisationRole | undefined;
15485
15489
  media?: {
15486
15490
  type: import("../../../brand-page/models").MediaTypes;
@@ -20596,6 +20600,7 @@ export declare const useAiCheckpointStore: import("pinia").StoreDefinition<"aiCh
20596
20600
  wordBreak?: string | undefined;
20597
20601
  };
20598
20602
  }[];
20603
+ shapeMode?: import("../../../brand-page/models").BackgroundShapeMode | undefined;
20599
20604
  personalisationRole?: import("../../../brand-page/models").PersonalisationRole | undefined;
20600
20605
  media?: {
20601
20606
  type: import("../../../brand-page/models").MediaTypes;
@@ -25705,6 +25710,7 @@ export declare const useAiCheckpointStore: import("pinia").StoreDefinition<"aiCh
25705
25710
  wordBreak?: string | undefined;
25706
25711
  };
25707
25712
  }[];
25713
+ shapeMode?: import("../../../brand-page/models").BackgroundShapeMode | undefined;
25708
25714
  personalisationRole?: import("../../../brand-page/models").PersonalisationRole | undefined;
25709
25715
  media?: {
25710
25716
  type: import("../../../brand-page/models").MediaTypes;
@@ -622,7 +622,9 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
622
622
  console.error('brandpage-maker-store: failed to restore logoEdits', error);
623
623
  }
624
624
  }
625
- const logoImage = logoUtil.getLogoImageFromModel(snapshot);
625
+ const logoImage = snapshot.brandPageType === BRAND_PAGE_TYPES.default
626
+ ? snapshot.pages?.[0]?.contents?.find((c) => c.type === 'logo')?.logoImage
627
+ : snapshot.pageHeaderDesktop?.logoImage;
626
628
  if (!logoImage)
627
629
  return;
628
630
  logoSettingsStore.setState({
@@ -846,7 +848,9 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
846
848
  this.setBrandPageType({
847
849
  brandPageType: _brandPageType,
848
850
  });
849
- let logoImage = logoUtil.getLogoImageFromModel(brandPageModel);
851
+ let logoImage = brandPageModel.brandPageType === BRAND_PAGE_TYPES.default
852
+ ? brandPageModel.pages?.[0].contents.find((c) => c.type === 'logo')?.logoImage
853
+ : brandPageModel.pageHeaderDesktop?.logoImage;
850
854
  if (!logoImage?.logoDraftToken) {
851
855
  logoImage = logoUtil.safeGetLogoImageFromLogoImageUrl(logoVariationImageUrls[0]);
852
856
  }