@designcrowd/library.brand-page 6.2.1 → 6.2.2-live-preview-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 (123) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-CtvPtYF6.js → CreatedOnBrandCrowd-de-de-Cn0M-eZ1.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-eGF-EjAX.js → CreatedOnBrandCrowd-en-us-DRLMSDZr.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CSemsOtT.js → CreatedOnBrandCrowd-es-es-BglTu73U.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-DzylX-AT.js → CreatedOnBrandCrowd-fr-ca-Bj6YZ_el.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-DzylX-AT.js → CreatedOnBrandCrowd-fr-fr-Bj6YZ_el.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-QMUxXQsE.js → CreatedOnBrandCrowd-pt-br-DEoOmQ1F.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-QMUxXQsE.js → CreatedOnBrandCrowd-pt-pt-DEoOmQ1F.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-M7OoJt-1.js → CreatedOnDcom-de-de-BZ7gTt4Z.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-D7hMM0AI.js → CreatedOnDcom-en-us-CD6Km5sH.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CLw-BLp2.js → CreatedOnDcom-es-es-CNpZHvEl.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-BRu_kmeu.js → CreatedOnDcom-fr-ca-URS-ydJ1.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-IMnEv_yM.js → CreatedOnDcom-fr-fr-D2AVeA3H.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-Bt6v1p27.js → CreatedOnDcom-pt-br-C32frnFs.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-BVsFJIJg.js → CreatedOnDcom-pt-pt-TDYGjRXS.js} +1 -1
  15. package/lib/src/brand-page/models/brand-page-context.model.d.ts +0 -2
  16. package/lib/src/brand-page/models/brand-page-context.model.js +0 -12
  17. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +0 -1
  18. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.js +0 -9
  19. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +7 -43
  20. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +6 -42
  21. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +0 -14
  22. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +0 -42
  23. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +0 -42
  24. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +0 -42
  25. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +0 -42
  26. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +0 -42
  27. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +0 -42
  28. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +3 -0
  29. package/lib/src/brand-page-maker/composables/useEventTracker.js +10 -0
  30. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +0 -42
  31. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +2 -4
  32. package/lib/src/{bundled-translations-KY0aSmMp.js → bundled-translations-BYUfWBT3.js} +9 -9
  33. package/lib/src/{bundled-translations.de-DE-BIFi4bYj.js → bundled-translations.de-DE-MmzUu1tt.js} +13 -13
  34. package/lib/src/{bundled-translations.es-ES-CHlKuPLO.js → bundled-translations.es-ES-D-tG33XL.js} +1 -1
  35. package/lib/src/{bundled-translations.fr-CA-DR1fvm8e.js → bundled-translations.fr-CA-CNc1H1h3.js} +1 -1
  36. package/lib/src/{bundled-translations.fr-FR-DnpWVIQg.js → bundled-translations.fr-FR-DX0-yepT.js} +1 -1
  37. package/lib/src/{bundled-translations.pt-BR-p8szTOiT.js → bundled-translations.pt-BR-ih1-LRgy.js} +9 -9
  38. package/lib/src/{bundled-translations.pt-PT-DEk39NhW.js → bundled-translations.pt-PT-Dq2CmD1p.js} +1 -1
  39. package/lib/src/bundles/bundled-translations.de-DE.json +3 -1
  40. package/lib/src/bundles/bundled-translations.es-ES.json +3 -1
  41. package/lib/src/bundles/bundled-translations.fr-CA.json +3 -1
  42. package/lib/src/bundles/bundled-translations.fr-FR.json +3 -1
  43. package/lib/src/bundles/bundled-translations.json +3 -1
  44. package/lib/src/bundles/bundled-translations.pt-BR.json +3 -1
  45. package/lib/src/bundles/bundled-translations.pt-PT.json +3 -1
  46. package/lib/src/composables/useTranslate.d.ts +1 -1
  47. package/lib/src/composables/useTranslate.js +1 -1
  48. package/lib/src/css/library.brand-page-brandCrowd.min.css +4 -4
  49. package/lib/src/css/library.brand-page-brandPage.min.css +4 -4
  50. package/lib/src/css/library.brand-page-designCom.min.css +4 -4
  51. package/lib/src/css/library.brand-page-preview.min.css +4 -4
  52. package/lib/src/index.mjs +2 -2
  53. package/lib/src/{lib-B38VVCSw.js → lib-Dm9AuOJL.js} +16909 -16783
  54. package/lib/src/metadata-builder/builders/item-id-utils.d.ts +2 -0
  55. package/lib/src/metadata-builder/builders/item-id-utils.js +8 -2
  56. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +8 -1
  57. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +6 -0
  58. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +1 -0
  59. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +5 -0
  60. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +5 -42
  61. package/lib/src/shared/ecommerce-settings/util/refreshDuplicatedMetadata.d.ts +9 -1
  62. package/lib/src/shared/ecommerce-settings/util/refreshDuplicatedMetadata.js +31 -9
  63. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +1 -0
  64. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +5 -42
  65. package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +2 -1
  66. package/lib/src/shared/page-navigation/store/page-navigation-store.js +22 -9
  67. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +7 -1
  68. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +10 -43
  69. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.js +12 -35
  70. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +6 -42
  71. package/lib/src/shared/page-settings/duplicate-page.util.d.ts +4 -0
  72. package/lib/src/shared/page-settings/duplicate-page.util.js +82 -0
  73. package/lib/src/shared/page-settings/models.d.ts +1 -0
  74. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +5 -0
  75. package/lib/src/shared/page-settings/store/page-settings-store.js +90 -7
  76. package/lib/src/shared/page-settings/utils.d.ts +3 -0
  77. package/lib/src/shared/page-settings/utils.js +6 -0
  78. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +1 -56
  79. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +0 -42
  80. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +1 -0
  81. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +1 -42
  82. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +1 -0
  83. package/lib/src/tracker.mjs +1 -1
  84. package/lib/src/{useEventTracker-C5Ql5p7u.js → useEventTracker-DwPTmzpa.js} +13 -3
  85. package/package.json +1 -1
  86. package/src/brand-page/models/brand-page-context.model.ts +0 -23
  87. package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +0 -10
  88. package/src/brand-page-maker/components/action-bar/ActionBarNavigation.test.ts +8 -49
  89. package/src/brand-page-maker/components/action-bar/ActionBarNavigation.vue +1 -1
  90. package/src/brand-page-maker/composables/useEventTracker.ts +13 -0
  91. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +2 -4
  92. package/src/bundles/bundled-translations.de-DE.json +3 -1
  93. package/src/bundles/bundled-translations.es-ES.json +3 -1
  94. package/src/bundles/bundled-translations.fr-CA.json +3 -1
  95. package/src/bundles/bundled-translations.fr-FR.json +3 -1
  96. package/src/bundles/bundled-translations.json +3 -1
  97. package/src/bundles/bundled-translations.pt-BR.json +3 -1
  98. package/src/bundles/bundled-translations.pt-PT.json +3 -1
  99. package/src/composables/useTranslate.ts +2 -1
  100. package/src/metadata-builder/builders/item-id-utils.ts +9 -2
  101. package/src/shared/ecommerce-settings/components/product-config-field/ProductConfigOption.vue +0 -2
  102. package/src/shared/ecommerce-settings/util/refreshDuplicatedMetadata.ts +32 -10
  103. package/src/shared/page-navigation/store/page-navigation-store.ts +41 -13
  104. package/src/shared/page-settings/components/page-settings/NestedDraggable.vue +3 -0
  105. package/src/shared/page-settings/components/page-settings/PageElement.vue +2 -0
  106. package/src/shared/page-settings/components/page-settings/PageSettingMenu.test.ts +105 -0
  107. package/src/shared/page-settings/components/page-settings/PageSettingMenu.vue +16 -0
  108. package/src/shared/page-settings/components/page-settings/PageSettings.duplicate.test.ts +108 -0
  109. package/src/shared/page-settings/components/page-settings/PageSettings.mixin.ts +22 -50
  110. package/src/shared/page-settings/components/page-settings/PageSettings.vue +1 -0
  111. package/src/shared/page-settings/components/page-settings/i18n/page-settings.de-DE.json +3 -1
  112. package/src/shared/page-settings/components/page-settings/i18n/page-settings.es-ES.json +3 -1
  113. package/src/shared/page-settings/components/page-settings/i18n/page-settings.fr-CA.json +3 -1
  114. package/src/shared/page-settings/components/page-settings/i18n/page-settings.fr-FR.json +3 -1
  115. package/src/shared/page-settings/components/page-settings/i18n/page-settings.json +3 -1
  116. package/src/shared/page-settings/components/page-settings/i18n/page-settings.pt-BR.json +3 -1
  117. package/src/shared/page-settings/components/page-settings/i18n/page-settings.pt-PT.json +3 -1
  118. package/src/shared/page-settings/duplicate-page.util.test.ts +382 -0
  119. package/src/shared/page-settings/duplicate-page.util.ts +124 -0
  120. package/src/shared/page-settings/models.ts +1 -0
  121. package/src/shared/page-settings/store/page-settings-store.test.ts +441 -1
  122. package/src/shared/page-settings/store/page-settings-store.ts +145 -11
  123. package/src/shared/page-settings/utils.ts +10 -0
@@ -6,6 +6,8 @@ import type { BrandPageModel } from '../../brand-page/models';
6
6
  export declare const END_ITEM_ANCHOR = "__end__";
7
7
  /** Generate a stable item id. Mirrors section-level `uuid.v4()` id generation. */
8
8
  export declare const generateItemId: () => string;
9
+ /** Every array field the minifier surfaces to the AI as a list of items. */
10
+ export declare const ITEM_ID_BEARING_FIELDS: readonly ["images", "items", "textItems", "links"];
9
11
  /**
10
12
  * Walk an entire BrandPageModel and backfill a stable uuid `id` onto every
11
13
  * nested array item that lacks one (gallery images, images/shapes/testimonial
@@ -6,6 +6,13 @@ import { v4 as uuidv4 } from 'uuid';
6
6
  export const END_ITEM_ANCHOR = '__end__';
7
7
  /** Generate a stable item id. Mirrors section-level `uuid.v4()` id generation. */
8
8
  export const generateItemId = () => uuidv4();
9
+ /** Every array field the minifier surfaces to the AI as a list of items. */
10
+ export const ITEM_ID_BEARING_FIELDS = [
11
+ 'images',
12
+ 'items',
13
+ 'textItems',
14
+ 'links',
15
+ ];
9
16
  /**
10
17
  * Walk an entire BrandPageModel and backfill a stable uuid `id` onto every
11
18
  * nested array item that lacks one (gallery images, images/shapes/testimonial
@@ -19,8 +26,7 @@ export const generateItemId = () => uuidv4();
19
26
  */
20
27
  export const ensureBrandPageItemIds = (model) => {
21
28
  const ensureContentItemIds = (content) => {
22
- // Every array field that the minifier surfaces as a list of items.
23
- for (const field of ['images', 'items', 'textItems', 'links']) {
29
+ for (const field of ITEM_ID_BEARING_FIELDS) {
24
30
  const arr = content[field];
25
31
  if (Array.isArray(arr))
26
32
  ensureItemIds(arr);
@@ -471,6 +471,7 @@ declare const _default: import("vue").DefineComponent<{}, {
471
471
  hasVisibleNavigation(): boolean;
472
472
  }, {
473
473
  getPageSlugsForDepth(parentRouteId?: string): string[];
474
+ getDisplayNamesForDepth(parentRouteId?: string): string[];
474
475
  getParentRouteIdForPage(pageId: string): string | undefined;
475
476
  getParentRouteIdForRoute(routeId: string): string | undefined;
476
477
  getFirstOrDefaultRoute(): import("@brand-page").NavRoute;
@@ -483,7 +484,7 @@ declare const _default: import("vue").DefineComponent<{}, {
483
484
  setNav({ nav }: {
484
485
  nav: import("@brand-page").NavModel;
485
486
  }): void;
486
- addNavRoute(newRoute: import("@brand-page").NavRoute, parentRouteId?: string): void;
487
+ addNavRoute(newRoute: import("@brand-page").NavRoute, parentRouteId?: string, insertAfterRouteId?: string): void;
487
488
  removeNavRoute(routeId: string): void;
488
489
  onDisplayNameChange(routeId: string, newDisplayName: string): void;
489
490
  setRouteTitleAndSlugByPageId(pageId: string, displayName: string, slug: string): void;
@@ -508,6 +509,8 @@ declare const _default: import("vue").DefineComponent<{}, {
508
509
  setPages({ pages }: {
509
510
  pages: import("../../../page-settings/models").ContentPage[];
510
511
  }): void;
512
+ syncPagesWithOrders(): void;
513
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
511
514
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
512
515
  isNewPageModalVisible: boolean;
513
516
  parentPageId?: string;
@@ -557,6 +560,9 @@ declare const _default: import("vue").DefineComponent<{}, {
557
560
  title: string;
558
561
  newPageParentId?: string;
559
562
  }): import("../../../page-settings/models").ContentPage;
563
+ duplicatePage({ pageId, }: {
564
+ pageId: string;
565
+ }): Promise<import("../../../page-settings/models").ContentPage | undefined>;
560
566
  setSelectedSectionName({ sectionName, }: {
561
567
  sectionName?: import("../../../page-settings/store").PageSettingsSection;
562
568
  }): void;
@@ -681,6 +687,7 @@ declare const _default: import("vue").DefineComponent<{}, {
681
687
  sendWebsiteManageAddPageEvent: (pageName: string, isSubPageMode?: boolean) => void;
682
688
  sendWebsiteManageRemovePageEvent: (pageName: string, isRouteNested?: boolean) => void;
683
689
  sendWebsiteManageReorderPageEvent: (pageName: string) => void;
690
+ sendWebsiteManageDuplicatePageEvent: (sourcePageName: string, isSubPage?: boolean) => void;
684
691
  sendPublishOptionsForFreeEvent: () => void;
685
692
  sendPublishOptionsForPremiumEvent: () => void;
686
693
  sendPublishOptionsForExitEvent: () => void;
@@ -516,6 +516,8 @@ declare const _default: import("vue").DefineComponent<{}, {
516
516
  setPages({ pages }: {
517
517
  pages: import("../../../page-settings/models").ContentPage[];
518
518
  }): void;
519
+ syncPagesWithOrders(): void;
520
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
519
521
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
520
522
  isNewPageModalVisible: boolean;
521
523
  parentPageId?: string;
@@ -565,6 +567,9 @@ declare const _default: import("vue").DefineComponent<{}, {
565
567
  title: string;
566
568
  newPageParentId?: string;
567
569
  }): import("../../../page-settings/models").ContentPage;
570
+ duplicatePage({ pageId, }: {
571
+ pageId: string;
572
+ }): Promise<import("../../../page-settings/models").ContentPage | undefined>;
568
573
  setSelectedSectionName({ sectionName, }: {
569
574
  sectionName?: import("../../../page-settings/store").PageSettingsSection;
570
575
  }): void;
@@ -800,6 +805,7 @@ declare const _default: import("vue").DefineComponent<{}, {
800
805
  sendWebsiteManageAddPageEvent: (pageName: string, isSubPageMode?: boolean) => void;
801
806
  sendWebsiteManageRemovePageEvent: (pageName: string, isRouteNested?: boolean) => void;
802
807
  sendWebsiteManageReorderPageEvent: (pageName: string) => void;
808
+ sendWebsiteManageDuplicatePageEvent: (sourcePageName: string, isSubPage?: boolean) => void;
803
809
  sendPublishOptionsForFreeEvent: () => void;
804
810
  sendPublishOptionsForPremiumEvent: () => void;
805
811
  sendPublishOptionsForExitEvent: () => void;
@@ -532,6 +532,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
532
532
  sendWebsiteManageAddPageEvent: (pageName: string, isSubPageMode?: boolean) => void;
533
533
  sendWebsiteManageRemovePageEvent: (pageName: string, isRouteNested?: boolean) => void;
534
534
  sendWebsiteManageReorderPageEvent: (pageName: string) => void;
535
+ sendWebsiteManageDuplicatePageEvent: (sourcePageName: string, isSubPage?: boolean) => void;
535
536
  sendPublishOptionsForFreeEvent: () => void;
536
537
  sendPublishOptionsForPremiumEvent: () => void;
537
538
  sendPublishOptionsForExitEvent: () => void;
@@ -738,6 +738,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
738
738
  setPages({ pages }: {
739
739
  pages: import("../../../page-settings/models").ContentPage[];
740
740
  }): void;
741
+ syncPagesWithOrders(): void;
742
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
741
743
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
742
744
  isNewPageModalVisible: boolean;
743
745
  parentPageId?: string;
@@ -787,6 +789,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
787
789
  title: string;
788
790
  newPageParentId?: string;
789
791
  }): import("../../../page-settings/models").ContentPage;
792
+ duplicatePage({ pageId, }: {
793
+ pageId: string;
794
+ }): Promise<import("../../../page-settings/models").ContentPage | undefined>;
790
795
  setSelectedSectionName({ sectionName, }: {
791
796
  sectionName?: import("../../../page-settings/store").PageSettingsSection;
792
797
  }): void;
@@ -91,20 +91,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
91
91
  isVariation: boolean;
92
92
  isExcluded: boolean;
93
93
  } | undefined;
94
- bp_5873_live_preview_prepurchase?: {
95
- key: string;
96
- value: string;
97
- isControl: boolean;
98
- isVariation: boolean;
99
- isExcluded: boolean;
100
- } | undefined;
101
- bp_5873_live_preview_postpurchase?: {
102
- key: string;
103
- value: string;
104
- isControl: boolean;
105
- isVariation: boolean;
106
- isExcluded: boolean;
107
- } | undefined;
108
94
  };
109
95
  isSubsequentPublish: boolean;
110
96
  isContextualUpgradeModalVisible: boolean;
@@ -180,20 +166,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
180
166
  isVariation: boolean;
181
167
  isExcluded: boolean;
182
168
  } | undefined;
183
- bp_5873_live_preview_prepurchase?: {
184
- key: string;
185
- value: string;
186
- isControl: boolean;
187
- isVariation: boolean;
188
- isExcluded: boolean;
189
- } | undefined;
190
- bp_5873_live_preview_postpurchase?: {
191
- key: string;
192
- value: string;
193
- isControl: boolean;
194
- isVariation: boolean;
195
- isExcluded: boolean;
196
- } | undefined;
197
169
  };
198
170
  isSubsequentPublish: boolean;
199
171
  isContextualUpgradeModalVisible: boolean;
@@ -269,20 +241,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
269
241
  isVariation: boolean;
270
242
  isExcluded: boolean;
271
243
  } | undefined;
272
- bp_5873_live_preview_prepurchase?: {
273
- key: string;
274
- value: string;
275
- isControl: boolean;
276
- isVariation: boolean;
277
- isExcluded: boolean;
278
- } | undefined;
279
- bp_5873_live_preview_postpurchase?: {
280
- key: string;
281
- value: string;
282
- isControl: boolean;
283
- isVariation: boolean;
284
- isExcluded: boolean;
285
- } | undefined;
286
244
  };
287
245
  isSubsequentPublish: boolean;
288
246
  isContextualUpgradeModalVisible: boolean;
@@ -540,6 +498,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
540
498
  setPages({ pages }: {
541
499
  pages: import("../../../page-settings/models").ContentPage[];
542
500
  }): void;
501
+ syncPagesWithOrders(): void;
502
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
543
503
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
544
504
  isNewPageModalVisible: boolean;
545
505
  parentPageId?: string;
@@ -589,6 +549,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
589
549
  title: string;
590
550
  newPageParentId?: string;
591
551
  }): import("../../../page-settings/models").ContentPage;
552
+ duplicatePage({ pageId, }: {
553
+ pageId: string;
554
+ }): Promise<import("../../../page-settings/models").ContentPage | undefined>;
592
555
  setSelectedSectionName({ sectionName, }: {
593
556
  sectionName?: import("@shared/page-settings/store").PageSettingsSection;
594
557
  }): void;
@@ -1,4 +1,4 @@
1
- import type { BrandPageModel } from '@brand-page/models';
1
+ import type { BrandPageModel, Content } from '@brand-page/models';
2
2
  /**
3
3
  * Refresh a (migrated, current-version) BrandPageModel so it is safe to persist as a *duplicate*.
4
4
  * Two things travel with a verbatim copy that must not: client-minted identifiers that the
@@ -9,3 +9,11 @@ import type { BrandPageModel } from '@brand-page/models';
9
9
  * See `shop-duplication.md`.
10
10
  */
11
11
  export declare function refreshDuplicatedMetadata(model: BrandPageModel): BrandPageModel;
12
+ /**
13
+ * Rotate the client-minted ids the brand-page-api keys a **global** row on — shop product / sku_key
14
+ * and payment-option ids. A verbatim copy collides with its source on those tables.
15
+ *
16
+ * Shared with page duplication, which wants only this half: that copy keeps the same owner, so it
17
+ * keeps its payment connection.
18
+ */
19
+ export declare function rotateMonetizationIds(content: Content): void;
@@ -16,10 +16,8 @@ export function refreshDuplicatedMetadata(model) {
16
16
  // content-level connections below are cleared. Disconnect it too; the new owner reconnects.
17
17
  model.paymentConfig = undefined;
18
18
  model.pages.forEach((page) => page.contents.forEach((content) => {
19
+ rotateMonetizationIds(content);
19
20
  if (isShopContent(content)) {
20
- // Shop products collide on the global product / sku_key tables. The shop's payment-config
21
- // link is written with throwaway ids (not the content id), so only the product ids rotate.
22
- content.products.forEach(rotateProductIds);
23
21
  disconnectPayment(content.shopPaymentConfig);
24
22
  }
25
23
  else if (isPayment(content)) {
@@ -31,6 +29,26 @@ export function refreshDuplicatedMetadata(model) {
31
29
  }));
32
30
  return model;
33
31
  }
32
+ /**
33
+ * Rotate the client-minted ids the brand-page-api keys a **global** row on — shop product / sku_key
34
+ * and payment-option ids. A verbatim copy collides with its source on those tables.
35
+ *
36
+ * Shared with page duplication, which wants only this half: that copy keeps the same owner, so it
37
+ * keeps its payment connection.
38
+ */
39
+ export function rotateMonetizationIds(content) {
40
+ if (isShopContent(content)) {
41
+ // The shop's payment-config link is written with throwaway ids (not the content id), so only
42
+ // the product ids rotate here.
43
+ content.products.forEach(rotateProductIds);
44
+ }
45
+ else if (isPayment(content)) {
46
+ rotatePaymentOptionIds(content.requestPaymentConfig);
47
+ }
48
+ else if (isSupportMe(content)) {
49
+ rotatePaymentOptionIds(content.supportMeConfig);
50
+ }
51
+ }
34
52
  function rotateProductIds(product) {
35
53
  product.id = uuid();
36
54
  // The option id is the only value cross-referenced inside a product — SKUs point at product
@@ -56,17 +74,21 @@ function rotateProductIds(product) {
56
74
  sku.skuKey = generateSku(product.name, sku.variant[0]?.option);
57
75
  });
58
76
  }
77
+ // `brand_page_product` is keyed on the payment-option id, so a verbatim copy would adopt the
78
+ // source's product rows on its next payment upsert.
79
+ function rotatePaymentOptionIds(config) {
80
+ config.paymentOptions.forEach((option) => {
81
+ option.id = uuid();
82
+ });
83
+ }
59
84
  /**
60
85
  * request-payment / support-me content. The api keys `content_block_payment_config` on the content
61
- * id (PK) and `brand_page_product` on the payment-option id (PK), both global. A verbatim copy
62
- * would, on its next payment upsert, repoint the source's config link and adopt its product rows —
63
- * so rotate both to make the copy independent, then drop the connection.
86
+ * id (PK), so a verbatim copy would repoint the source's config link on its next payment upsert -
87
+ * re-mint it, then drop the connection. (The option ids are rotated upstream, for both kinds of
88
+ * duplication.)
64
89
  */
65
90
  function resetPaymentBlock(content, config) {
66
91
  content.id = uuid();
67
- config.paymentOptions.forEach((option) => {
68
- option.id = uuid();
69
- });
70
92
  disconnectPayment(config);
71
93
  }
72
94
  /**
@@ -299,6 +299,7 @@ declare const _default: import("vue").DefineComponent<{}, {
299
299
  sendWebsiteManageAddPageEvent: (pageName: string, isSubPageMode?: boolean) => void;
300
300
  sendWebsiteManageRemovePageEvent: (pageName: string, isRouteNested?: boolean) => void;
301
301
  sendWebsiteManageReorderPageEvent: (pageName: string) => void;
302
+ sendWebsiteManageDuplicatePageEvent: (sourcePageName: string, isSubPage?: boolean) => void;
302
303
  sendPublishOptionsForFreeEvent: () => void;
303
304
  sendPublishOptionsForPremiumEvent: () => void;
304
305
  sendPublishOptionsForExitEvent: () => void;
@@ -387,20 +387,6 @@ declare const _default: import("vue").DefineComponent<{}, {
387
387
  isVariation: boolean;
388
388
  isExcluded: boolean;
389
389
  } | undefined;
390
- bp_5873_live_preview_prepurchase?: {
391
- key: string;
392
- value: string;
393
- isControl: boolean;
394
- isVariation: boolean;
395
- isExcluded: boolean;
396
- } | undefined;
397
- bp_5873_live_preview_postpurchase?: {
398
- key: string;
399
- value: string;
400
- isControl: boolean;
401
- isVariation: boolean;
402
- isExcluded: boolean;
403
- } | undefined;
404
390
  };
405
391
  isSubsequentPublish: boolean;
406
392
  isContextualUpgradeModalVisible: boolean;
@@ -476,20 +462,6 @@ declare const _default: import("vue").DefineComponent<{}, {
476
462
  isVariation: boolean;
477
463
  isExcluded: boolean;
478
464
  } | undefined;
479
- bp_5873_live_preview_prepurchase?: {
480
- key: string;
481
- value: string;
482
- isControl: boolean;
483
- isVariation: boolean;
484
- isExcluded: boolean;
485
- } | undefined;
486
- bp_5873_live_preview_postpurchase?: {
487
- key: string;
488
- value: string;
489
- isControl: boolean;
490
- isVariation: boolean;
491
- isExcluded: boolean;
492
- } | undefined;
493
465
  };
494
466
  isSubsequentPublish: boolean;
495
467
  isContextualUpgradeModalVisible: boolean;
@@ -565,20 +537,6 @@ declare const _default: import("vue").DefineComponent<{}, {
565
537
  isVariation: boolean;
566
538
  isExcluded: boolean;
567
539
  } | undefined;
568
- bp_5873_live_preview_prepurchase?: {
569
- key: string;
570
- value: string;
571
- isControl: boolean;
572
- isVariation: boolean;
573
- isExcluded: boolean;
574
- } | undefined;
575
- bp_5873_live_preview_postpurchase?: {
576
- key: string;
577
- value: string;
578
- isControl: boolean;
579
- isVariation: boolean;
580
- isExcluded: boolean;
581
- } | undefined;
582
540
  };
583
541
  isSubsequentPublish: boolean;
584
542
  isContextualUpgradeModalVisible: boolean;
@@ -707,6 +665,8 @@ declare const _default: import("vue").DefineComponent<{}, {
707
665
  setPages({ pages }: {
708
666
  pages: import("../../page-settings/models").ContentPage[];
709
667
  }): void;
668
+ syncPagesWithOrders(): void;
669
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
710
670
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
711
671
  isNewPageModalVisible: boolean;
712
672
  parentPageId?: string;
@@ -756,6 +716,9 @@ declare const _default: import("vue").DefineComponent<{}, {
756
716
  title: string;
757
717
  newPageParentId?: string;
758
718
  }): import("../../page-settings/models").ContentPage;
719
+ duplicatePage({ pageId, }: {
720
+ pageId: string;
721
+ }): Promise<import("../../page-settings/models").ContentPage | undefined>;
759
722
  setSelectedSectionName({ sectionName, }: {
760
723
  sectionName?: import("@shared/page-settings/store").PageSettingsSection;
761
724
  }): void;
@@ -9,6 +9,7 @@ export declare const usePageNavigationStore: import("pinia").StoreDefinition<"pa
9
9
  hasVisibleNavigation(): boolean;
10
10
  }, {
11
11
  getPageSlugsForDepth(parentRouteId?: string): string[];
12
+ getDisplayNamesForDepth(parentRouteId?: string): string[];
12
13
  getParentRouteIdForPage(pageId: string): string | undefined;
13
14
  getParentRouteIdForRoute(routeId: string): string | undefined;
14
15
  getFirstOrDefaultRoute(): NavRoute;
@@ -21,7 +22,7 @@ export declare const usePageNavigationStore: import("pinia").StoreDefinition<"pa
21
22
  setNav({ nav }: {
22
23
  nav: NavModel;
23
24
  }): void;
24
- addNavRoute(newRoute: NavRoute, parentRouteId?: string): void;
25
+ addNavRoute(newRoute: NavRoute, parentRouteId?: string, insertAfterRouteId?: string): void;
25
26
  removeNavRoute(routeId: string): void;
26
27
  onDisplayNameChange(routeId: string, newDisplayName: string): void;
27
28
  setRouteTitleAndSlugByPageId(pageId: string, displayName: string, slug: string): void;
@@ -16,9 +16,9 @@ const findParentRouteIdForRouteId = (orders, targetRouteId, parentRouteId) => {
16
16
  }
17
17
  return undefined;
18
18
  };
19
- // This function will find all the page slugs that exist at the depth that we're modifying, this way, we can avoid duplication of page slugs
20
- // This will help support the use of similar named routes, e.g /home/home-1 and /my-home/home-1
21
- const getPageSlugsForCurrentDepth = (navModel, parentRouteId, excludeRouteId) => {
19
+ // Routes at one depth. Slugs and titles only need to be unique among siblings,
20
+ // so /home/home-1 and /my-home/home-1 can coexist.
21
+ const getRoutesForCurrentDepth = (navModel, parentRouteId, excludeRouteId) => {
22
22
  let ordersAtDepth;
23
23
  if (!parentRouteId) {
24
24
  ordersAtDepth = navModel.orders;
@@ -28,10 +28,9 @@ const getPageSlugsForCurrentDepth = (navModel, parentRouteId, excludeRouteId) =>
28
28
  ordersAtDepth = parentOrder?.subRoutes || [];
29
29
  }
30
30
  const routeIdsAtDepth = ordersAtDepth.map((order) => order.routeId);
31
- return navModel.routes
32
- .filter((route) => routeIdsAtDepth.includes(route.id) && route.id !== excludeRouteId)
33
- .map((route) => route.pageSlug);
31
+ return navModel.routes.filter((route) => routeIdsAtDepth.includes(route.id) && route.id !== excludeRouteId);
34
32
  };
33
+ const getPageSlugsForCurrentDepth = (navModel, parentRouteId, excludeRouteId) => getRoutesForCurrentDepth(navModel, parentRouteId, excludeRouteId).map((route) => route.pageSlug);
35
34
  export const usePageNavigationStore = defineStore('pageNavigation', {
36
35
  state: () => ({
37
36
  routes: [],
@@ -62,6 +61,9 @@ export const usePageNavigationStore = defineStore('pageNavigation', {
62
61
  getPageSlugsForDepth(parentRouteId) {
63
62
  return getPageSlugsForCurrentDepth(this.nav, parentRouteId);
64
63
  },
64
+ getDisplayNamesForDepth(parentRouteId) {
65
+ return getRoutesForCurrentDepth(this.nav, parentRouteId).map((route) => route.displayName);
66
+ },
65
67
  getParentRouteIdForPage(pageId) {
66
68
  const route = this.routes.find((r) => r.pageId === pageId);
67
69
  if (!route) {
@@ -93,16 +95,27 @@ export const usePageNavigationStore = defineStore('pageNavigation', {
93
95
  this.routes = nav.routes;
94
96
  this.orders = nav.orders;
95
97
  },
96
- addNavRoute(newRoute, parentRouteId) {
98
+ addNavRoute(newRoute, parentRouteId, insertAfterRouteId) {
97
99
  const newOrder = {
98
100
  routeId: newRoute.id,
99
101
  subRoutes: [],
100
102
  };
103
+ const addToSiblings = (siblings) => {
104
+ const afterIndex = insertAfterRouteId
105
+ ? siblings.findIndex((order) => order.routeId === insertAfterRouteId)
106
+ : -1;
107
+ if (afterIndex === -1) {
108
+ siblings.push(newOrder);
109
+ }
110
+ else {
111
+ siblings.splice(afterIndex + 1, 0, newOrder);
112
+ }
113
+ };
101
114
  if (parentRouteId) {
102
115
  // Find where to insert the new route into order
103
116
  const parentOrder = findParentOrderByRouteId(this.orders, parentRouteId);
104
117
  if (parentOrder) {
105
- parentOrder.subRoutes.push(newOrder);
118
+ addToSiblings(parentOrder.subRoutes);
106
119
  }
107
120
  else {
108
121
  console.error(`Parent route with id ${parentRouteId} not found in nav orders.`);
@@ -110,7 +123,7 @@ export const usePageNavigationStore = defineStore('pageNavigation', {
110
123
  }
111
124
  else {
112
125
  // Push to root of orders object as this is not a nested route
113
- this.orders.push(newOrder);
126
+ addToSiblings(this.orders);
114
127
  }
115
128
  this.routes.push(newRoute);
116
129
  this.reorderVisibleAndHiddenRoutes();
@@ -17,6 +17,8 @@ declare const _default: import("vue").DefineComponent<{}, {
17
17
  setPages({ pages }: {
18
18
  pages: import("../../models").ContentPage[];
19
19
  }): void;
20
+ syncPagesWithOrders(): void;
21
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
20
22
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
21
23
  isNewPageModalVisible: boolean;
22
24
  parentPageId?: string;
@@ -66,6 +68,9 @@ declare const _default: import("vue").DefineComponent<{}, {
66
68
  title: string;
67
69
  newPageParentId?: string;
68
70
  }): import("../../models").ContentPage;
71
+ duplicatePage({ pageId, }: {
72
+ pageId: string;
73
+ }): Promise<import("../../models").ContentPage | undefined>;
69
74
  setSelectedSectionName({ sectionName, }: {
70
75
  sectionName?: import("../../store").PageSettingsSection;
71
76
  }): void;
@@ -82,6 +87,7 @@ declare const _default: import("vue").DefineComponent<{}, {
82
87
  hasVisibleNavigation(): boolean;
83
88
  }, {
84
89
  getPageSlugsForDepth(parentRouteId?: string): string[];
90
+ getDisplayNamesForDepth(parentRouteId?: string): string[];
85
91
  getParentRouteIdForPage(pageId: string): string | undefined;
86
92
  getParentRouteIdForRoute(routeId: string): string | undefined;
87
93
  getFirstOrDefaultRoute(): import("../../../../brand-page").NavRoute;
@@ -94,7 +100,7 @@ declare const _default: import("vue").DefineComponent<{}, {
94
100
  setNav({ nav }: {
95
101
  nav: import("../../../../brand-page").NavModel;
96
102
  }): void;
97
- addNavRoute(newRoute: import("../../../../brand-page").NavRoute, parentRouteId?: string): void;
103
+ addNavRoute(newRoute: import("../../../../brand-page").NavRoute, parentRouteId?: string, insertAfterRouteId?: string): void;
98
104
  removeNavRoute(routeId: string): void;
99
105
  onDisplayNameChange(routeId: string, newDisplayName: string): void;
100
106
  setRouteTitleAndSlugByPageId(pageId: string, displayName: string, slug: string): void;
@@ -39,6 +39,7 @@ declare const _default: import("vue").DefineComponent<{}, {
39
39
  fields: Record<string, import("../../../content-settings/models").ContentItemFieldSettings>;
40
40
  };
41
41
  }[];
42
+ isHidden?: boolean | undefined;
42
43
  };
43
44
  pageTitle: string;
44
45
  pageTitleError: string | null;
@@ -4151,6 +4152,8 @@ declare const _default: import("vue").DefineComponent<{}, {
4151
4152
  setPages({ pages }: {
4152
4153
  pages: ContentPage[];
4153
4154
  }): void;
4155
+ syncPagesWithOrders(): void;
4156
+ showPageLimitUpgradeModalAsync(ctaLocation: string): Promise<void>;
4154
4157
  setNewPageModalVisibilityAsync({ isNewPageModalVisible, parentPageId, }: {
4155
4158
  isNewPageModalVisible: boolean;
4156
4159
  parentPageId?: string;
@@ -4200,6 +4203,9 @@ declare const _default: import("vue").DefineComponent<{}, {
4200
4203
  title: string;
4201
4204
  newPageParentId?: string;
4202
4205
  }): ContentPage;
4206
+ duplicatePage({ pageId, }: {
4207
+ pageId: string;
4208
+ }): Promise<ContentPage | undefined>;
4203
4209
  setSelectedSectionName({ sectionName, }: {
4204
4210
  sectionName?: PageSettingsSection;
4205
4211
  }): void;
@@ -4216,6 +4222,7 @@ declare const _default: import("vue").DefineComponent<{}, {
4216
4222
  hasVisibleNavigation(): boolean;
4217
4223
  }, {
4218
4224
  getPageSlugsForDepth(parentRouteId?: string): string[];
4225
+ getDisplayNamesForDepth(parentRouteId?: string): string[];
4219
4226
  getParentRouteIdForPage(pageId: string): string | undefined;
4220
4227
  getParentRouteIdForRoute(routeId: string): string | undefined;
4221
4228
  getFirstOrDefaultRoute(): import("@brand-page").NavRoute;
@@ -4228,7 +4235,7 @@ declare const _default: import("vue").DefineComponent<{}, {
4228
4235
  setNav({ nav }: {
4229
4236
  nav: import("@brand-page").NavModel;
4230
4237
  }): void;
4231
- addNavRoute(newRoute: import("@brand-page").NavRoute, parentRouteId?: string): void;
4238
+ addNavRoute(newRoute: import("@brand-page").NavRoute, parentRouteId?: string, insertAfterRouteId?: string): void;
4232
4239
  removeNavRoute(routeId: string): void;
4233
4240
  onDisplayNameChange(routeId: string, newDisplayName: string): void;
4234
4241
  setRouteTitleAndSlugByPageId(pageId: string, displayName: string, slug: string): void;
@@ -4816,20 +4823,6 @@ declare const _default: import("vue").DefineComponent<{}, {
4816
4823
  isVariation: boolean;
4817
4824
  isExcluded: boolean;
4818
4825
  } | undefined;
4819
- bp_5873_live_preview_prepurchase?: {
4820
- key: string;
4821
- value: string;
4822
- isControl: boolean;
4823
- isVariation: boolean;
4824
- isExcluded: boolean;
4825
- } | undefined;
4826
- bp_5873_live_preview_postpurchase?: {
4827
- key: string;
4828
- value: string;
4829
- isControl: boolean;
4830
- isVariation: boolean;
4831
- isExcluded: boolean;
4832
- } | undefined;
4833
4826
  };
4834
4827
  isSubsequentPublish: boolean;
4835
4828
  isContextualUpgradeModalVisible: boolean;
@@ -4905,20 +4898,6 @@ declare const _default: import("vue").DefineComponent<{}, {
4905
4898
  isVariation: boolean;
4906
4899
  isExcluded: boolean;
4907
4900
  } | undefined;
4908
- bp_5873_live_preview_prepurchase?: {
4909
- key: string;
4910
- value: string;
4911
- isControl: boolean;
4912
- isVariation: boolean;
4913
- isExcluded: boolean;
4914
- } | undefined;
4915
- bp_5873_live_preview_postpurchase?: {
4916
- key: string;
4917
- value: string;
4918
- isControl: boolean;
4919
- isVariation: boolean;
4920
- isExcluded: boolean;
4921
- } | undefined;
4922
4901
  };
4923
4902
  isSubsequentPublish: boolean;
4924
4903
  isContextualUpgradeModalVisible: boolean;
@@ -4994,20 +4973,6 @@ declare const _default: import("vue").DefineComponent<{}, {
4994
4973
  isVariation: boolean;
4995
4974
  isExcluded: boolean;
4996
4975
  } | undefined;
4997
- bp_5873_live_preview_prepurchase?: {
4998
- key: string;
4999
- value: string;
5000
- isControl: boolean;
5001
- isVariation: boolean;
5002
- isExcluded: boolean;
5003
- } | undefined;
5004
- bp_5873_live_preview_postpurchase?: {
5005
- key: string;
5006
- value: string;
5007
- isControl: boolean;
5008
- isVariation: boolean;
5009
- isExcluded: boolean;
5010
- } | undefined;
5011
4976
  };
5012
4977
  isSubsequentPublish: boolean;
5013
4978
  isContextualUpgradeModalVisible: boolean;
@@ -5169,6 +5134,7 @@ declare const _default: import("vue").DefineComponent<{}, {
5169
5134
  sendWebsiteManageAddPageEvent: (pageName: string, isSubPageMode?: boolean) => void;
5170
5135
  sendWebsiteManageRemovePageEvent: (pageName: string, isRouteNested?: boolean) => void;
5171
5136
  sendWebsiteManageReorderPageEvent: (pageName: string) => void;
5137
+ sendWebsiteManageDuplicatePageEvent: (sourcePageName: string, isSubPage?: boolean) => void;
5172
5138
  sendPublishOptionsForFreeEvent: () => void;
5173
5139
  sendPublishOptionsForPremiumEvent: () => void;
5174
5140
  sendPublishOptionsForExitEvent: () => void;
@@ -5211,6 +5177,7 @@ declare const _default: import("vue").DefineComponent<{}, {
5211
5177
  isRootPage(index: number): boolean;
5212
5178
  onAddSubPageSelected(pageId: string): Promise<void>;
5213
5179
  onAddNewPageSelected(): Promise<void>;
5180
+ onDuplicatePageSelected(pageId: string): Promise<void>;
5214
5181
  onChangePageVisibility(pageId: string): void;
5215
5182
  onDeletePageSelected(pageId: string): void;
5216
5183
  onConfirmDeletePage(pageId: string): void;