@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.
- package/lib/src/{CreatedOnBrandCrowd-de-de-Cbi1PSNS.js → CreatedOnBrandCrowd-de-de-Dxp4ebC_.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-B2ZTei1t.js → CreatedOnBrandCrowd-en-us-2m-52z9q.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-DGz8UfQQ.js → CreatedOnBrandCrowd-es-es-vyViBkgn.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-C4rUBQUM.js → CreatedOnBrandCrowd-fr-ca-WKIdCeR9.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-C4rUBQUM.js → CreatedOnBrandCrowd-fr-fr-WKIdCeR9.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-Cw7sVI1F.js → CreatedOnBrandCrowd-pt-br-C5gZ1FOh.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-Cw7sVI1F.js → CreatedOnBrandCrowd-pt-pt-C5gZ1FOh.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-DPSPgKj7.js → CreatedOnDcom-de-de-DvS2wMv_.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-AXXhwSXg.js → CreatedOnDcom-en-us-C9LSUVh8.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-DY8bmxi_.js → CreatedOnDcom-es-es-DTrd5sLX.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-D3QxYtYl.js → CreatedOnDcom-fr-ca-BRC4S6qm.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-KIt7qTPd.js → CreatedOnDcom-fr-fr-B0vfWw2S.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-Bv4bHhuR.js → CreatedOnDcom-pt-br-7SFPnAev.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-NNO1huza.js → CreatedOnDcom-pt-pt-DYLzspou.js} +1 -1
- package/lib/src/brand-page/models/index.d.ts +2 -0
- package/lib/src/brand-page/models/index.js +2 -0
- package/lib/src/brand-page/utils/logo.util.d.ts +0 -14
- package/lib/src/brand-page/utils/logo.util.js +0 -19
- package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +19 -18
- package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.js +3 -54
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +1 -1
- package/lib/src/brand-page-maker/composables/useUndoRedoFlag.d.ts +7 -6
- package/lib/src/brand-page-maker/composables/useUndoRedoFlag.js +12 -7
- package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +6 -0
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +6 -2
- package/lib/src/{bundled-translations-BUyt4scr.js → bundled-translations-CgiJ3pXh.js} +1 -1
- package/lib/src/bundles/bundled-translations.json +9 -1
- package/lib/src/composables/useSnapshot.js +18 -18
- package/lib/src/index.mjs +1 -1
- package/lib/src/{lib-IDusUqYG.js → lib-Dfr7gLQv.js} +21806 -21593
- package/lib/src/metadata-builder/builders/footer-builder.js +103 -70
- package/lib/src/metadata-builder/builders/section-field-utils.d.ts +7 -0
- package/lib/src/metadata-builder/builders/section-field-utils.js +1 -1
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +3 -3
- package/lib/src/shared/background-settings/background-settings-models.d.ts +2 -2
- package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +11 -0
- package/lib/src/shared/background-settings/composables/useBackgroundShapeControls.d.ts +40 -0
- package/lib/src/shared/background-settings/composables/useBackgroundShapeControls.js +58 -0
- package/lib/src/shared/background-settings/composables/useSingleBackgroundShape.d.ts +21 -0
- package/lib/src/shared/background-settings/composables/useSingleBackgroundShape.js +51 -0
- package/lib/src/shared/background-settings/store/background-settings-store.d.ts +11 -1
- package/lib/src/shared/background-settings/store/background-settings-store.js +24 -0
- package/lib/src/shared/content-settings/components/radio-field/RadioField.mixin.d.ts +1 -1
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +10 -0
- package/package.json +2 -2
- package/src/brand-page/models/index.ts +5 -0
- package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
- package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
- package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
- package/src/brand-page/utils/logo.util.test.ts +1 -54
- package/src/brand-page/utils/logo.util.ts +0 -23
- package/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.ts +3 -88
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +1 -1
- package/src/brand-page-maker/composables/useUndoRedoFlag.ts +13 -7
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +16 -2
- package/src/bundles/bundled-translations.json +9 -1
- package/src/composables/useSnapshot.ts +19 -22
- package/src/metadata-builder/builders/footer-builder.test.ts +200 -1
- package/src/metadata-builder/builders/footer-builder.ts +151 -95
- package/src/metadata-builder/builders/section-field-utils.ts +1 -1
- package/src/metadata-builder/parsers/ai-toolcall-parser.ts +3 -3
- package/src/shared/background-settings/background-settings-models.ts +3 -2
- package/src/shared/background-settings/components/BackgroundSettings.vue +79 -114
- package/src/shared/background-settings/components/MultiBackgroundShapes.vue +304 -0
- package/src/shared/background-settings/components/SingleBackgroundShape.vue +106 -0
- package/src/shared/background-settings/components/i18n/background-settings.json +9 -1
- package/src/shared/background-settings/composables/useBackgroundShapeControls.ts +124 -0
- package/src/shared/background-settings/composables/useSingleBackgroundShape.ts +82 -0
- package/src/shared/background-settings/store/background-settings-store.ts +44 -0
- package/lib/src/metadata-builder/builders/reorder-pages-builder.d.ts +0 -13
- package/lib/src/metadata-builder/builders/reorder-pages-builder.js +0 -49
- package/src/metadata-builder/builders/reorder-pages-builder.ts +0 -80
|
@@ -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
|
|
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.
|
|
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.
|
|
10
|
-
*
|
|
11
|
-
* brand-
|
|
12
|
-
*
|
|
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.
|
|
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.
|
|
11
|
-
*
|
|
12
|
-
* brand-
|
|
13
|
-
*
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
}
|