@designcrowd/library.brand-page 5.16.2 → 5.16.3-background-1

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 (87) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-Oj_ab97C.js → CreatedOnBrandCrowd-de-de-SsqsrkVk.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-GsCBx_Vo.js → CreatedOnBrandCrowd-en-us-DsGqYTNa.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CWp_kHxD.js → CreatedOnBrandCrowd-es-es-C7s1ZcE5.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-DrPrFgKC.js → CreatedOnBrandCrowd-fr-ca-DsNnq4vF.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-DrPrFgKC.js → CreatedOnBrandCrowd-fr-fr-DsNnq4vF.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-BgvbBOFa.js → CreatedOnBrandCrowd-pt-br-BxAl5qbC.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-BgvbBOFa.js → CreatedOnBrandCrowd-pt-pt-BxAl5qbC.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-BZRXmSAH.js → CreatedOnDcom-de-de-rwohNRHC.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-D_xjisVj.js → CreatedOnDcom-en-us-CvwjVlGZ.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CJzkN8Oq.js → CreatedOnDcom-es-es-X40dNkrj.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-C5ilNf57.js → CreatedOnDcom-fr-ca-DHVcZD4U.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-CZypZWWq.js → CreatedOnDcom-fr-fr-Bx2kBJe8.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-JZXunSWT.js → CreatedOnDcom-pt-br-OFY9pGT7.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-CjL1qKnl.js → CreatedOnDcom-pt-pt-Del779gQ.js} +1 -1
  15. package/lib/src/brand-page/components/page/Page.mixin.js +20 -15
  16. package/lib/src/brand-page/components/page/Page.stories.js +2 -2
  17. package/lib/src/brand-page/models/index.d.ts +1 -0
  18. package/lib/src/brand-page/models/index.js +2 -0
  19. package/lib/src/brand-page/utils/migration/migration-07.js +1 -1
  20. package/lib/src/brand-page/utils/view-model.util.d.ts +2 -1
  21. package/lib/src/brand-page/utils/view-model.util.js +27 -2
  22. package/lib/src/brand-page/view-models.d.ts +17 -2
  23. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +3 -0
  24. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +7 -2
  25. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +4 -0
  26. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +3 -0
  27. package/lib/src/brand-page-maker/components/preview/Preview.stories.js +2 -2
  28. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +244 -1
  29. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +68 -4
  30. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +9 -1
  31. package/lib/src/brand-page-maker/stores/user/user-store.d.ts +4 -0
  32. package/lib/src/brand-page-maker/stores/user/user-store.js +4 -0
  33. package/lib/src/bundled-translations-DEk3SiLd.js +161 -0
  34. package/lib/src/bundles/bundled-translations.json +3 -1
  35. package/lib/src/clients/design-template-client.d.ts +1 -0
  36. package/lib/src/clients/models.d.ts +1 -0
  37. package/lib/src/css/library.brand-page-brandCrowd.min.css +48 -20
  38. package/lib/src/css/library.brand-page-brandPage.min.css +48 -20
  39. package/lib/src/css/library.brand-page-designCom.min.css +48 -20
  40. package/lib/src/css/library.brand-page-preview.min.css +48 -20
  41. package/lib/src/index.mjs +1 -1
  42. package/lib/src/{lib-BCV7U_Bf.js → lib-Dv7p4Gdd.js} +13374 -13187
  43. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +10 -2
  44. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -0
  45. package/lib/src/shared/background-settings/store/background-settings-store.js +34 -2
  46. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +3 -0
  47. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +26 -0
  48. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +6 -1
  49. package/lib/src/shared/content-settings/components/image-field/ImageField.mixin.js +3 -1
  50. package/lib/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.mixin.d.ts +3 -0
  51. package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
  52. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +3 -0
  53. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +3 -0
  54. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +5 -0
  55. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +1 -0
  56. package/lib/src/shared/template-settings/models.d.ts +2 -0
  57. package/lib/src/shared/template-settings/store/template-settings-store.d.ts +6 -0
  58. package/lib/src/shared/template-settings/store/template-settings-store.js +109 -35
  59. package/package.json +1 -1
  60. package/src/brand-page/components/page/Page.mixin.ts +24 -15
  61. package/src/brand-page/components/page/Page.stories.ts +2 -1
  62. package/src/brand-page/components/page/Page.vue +19 -3
  63. package/src/brand-page/models/index.ts +3 -0
  64. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
  65. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  66. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  67. package/src/brand-page/utils/migration/migration-07.ts +6 -4
  68. package/src/brand-page/utils/view-model.util.ts +42 -2
  69. package/src/brand-page/view-models.ts +23 -1
  70. package/src/brand-page-maker/components/preview/Preview.stories.ts +2 -1
  71. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +90 -5
  72. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +41 -4
  73. package/src/brand-page-maker/components/template-preview-with-state/TemplatePreviewWithState.vue +4 -6
  74. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +14 -1
  75. package/src/brand-page-maker/stores/user/user-store.ts +5 -0
  76. package/src/bundles/bundled-translations.json +3 -1
  77. package/src/clients/design-template-client.ts +1 -0
  78. package/src/clients/models.ts +1 -0
  79. package/src/shared/background-settings/components/BackgroundSettings.vue +28 -8
  80. package/src/shared/background-settings/components/ReplaceImageSettingsForBackgroundSettings.vue +9 -0
  81. package/src/shared/background-settings/components/i18n/background-settings.json +3 -1
  82. package/src/shared/background-settings/store/background-settings-store.ts +51 -2
  83. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +9 -3
  84. package/src/shared/content-settings/components/image-field/ImageField.mixin.ts +4 -1
  85. package/src/shared/template-settings/models.ts +2 -0
  86. package/src/shared/template-settings/store/template-settings-store.ts +141 -41
  87. package/lib/src/bundled-translations-D9iHE5G9.js +0 -161
@@ -16,7 +16,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
16
16
  aspectRatio?: string | undefined;
17
17
  width?: string | undefined;
18
18
  height?: string | undefined;
19
- textAlign?: string | undefined;
20
19
  backgroundAttachment?: string | undefined;
21
20
  background?: string | undefined;
22
21
  backgroundImage?: string | undefined;
@@ -48,6 +47,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
48
47
  overflowWrap?: string | undefined;
49
48
  paddingTop?: string | undefined;
50
49
  position?: string | undefined;
50
+ textAlign?: string | undefined;
51
51
  textDecoration?: string | undefined;
52
52
  top?: string | undefined;
53
53
  transform?: string | undefined;
@@ -60,7 +60,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
60
60
  aspectRatio?: string | undefined;
61
61
  width?: string | undefined;
62
62
  height?: string | undefined;
63
- textAlign?: string | undefined;
64
63
  backgroundAttachment?: string | undefined;
65
64
  background?: string | undefined;
66
65
  backgroundImage?: string | undefined;
@@ -92,6 +91,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
92
91
  overflowWrap?: string | undefined;
93
92
  paddingTop?: string | undefined;
94
93
  position?: string | undefined;
94
+ textAlign?: string | undefined;
95
95
  textDecoration?: string | undefined;
96
96
  top?: string | undefined;
97
97
  transform?: string | undefined;
@@ -149,6 +149,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
149
149
  };
150
150
  }[];
151
151
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
152
+ media?: {
153
+ type: import("../../../../brand-page").MediaTypes;
154
+ } | undefined;
152
155
  }>;
153
156
  userStore: import("pinia").Store<"brandPageMakerUser", import("../../../../brand-page-maker/stores").UserState, {}, {
154
157
  setEmailAddress(payload: string): void;
@@ -158,6 +161,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
158
161
  isAdmin: boolean;
159
162
  }): void;
160
163
  setBrandPageCommissionPercentage(payload: number): void;
164
+ setUserToken(payload: {
165
+ userToken: string;
166
+ }): void;
161
167
  }>;
162
168
  backgroundSettingsStore: import("pinia").Store<"uiBackgroundSettings", import("../../store").BackgroundSettingsState, {}, {
163
169
  onBackgroundChanged(): void;
@@ -194,6 +200,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
194
200
  setBackgroundMode(payload: {
195
201
  backgroundMode: "images" | "edit";
196
202
  }): void;
203
+ setBackgroundMedia(payload: import("../../../my-uploads/models").MediaBaseSelectedPayload): void;
204
+ removeBackgroundVideo(): void;
197
205
  }>;
198
206
  }, {}, {
199
207
  color(): string;
@@ -2,6 +2,7 @@ import type { BackgroundShape, BackgroundStyle, BackgroundStyles, Personalisatio
2
2
  import { type BrandPageSettingsMode } from '../../../brand-page-maker/stores/brandpage-maker/brandpage-maker-store';
3
3
  import type { SetBackgroundShapeSettingsPayload, SetLogoColorsPayload, SetRecommendedLogoColorsPayload } from '../background-settings-models';
4
4
  import type { BackgroundSetStatePayload, BackgroundSettingsTabId } from '../models';
5
+ import type { MediaBaseSelectedPayload } from '../../my-uploads/models';
5
6
  export interface BackgroundSettingsState {
6
7
  backgroundStyles: BackgroundStyles;
7
8
  logoColors: string[];
@@ -45,4 +46,6 @@ export declare const useUiBackgroundSettingsStore: import("pinia").StoreDefiniti
45
46
  setBackgroundMode(payload: {
46
47
  backgroundMode: BrandPageSettingsMode;
47
48
  }): void;
49
+ setBackgroundMedia(payload: MediaBaseSelectedPayload): void;
50
+ removeBackgroundVideo(): void;
48
51
  }>;
@@ -1,8 +1,8 @@
1
- import { PageStyles } from '../../../brand-page';
1
+ import { GettyVideoMedia, PageStyles } from '../../../brand-page';
2
2
  import { BRANDPAGE_SETTINGS_MODES, } from '../../../brand-page-maker/stores/brandpage-maker/brandpage-maker-store';
3
3
  import { backgroundSettingsTabId } from '../models';
4
4
  import { defineStore } from 'pinia';
5
- import { useUiStore } from '../../../brand-page-maker/stores';
5
+ import { useUiStore, useVideoStore } from '../../../brand-page-maker/stores';
6
6
  export const useUiBackgroundSettingsStore = defineStore('uiBackgroundSettings', {
7
7
  state: () => ({
8
8
  backgroundStyles: {
@@ -10,6 +10,7 @@ export const useUiBackgroundSettingsStore = defineStore('uiBackgroundSettings',
10
10
  backgroundShapeStyle: {},
11
11
  backgroundShapes: [],
12
12
  backgroundImageUrl: '',
13
+ media: undefined,
13
14
  },
14
15
  logoColors: [],
15
16
  recommendedLogoColors: [],
@@ -130,5 +131,36 @@ export const useUiBackgroundSettingsStore = defineStore('uiBackgroundSettings',
130
131
  setBackgroundMode(payload) {
131
132
  this.backgroundMode = payload.backgroundMode;
132
133
  },
134
+ setBackgroundMedia(payload) {
135
+ console.log('Here in the background settings store', payload);
136
+ if (payload.type === 'getty-video') {
137
+ const gettyMedia = payload;
138
+ const videoStore = useVideoStore();
139
+ videoStore.setVideoUrlsWithToken(gettyMedia.token, gettyMedia.videoSrc, gettyMedia.imageSrc, gettyMedia.assetId);
140
+ this.backgroundStyles.media = new GettyVideoMedia({
141
+ gettyToken: gettyMedia.token,
142
+ gettyAssetId: gettyMedia.assetId,
143
+ mimeType: gettyMedia.mimeType,
144
+ settings: {
145
+ autoPlay: gettyMedia.autoPlay,
146
+ },
147
+ });
148
+ // Clear any existing background image/shape
149
+ this.backgroundStyles.backgroundImageUrl = '';
150
+ // Default background style for videos
151
+ this.setBackgroundStyle({
152
+ backgroundStyle: {
153
+ backgroundRepeat: 'no-repeat',
154
+ backgroundPosition: 'center center',
155
+ backgroundSize: 'cover',
156
+ },
157
+ });
158
+ this.onBackgroundChanged();
159
+ }
160
+ },
161
+ removeBackgroundVideo() {
162
+ this.backgroundStyles.media = undefined;
163
+ this.onBackgroundChanged();
164
+ },
133
165
  },
134
166
  });
@@ -481,6 +481,9 @@ declare const _default: import("vue").DefineComponent<{}, {
481
481
  isAdmin: boolean;
482
482
  }): void;
483
483
  setBrandPageCommissionPercentage(payload: number): void;
484
+ setUserToken(payload: {
485
+ userToken: string;
486
+ }): void;
484
487
  }>;
485
488
  pageSettingsStore: import("pinia").Store<"uiPageSettings", import("../../../page-settings/store").PageSettingsState, {
486
489
  pageIndex(): number;
@@ -636,6 +636,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
636
636
  isAdmin: boolean;
637
637
  }): void;
638
638
  setBrandPageCommissionPercentage(payload: number): void;
639
+ setUserToken(payload: {
640
+ userToken: string;
641
+ }): void;
639
642
  }>;
640
643
  uiStore: import("pinia").Store<"ui", import("../../../models").UIRootState, {
641
644
  endpoints: () => import("../../../models").Endpoints;
@@ -757,6 +760,29 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
757
760
  collapseAllSections(): void;
758
761
  setPreviousSelectedDisplayStyle(viewport: string, displayStyle: string): void;
759
762
  }>;
763
+ uiLogoSettingsStore: import("pinia").Store<"uiLogoSettings", import("../../../logo-settings/store").LogoSettingsState, {
764
+ selectedLogoImageUrl(): {
765
+ logoImageUrl: string | undefined;
766
+ logoImageBase64Url: string | undefined;
767
+ };
768
+ selectedLogoTemplateImage(): import("../../../../brand-page").LogoTemplateImageModel | undefined;
769
+ logoVariationImageUrls(): Record<number, string>;
770
+ }, {
771
+ redirectToCreateNewDesignPage(): Promise<void>;
772
+ setState(payload: {
773
+ newState: import("../../../logo-settings/store").LogoSettingsState;
774
+ }): void;
775
+ addDefaultLogoContentToCurrentPage(): void;
776
+ setLogoImageToAllContentsAndSections({ logoImage, keepLogoVariation, }: {
777
+ logoImage: import("../../../../brand-page").LogoImageModel;
778
+ keepLogoVariation?: boolean | undefined;
779
+ }): void;
780
+ setSelectedLogoImage(selectedLogoImage: import("../../../../brand-page").LogoImageModel): void;
781
+ setSelectedLogoImageToAll(payload: import("../../../logo-settings/store").SetSelectedLogoImagePayload): void;
782
+ applyLogoDesignAttributes(logoDesignAttributes: import("../../../../clients/fabric-render-client").BrandPageLogoDesignAttributesModel): void;
783
+ setLogoVariation(payload: import("../../../logo-settings/store").SetLogoVariationPayload): void;
784
+ setLogoToAllContentsAndSectionsByCreateByoLogoDraftResult(result: import("../../../models").CreateByoLogoDraftResult): void;
785
+ }>;
760
786
  }, {
761
787
  isToggled: boolean;
762
788
  }, {
@@ -8,6 +8,7 @@ import { SIDE_BAR_TAB_NAMES } from '../../../../brand-page-maker/constants';
8
8
  import { ITEM_FIELD_TYPES, } from '../../../../brand-page-maker/models';
9
9
  import { useUiPageSettingsStore } from '../../../page-settings/store';
10
10
  import { PAGE_SECTIONS } from '../../../page-settings/models';
11
+ import { useUiLogoSettingsStore } from '../../../logo-settings/store';
11
12
  const RTE_ALLOWED_SECTION_TYPES = [
12
13
  'banner-section',
13
14
  'text',
@@ -49,6 +50,7 @@ export default defineComponent({
49
50
  const uiStore = useUiStore();
50
51
  const sideBarStore = useUiSideBarStore();
51
52
  const pageSettingsStore = useUiPageSettingsStore();
53
+ const uiLogoSettingsStore = useUiLogoSettingsStore();
52
54
  return {
53
55
  getFieldSettings: computed(() => contentSettingsStore.getFieldSettings),
54
56
  getContent: computed(() => contentSettingsStore.getContent),
@@ -65,6 +67,7 @@ export default defineComponent({
65
67
  uiStore,
66
68
  sideBarStore,
67
69
  pageSettingsStore,
70
+ uiLogoSettingsStore,
68
71
  };
69
72
  },
70
73
  data: () => ({
@@ -193,11 +196,13 @@ export default defineComponent({
193
196
  // for brand page, when first page logo content is changing we want to keep the header and footer logo synced even if they are not used becuase of designlink
194
197
  const logoContentItem = this.contentSettingsStore.items.find((i) => i.type === 'logo');
195
198
  if (logoContentItem) {
199
+ const logoImage = JSON.parse(JSON.stringify(logoContentItem.settings.content.logoImage));
200
+ this.uiLogoSettingsStore.setSelectedLogoImage(logoImage);
196
201
  [PAGE_SECTIONS.header, PAGE_SECTIONS.footer].forEach((section) => {
197
202
  [VIEWPORTS.desktop, VIEWPORTS.mobile].forEach((viewPort) => {
198
203
  this.pageSettingsStore.setPageSettingsSectionLogoImage({
199
204
  sectionName: section,
200
- logoImage: JSON.parse(JSON.stringify(logoContentItem.settings.content.logoImage)),
205
+ logoImage: logoImage,
201
206
  logoTemplateImage: undefined,
202
207
  logoImageBase64Url: logoContentItem.settings.content.logoImageBase64Url,
203
208
  viewport: viewPort,
@@ -109,7 +109,9 @@ export default defineComponent({
109
109
  });
110
110
  },
111
111
  onRemove() {
112
- this.content.media = undefined;
112
+ if (this.content?.media) {
113
+ this.content.media = undefined;
114
+ }
113
115
  this.imgValue = '';
114
116
  this.imageUrl = '';
115
117
  },
@@ -105,6 +105,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
105
105
  isAdmin: boolean;
106
106
  }): void;
107
107
  setBrandPageCommissionPercentage(payload: number): void;
108
+ setUserToken(payload: {
109
+ userToken: string;
110
+ }): void;
108
111
  }>;
109
112
  }, {
110
113
  dropdownValues: {};
@@ -16,7 +16,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
16
16
  }>, {}, {}, {}, {
17
17
  onCancel(): void;
18
18
  onConfirm(): void;
19
- }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("cancel" | "confirm")[], "cancel" | "confirm", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
19
+ }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, ("confirm" | "cancel")[], "confirm" | "cancel", import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
20
20
  isVisible: {
21
21
  type: BooleanConstructor;
22
22
  required: false;
@@ -3893,6 +3893,9 @@ declare const _default: import("vue").DefineComponent<{}, {
3893
3893
  isAdmin: boolean;
3894
3894
  }): void;
3895
3895
  setBrandPageCommissionPercentage(payload: number): void;
3896
+ setUserToken(payload: {
3897
+ userToken: string;
3898
+ }): void;
3896
3899
  }>;
3897
3900
  pageSettingsStore: import("pinia").Store<"uiPageSettings", import("../../store").PageSettingsState, {
3898
3901
  pageIndex(): number;
@@ -261,6 +261,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
261
261
  isAdmin: boolean;
262
262
  }): void;
263
263
  setBrandPageCommissionPercentage(payload: number): void;
264
+ setUserToken(payload: {
265
+ userToken: string;
266
+ }): void;
264
267
  }>;
265
268
  'side-bar-content': import("vue").Ref<null, null>;
266
269
  isPrepurchase: import("vue").ComputedRef<boolean>;
@@ -470,6 +470,9 @@ declare const _default: import("vue").DefineComponent<{}, {
470
470
  isAdmin: boolean;
471
471
  }): void;
472
472
  setBrandPageCommissionPercentage(payload: number): void;
473
+ setUserToken(payload: {
474
+ userToken: string;
475
+ }): void;
473
476
  }>;
474
477
  brandPageMakerStore: import("pinia").Store<"brandPageMaker", import("../../../brand-page-maker/stores").BrandPageMakerState, {
475
478
  contentErrorCount(): number;
@@ -850,6 +853,8 @@ declare const _default: import("vue").DefineComponent<{}, {
850
853
  setBackgroundMode(payload: {
851
854
  backgroundMode: "images" | "edit";
852
855
  }): void;
856
+ setBackgroundMedia(payload: import("../../my-uploads/models").MediaBaseSelectedPayload): void;
857
+ removeBackgroundVideo(): void;
853
858
  }>;
854
859
  eventTracker: {
855
860
  sendExperimentStartedEvent: (abTestKey: string, abTestValue: string) => void;
@@ -514,6 +514,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
514
514
  }): void;
515
515
  clearTemplates(): void;
516
516
  getTemplateByTemplateId(id: string): TemplateSettingsTemplate | undefined;
517
+ setupLogoChangeWatcher(): void;
517
518
  }>;
518
519
  uiStore: import("pinia").Store<"ui", import("../../models").UIRootState, {
519
520
  endpoints: () => import("../../models").Endpoints;
@@ -4,6 +4,8 @@ export interface TemplateSettingsTemplate {
4
4
  isPersonalisable?: boolean;
5
5
  personalisationContentIndex?: number;
6
6
  brandPageModel: BrandPageModel;
7
+ contentKey?: string;
8
+ previewImageUrl?: string;
7
9
  }
8
10
  export type DesignTemplateType = 'Facebook cover' | 'Brand Page' | 'Brand Site' | 'Brand Contact';
9
11
  export declare const TEMPLATE_TABS: {
@@ -19,6 +19,8 @@ export interface TemplatesSettingState {
19
19
  selectedCategory: string | undefined;
20
20
  searchTerm: string | undefined;
21
21
  tabsWithTranslations: SelectedTabType[];
22
+ logoChangeWatcherInitialized: boolean;
23
+ renderAsImage: boolean;
22
24
  }
23
25
  export declare const useUiTemplateSettingsStore: import("pinia").StoreDefinition<"uiTemplateSettings", TemplatesSettingState, {}, {
24
26
  _addTemplates({ templates }: {
@@ -71,5 +73,9 @@ export declare const useUiTemplateSettingsStore: import("pinia").StoreDefinition
71
73
  }): void;
72
74
  clearTemplates(): void;
73
75
  getTemplateByTemplateId(id: string): TemplateSettingsTemplate | undefined;
76
+ /**
77
+ * re-fetch templates when the logo changes to regenerate preview images with the new logo.
78
+ */
79
+ setupLogoChangeWatcher(): void;
74
80
  }>;
75
81
  export {};
@@ -2,48 +2,58 @@ import { TEMPLATE_TABS } from '../models';
2
2
  import * as DesignTemplateClient from '../../../clients/design-template-client';
3
3
  import {} from '../../../clients/models';
4
4
  import { BP_DEFAULT_TEMPLATE_TYPE_NAME, SIDE_BAR_TAB_NAMES, } from '../../../brand-page-maker/constants';
5
- import { defineStore } from 'pinia';
6
- import { useBrandPageContainerStore, useBrandPageMakerStore, useUiStore, } from '../../../brand-page-maker/stores';
5
+ import { defineStore, storeToRefs } from 'pinia';
6
+ import { useBrandPageContainerStore, useBrandPageMakerStore, useBrandPageMakerUserStore, useUiStore, } from '../../../brand-page-maker/stores';
7
7
  import { useUiSideBarStore } from '../../side-bar/store';
8
8
  import { BrandPageModel } from '../../../brand-page/models';
9
9
  import { migrateBrandPageModel } from '../../../brand-page/utils';
10
10
  import { getAiContentIndexByTemplateTokenAndNumberOfVariations } from '../../../brand-page-maker/utils/ai-content-selection.util';
11
11
  import { useUiLogoSettingsStore } from '../../logo-settings/store';
12
12
  import { templateSettingsTr, getCurrentLocale, } from '../../../composables/useTranslate';
13
+ import { watch } from 'vue';
13
14
  export const DEFAULT_PAGE_SIZE = 6;
14
15
  const LOAD_PAGE_RETRY_DELAY = 250;
15
16
  export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
16
- state: () => ({
17
- isBusy: false,
18
- pageCount: 0,
19
- pageNo: 1,
20
- pageNoLoaded: 0,
21
- pageSize: DEFAULT_PAGE_SIZE,
22
- templateType: BP_DEFAULT_TEMPLATE_TYPE_NAME,
23
- templates: [],
24
- selectedTab: {
25
- key: 'all',
26
- displayName: templateSettingsTr(`headerAll`),
27
- },
28
- searchTerm: undefined,
29
- selectedCategory: undefined,
30
- templateCategories: [],
31
- tabsWithTranslations: [
32
- {
17
+ state: () => {
18
+ const brandPageContainerStore = useBrandPageContainerStore();
19
+ const brandPageMakerUserStore = useBrandPageMakerUserStore();
20
+ // Set renderAsImage to true if not admin AND not pre-purchase
21
+ const renderAsImage = !brandPageMakerUserStore.isAdmin &&
22
+ !brandPageContainerStore.isPrePurchase;
23
+ return {
24
+ isBusy: false,
25
+ pageCount: 0,
26
+ pageNo: 1,
27
+ pageNoLoaded: 0,
28
+ pageSize: DEFAULT_PAGE_SIZE,
29
+ templateType: BP_DEFAULT_TEMPLATE_TYPE_NAME,
30
+ templates: [],
31
+ selectedTab: {
33
32
  key: 'all',
34
33
  displayName: templateSettingsTr(`headerAll`),
35
34
  },
36
- {
37
- key: 'categories',
38
- displayName: templateSettingsTr(`headerCategories`),
39
- },
40
- {
41
- key: 'ai',
42
- displayName: templateSettingsTr(`headerAi`),
43
- },
44
- ],
45
- cachedTemplates: {},
46
- }),
35
+ searchTerm: undefined,
36
+ selectedCategory: undefined,
37
+ templateCategories: [],
38
+ tabsWithTranslations: [
39
+ {
40
+ key: 'all',
41
+ displayName: templateSettingsTr(`headerAll`),
42
+ },
43
+ {
44
+ key: 'categories',
45
+ displayName: templateSettingsTr(`headerCategories`),
46
+ },
47
+ {
48
+ key: 'ai',
49
+ displayName: templateSettingsTr(`headerAi`),
50
+ },
51
+ ],
52
+ cachedTemplates: {},
53
+ logoChangeWatcherInitialized: false,
54
+ renderAsImage,
55
+ };
56
+ },
47
57
  actions: {
48
58
  _addTemplates({ templates }) {
49
59
  this.templates = this.templates.concat(templates);
@@ -132,6 +142,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
132
142
  async loadPageNo({ pageNo }) {
133
143
  const brandPageMakerStore = useBrandPageMakerStore();
134
144
  const brandPageContainerStore = useBrandPageContainerStore();
145
+ const brandPageMakerUserStore = useBrandPageMakerUserStore();
135
146
  const logoSettingsStore = useUiLogoSettingsStore();
136
147
  const designTemplateToken = brandPageContainerStore.designTemplateToken;
137
148
  if (brandPageMakerStore.isInitialising) {
@@ -163,6 +174,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
163
174
  categoryName: this.selectedCategory,
164
175
  searchTerm: this.searchTerm,
165
176
  logoDraftToken: logoSettingsStore.selectedLogoImage.logoDraftToken,
177
+ logoVariation: logoSettingsStore.selectedLogoImage.logoVariation,
166
178
  personalisable: this.selectedTab.key === TEMPLATE_TABS.AI,
167
179
  selectedTemplateToken: designTemplateToken,
168
180
  locale: currentLocale,
@@ -171,11 +183,39 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
171
183
  return;
172
184
  }
173
185
  this._setPageCount({ pageCount: result.pageCount });
174
- const templates = (await Promise.all(result.paginatedItems.map(async (i) => {
175
- const template = await designTemplateClient.getTemplateByTemplateToken(i.designTemplateToken);
176
- return this.safeMapToTemplateSettingsTemplate(template);
177
- }))).filter((t) => Boolean(t));
178
- this._addTemplates({ templates });
186
+ const templates = await Promise.all(result.paginatedItems.map(async (item) => {
187
+ try {
188
+ if (brandPageContainerStore.isPrePurchase ||
189
+ brandPageMakerUserStore.isAdmin) {
190
+ // Pre-purchase: full template with brandPageModel for live rendering
191
+ const template = await designTemplateClient.getTemplateByTemplateToken(item.designTemplateToken);
192
+ return this.safeMapToTemplateSettingsTemplate(template);
193
+ }
194
+ else {
195
+ let personalisationContentIndex;
196
+ let contentKey;
197
+ if (uiStore.personalisationData?.length) {
198
+ personalisationContentIndex =
199
+ await getAiContentIndexByTemplateTokenAndNumberOfVariations(item.designTemplateToken, uiStore.personalisationData.length);
200
+ // Get the contentKey from the selected personalisation variation
201
+ // This is needed for the backend preview URL to show the correct variation
202
+ const selectedPersonalisation = uiStore.personalisationData[personalisationContentIndex];
203
+ contentKey = selectedPersonalisation.contentKey;
204
+ }
205
+ return {
206
+ id: item.designTemplateToken,
207
+ contentKey,
208
+ previewImageUrl: item.previewImageUrl,
209
+ };
210
+ }
211
+ }
212
+ catch (error) {
213
+ return null;
214
+ }
215
+ }));
216
+ // Filter out null templates before adding
217
+ const validTemplates = templates.filter((t) => t !== null);
218
+ this._addTemplates({ templates: validTemplates });
179
219
  this._setPageNoLoaded({ pageNoLoaded: pageNo });
180
220
  }
181
221
  finally {
@@ -244,6 +284,10 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
244
284
  throw new Error('templateType should not be falsy');
245
285
  }
246
286
  this.templateType = templateType;
287
+ if (!this.logoChangeWatcherInitialized) {
288
+ this.setupLogoChangeWatcher();
289
+ this.logoChangeWatcherInitialized = true;
290
+ }
247
291
  },
248
292
  async setTemplateCategories(payload) {
249
293
  await this._setTemplateCategories({
@@ -270,5 +314,35 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
270
314
  getTemplateByTemplateId(id) {
271
315
  return (this.templates.find((t) => t.id === id) || this.cachedTemplates[id]);
272
316
  },
317
+ /**
318
+ * re-fetch templates when the logo changes to regenerate preview images with the new logo.
319
+ */
320
+ setupLogoChangeWatcher() {
321
+ const logoSettingsStore = useUiLogoSettingsStore();
322
+ const brandPageContainerStore = useBrandPageContainerStore();
323
+ const brandPageMakerUserStore = useBrandPageMakerUserStore();
324
+ const { selectedLogoImage } = storeToRefs(logoSettingsStore);
325
+ // Watch for changes to logoImage (token or variation changes)
326
+ watch(() => selectedLogoImage.value, async (newLogoImage, oldLogoImage) => {
327
+ // Skip initial load when oldLogoImage is undefined
328
+ if (!oldLogoImage) {
329
+ return;
330
+ }
331
+ // Only refetch for post-purchase users and when logo actually changes
332
+ const hasLogoChanged = newLogoImage.logoDraftToken !== oldLogoImage.logoDraftToken ||
333
+ newLogoImage.logoVariation !== oldLogoImage.logoVariation;
334
+ if (!brandPageContainerStore.isPrePurchase &&
335
+ !brandPageMakerUserStore.isAdmin &&
336
+ newLogoImage.logoDraftToken &&
337
+ hasLogoChanged) {
338
+ // Reset templates state and reload with new logo
339
+ // Use the same pattern as onCategorySelected and onSearch
340
+ await this._setTemplates({ templates: [] });
341
+ await this._setPageNoLoaded({ pageNoLoaded: 0 });
342
+ await this._setPageNo({ pageNo: 1 });
343
+ await this.loadPageNo({ pageNo: 1 });
344
+ }
345
+ }, { deep: true });
346
+ },
273
347
  },
274
348
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "5.16.2",
4
+ "version": "5.16.3-background-1",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -99,16 +99,21 @@ export default defineComponent({
99
99
 
100
100
  backgroundShapes(): BackgroundShape[] {
101
101
  const backgroundShapes: BackgroundShape[] = [
102
- ...(this.viewModel?.styles?.backgroundStyles?.backgroundShapes || []),
102
+ ...(this.viewModel?.styles?.backgroundStylesViewModel
103
+ ?.backgroundShapes || []),
103
104
  ];
104
105
 
105
106
  // TODO: create style viewmodel object to include backgroundImageContent attribute only on viewmodel
106
107
  // p.s backgroundImageUrl can be url or SVG content string
107
- if (this.viewModel.styles?.backgroundStyles?.backgroundImageUrl) {
108
+ if (
109
+ this.viewModel.styles?.backgroundStylesViewModel?.backgroundImageUrl
110
+ ) {
108
111
  backgroundShapes.splice(0, 0, {
109
- name: this.viewModel.styles.backgroundStyles.backgroundImageUrl,
112
+ name: this.viewModel.styles.backgroundStylesViewModel
113
+ .backgroundImageUrl,
110
114
  style: {
111
- ...this.viewModel.styles.backgroundStyles.backgroundShapeStyle,
115
+ ...this.viewModel.styles.backgroundStylesViewModel
116
+ .backgroundShapeStyle,
112
117
  width: `100%`,
113
118
  height: `100%`,
114
119
  },
@@ -122,11 +127,12 @@ export default defineComponent({
122
127
  let styles: BrandPageCssStyle = {};
123
128
 
124
129
  if (
125
- !this.viewModel?.styles?.backgroundStyles?.backgroundImageUrl &&
126
- this.viewModel?.styles?.backgroundStyles?.style
130
+ !this.viewModel?.styles?.backgroundStylesViewModel
131
+ ?.backgroundImageUrl &&
132
+ this.viewModel?.styles?.backgroundStylesViewModel?.style
127
133
  ) {
128
134
  styles = {
129
- ...this.viewModel?.styles?.backgroundStyles?.style,
135
+ ...this.viewModel?.styles?.backgroundStylesViewModel?.style,
130
136
  };
131
137
  }
132
138
 
@@ -149,38 +155,41 @@ export default defineComponent({
149
155
  },
150
156
 
151
157
  rootBackgroundStyles(): BrandPageCssStyle {
158
+ console.log('vm styles ', this.viewModel.styles);
152
159
  const styles: BrandPageCssStyle = {
153
- ...(this.viewModel?.styles?.backgroundStyles?.style || {}),
160
+ ...(this.viewModel?.styles?.backgroundStylesViewModel?.style || {}),
154
161
  };
155
162
 
156
163
  delete styles.backgroundAttachment;
157
164
 
158
165
  if (
159
- this.viewModel.styles?.backgroundStyles?.backgroundImageUrl &&
160
- (this.viewModel.styles.backgroundStyles.backgroundImageUrl.endsWith(
166
+ this.viewModel.styles?.backgroundStylesViewModel?.backgroundImageUrl &&
167
+ (this.viewModel.styles.backgroundStylesViewModel.backgroundImageUrl.endsWith(
161
168
  `.svg`,
162
169
  ) ||
163
- !this.viewModel.styles?.backgroundStyles?.backgroundImageUrl.startsWith(
170
+ !this.viewModel.styles?.backgroundStylesViewModel?.backgroundImageUrl.startsWith(
164
171
  'http',
165
172
  ))
166
173
  ) {
167
174
  // Any backgroundImageUrl that handles svg file, svg markup is handled as BackgroundShape object
168
175
  delete styles.backgroundImage;
169
- } else if (this.viewModel?.styles?.backgroundStyles?.backgroundImageUrl) {
176
+ } else if (
177
+ this.viewModel?.styles?.backgroundStylesViewModel?.backgroundImageUrl
178
+ ) {
170
179
  // if background is a gradient
171
180
  if (
172
- this.viewModel?.styles?.backgroundStyles?.style?.background?.startsWith(
181
+ this.viewModel?.styles?.backgroundStylesViewModel?.style?.background?.startsWith(
173
182
  'linear-gradient',
174
183
  )
175
184
  ) {
176
185
  // combine image and gradient into the `background` property
177
- styles.backgroundImage = `url(${this.viewModel?.styles?.backgroundStyles?.backgroundImageUrl}), ${this.viewModel?.styles?.backgroundStyles?.style?.background}`;
186
+ styles.backgroundImage = `url(${this.viewModel?.styles?.backgroundStylesViewModel?.backgroundImageUrl}), ${this.viewModel?.styles?.backgroundStylesViewModel?.style?.background}`;
178
187
 
179
188
  delete styles.background;
180
189
  } else {
181
190
  // background is a solid color
182
191
  styles.backgroundColor = styles.background;
183
- styles.backgroundImage = `url(${this.viewModel?.styles?.backgroundStyles?.backgroundImageUrl})`;
192
+ styles.backgroundImage = `url(${this.viewModel?.styles?.backgroundStylesViewModel?.backgroundImageUrl})`;
184
193
 
185
194
  delete styles.background;
186
195
  }