@designcrowd/library.brand-page 6.0.5 → 6.0.6-ast-bugs

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 (395) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DhzvKlTS.js → CreatedOnBrandCrowd-de-de-SHCspMwS.js} +3 -3
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DKH4lmNV.js → CreatedOnBrandCrowd-en-us-C6lITAAT.js} +3 -3
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-RloPCLuV.js → CreatedOnBrandCrowd-es-es-Uh69c4vZ.js} +3 -3
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-Cu9e2H0K.js → CreatedOnBrandCrowd-fr-ca-Bb0rp7BV.js} +3 -3
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-Cu9e2H0K.js → CreatedOnBrandCrowd-fr-fr-Bb0rp7BV.js} +3 -3
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-CiCnjxBZ.js → CreatedOnBrandCrowd-pt-br-DsrQHcjs.js} +3 -3
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-CiCnjxBZ.js → CreatedOnBrandCrowd-pt-pt-DsrQHcjs.js} +3 -3
  8. package/lib/src/{CreatedOnDcom-de-de-CwlnedFV.js → CreatedOnDcom-de-de-BshZYzSp.js} +3 -3
  9. package/lib/src/{CreatedOnDcom-en-us-DFHex61v.js → CreatedOnDcom-en-us-CLu8mKUW.js} +3 -3
  10. package/lib/src/{CreatedOnDcom-es-es-BTxH6I4V.js → CreatedOnDcom-es-es-BZYhkONd.js} +3 -3
  11. package/lib/src/{CreatedOnDcom-fr-ca-BVw0KYxu.js → CreatedOnDcom-fr-ca-CIaBEp_9.js} +3 -3
  12. package/lib/src/{CreatedOnDcom-fr-fr-DaqNz1Er.js → CreatedOnDcom-fr-fr-dyF7hioJ.js} +3 -3
  13. package/lib/src/{CreatedOnDcom-pt-br-B4KsMI8W.js → CreatedOnDcom-pt-br-CUHjk2du.js} +3 -3
  14. package/lib/src/{CreatedOnDcom-pt-pt-CWoHEtOZ.js → CreatedOnDcom-pt-pt-CWDvQidv.js} +3 -3
  15. package/lib/src/brand-page/clients/brand-page.client.d.ts +9 -9
  16. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.d.ts +103 -0
  17. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.js +178 -0
  18. package/lib/src/brand-page/components/image-gallery/masonry/MasonryGallery.mixin.d.ts +1 -2
  19. package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.d.ts +4 -2
  20. package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.js +1 -0
  21. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +4 -2
  22. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +11 -5
  23. package/lib/src/brand-page/components/page/Page.mixin.d.ts +1 -1
  24. package/lib/src/brand-page/components/page/PageComponent.mixin.d.ts +1 -1
  25. package/lib/src/brand-page/components/payment/Payment.mixin.d.ts +3 -3
  26. package/lib/src/brand-page/components/payment/__fixtures__/request-payment.d.ts +13 -13
  27. package/lib/src/brand-page/components/payment/__fixtures__/support-me.d.ts +13 -13
  28. package/lib/src/brand-page/constants/sections/footer-display.constants.js +1 -1
  29. package/lib/src/brand-page/models/index.d.ts +2 -13
  30. package/lib/src/brand-page/models/index.js +3 -0
  31. package/lib/src/brand-page/models/payment.model.d.ts +1 -1
  32. package/lib/src/brand-page/utils/personalisation.util.js +72 -14
  33. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +21 -19
  34. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.js +1 -0
  35. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +16 -10
  36. package/lib/src/brand-page-maker/components/admin-background-settings/ShapePositionSlider.mixin.d.ts +1 -1
  37. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +3 -3
  38. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +181 -170
  39. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +3 -0
  40. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.js +1 -0
  41. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +12 -12
  42. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.js +2 -2
  43. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.js +0 -7
  44. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +148 -149
  45. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +21 -21
  46. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.js +1 -1
  47. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.d.ts +4 -2
  48. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.js +1 -0
  49. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.d.ts +4 -2
  50. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.js +1 -0
  51. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.d.ts +5 -2
  52. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.js +1 -0
  53. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.d.ts +4 -2
  54. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.js +1 -0
  55. package/lib/src/brand-page-maker/components/device/Device.mixin.d.ts +4 -2
  56. package/lib/src/brand-page-maker/components/device/Device.mixin.js +1 -0
  57. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +4 -2
  58. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.js +1 -0
  59. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +3 -3
  60. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +11 -11
  61. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +27 -25
  62. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.js +1 -0
  63. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +27 -27
  64. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.js +1 -1
  65. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +17 -12
  66. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +12 -12
  67. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +30 -32
  68. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +16 -5
  69. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +11 -11
  70. package/lib/src/brand-page-maker/composables/ai-chat/types.d.ts +3 -0
  71. package/lib/src/brand-page-maker/composables/ai-chat/ui-actions.d.ts +29 -0
  72. package/lib/src/brand-page-maker/composables/ai-chat/ui-actions.js +32 -0
  73. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +204 -177
  74. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +1 -1
  75. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +6 -6
  76. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +3 -2
  77. package/lib/src/brand-page-maker/composables/useEventTracker.js +1 -0
  78. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +6 -6
  79. package/lib/src/brand-page-maker/constants/config-settings-constant.js +3 -3
  80. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.d.ts +1 -1
  81. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.js +1 -1
  82. package/lib/src/brand-page-maker/models/content-settings.d.ts +1 -1
  83. package/lib/src/brand-page-maker/models/navigation-style-configs.js +1 -1
  84. package/lib/src/brand-page-maker/routing/brand-page-maker-router.d.ts +1 -2
  85. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +366 -378
  86. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +5 -4
  87. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +8 -5
  88. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +3 -1
  89. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +7 -3
  90. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +15 -15
  91. package/lib/src/brand-page-maker/stores/ui/ui-store.d.ts +6 -0
  92. package/lib/src/brand-page-maker/stores/ui/ui-store.js +8 -0
  93. package/lib/src/brand-page-maker/utils/content-settings.util.js +1 -1
  94. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +1 -1
  95. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +4 -4
  96. package/lib/src/clients/ai-assistant-client.d.ts +7 -0
  97. package/lib/src/clients/brand-page-client.d.ts +16 -15
  98. package/lib/src/clients/design-template-client.d.ts +3 -0
  99. package/lib/src/clients/media-client.d.ts +2 -2
  100. package/lib/src/clients/models.d.ts +2 -0
  101. package/lib/src/composables/useSnapshot.js +18 -18
  102. package/lib/src/css/library.brand-page-brandCrowd.min.css +371 -344
  103. package/lib/src/css/library.brand-page-brandPage.min.css +649 -344
  104. package/lib/src/css/library.brand-page-designCom.min.css +371 -344
  105. package/lib/src/css/library.brand-page-preview.min.css +627 -344
  106. package/lib/src/index.d.ts +4 -0
  107. package/lib/src/index.mjs +107 -104
  108. package/lib/src/{lib-BPI8E2Ui.js → lib-COw-Rz05.js} +37005 -33761
  109. package/lib/src/lib.js +10 -0
  110. package/lib/src/metadata-builder/builders/footer-builder.js +105 -62
  111. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +68 -57
  112. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +93 -58
  113. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +99 -66
  114. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +17 -57
  115. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +85 -51
  116. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +74 -49
  117. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +7 -0
  118. package/lib/src/metadata-builder/builders/section-field-utils.js +1 -1
  119. package/lib/src/metadata-builder/builders/shape-color-utils.js +1 -1
  120. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +7 -16
  121. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +48 -66
  122. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.d.ts +1 -1
  123. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.js +8 -8
  124. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +13 -13
  125. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -3
  126. package/lib/src/shared/color-picker/components/ColorPicker.mixin.d.ts +4 -2
  127. package/lib/src/shared/color-picker/components/ColorPicker.mixin.js +2 -2
  128. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.d.ts +4 -2
  129. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.js +1 -0
  130. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.d.ts +5 -2
  131. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.js +1 -0
  132. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +0 -1
  133. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +131 -129
  134. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +2 -1
  135. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +111 -110
  136. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +84 -81
  137. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.js +5 -0
  138. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +117 -109
  139. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +1 -14
  140. package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +0 -1
  141. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +72 -70
  142. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +4 -3
  143. package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.d.ts +4 -4
  144. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.d.ts +3 -1
  145. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.js +1 -0
  146. package/lib/src/shared/content-settings/components/images-field/ImagesField.mixin.d.ts +2 -2
  147. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +4 -3
  148. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +1 -1
  149. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +40 -40
  150. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigOptionField.mixin.d.ts +5 -6
  151. package/lib/src/shared/content-settings/components/shape-field/ShapeField.mixin.d.ts +0 -1
  152. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.d.ts +2 -2
  153. package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +0 -1
  154. package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +1 -2
  155. package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +0 -1
  156. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.d.ts +1 -2
  157. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +1 -1
  158. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +28 -28
  159. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +0 -1
  160. package/lib/src/shared/content-settings/components/toggle-field/ToggleField.mixin.d.ts +2 -2
  161. package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +0 -1
  162. package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +0 -1
  163. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +39 -39
  164. package/lib/src/shared/content-settings/utils.js +0 -1
  165. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.d.ts +6 -4
  166. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.js +1 -0
  167. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.d.ts +4 -2
  168. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.js +1 -0
  169. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +29 -21
  170. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +1 -1
  171. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +50 -51
  172. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.d.ts +6 -4
  173. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.js +1 -0
  174. package/lib/src/shared/logo-settings/store/editable-logo-store.js +1 -1
  175. package/lib/src/shared/logo-settings/store/logo-settings-store.d.ts +1 -1
  176. package/lib/src/shared/logo-versions/LogoVersions.mixin.d.ts +13 -5
  177. package/lib/src/shared/logo-versions/LogoVersions.mixin.js +1 -0
  178. package/lib/src/shared/models.d.ts +2 -0
  179. package/lib/src/shared/my-designs/MyDesigns.mixin.d.ts +14 -6
  180. package/lib/src/shared/my-designs/MyDesigns.mixin.js +1 -0
  181. package/lib/src/shared/my-uploads/MyMedia.mixin.d.ts +14 -5
  182. package/lib/src/shared/my-uploads/MyMedia.mixin.js +1 -0
  183. package/lib/src/shared/my-uploads/MyUploads.mixin.d.ts +14 -5
  184. package/lib/src/shared/my-uploads/MyUploads.mixin.js +1 -0
  185. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.d.ts +5 -3
  186. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +1 -0
  187. package/lib/src/shared/navigation-style-settings/store/index.d.ts +2 -2
  188. package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +2 -2
  189. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +27 -28
  190. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.js +0 -2
  191. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +188 -179
  192. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +181 -177
  193. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +1 -1
  194. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +9 -9
  195. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +39 -39
  196. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +0 -1
  197. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +18 -18
  198. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +6 -6
  199. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +66 -60
  200. package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -1
  201. package/lib/src/shared/style-settings/store/style-settings-store.js +1 -1
  202. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +20 -450
  203. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.js +2 -2
  204. package/lib/src/shared/template-settings/models.d.ts +1 -0
  205. package/lib/src/shared/template-settings/store/template-settings-store.d.ts +4 -0
  206. package/lib/src/shared/template-settings/store/template-settings-store.js +79 -11
  207. package/lib/src/shared/unsplash-library/UnsplashLibrary.mixin.d.ts +9 -4
  208. package/lib/src/utils/build-asset-manifest.d.ts +4 -0
  209. package/lib/src/utils/build-asset-manifest.js +8 -0
  210. package/lib/src/utils/minify-brand-page-metadata.d.ts +0 -2
  211. package/lib/src/utils/minify-brand-page-metadata.js +2 -17
  212. package/package.json +60 -56
  213. package/src/brand-page/components/about-section/AboutSection.vue.test.ts +7 -5
  214. package/src/brand-page/components/banner-section/BannerSection.mixin.ts +210 -0
  215. package/src/brand-page/components/banner-section/BannerSection.vue +5 -1
  216. package/src/brand-page/components/brand-page-footer/BrandPageFooter.vue +1 -1
  217. package/src/brand-page/components/image/Image.mixin.ts +1 -1
  218. package/src/brand-page/components/image/Image.test.ts +1 -1
  219. package/src/brand-page/components/image-gallery/masonry/MasonryGallery.mixin.ts +1 -2
  220. package/src/brand-page/components/images-section/ImagesSection.vue +0 -1
  221. package/src/brand-page/components/logo/LogoRender.vue +188 -188
  222. package/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.ts +1 -0
  223. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +25 -8
  224. package/src/brand-page/components/page-footer/PageFooter.vue +1 -0
  225. package/src/brand-page/components/page-header/HeaderLayout.vue +12 -6
  226. package/src/brand-page/components/page-header/PageHeader.vue +1 -0
  227. package/src/brand-page/components/shapes-section/ShapesSection.vue +1 -1
  228. package/src/brand-page/components/shop/CartModal.vue +1 -3
  229. package/src/brand-page/components/shop/FeaturedDisplay.vue +2 -2
  230. package/src/brand-page/components/shop/PaymentModal.vue +1 -5
  231. package/src/brand-page/components/shop/ProductDetailModal.vue +1 -1
  232. package/src/brand-page/components/shop/Shop.vue +1 -5
  233. package/src/brand-page/components/shop/TextDisplay.vue +1 -1
  234. package/src/brand-page/components/shop/ThumbnailDisplay.vue +2 -2
  235. package/src/brand-page/components/testimonial-section/TestimonialSection.vue +3 -3
  236. package/src/brand-page/components/text-wrapper/TextWrapper.vue +3 -1
  237. package/src/brand-page/constants/sections/footer-display.constants.ts +1 -1
  238. package/src/brand-page/models/index.ts +4 -12
  239. package/src/brand-page/models/payment.model.ts +2 -1
  240. package/src/brand-page/models/shop.model.ts +0 -2
  241. package/src/brand-page/models/user-personalisation.model.ts +1 -2
  242. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
  243. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  244. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  245. package/src/brand-page/utils/migration/migration-01_1.ts +1 -1
  246. package/src/brand-page/utils/migration/migration-02.ts +0 -1
  247. package/src/brand-page/utils/migration/migration-03.ts +0 -1
  248. package/src/brand-page/utils/migration/migration-04.ts +0 -1
  249. package/src/brand-page/utils/migration/migration-05.ts +1 -5
  250. package/src/brand-page/utils/migration/migration-05_2.ts +1 -1
  251. package/src/brand-page/utils/migration/migration-08.test.ts +1 -1
  252. package/src/brand-page/utils/personalisation.util.test.ts +35 -0
  253. package/src/brand-page/utils/personalisation.util.ts +119 -23
  254. package/src/brand-page/view-models.ts +38 -56
  255. package/src/brand-page-maker/assessors/banner-section-description-visibility.assessor.ts +6 -6
  256. package/src/brand-page-maker/assessors/color-replacement-icon-visibility.assessor.ts +2 -2
  257. package/src/brand-page-maker/assessors/color-replacement-profile-visibility.assessor.ts +2 -2
  258. package/src/brand-page-maker/assessors/color-replacement-visibility.assessor.ts +2 -2
  259. package/src/brand-page-maker/assessors/contact-form-visibility.assessor.ts +14 -14
  260. package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +1 -0
  261. package/src/brand-page-maker/components/ai-text-edit/AiActionButtons.vue +27 -12
  262. package/src/brand-page-maker/components/ai-text-edit/AiChatbox.vue +3 -2
  263. package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +8 -7
  264. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +21 -1
  265. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +5 -1
  266. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.ts +1 -0
  267. package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.ts +2 -5
  268. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -5
  269. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.ts +0 -8
  270. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-site-template.examples.ts +0 -2
  271. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.vue +1 -0
  272. package/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.ts +1 -1
  273. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +1 -2
  274. package/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.ts +1 -0
  275. package/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.ts +1 -0
  276. package/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.ts +1 -0
  277. package/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.ts +1 -0
  278. package/src/brand-page-maker/components/device/Device.mixin.ts +1 -0
  279. package/src/brand-page-maker/components/navigation/Navigation.mixin.ts +1 -0
  280. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +3 -1
  281. package/src/brand-page-maker/components/sensitive-content/SensitiveContent.vue +1 -4
  282. package/src/brand-page-maker/components/seo-settings/DeleteDomainModal.vue +1 -1
  283. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.ts +1 -0
  284. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.vue +1 -1
  285. package/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.ts +0 -1
  286. package/src/brand-page-maker/components/seo-settings/UrlSettings.vue +0 -1
  287. package/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.vue +1 -5
  288. package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -1
  289. package/src/brand-page-maker/components/shop/ReplaceImageSettingsForShop.vue +1 -1
  290. package/src/brand-page-maker/components/social-share/SocialShare.vue +1 -1
  291. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +22 -8
  292. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +5 -10
  293. package/src/brand-page-maker/components/template-preview/TemplatePreviewAiBadge.vue +12 -0
  294. package/src/brand-page-maker/components/video-play/VideoPlayButton.vue +1 -1
  295. package/src/brand-page-maker/composables/ai-chat/types.ts +6 -0
  296. package/src/brand-page-maker/composables/ai-chat/ui-actions.test.ts +80 -0
  297. package/src/brand-page-maker/composables/ai-chat/ui-actions.ts +58 -0
  298. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +308 -262
  299. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +6 -6
  300. package/src/brand-page-maker/composables/useEventTracker.ts +1 -0
  301. package/src/brand-page-maker/constants/config-settings-constant.ts +5 -5
  302. package/src/brand-page-maker/convertors/text-image-display-style.convertor.ts +1 -1
  303. package/src/brand-page-maker/models/button-styles-config.ts +4 -2
  304. package/src/brand-page-maker/models/content-settings-configs.ts +4 -2
  305. package/src/brand-page-maker/models/navigation-style-configs.ts +5 -6
  306. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +0 -1
  307. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +8 -5
  308. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +1 -3
  309. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +12 -4
  310. package/src/brand-page-maker/stores/ui/ui-store.ts +16 -0
  311. package/src/brand-page-maker/utils/content-settings.util.ts +1 -1
  312. package/src/brand-page-maker/utils/rich-text-editor.util.ts +4 -4
  313. package/src/clients/ai-assistant-client.ts +7 -0
  314. package/src/clients/design-template-client.ts +3 -0
  315. package/src/clients/models.ts +2 -0
  316. package/src/composables/useSnapshot.ts +19 -22
  317. package/src/lib.ts +12 -0
  318. package/src/metadata-builder/builders/footer-builder.test.ts +130 -229
  319. package/src/metadata-builder/builders/footer-builder.ts +155 -90
  320. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +88 -62
  321. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +129 -66
  322. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +160 -105
  323. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +20 -65
  324. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +146 -83
  325. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +122 -70
  326. package/src/metadata-builder/builders/section-field-utils.ts +1 -1
  327. package/src/metadata-builder/builders/shape-color-utils.ts +2 -2
  328. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +7 -16
  329. package/src/metadata-builder/parsers/section-tool-arguments.ts +48 -66
  330. package/src/plugins/google-maps-plugin/google-maps-plugin.ts +8 -8
  331. package/src/shared/background-settings/components/BackgroundSettings.vue +1 -1
  332. package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue +1 -1
  333. package/src/shared/color-picker/components/ColorPicker.mixin.ts +2 -7
  334. package/src/shared/color-picker/components/ColorPickerSwatch.mixin.ts +1 -0
  335. package/src/shared/common/NumberInput.vue +1 -0
  336. package/src/shared/common/SideBarSettingsHeader.vue +2 -2
  337. package/src/shared/confirm-modal/ConfirmModal.mixin.ts +1 -0
  338. package/src/shared/content-settings/components/booking-url-field/BookingUrlField.vue +1 -0
  339. package/src/shared/content-settings/components/button-configuration-field/ButtonConfigurationField.vue +1 -0
  340. package/src/shared/content-settings/components/color-field/ColorField.vue +3 -10
  341. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -1
  342. package/src/shared/content-settings/components/content-settings/ContentSettingsLockedButton.vue +1 -0
  343. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts +5 -0
  344. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +1 -14
  345. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +4 -6
  346. package/src/shared/content-settings/components/icon-library/IconLibrary.mixin.ts +1 -0
  347. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +1 -1
  348. package/src/shared/content-settings/components/logo-selection-field/LogoSelectionField.vue +1 -1
  349. package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -1
  350. package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +1 -1
  351. package/src/shared/content-settings/components/personalisation-role-field/PersonalisationRoleField.vue +4 -4
  352. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +2 -8
  353. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +1 -1
  354. package/src/shared/content-settings/models.ts +3 -2
  355. package/src/shared/content-settings/utils.ts +0 -1
  356. package/src/shared/dropzone-image-uploader/components/DropzoneImageUploader.vue +1 -0
  357. package/src/shared/ecommerce-settings/store/cart-store.test.ts +1 -1
  358. package/src/shared/font-family-selector/FontFamilySelector.mixin.ts +1 -0
  359. package/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.ts +1 -0
  360. package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +1 -1
  361. package/src/shared/logo-settings/components/LogoSettings.mixin.ts +0 -1
  362. package/src/shared/logo-settings/components/LogoSettingsHeader.mixin.ts +1 -0
  363. package/src/shared/logo-settings/components/LogoStyleSettingsWithState.vue +2 -2
  364. package/src/shared/logo-settings/components/LogoTemplateSearch.vue +1 -1
  365. package/src/shared/logo-settings/store/editable-logo-store.ts +1 -1
  366. package/src/shared/logo-settings/store/logo-settings-store.test.ts +4 -4
  367. package/src/shared/logo-versions/LogoVersions.mixin.ts +1 -0
  368. package/src/shared/models.ts +6 -0
  369. package/src/shared/my-designs/MyDesigns.mixin.ts +1 -0
  370. package/src/shared/my-uploads/MyMedia.mixin.ts +1 -0
  371. package/src/shared/my-uploads/MyMediaSelectionItem.vue +2 -1
  372. package/src/shared/my-uploads/MyUploads.mixin.ts +1 -0
  373. package/src/shared/my-uploads/models.ts +1 -2
  374. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +1 -0
  375. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -1
  376. package/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.ts +0 -3
  377. package/src/shared/page-settings/components/page-settings/NestedDraggable.vue +1 -1
  378. package/src/shared/page-settings/components/page-settings/PageSettings.vue +1 -2
  379. package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.vue +1 -1
  380. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +1 -1
  381. package/src/shared/page-settings/store/page-settings-store.test.ts +4 -8
  382. package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +0 -1
  383. package/src/shared/shape-library/ShapeLibrary.vue +2 -2
  384. package/src/shared/style-settings/store/style-settings-store.ts +1 -1
  385. package/src/shared/template-settings/components/TemplatesSettings.mixin.ts +2 -2
  386. package/src/shared/template-settings/models.ts +1 -0
  387. package/src/shared/template-settings/store/template-settings-store.ts +105 -18
  388. package/src/shared/unsplash-library/UnsplashLibrary.vue +2 -6
  389. package/src/shared/video-library/VideoLibrary.vue +1 -1
  390. package/src/utils/build-asset-manifest.ts +12 -0
  391. package/src/utils/minify-brand-page-metadata.ts +7 -27
  392. package/lib/src/metadata-builder/builders/item-id-utils.d.ts +0 -54
  393. package/lib/src/metadata-builder/builders/item-id-utils.js +0 -96
  394. package/src/metadata-builder/builders/item-id-utils.test.ts +0 -184
  395. package/src/metadata-builder/builders/item-id-utils.ts +0 -117
@@ -69,14 +69,14 @@ const viewport = computed<ViewportsType>(() => {
69
69
  return brandPageMakerStore.viewport;
70
70
  });
71
71
 
72
- const logoSliderMin = computed(() => {
72
+ const _logoSliderMin = computed(() => {
73
73
  if (viewport.value === VIEWPORTS.mobile) {
74
74
  return LOGO_SLIDER_MOBILE_MIN;
75
75
  }
76
76
  return LOGO_SLIDER_DESKTOP_MIN;
77
77
  });
78
78
 
79
- const logoSliderMax = computed(() => {
79
+ const _logoSliderMax = computed(() => {
80
80
  if (viewport.value === VIEWPORTS.mobile) {
81
81
  return LOGO_SLIDER_MOBILE_MAX;
82
82
  }
@@ -183,7 +183,7 @@ const onNewLogoSelected = async () => {
183
183
  const client = FabricRenderClient.getInstance();
184
184
 
185
185
  // To handle parallel requests
186
- const [_, logoDesignAttributes] = await Promise.all([
186
+ const [__, logoDesignAttributes] = await Promise.all([
187
187
  updateTask(),
188
188
  client.getLogoAttributesByLogoTemplateTokenAsync(
189
189
  data.selectedTemplate.token,
@@ -311,7 +311,7 @@ export const useUiEditableLogoStore = defineStore('uiEditableLogo', {
311
311
 
312
312
  this.logoEdits.textObjects = [];
313
313
 
314
- templateMetadata.objects.forEach((o, i) => {
314
+ templateMetadata.objects.forEach((o, _i) => {
315
315
  const matchingDraftObject = draftMetadata?.objects?.find(
316
316
  (d) => d.id === o.id,
317
317
  );
@@ -2,7 +2,7 @@ import type Vue from 'vue';
2
2
  import { createApp } from 'vue';
3
3
  import { createRouter, createMemoryHistory } from 'vue-router';
4
4
  import { createPinia, setActivePinia } from 'pinia';
5
- import type { LogoContent, NavRoute, TextContent } from '@brand-page';
5
+ import type { LogoContent, TextContent } from '@brand-page';
6
6
  import type { ContentItem } from '../../content-settings/models';
7
7
  import { useBrandPageMakerStore } from '@brand-page-maker/stores';
8
8
  import { INITIALISE_PAYLOAD } from '@brand-page-maker/components/brand-page-maker/__fixtures__';
@@ -15,7 +15,7 @@ import { setLocaleAsync } from '@src/composables/useTranslate';
15
15
 
16
16
  const FABRIC_RENDER_BASE_URL = 'https://localhost:6006';
17
17
 
18
- const LOGO_VERSION_ONE_URL =
18
+ const _LOGO_VERSION_ONE_URL =
19
19
  'https://localhost:6006/asset/logodraft/brand-page/00000000-0000-0000-0000-000000000000?v=637979483674400000&outputFormat=png&dimensionsType=preview_image_transparent_no_buffer';
20
20
 
21
21
  const LOGO_VERSION_TWO_URL =
@@ -53,7 +53,7 @@ const PAGE_TWO = createPage(2);
53
53
  const PAGE_THREE = createPage(3);
54
54
 
55
55
  describe('logo store module', () => {
56
- let app: Vue.App;
56
+ let _app: Vue.App;
57
57
 
58
58
  beforeAll(async () => {
59
59
  FabricRenderClient.setInstance({ baseUrl: FABRIC_RENDER_BASE_URL });
@@ -64,7 +64,7 @@ describe('logo store module', () => {
64
64
 
65
65
  await setLocaleAsync('en-US');
66
66
 
67
- app = createApp({
67
+ _app = createApp({
68
68
  pinia,
69
69
  router: createRouter({ history: createMemoryHistory(), routes: [] }),
70
70
  });
@@ -16,6 +16,7 @@ export default defineComponent({
16
16
  required: true,
17
17
  },
18
18
  },
19
+ emits: ['on-select-logo'],
19
20
  setup() {
20
21
  const uiStore = useUiStore();
21
22
 
@@ -19,6 +19,12 @@ export interface UIRootState {
19
19
  thirdPartySettings: UIRootStateThirdPartySettings;
20
20
  personalisationData: UserPersonalisationContent[] | undefined;
21
21
  isPersonalisationEnabled: boolean;
22
+ // Pre-purchase AI content key used to personalise AI template previews when
23
+ // there is no post-purchase personalisationData (bp-5742).
24
+ userPromptContentKey: string | undefined;
25
+ // Controls visibility of the dedicated AI templates tab. Decoupled from personalisationData
26
+ // so the slug flow can personalise previews/apply without surfacing the AI tab (bp-5742).
27
+ showAiTemplatesTab: boolean;
22
28
  }
23
29
 
24
30
  export interface Endpoints {
@@ -16,6 +16,7 @@ export default defineComponent({
16
16
  TextInput,
17
17
  Loader,
18
18
  },
19
+ emits: ['on-select-image'],
19
20
  setup() {
20
21
  const uiStore = useUiStore();
21
22
  const logoSettingsStore = useUiLogoSettingsStore();
@@ -25,6 +25,7 @@ export default defineComponent({
25
25
  default: null,
26
26
  },
27
27
  },
28
+ emits: ['on-delete-image', 'on-select-image'],
28
29
  setup() {
29
30
  const uiStore = useUiStore();
30
31
 
@@ -29,7 +29,7 @@
29
29
  </template>
30
30
 
31
31
  <script setup lang="ts">
32
- import { ref, onMounted, defineProps, defineEmits } from 'vue';
32
+ import { ref, onMounted } from 'vue';
33
33
  import { Icon, Loader } from '@designcrowd/fe-shared-lib';
34
34
  import type { UserMediaClient } from 'src/clients/user-media-client';
35
35
  import type { UserMediaItemWithDimensions } from './models';
@@ -72,6 +72,7 @@ async function checkStatusAsync(): Promise<boolean> {
72
72
  }
73
73
 
74
74
  if (status === 'done') {
75
+ // eslint-disable-next-line vue/require-explicit-emits
75
76
  emit('on-media-done', data);
76
77
  previewSrc.value = data.thumbnailUrl ?? data.url ?? '';
77
78
  isDone.value = true;
@@ -54,6 +54,7 @@ export default defineComponent({
54
54
  default: undefined,
55
55
  },
56
56
  },
57
+ emits: ['on-delete-image', 'on-select-image'],
57
58
  setup() {
58
59
  const uiStore = useUiStore();
59
60
  const userStore = useBrandPageMakerUserStore();
@@ -27,8 +27,7 @@ export interface MediaBaseSelectedPayload {
27
27
  type: MediaTypes;
28
28
  }
29
29
 
30
- export interface GettyVideoMediaSelectedPayload
31
- extends MediaBaseSelectedPayload {
30
+ export interface GettyVideoMediaSelectedPayload extends MediaBaseSelectedPayload {
32
31
  assetId: string;
33
32
  token: string;
34
33
  mimeType: string;
@@ -38,6 +38,7 @@ export default defineComponent({
38
38
  required: true,
39
39
  },
40
40
  },
41
+ emits: ['option-value-change'],
41
42
  data: () => ({
42
43
  navigationStyleConfigOptionTitles:
43
44
  NAVIGATION_STYLE_CONFIG_OPTION_TITLES() as Record<
@@ -116,7 +116,7 @@ import { Toggle } from '@designcrowd/fe-shared-lib';
116
116
  import NavigationStyleSettingsMixin from './NavigationStyleSettings.mixin.ts';
117
117
  import ColorField from '../../../content-settings/components/color-field/ColorField.vue';
118
118
  import TextStyleField from '../../../content-settings/components/text-style-field/TextStyleField.vue';
119
- import { tr, commonTr } from '@src/composables/useTranslate';
119
+ import { commonTr } from '@src/composables/useTranslate';
120
120
 
121
121
  export default {
122
122
  components: {
@@ -3,9 +3,6 @@ import { getPageTitleError } from '../../utils';
3
3
  import { useUiPageSettingsStore } from '../../store';
4
4
  import { useEventTracker } from '@brand-page-maker/composables/useEventTracker';
5
5
  import { usePageNavigationStore } from '../../../page-navigation/store/page-navigation-store';
6
- import type { NavRoute } from '@brand-page';
7
- import { v4 as uuid } from 'uuid';
8
- import { getPageSlugFromPageTitle } from '@src/lib';
9
6
 
10
7
  export default defineComponent({
11
8
  setup() {
@@ -256,7 +256,7 @@ function canMoveToPosition(
256
256
  sourceParentRouteId: string | null,
257
257
  draggedRouteId: string | undefined,
258
258
  draggedHasSubPages: boolean,
259
- futureIndex: number | undefined,
259
+ _futureIndex: number | undefined,
260
260
  ): boolean {
261
261
  // Rule 1: Pages with sub-pages cannot become sub-pages themselves
262
262
  if (targetParentRouteId && draggedHasSubPages) {
@@ -115,7 +115,6 @@ import SideBarSettingsHeader from '../../../common/SideBarSettingsHeader.vue';
115
115
  import PageSettingsMixin from './PageSettings.mixin.ts';
116
116
  import SideBarSectionTitle from '../../../common/SideBarSectionTitle.vue';
117
117
  import DeletePageModal from '../delete-page-modal/DeletePageModal.vue';
118
- import PageElement from './PageElement.vue';
119
118
  import PageSettingsSectionStyles from '../page-settings-section-styles/PageSettingsSectionStyles.vue';
120
119
  import NestedDraggable from './NestedDraggable.vue';
121
120
  import { useBrandPageContainerStore } from '@brand-page-maker/stores';
@@ -133,7 +132,7 @@ export default {
133
132
  PageSettingsSectionStyles,
134
133
  },
135
134
  mixins: [PageSettingsMixin],
136
- setup(props, context) {
135
+ setup(_props, _context) {
137
136
  const brandPageContainerStore = useBrandPageContainerStore();
138
137
 
139
138
  return {
@@ -72,7 +72,7 @@ const options = computed(() => {
72
72
  }
73
73
  }
74
74
 
75
- const filteredOptions = filteredConfigs.reduce((arr, config, index) => {
75
+ const filteredOptions = filteredConfigs.reduce((arr, config, _index) => {
76
76
  config.option.isSelected = props.displayStyle === config.option.value;
77
77
 
78
78
  arr.push(config.option);
@@ -575,7 +575,7 @@ export default defineComponent({
575
575
 
576
576
  async onLogoVersionSelected(selectedLogoVersion: DisplayLogoDraftAsset) {
577
577
  const uiStore = useUiStore();
578
- const brandPageMakerStore = useBrandPageMakerStore();
578
+ const _brandPageMakerStore = useBrandPageMakerStore();
579
579
 
580
580
  this.logoDraftToken = selectedLogoVersion.token;
581
581
 
@@ -3,7 +3,7 @@ import type Vue from 'vue';
3
3
  import { createApp } from 'vue';
4
4
  import { createPinia, setActivePinia } from 'pinia';
5
5
  import type { ContentPage } from '../models';
6
- import type { PageModel, TextContent } from '@brand-page';
6
+ import type { TextContent } from '@brand-page';
7
7
  import type { ContentItem } from '../../content-settings/models';
8
8
  import {
9
9
  UNLIMITED_MAX_NUM_OF_PAGES,
@@ -13,15 +13,11 @@ import {
13
13
  import {
14
14
  INITIALISE_PAYLOAD,
15
15
  USER_FEATURES,
16
- brandPageEmpty,
17
16
  } from '@brand-page-maker/components/brand-page-maker/__fixtures__';
18
17
  import { useUiPageSettingsStore } from './index';
19
- import { useUiContentSettingsStore } from '../../content-settings/store';
20
18
  import { FabricRenderClient } from '../../../clients/fabric-render-client';
21
19
  import { setLocaleAsync } from '@src/composables/useTranslate';
22
20
  import { usePageNavigationStore } from '@src/shared/page-navigation/store/page-navigation-store';
23
- import { getPageSlugFromPageTitle } from '@src/lib';
24
- import { v4 as uuid } from 'uuid';
25
21
 
26
22
  vi.mock('../../../clients/brand-page-client', () => ({
27
23
  default: {
@@ -50,7 +46,7 @@ const PAGE_TWO = createPage(2);
50
46
  const PAGE_THREE = createPage(3);
51
47
 
52
48
  describe('page store module', () => {
53
- let app: Vue.App;
49
+ let _app: Vue.App;
54
50
 
55
51
  beforeAll(async () => {
56
52
  FabricRenderClient.setInstance({ baseUrl: 'http://localhost:3000' });
@@ -63,7 +59,7 @@ describe('page store module', () => {
63
59
 
64
60
  await setLocaleAsync('en-US');
65
61
 
66
- app = createApp({
62
+ _app = createApp({
67
63
  pinia,
68
64
  router,
69
65
  });
@@ -166,7 +162,7 @@ describe('page store module', () => {
166
162
  pages: [PAGE_ONE, PAGE_TWO],
167
163
  });
168
164
 
169
- const firstPage = pageSettingsStore.addNewPage({
165
+ pageSettingsStore.addNewPage({
170
166
  title: 'Page 3',
171
167
  });
172
168
 
@@ -17,7 +17,6 @@ import {
17
17
  useEventTracker,
18
18
  } from '@brand-page-maker/composables/useEventTracker';
19
19
  import { publishBrandPageModalWithStateTr } from '@src/composables/useTranslate';
20
- import { BRAND_PAGE_TYPES } from '@brand-page/models';
21
20
 
22
21
  export default defineComponent({
23
22
  props: {
@@ -203,8 +203,8 @@ const makerMode = computed(() =>
203
203
  ? `admin_${makerStore.brandPageType.toLocaleLowerCase()}`
204
204
  : makerStore.brandPageType.toLocaleLowerCase(),
205
205
  );
206
- const endpoints = computed(() => uiStore.endpoints);
207
- const thirdPartySettings = computed(() => uiStore.thirdPartySettings);
206
+ const _endpoints = computed(() => uiStore.endpoints);
207
+ const _thirdPartySettings = computed(() => uiStore.thirdPartySettings);
208
208
  const isDesignCom = computed(() => containerStore.isDesignCom);
209
209
 
210
210
  const tabsWithTranslations = [
@@ -230,7 +230,7 @@ export const useUiStyleSettingsStore = defineStore('uiStyleSettings', {
230
230
  type: TextStyleType;
231
231
  style: TextStyleDeclaration;
232
232
  }) {
233
- const { textAlign, textStyleType, ...style } = payload.style;
233
+ const { ...style } = payload.style;
234
234
 
235
235
  this.$patch((state) => {
236
236
  state.textStyles.textStyleOptions[payload.type].isModified = true;
@@ -60,7 +60,7 @@ export default defineComponent({
60
60
  templateCategories: computed(
61
61
  () => templateSettingsStore.templateCategories,
62
62
  ),
63
- personalisationData: computed(() => uiStore.personalisationData),
63
+ showAiTemplatesTab: computed(() => uiStore.showAiTemplatesTab),
64
64
  templateSettingsStore,
65
65
  uiStore,
66
66
  isDesignCom: computed(() => containerStore.isDesignCom),
@@ -155,7 +155,7 @@ export default defineComponent({
155
155
  },
156
156
 
157
157
  visibleTabs() {
158
- return this.personalisationData
158
+ return this.showAiTemplatesTab
159
159
  ? this.tabs
160
160
  : [...this.tabs].splice(
161
161
  0,
@@ -7,6 +7,7 @@ export interface TemplateSettingsTemplate {
7
7
  personalisationContentIndex?: number;
8
8
  brandPageModel: BrandPageModel;
9
9
  contentKey?: string;
10
+ usesUserPromptContentKey?: boolean;
10
11
  previewImageUrl?: string;
11
12
  }
12
13
 
@@ -14,6 +14,7 @@ import * as DesignTemplateClient from '../../../clients/design-template-client';
14
14
  import { type DesignTemplate } from '../../../clients/models';
15
15
  import {
16
16
  BP_DEFAULT_TEMPLATE_TYPE_NAME,
17
+ BP_BRAND_SITE_TEMPLATE_TYPE_NAME,
17
18
  SIDE_BAR_TAB_NAMES,
18
19
  } from '@brand-page-maker/constants';
19
20
  import { defineStore, storeToRefs } from 'pinia';
@@ -32,6 +33,7 @@ import {
32
33
  useUiEditableLogoStore,
33
34
  useUiLogoSettingsStore,
34
35
  } from '../../logo-settings/store';
36
+ import { useEventTracker } from '@brand-page-maker/composables/useEventTracker';
35
37
  import {
36
38
  templateSettingsTr,
37
39
  getCurrentLocale,
@@ -39,6 +41,17 @@ import {
39
41
  import { watch } from 'vue';
40
42
 
41
43
  export const DEFAULT_PAGE_SIZE = 6;
44
+
45
+ const POST_PURCHASE_PAGE_SECTION_BY_TAB: Record<string, string> = {
46
+ [TEMPLATE_TABS.all]: 'MakerPostPurchaseSidebarTemplatesAllTab',
47
+ [TEMPLATE_TABS.AI]: 'MakerPostPurchaseSidebarTemplatesAiTab',
48
+ [TEMPLATE_TABS.categories]: 'MakerPostPurchaseSidebarTemplatesCategoryTab',
49
+ };
50
+
51
+ const PRE_PURCHASE_PAGE_SECTION_BY_TAB: Record<string, string> = {
52
+ [TEMPLATE_TABS.all]: 'MakerPrePurchaseSidebarTemplatesAllTab',
53
+ [TEMPLATE_TABS.categories]: 'MakerPrePurchaseSidebarTemplatesCategoryTab',
54
+ };
42
55
  const LOAD_PAGE_RETRY_DELAY = 250;
43
56
 
44
57
  type SelectedTabType = {
@@ -66,6 +79,7 @@ export interface TemplatesSettingState {
66
79
  tabsWithTranslations: SelectedTabType[];
67
80
  logoChangeWatcherInitialized: boolean;
68
81
  initialSearchTerm: string | undefined;
82
+ aiTemplateKeywords: string | undefined;
69
83
  onSearchTermChanged: OnSearchTermChangedCallback | undefined;
70
84
  }
71
85
 
@@ -103,6 +117,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
103
117
  cachedTemplates: {},
104
118
  logoChangeWatcherInitialized: false,
105
119
  initialSearchTerm: undefined,
120
+ aiTemplateKeywords: undefined,
106
121
  onSearchTermChanged: undefined,
107
122
  };
108
123
  },
@@ -302,22 +317,60 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
302
317
  const editableLogoVariation =
303
318
  editableLogoStore.editableLogoVariations[logoVariation];
304
319
 
320
+ const isPrePurchase = brandPageContainerStore.isPrePurchase;
321
+ const isBrandSite =
322
+ this.templateType === BP_BRAND_SITE_TEMPLATE_TYPE_NAME;
323
+
324
+ // Pre-purchase has no logo draft for logo-based recommendation, so fall back to the seeded
325
+ // search term (the keyword from the URL/cookie - never the business name) so the All tab
326
+ // stays relevant instead of generic (bp-5454).
327
+ const effectiveSearchTerm =
328
+ !this.searchTerm &&
329
+ !this.selectedCategory &&
330
+ isPrePurchase &&
331
+ isBrandSite &&
332
+ this.selectedTab.key === TEMPLATE_TABS.all
333
+ ? this.initialSearchTerm
334
+ : this.searchTerm;
335
+
336
+ const pageSection = isBrandSite
337
+ ? (isPrePurchase
338
+ ? PRE_PURCHASE_PAGE_SECTION_BY_TAB
339
+ : POST_PURCHASE_PAGE_SECTION_BY_TAB)[this.selectedTab.key]
340
+ : undefined;
341
+
342
+ const pageName = isBrandSite
343
+ ? isPrePurchase
344
+ ? 'maker-pre-purchase'
345
+ : 'maker'
346
+ : undefined;
347
+
348
+ const baseParams = {
349
+ page: pageNo,
350
+ categoryName: this.selectedCategory,
351
+ searchTerm: effectiveSearchTerm,
352
+ keywords: this.aiTemplateKeywords,
353
+ logoDraftToken: logoSettingsStore.selectedLogoImage.logoDraftToken,
354
+ logoVariation: logoSettingsStore.selectedLogoImage.logoVariation,
355
+ selectedTemplateToken: designTemplateToken,
356
+ locale: currentLocale,
357
+ logoS3Token: !isByo ? editableLogoVariation.s3Token : undefined,
358
+ logoTemplateToken: isByo ? logoTemplateToken : undefined,
359
+ useLogoForRecommendedTemplates:
360
+ isBrandSite && this.selectedTab.key === TEMPLATE_TABS.all,
361
+ pageSection,
362
+ pageName,
363
+ };
364
+
365
+ // AI templates are interleaved server-side for the Brand Site All tab
366
+ // (bp-5306); the frontend just renders the returned order.
305
367
  const result =
306
368
  await designTemplateClient.getTemplateItemsByTemplateType(
307
369
  this.templateType,
308
370
  {
309
- page: pageNo,
371
+ ...baseParams,
310
372
  pageSize: DEFAULT_PAGE_SIZE,
311
- categoryName: this.selectedCategory,
312
- searchTerm: this.searchTerm,
313
- logoDraftToken:
314
- logoSettingsStore.selectedLogoImage.logoDraftToken,
315
- logoVariation: logoSettingsStore.selectedLogoImage.logoVariation,
316
373
  personalisable: this.selectedTab.key === TEMPLATE_TABS.AI,
317
- selectedTemplateToken: designTemplateToken,
318
- locale: currentLocale,
319
- logoS3Token: !isByo ? editableLogoVariation.s3Token : undefined,
320
- logoTemplateToken: isByo ? logoTemplateToken : undefined,
321
374
  },
322
375
  );
323
376
 
@@ -327,11 +380,27 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
327
380
 
328
381
  this._setPageCount({ pageCount: result.pageCount });
329
382
 
383
+ if (
384
+ pageNo === 1 &&
385
+ result.abTestValuesToBePushed &&
386
+ Object.keys(result.abTestValuesToBePushed).length > 0
387
+ ) {
388
+ const eventTracker = useEventTracker();
389
+
390
+ for (const [experimentName, experimentValue] of Object.entries(
391
+ result.abTestValuesToBePushed,
392
+ )) {
393
+ eventTracker.sendExperimentStartedEvent(
394
+ experimentName,
395
+ experimentValue,
396
+ );
397
+ }
398
+ }
399
+
330
400
  const templates = await Promise.all(
331
401
  result.paginatedItems.map(async (item) => {
332
402
  try {
333
403
  if (brandPageMakerUserStore.isAdmin) {
334
- // Pre-purchase: full template with brandPageModel for live rendering
335
404
  const template =
336
405
  await designTemplateClient.getTemplateByTemplateToken(
337
406
  item.designTemplateToken,
@@ -349,17 +418,24 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
349
418
  uiStore.personalisationData.length,
350
419
  );
351
420
 
352
- // Get the contentKey from the selected personalisation variation
353
- // This is needed for the backend preview URL to show the correct variation
354
- const selectedPersonalisation =
355
- uiStore.personalisationData[personalisationContentIndex];
356
-
357
- contentKey = selectedPersonalisation.contentKey;
421
+ contentKey =
422
+ uiStore.personalisationData[personalisationContentIndex]
423
+ .contentKey;
424
+ } else if (item.isPersonalisable) {
425
+ // Pre-purchase has no personalisationData; personalise AI
426
+ // template previews with the prompt content key (bp-5742).
427
+ contentKey = uiStore.userPromptContentKey;
358
428
  }
359
429
 
360
430
  return {
361
431
  id: item.designTemplateToken,
432
+ isPersonalisable: item.isPersonalisable,
362
433
  contentKey,
434
+ // A userPromptContentKey signals this design's real AI images live
435
+ // in the userPrompt bucket (post- or pre-purchase). The preview must
436
+ // then resolve via userPromptContentKey, not the regular bucket which
437
+ // holds placeholders post-purchase (bp-5454).
438
+ usesUserPromptContentKey: !!uiStore.userPromptContentKey,
363
439
  previewImageUrl: item.previewImageUrl,
364
440
  } as TemplateSettingsTemplate;
365
441
  }
@@ -374,7 +450,15 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
374
450
  (t): t is TemplateSettingsTemplate => t !== null,
375
451
  );
376
452
 
377
- this._addTemplates({ templates: validTemplates });
453
+ // The Categories tab must never surface AI templates or the AI badge
454
+ // (bp-5454 scenario 5). The badge is driven purely by isPersonalisable,
455
+ // so clear it for category results regardless of the template's catalog flag.
456
+ const displayTemplates =
457
+ this.selectedTab.key === TEMPLATE_TABS.categories
458
+ ? validTemplates.map((t) => ({ ...t, isPersonalisable: false }))
459
+ : validTemplates;
460
+
461
+ this._addTemplates({ templates: displayTemplates });
378
462
  this._setPageNoLoaded({ pageNoLoaded: pageNo });
379
463
  } finally {
380
464
  this._setIsBusy({ isBusy: false });
@@ -496,6 +580,9 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
496
580
  this.initialSearchTerm = payload.initialSearchTerm;
497
581
  this.onSearchTermChanged = payload.onSearchTermChanged;
498
582
  },
583
+ setAiTemplateKeywords(payload: { aiTemplateKeywords: string }) {
584
+ this.aiTemplateKeywords = payload.aiTemplateKeywords;
585
+ },
499
586
  notifySearchTermChanged(searchTerm: string | undefined) {
500
587
  this.onSearchTermChanged?.(searchTerm);
501
588
  },
@@ -103,7 +103,7 @@
103
103
  </div>
104
104
  <p class="tw-mt-4 tw-text-xs tw-text-grayscale-600">
105
105
  {{ tr('poweredBy') }}
106
- <a
106
+ <a
107
107
  href="https://unsplash.com"
108
108
  class="maker-anchor tw-no-underline"
109
109
  >Unsplash</a
@@ -114,11 +114,7 @@ class="maker-anchor tw-no-underline"
114
114
  <script>
115
115
  import UnsplashLibraryMixin from './UnsplashLibrary.mixin.ts';
116
116
  import { Button, Loader, TextInput } from '@designcrowd/fe-shared-lib';
117
- import {
118
- tr,
119
- commonTr,
120
- unsplashImageCategoriesTr,
121
- } from '@src/composables/useTranslate';
117
+ import { tr, commonTr } from '@src/composables/useTranslate';
122
118
 
123
119
  export default {
124
120
  components: {
@@ -151,7 +151,7 @@ interface Props {
151
151
  isMobile?: boolean;
152
152
  }
153
153
 
154
- const props = withDefaults(defineProps<Props>(), {
154
+ withDefaults(defineProps<Props>(), {
155
155
  isMobile: false,
156
156
  });
157
157
 
@@ -41,6 +41,18 @@ export function resolveLogoData(
41
41
  return logoImageBase64Url || undefined;
42
42
  }
43
43
 
44
+ /**
45
+ * Look up an asset key from the manifest by matching the data content.
46
+ */
47
+ export function findAssetKey(
48
+ assets: AssetEntry[] | undefined,
49
+ data: string | undefined,
50
+ ): string | undefined {
51
+ if (!data || !assets) return undefined;
52
+
53
+ return assets.find((a) => a.data === data)?.key;
54
+ }
55
+
44
56
  /**
45
57
  * Hash a string using SHA-256 and return the first 16 hex characters.
46
58
  * Uses the Web Crypto API (available in browsers and modern runtimes).