@designcrowd/library.brand-page 5.18.4 → 5.18.5

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 (162) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DQLtpdLe.js → CreatedOnBrandCrowd-de-de-ciKpCAd9.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-CvEhlADd.js → CreatedOnBrandCrowd-en-us-CZbTS1AZ.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-pYQeTTC0.js → CreatedOnBrandCrowd-es-es-C8MExng5.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CcE-iCEq.js → CreatedOnBrandCrowd-fr-ca-CO0L9NK2.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CcE-iCEq.js → CreatedOnBrandCrowd-fr-fr-CO0L9NK2.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-OyhWWWyO.js → CreatedOnBrandCrowd-pt-br-zVDvBF2H.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-OyhWWWyO.js → CreatedOnBrandCrowd-pt-pt-zVDvBF2H.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-DH98FFLS.js → CreatedOnDcom-de-de-WrUSQdjf.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DK67NN1r.js → CreatedOnDcom-en-us-BqC9YtkL.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-9-QU4BU6.js → CreatedOnDcom-es-es-BzH32Oya.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-U9J9H9VB.js → CreatedOnDcom-fr-ca-D7TYfCW0.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DqdzB1DJ.js → CreatedOnDcom-fr-fr-DVlyfBtb.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-c4UiWtkB.js → CreatedOnDcom-pt-br-CSRB91ey.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-Do2qJsYp.js → CreatedOnDcom-pt-pt-9KMj5gpc.js} +1 -1
  15. package/lib/src/brand-page/models/navigation-styles.model.d.ts +7 -0
  16. package/lib/src/brand-page/models/navigation-styles.model.js +25 -2
  17. package/lib/src/brand-page/utils/migration/migration-16.d.ts +2 -0
  18. package/lib/src/brand-page/utils/migration/migration-16.js +47 -0
  19. package/lib/src/brand-page/utils/migration.util.js +7 -0
  20. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +7 -2
  21. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +7 -2
  22. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +8 -0
  23. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +7 -2
  24. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.js +1 -0
  25. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +87 -2
  26. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.js +5 -0
  27. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +7 -2
  28. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +3 -0
  29. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.js +11 -0
  30. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +7 -2
  31. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +7 -2
  32. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +7 -2
  33. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +7 -2
  34. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +9 -0
  35. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +20 -1
  36. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +20 -0
  37. package/lib/src/brand-page-maker/composables/useEventTracker.js +17 -0
  38. package/lib/src/brand-page-maker/composables/useUndoRedoFlag.d.ts +17 -0
  39. package/lib/src/brand-page-maker/composables/useUndoRedoFlag.js +25 -0
  40. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +41 -2
  41. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +308 -14
  42. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +83 -0
  43. package/lib/src/brand-page-maker/stores/history/history-store.js +495 -0
  44. package/lib/src/brand-page-maker/stores/logo-store/logo-store.d.ts +1 -0
  45. package/lib/src/brand-page-maker/stores/user/user-store.js +1 -0
  46. package/lib/src/bundled-translations-D1q3rSEz.js +175 -0
  47. package/lib/src/bundled-translations.de-DE-BxqLLwbh.js +175 -0
  48. package/lib/src/bundled-translations.es-ES-uh249NlJ.js +175 -0
  49. package/lib/src/bundled-translations.fr-CA-BEQmv2fX.js +175 -0
  50. package/lib/src/bundled-translations.fr-FR-BnNuCojH.js +175 -0
  51. package/lib/src/bundled-translations.pt-BR-CJUOxVlq.js +175 -0
  52. package/lib/src/bundled-translations.pt-PT-Ds9cMEqK.js +175 -0
  53. package/lib/src/bundles/bundled-translations.de-DE.json +3 -1
  54. package/lib/src/bundles/bundled-translations.es-ES.json +3 -1
  55. package/lib/src/bundles/bundled-translations.fr-CA.json +3 -1
  56. package/lib/src/bundles/bundled-translations.fr-FR.json +3 -1
  57. package/lib/src/bundles/bundled-translations.json +3 -1
  58. package/lib/src/bundles/bundled-translations.pt-BR.json +3 -1
  59. package/lib/src/bundles/bundled-translations.pt-PT.json +3 -1
  60. package/lib/src/constants/ui.d.ts +1 -0
  61. package/lib/src/css/library.brand-page-brandCrowd.min.css +77 -82
  62. package/lib/src/css/library.brand-page-brandPage.min.css +77 -83
  63. package/lib/src/css/library.brand-page-designCom.min.css +77 -82
  64. package/lib/src/css/library.brand-page-preview.min.css +77 -82
  65. package/lib/src/index.mjs +62 -60
  66. package/lib/src/{lib-BI3J4Mbk.js → lib-BXbo_N88.js} +35072 -34447
  67. package/lib/src/metadata-builder/builders/reorder-pages-builder.d.ts +13 -0
  68. package/lib/src/metadata-builder/builders/reorder-pages-builder.js +49 -0
  69. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +87 -2
  70. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +5 -0
  71. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.stories.js +1 -0
  72. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +23 -2
  73. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +16 -0
  74. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +7 -2
  75. package/lib/src/shared/content-settings/components/draggable-item-list/DraggableItemList.mixin.d.ts +3 -0
  76. package/lib/src/shared/content-settings/components/draggable-item-list/DraggableItemList.mixin.js +19 -2
  77. package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.js +18 -8
  78. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +64 -0
  79. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.js +6 -0
  80. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +19 -0
  81. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +11 -0
  82. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +10 -2
  83. package/lib/src/shared/logo-settings/store/editable-logo-store.d.ts +5 -1
  84. package/lib/src/shared/logo-settings/store/editable-logo-store.js +31 -0
  85. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +10 -8
  86. package/lib/src/shared/navigation-style-settings/store/index.js +1 -12
  87. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +24 -2
  88. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +10 -2
  89. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +23 -2
  90. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +16 -0
  91. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +23 -2
  92. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +16 -0
  93. package/package.json +1 -1
  94. package/src/brand-page/components/button/Button.vue +2 -10
  95. package/src/brand-page/components/contact-form/ContactForm.vue +2 -2
  96. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue +4 -1
  97. package/src/brand-page/models/navigation-styles.model.ts +39 -1
  98. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -3
  99. package/src/brand-page/utils/migration/migration-16.test.ts +319 -0
  100. package/src/brand-page/utils/migration/migration-16.ts +75 -0
  101. package/src/brand-page/utils/migration.util.ts +8 -0
  102. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +9 -0
  103. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +2 -3
  104. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +1 -0
  105. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.ts +5 -0
  106. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +9 -7
  107. package/src/brand-page-maker/components/cookie-collection/CookieSettings.vue +18 -17
  108. package/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.ts +13 -0
  109. package/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.vue +26 -3
  110. package/src/brand-page-maker/components/quick-link-bar/RedoButton.vue +66 -0
  111. package/src/brand-page-maker/components/quick-link-bar/UndoButton.vue +66 -0
  112. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.de-DE.json +6 -4
  113. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.es-ES.json +6 -4
  114. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.fr-CA.json +6 -4
  115. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.fr-FR.json +6 -4
  116. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.json +3 -1
  117. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.pt-BR.json +6 -4
  118. package/src/brand-page-maker/components/quick-link-bar/i18n/quick-link-bar.pt-PT.json +6 -4
  119. package/src/brand-page-maker/components/quick-link-bar/undo-redo-buttons.test.ts +116 -0
  120. package/src/brand-page-maker/components/save-contact/SaveContact.vue +12 -19
  121. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +10 -0
  122. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +24 -1
  123. package/src/brand-page-maker/composables/useEventTracker.ts +29 -0
  124. package/src/brand-page-maker/composables/useUndoRedoFlag.ts +30 -0
  125. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +377 -0
  126. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +371 -18
  127. package/src/brand-page-maker/stores/history/history-store.test.ts +1120 -0
  128. package/src/brand-page-maker/stores/history/history-store.ts +660 -0
  129. package/src/brand-page-maker/stores/logo-store/logo-store.ts +5 -0
  130. package/src/brand-page-maker/stores/user/user-store.ts +1 -0
  131. package/src/bundles/bundled-translations.de-DE.json +3 -1
  132. package/src/bundles/bundled-translations.es-ES.json +3 -1
  133. package/src/bundles/bundled-translations.fr-CA.json +3 -1
  134. package/src/bundles/bundled-translations.fr-FR.json +3 -1
  135. package/src/bundles/bundled-translations.json +3 -1
  136. package/src/bundles/bundled-translations.pt-BR.json +3 -1
  137. package/src/bundles/bundled-translations.pt-PT.json +3 -1
  138. package/src/constants/ui.ts +1 -0
  139. package/src/metadata-builder/builders/reorder-pages-builder.ts +80 -0
  140. package/src/shared/content-settings/components/color-field/ColorField.vue +10 -5
  141. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +5 -0
  142. package/src/shared/content-settings/components/content-settings/ContentSettings.stories.ts +1 -0
  143. package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.mixin.ts +19 -2
  144. package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.vue +1 -1
  145. package/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.ts +26 -10
  146. package/src/shared/content-settings/components/logo-selection-field/LogoSelection.vue +63 -48
  147. package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +4 -0
  148. package/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.ts +7 -0
  149. package/src/shared/content-settings/components/text-field/TextField.vue +1 -0
  150. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +33 -4
  151. package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +11 -0
  152. package/src/shared/logo-settings/store/editable-logo-store.ts +42 -1
  153. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +17 -11
  154. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +4 -1
  155. package/src/shared/navigation-style-settings/store/index.ts +1 -21
  156. package/lib/src/bundled-translations-B5Fkt3qd.js +0 -175
  157. package/lib/src/bundled-translations.de-DE-DpdVePM9.js +0 -175
  158. package/lib/src/bundled-translations.es-ES-BsIcrzZF.js +0 -175
  159. package/lib/src/bundled-translations.fr-CA-G1XCp2Qh.js +0 -175
  160. package/lib/src/bundled-translations.fr-FR-BdwLXOnB.js +0 -175
  161. package/lib/src/bundled-translations.pt-BR-Bvn5ePe7.js +0 -175
  162. package/lib/src/bundled-translations.pt-PT-CDtkb2k1.js +0 -175
@@ -74,8 +74,9 @@ export interface EditableLogoState {
74
74
  logoTemplateMetadata: string;
75
75
  isLogoDraftSaved: boolean;
76
76
  isTextOnlyLogo: boolean;
77
+ variationsByDraftToken: Record<string, EditableLogoVariation[]>;
77
78
  }
78
- export type SetStateAsyncPayload = Omit<EditableLogoState, 'enableEditMode' | 'editableLogoVariations'>;
79
+ export type SetStateAsyncPayload = Omit<EditableLogoState, 'enableEditMode' | 'editableLogoVariations' | 'variationsByDraftToken'>;
79
80
  export declare const useUiEditableLogoStore: import("pinia").StoreDefinition<"uiEditableLogo", EditableLogoState, {
80
81
  getLogoPrimaryText: (state: {
81
82
  enableEditMode: boolean;
@@ -167,6 +168,7 @@ export declare const useUiEditableLogoStore: import("pinia").StoreDefinition<"ui
167
168
  logoTemplateMetadata: string;
168
169
  isLogoDraftSaved: boolean;
169
170
  isTextOnlyLogo: boolean;
171
+ variationsByDraftToken: Record<string, EditableLogoVariation[]>;
170
172
  } & import("pinia").PiniaCustomStateProperties<EditableLogoState>) => () => string | undefined;
171
173
  }, {
172
174
  setStateAsync(payload: {
@@ -184,6 +186,8 @@ export declare const useUiEditableLogoStore: import("pinia").StoreDefinition<"ui
184
186
  getEditableLogoVariationByVariationId(id: number): any;
185
187
  getEditableLogoVariationByBase64(base64: string): any;
186
188
  updateEditableLogoImageUrlAsync(defaultPrimaryText?: string, overrideLogoVariation?: number | undefined, layout?: string): Promise<void>;
189
+ stampLogoBase64IntoBrandPageData(overrideLogoVariation?: number): void;
190
+ restoreVariationsForDraftToken(logoDraftToken: string): boolean;
187
191
  updateMetadataAsync(defaultPrimaryText?: string, resetLogoTemplateMetadata?: boolean, layout?: string): Promise<void>;
188
192
  updateEditableLogoImageByVariationAsync(editableLogoVariation: EditableLogoVariation, defaultPrimaryText?: string, layout?: string): Promise<ModifyLogoDataResponse | null>;
189
193
  getDraftMetadata(logoDraftToken: string): string | undefined;
@@ -74,6 +74,7 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
74
74
  },
75
75
  makerFonts: [],
76
76
  isLogoDraftSaved: false,
77
+ variationsByDraftToken: {},
77
78
  }),
78
79
  actions: {
79
80
  async setStateAsync(payload) {
@@ -217,6 +218,17 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
217
218
  async updateEditableLogoImageUrlAsync(defaultPrimaryText, overrideLogoVariation, layout) {
218
219
  const tasks = this.editableLogoVariations.map((x) => this.updateEditableLogoImageByVariationAsync(x, defaultPrimaryText, layout));
219
220
  await Promise.all(tasks);
221
+ this.stampLogoBase64IntoBrandPageData(overrideLogoVariation);
222
+ // Cache per draft token so BYO undo can restore without re-rendering.
223
+ if (this.logoDraftToken) {
224
+ this.variationsByDraftToken[this.logoDraftToken] =
225
+ this.editableLogoVariations.map((v) => ({ ...v }));
226
+ }
227
+ },
228
+ // Stamp editableLogoVariations[*].base64 across header/footer + every
229
+ // LogoContent. Called by the live edit path post-render, and by
230
+ // undo/redo to repopulate the stripped logoImageBase64Url fields.
231
+ stampLogoBase64IntoBrandPageData(overrideLogoVariation) {
220
232
  const pageSettingStore = useUiPageSettingsStore();
221
233
  [PAGE_SECTIONS.header, PAGE_SECTIONS.footer].forEach((section) => {
222
234
  [VIEWPORTS.desktop, VIEWPORTS.mobile].forEach((viewport) => {
@@ -243,6 +255,15 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
243
255
  });
244
256
  });
245
257
  },
258
+ // Restore variations grid for a draft token from the per-token cache.
259
+ // Returns true on cache hit.
260
+ restoreVariationsForDraftToken(logoDraftToken) {
261
+ const cached = this.variationsByDraftToken[logoDraftToken];
262
+ if (!cached)
263
+ return false;
264
+ this.editableLogoVariations = cached.map((v) => ({ ...v }));
265
+ return true;
266
+ },
246
267
  async updateMetadataAsync(defaultPrimaryText, resetLogoTemplateMetadata = false, layout) {
247
268
  const result = await this.postEditableLogoRequestAsync({
248
269
  returnJson: true,
@@ -285,6 +306,13 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
285
306
  const logoDraft = logoStore.getLogoDraftAssetByToken(this.logoDraftToken);
286
307
  if (logoDraft) {
287
308
  logoDraft.metadata = metadata;
309
+ // Refresh the template-asset stamp in case the active asset has
310
+ // changed since this draft was first registered (e.g. successive
311
+ // BYO uploads that share an existing draft token would otherwise
312
+ // keep pointing at an older template).
313
+ if (logoStore.logoTemplateAsset) {
314
+ logoDraft.templateAsset = { ...logoStore.logoTemplateAsset };
315
+ }
288
316
  }
289
317
  else {
290
318
  logoStore.addLogoDraftAsset({
@@ -293,6 +321,9 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
293
321
  metadata,
294
322
  tick: Date.now(),
295
323
  isByo: logoStore.logoTemplateAsset?.isByo || false,
324
+ templateAsset: logoStore.logoTemplateAsset
325
+ ? { ...logoStore.logoTemplateAsset }
326
+ : undefined,
296
327
  },
297
328
  });
298
329
  }
@@ -31,17 +31,19 @@ export default defineComponent({
31
31
  computed: {
32
32
  colorPickerValue() {
33
33
  return (option) => {
34
- return this.valueFuncDict[option]()
35
- ? RGBAtoHex(this.valueFuncDict[option]())
36
- : '';
34
+ const raw = this.valueFuncDict[option]();
35
+ if (raw) {
36
+ return RGBAtoHex(raw);
37
+ }
38
+ if (option === 'defaultBackgroundColor' ||
39
+ option === 'selectedBackgroundColor') {
40
+ return 'transparent';
41
+ }
42
+ return '';
37
43
  };
38
44
  },
39
45
  navigationStyleOptions() {
40
- const options = this.availableNavigationStyleConfigs.find((c) => c.displayType === this.value.displayType)?.options ?? [];
41
- if (!this.isAdmin && this.value.displayType.includes('hamburger')) {
42
- return options.filter((o) => o !== 'subNavBackgroundColor');
43
- }
44
- return options;
46
+ return (this.availableNavigationStyleConfigs.find((c) => c.displayType === this.value.displayType)?.options ?? []);
45
47
  },
46
48
  isOptionColorMatched() {
47
49
  return (option) => {
@@ -1,5 +1,5 @@
1
1
  import { NavigationDesktop, NavigationMobile, VIEWPORTS } from '@brand-page';
2
- import { NAVIGATION_DISPLAY, DEFAULT_TEXT_ALIGN, STYLE_THEME_KEYS, } from '@brand-page';
2
+ import { NAVIGATION_DISPLAY, DEFAULT_TEXT_ALIGN, getDefaultSubNavBackgroundColor, } from '@brand-page';
3
3
  import { getThemeByTextStyleAndLogoTheme } from '@brand-page/utils/color.util';
4
4
  import { availableNavigationStyleConfigs, navigationStyleTypeConfigs, } from '@brand-page-maker/models/navigation-style-configs';
5
5
  import { assertUnreachable } from '../../../helpers/ts.helper';
@@ -7,17 +7,6 @@ import { defineStore } from 'pinia';
7
7
  import { useUiStore } from '@brand-page-maker/stores';
8
8
  import { useUiStyleSettingsStore } from '../../style-settings/store';
9
9
  import { PAGE_SECTIONS } from '../../page-settings/models';
10
- const getDefaultSubNavBackgroundColor = (defaultTextColor) => {
11
- if (defaultTextColor === STYLE_THEME_KEYS.LogoTextColor ||
12
- defaultTextColor === STYLE_THEME_KEYS.LogoTextMultiColor) {
13
- return STYLE_THEME_KEYS.LogoBackgroundColor;
14
- }
15
- if (defaultTextColor === STYLE_THEME_KEYS.LogoBackgroundColor ||
16
- defaultTextColor === STYLE_THEME_KEYS.LogoBackgroundMultiColor) {
17
- return STYLE_THEME_KEYS.LogoTextColor;
18
- }
19
- return undefined;
20
- };
21
10
  export const createDefaultContentItemState = () => ({
22
11
  isCollapsed: true,
23
12
  groups: {},
@@ -3124,6 +3124,7 @@ declare const _default: import("vue").DefineComponent<{}, {
3124
3124
  canUseGettyVideos: boolean;
3125
3125
  canUseGoogleAdsense: boolean;
3126
3126
  googleAdsenseEnabled: boolean;
3127
+ canUseUndoRedo: boolean;
3127
3128
  }>;
3128
3129
  isAdmin: import("vue").ComputedRef<boolean>;
3129
3130
  isBrandSite: import("vue").ComputedRef<boolean>;
@@ -3835,16 +3836,21 @@ declare const _default: import("vue").DefineComponent<{}, {
3835
3836
  hideChangeTemplateConfirmModal(): void;
3836
3837
  onBackgroundChanged(): void;
3837
3838
  onChangeTemplateConfirmModalCancel(): void;
3838
- onChangeTemplateConfirmModalConfirm(): void;
3839
+ onChangeTemplateConfirmModalConfirm(): Promise<void>;
3839
3840
  onContentChanged(): void;
3840
3841
  onStyleChanged(): void;
3841
- onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): void;
3842
+ onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): Promise<void>;
3842
3843
  setSelectedTabName(payload: any): void;
3843
3844
  showNextNotificationMessage(): Promise<void>;
3844
3845
  updateContent<TContent extends Content, P extends {
3845
3846
  id: string;
3846
3847
  content: TContent;
3847
3848
  }>(payload: P): Promise<void>;
3849
+ _captureTemplateSwitchIfEnabled(): void;
3850
+ applyHistorySnapshot(snapshot: import("@brand-page").BrandPageModel, activePageId?: string | undefined, logoEditsStr?: string | undefined): Promise<void>;
3851
+ _syncLogoSettingsFromSnapshot(snapshot: import("@brand-page").BrandPageModel, logoEditsStr?: string | undefined): Promise<void>;
3852
+ _navigateToActivePage(activePageId?: string | undefined): void;
3853
+ _fallbackSidebarIfSelectedContentMissing(snapshot: import("@brand-page").BrandPageModel): void;
3848
3854
  export(): import("@brand-page").BrandPageModel;
3849
3855
  setBrandPageType({ brandPageType }: {
3850
3856
  brandPageType: "default" | "brandSite" | "brandContact";
@@ -4787,6 +4793,22 @@ declare const _default: import("vue").DefineComponent<{}, {
4787
4793
  onDraggingEnd: (ev?: any, routeId?: string, previousParentRouteId?: string) => void;
4788
4794
  eventTracker: {
4789
4795
  sendShippingToggleEvent: (isEnabled: boolean) => void;
4796
+ sendUndoEvent: (props: {
4797
+ entries_count: number;
4798
+ actor: string | undefined;
4799
+ }) => void;
4800
+ sendRedoEvent: (props: {
4801
+ entries_count: number;
4802
+ actor: string | undefined;
4803
+ }) => void;
4804
+ sendHistoryCappedEvent: (props: {
4805
+ entries_count: number;
4806
+ size_bytes: number;
4807
+ }) => void;
4808
+ sendHistoryOversizedEvent: (props: {
4809
+ attempted_bytes: number;
4810
+ source: string;
4811
+ }) => void;
4790
4812
  sendSaveContactEvent: () => void;
4791
4813
  sendStartForFreeEvent: () => void;
4792
4814
  sendFooterLinkClickEvent: (linkType: "watermark_logo" | "create_your_website") => void;
@@ -4269,6 +4269,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4269
4269
  logoTemplateMetadata: string;
4270
4270
  isLogoDraftSaved: boolean;
4271
4271
  isTextOnlyLogo: boolean;
4272
+ variationsByDraftToken: Record<string, import("@shared/logo-settings/store").EditableLogoVariation[]>;
4272
4273
  } & import("pinia").PiniaCustomStateProperties<import("@shared/logo-settings/store").EditableLogoState>) => () => string | undefined;
4273
4274
  }, {
4274
4275
  setStateAsync(payload: {
@@ -4286,6 +4287,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4286
4287
  getEditableLogoVariationByVariationId(id: number): any;
4287
4288
  getEditableLogoVariationByBase64(base64: string): any;
4288
4289
  updateEditableLogoImageUrlAsync(defaultPrimaryText?: string | undefined, overrideLogoVariation?: number | undefined, layout?: string | undefined): Promise<void>;
4290
+ stampLogoBase64IntoBrandPageData(overrideLogoVariation?: number | undefined): void;
4291
+ restoreVariationsForDraftToken(logoDraftToken: string): boolean;
4289
4292
  updateMetadataAsync(defaultPrimaryText?: string | undefined, resetLogoTemplateMetadata?: boolean, layout?: string | undefined): Promise<void>;
4290
4293
  updateEditableLogoImageByVariationAsync(editableLogoVariation: import("@shared/logo-settings/store").EditableLogoVariation, defaultPrimaryText?: string | undefined, layout?: string | undefined): Promise<import("../../../../clients/fabric-render-client").ModifyLogoDataResponse | null>;
4291
4294
  getDraftMetadata(logoDraftToken: string): string | undefined;
@@ -4393,16 +4396,21 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4393
4396
  hideChangeTemplateConfirmModal(): void;
4394
4397
  onBackgroundChanged(): void;
4395
4398
  onChangeTemplateConfirmModalCancel(): void;
4396
- onChangeTemplateConfirmModalConfirm(): void;
4399
+ onChangeTemplateConfirmModalConfirm(): Promise<void>;
4397
4400
  onContentChanged(): void;
4398
4401
  onStyleChanged(): void;
4399
- onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): void;
4402
+ onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): Promise<void>;
4400
4403
  setSelectedTabName(payload: any): void;
4401
4404
  showNextNotificationMessage(): Promise<void>;
4402
4405
  updateContent<TContent extends import("@brand-page").Content, P extends {
4403
4406
  id: string;
4404
4407
  content: TContent;
4405
4408
  }>(payload: P): Promise<void>;
4409
+ _captureTemplateSwitchIfEnabled(): void;
4410
+ applyHistorySnapshot(snapshot: import("@brand-page").BrandPageModel, activePageId?: string | undefined, logoEditsStr?: string | undefined): Promise<void>;
4411
+ _syncLogoSettingsFromSnapshot(snapshot: import("@brand-page").BrandPageModel, logoEditsStr?: string | undefined): Promise<void>;
4412
+ _navigateToActivePage(activePageId?: string | undefined): void;
4413
+ _fallbackSidebarIfSelectedContentMissing(snapshot: import("@brand-page").BrandPageModel): void;
4406
4414
  export(): import("@brand-page").BrandPageModel;
4407
4415
  setBrandPageType({ brandPageType }: {
4408
4416
  brandPageType: "default" | "brandSite" | "brandContact";
@@ -173,16 +173,21 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
173
173
  hideChangeTemplateConfirmModal(): void;
174
174
  onBackgroundChanged(): void;
175
175
  onChangeTemplateConfirmModalCancel(): void;
176
- onChangeTemplateConfirmModalConfirm(): void;
176
+ onChangeTemplateConfirmModalConfirm(): Promise<void>;
177
177
  onContentChanged(): void;
178
178
  onStyleChanged(): void;
179
- onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): void;
179
+ onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): Promise<void>;
180
180
  setSelectedTabName(payload: any): void;
181
181
  showNextNotificationMessage(): Promise<void>;
182
182
  updateContent<TContent extends import("@brand-page/models").Content, P extends {
183
183
  id: string;
184
184
  content: TContent;
185
185
  }>(payload: P): Promise<void>;
186
+ _captureTemplateSwitchIfEnabled(): void;
187
+ applyHistorySnapshot(snapshot: import("@brand-page/models").BrandPageModel, activePageId?: string | undefined, logoEditsStr?: string | undefined): Promise<void>;
188
+ _syncLogoSettingsFromSnapshot(snapshot: import("@brand-page/models").BrandPageModel, logoEditsStr?: string | undefined): Promise<void>;
189
+ _navigateToActivePage(activePageId?: string | undefined): void;
190
+ _fallbackSidebarIfSelectedContentMissing(snapshot: import("@brand-page/models").BrandPageModel): void;
186
191
  export(): import("@brand-page/models").BrandPageModel;
187
192
  setBrandPageType({ brandPageType }: {
188
193
  brandPageType: "default" | "brandSite" | "brandContact";
@@ -479,6 +484,22 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
479
484
  }>;
480
485
  eventTracker: {
481
486
  sendShippingToggleEvent: (isEnabled: boolean) => void;
487
+ sendUndoEvent: (props: {
488
+ entries_count: number;
489
+ actor: string | undefined;
490
+ }) => void;
491
+ sendRedoEvent: (props: {
492
+ entries_count: number;
493
+ actor: string | undefined;
494
+ }) => void;
495
+ sendHistoryCappedEvent: (props: {
496
+ entries_count: number;
497
+ size_bytes: number;
498
+ }) => void;
499
+ sendHistoryOversizedEvent: (props: {
500
+ attempted_bytes: number;
501
+ source: string;
502
+ }) => void;
482
503
  sendSaveContactEvent: () => void;
483
504
  sendStartForFreeEvent: () => void;
484
505
  sendFooterLinkClickEvent: (linkType: "watermark_logo" | "create_your_website") => void;
@@ -17,6 +17,22 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
17
17
  isDesignCom: import("vue").ComputedRef<boolean>;
18
18
  eventTracker: {
19
19
  sendShippingToggleEvent: (isEnabled: boolean) => void;
20
+ sendUndoEvent: (props: {
21
+ entries_count: number;
22
+ actor: string | undefined;
23
+ }) => void;
24
+ sendRedoEvent: (props: {
25
+ entries_count: number;
26
+ actor: string | undefined;
27
+ }) => void;
28
+ sendHistoryCappedEvent: (props: {
29
+ entries_count: number;
30
+ size_bytes: number;
31
+ }) => void;
32
+ sendHistoryOversizedEvent: (props: {
33
+ attempted_bytes: number;
34
+ source: string;
35
+ }) => void;
20
36
  sendSaveContactEvent: () => void;
21
37
  sendStartForFreeEvent: () => void;
22
38
  sendFooterLinkClickEvent: (linkType: "watermark_logo" | "create_your_website") => void;
@@ -565,16 +565,21 @@ declare const _default: import("vue").DefineComponent<{}, {
565
565
  hideChangeTemplateConfirmModal(): void;
566
566
  onBackgroundChanged(): void;
567
567
  onChangeTemplateConfirmModalCancel(): void;
568
- onChangeTemplateConfirmModalConfirm(): void;
568
+ onChangeTemplateConfirmModalConfirm(): Promise<void>;
569
569
  onContentChanged(): void;
570
570
  onStyleChanged(): void;
571
- onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): void;
571
+ onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): Promise<void>;
572
572
  setSelectedTabName(payload: any): void;
573
573
  showNextNotificationMessage(): Promise<void>;
574
574
  updateContent<TContent extends import("@brand-page").Content, P extends {
575
575
  id: string;
576
576
  content: TContent;
577
577
  }>(payload: P): Promise<void>;
578
+ _captureTemplateSwitchIfEnabled(): void;
579
+ applyHistorySnapshot(snapshot: import("@brand-page").BrandPageModel, activePageId?: string | undefined, logoEditsStr?: string | undefined): Promise<void>;
580
+ _syncLogoSettingsFromSnapshot(snapshot: import("@brand-page").BrandPageModel, logoEditsStr?: string | undefined): Promise<void>;
581
+ _navigateToActivePage(activePageId?: string | undefined): void;
582
+ _fallbackSidebarIfSelectedContentMissing(snapshot: import("@brand-page").BrandPageModel): void;
578
583
  export(): import("@brand-page").BrandPageModel;
579
584
  setBrandPageType({ brandPageType }: {
580
585
  brandPageType: "default" | "brandSite" | "brandContact";
@@ -915,6 +920,22 @@ declare const _default: import("vue").DefineComponent<{}, {
915
920
  }>;
916
921
  eventTracker: {
917
922
  sendShippingToggleEvent: (isEnabled: boolean) => void;
923
+ sendUndoEvent: (props: {
924
+ entries_count: number;
925
+ actor: string | undefined;
926
+ }) => void;
927
+ sendRedoEvent: (props: {
928
+ entries_count: number;
929
+ actor: string | undefined;
930
+ }) => void;
931
+ sendHistoryCappedEvent: (props: {
932
+ entries_count: number;
933
+ size_bytes: number;
934
+ }) => void;
935
+ sendHistoryOversizedEvent: (props: {
936
+ attempted_bytes: number;
937
+ source: string;
938
+ }) => void;
918
939
  sendSaveContactEvent: () => void;
919
940
  sendStartForFreeEvent: () => void;
920
941
  sendFooterLinkClickEvent: (linkType: "watermark_logo" | "create_your_website") => void;
@@ -565,6 +565,22 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
565
565
  isDesignCom: import("vue").ComputedRef<boolean>;
566
566
  eventTracker: {
567
567
  sendShippingToggleEvent: (isEnabled: boolean) => void;
568
+ sendUndoEvent: (props: {
569
+ entries_count: number;
570
+ actor: string | undefined;
571
+ }) => void;
572
+ sendRedoEvent: (props: {
573
+ entries_count: number;
574
+ actor: string | undefined;
575
+ }) => void;
576
+ sendHistoryCappedEvent: (props: {
577
+ entries_count: number;
578
+ size_bytes: number;
579
+ }) => void;
580
+ sendHistoryOversizedEvent: (props: {
581
+ attempted_bytes: number;
582
+ source: string;
583
+ }) => void;
568
584
  sendSaveContactEvent: () => void;
569
585
  sendStartForFreeEvent: () => void;
570
586
  sendFooterLinkClickEvent: (linkType: "watermark_logo" | "create_your_website") => void;
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.18.4",
4
+ "version": "5.18.5",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -253,21 +253,13 @@ const onCloseModal = (): void => {
253
253
  text-decoration: none;
254
254
  }
255
255
 
256
- /* Shape-library icons (vector, nested in .c-shape, no class on the img):
257
- render at the default icon size, centered in normal flow like the SVG icons. */
258
256
  .bp-button :deep(.c-button__icon-img img) {
259
257
  @apply tw-object-cover tw-max-w-none;
260
- width: var(--icon-w);
261
- height: var(--icon-h);
262
- }
263
-
264
- /* Raster image thumbnails (FallbackImage renders <img class="c-image">):
265
- render larger/prominent and centered over the icon slot. */
266
- .bp-button :deep(.c-button__icon-img img.c-image) {
267
258
  --icon-img-size: 2.3rem;
259
+ --icon-img-offset-x: calc((var(--button-p-x) - var(--button-p-y)) * 2);
268
260
  position: absolute;
269
261
  top: calc(var(--icon-img-size) / -2 + var(--icon-h) / 2);
270
- left: calc(var(--icon-img-size) / -2 + var(--icon-w) / 2);
262
+ left: calc(var(--icon-img-size) / -2 + var(--icon-img-offset-x));
271
263
  width: var(--icon-img-size);
272
264
  height: var(--icon-img-size);
273
265
  }
@@ -286,7 +286,7 @@
286
286
  {{ value.error }}
287
287
  </p>
288
288
  </div>
289
- <div class="tw-flex tw-w-full tw-justify-start tw-col-span-2">
289
+ <div class="tw-flex tw-w-full tw-justify-center tw-col-span-2">
290
290
  <button
291
291
  v-if="isSubmitButtonVisible"
292
292
  class="tw-block tw-border-0 tw-py-2 tw-select-none tw-text-base tw-text-center tw-w-fit hover:tw-cursor-pointer tw-px-8 tw-py-3 c-button-full"
@@ -417,7 +417,7 @@
417
417
  </p>
418
418
  </div>
419
419
  <div
420
- class="tw-flex tw-w-full tw-justify-start tw-col-span-2"
420
+ class="tw-flex tw-w-full tw-justify-center tw-col-span-2"
421
421
  >
422
422
  <button
423
423
  v-if="isSubmitButtonVisible"
@@ -119,7 +119,10 @@ export default {
119
119
  }
120
120
 
121
121
  .c-sidebar {
122
- @apply tw-h-full tw-fixed tw-inset-0 tw-bg-white tw-z-50 tw-transition-all tw-duration-300 tw-ease-out tw-w-80;
122
+ /* No hardcoded background: the panel background comes from the hamburger
123
+ defaultButtonStyle (bound via :style), so a transparent/unset default bg
124
+ renders transparent instead of being forced white */
125
+ @apply tw-h-full tw-fixed tw-inset-0 tw-z-50 tw-transition-all tw-duration-300 tw-ease-out tw-w-80;
123
126
  max-width: 66%;
124
127
  }
125
128
 
@@ -6,6 +6,7 @@ import {
6
6
  FONT_FAMILY_CONFIGS,
7
7
  FONT_SIZE_BODY,
8
8
  FONT_WEIGHT_NORMAL,
9
+ STYLE_THEME_KEYS,
9
10
  defaultHamburgerNavigation,
10
11
  type NavigationDisplayType,
11
12
  NAVIGATION_DISPLAY,
@@ -50,6 +51,43 @@ export class NavigationMenuStyles {
50
51
  }
51
52
  }
52
53
 
54
+ export const getDefaultSubNavBackgroundColor = (
55
+ defaultTextColor: string | undefined,
56
+ ): string | undefined => {
57
+ if (
58
+ defaultTextColor === STYLE_THEME_KEYS.LogoTextColor ||
59
+ defaultTextColor === STYLE_THEME_KEYS.LogoTextMultiColor
60
+ ) {
61
+ return STYLE_THEME_KEYS.LogoBackgroundColor;
62
+ }
63
+
64
+ if (
65
+ defaultTextColor === STYLE_THEME_KEYS.LogoBackgroundColor ||
66
+ defaultTextColor === STYLE_THEME_KEYS.LogoBackgroundMultiColor
67
+ ) {
68
+ return STYLE_THEME_KEYS.LogoTextColor;
69
+ }
70
+
71
+ return undefined;
72
+ };
73
+
74
+ /**
75
+ * The hamburger sub nav background colour is auto color-matched only when the
76
+ * user has not deliberately set it - i.e. it has no value or is transparent.
77
+ * Any explicit colour (a hex) or an already color-matched key is preserved.
78
+ */
79
+ export const isUnsetOrTransparentColor = (
80
+ color: string | undefined | null,
81
+ ): boolean => {
82
+ if (color == null) {
83
+ return true;
84
+ }
85
+
86
+ const normalised = color.trim().toLowerCase();
87
+
88
+ return normalised === '' || normalised === 'transparent';
89
+ };
90
+
53
91
  type NavigationStylesOptionType = Partial<
54
92
  Omit<NavigationDesktop | NavigationMobile, 'hamburgerMenuStyle'>
55
93
  > & {
@@ -148,7 +186,7 @@ abstract class NavigationStyles implements NavigationMenuStyles {
148
186
  color: theme?.secondaryColor,
149
187
  backgroundColor: theme?.primaryColor,
150
188
  },
151
- subNavBackgroundColor: theme?.secondaryColor,
189
+ // No sub nav default: a hex here defeats migration-16's colour match.
152
190
  },
153
191
  );
154
192
  }
@@ -454,7 +454,7 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
454
454
  },
455
455
  },
456
456
  },
457
- "v": 15,
457
+ "v": 16,
458
458
  },
459
459
  "useOldLogoRenderSize": true,
460
460
  }
@@ -897,7 +897,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
897
897
  },
898
898
  },
899
899
  },
900
- "v": 15,
900
+ "v": 16,
901
901
  },
902
902
  "useOldLogoRenderSize": true,
903
903
  }
@@ -1347,7 +1347,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
1347
1347
  },
1348
1348
  },
1349
1349
  },
1350
- "v": 15,
1350
+ "v": 16,
1351
1351
  },
1352
1352
  "useOldLogoRenderSize": true,
1353
1353
  }