@designcrowd/library.brand-page 5.19.0 → 5.19.1-error-html2canvas-2

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 (455) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DsoA9hc-.js → CreatedOnBrandCrowd-de-de-DmKe7W8L.js} +3 -3
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BP6NEQ66.js → CreatedOnBrandCrowd-en-us-D2EeiNep.js} +3 -3
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-D424uM1Z.js → CreatedOnBrandCrowd-es-es-BqVwNY1D.js} +3 -3
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CJvuLTkB.js → CreatedOnBrandCrowd-fr-ca-C756a27-.js} +3 -3
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CJvuLTkB.js → CreatedOnBrandCrowd-fr-fr-C756a27-.js} +3 -3
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Cc9L314u.js → CreatedOnBrandCrowd-pt-br-FNHAnZUw.js} +3 -3
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Cc9L314u.js → CreatedOnBrandCrowd-pt-pt-FNHAnZUw.js} +3 -3
  8. package/lib/src/{CreatedOnDcom-de-de-CX-295FH.js → CreatedOnDcom-de-de-8AZZFmDt.js} +3 -3
  9. package/lib/src/{CreatedOnDcom-en-us-UFlORUgZ.js → CreatedOnDcom-en-us-DizTP32i.js} +3 -3
  10. package/lib/src/{CreatedOnDcom-es-es-D1tRpcq9.js → CreatedOnDcom-es-es-qnp9_n_A.js} +3 -3
  11. package/lib/src/{CreatedOnDcom-fr-ca-Dz_ry9uY.js → CreatedOnDcom-fr-ca-jUs352uK.js} +3 -3
  12. package/lib/src/{CreatedOnDcom-fr-fr-8Ydu6b1T.js → CreatedOnDcom-fr-fr-CTxXtHyk.js} +3 -3
  13. package/lib/src/{CreatedOnDcom-pt-br-COwvw5k4.js → CreatedOnDcom-pt-br-nQHj8P7d.js} +3 -3
  14. package/lib/src/{CreatedOnDcom-pt-pt-CB72-eaa.js → CreatedOnDcom-pt-pt-DJmVYQuL.js} +3 -3
  15. package/lib/src/brand-page/clients/brand-page.client.d.ts +9 -9
  16. package/lib/src/brand-page/components/{testimonial-section/TestimonialSection.mixin.d.ts → banner-section/BannerSection.mixin.d.ts} +43 -37
  17. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.js +178 -0
  18. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +4 -0
  19. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +8 -4
  20. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.d.ts +4 -0
  21. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.js +4 -0
  22. package/lib/src/brand-page/components/image-gallery/masonry/MasonryGallery.mixin.d.ts +0 -1
  23. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +4 -0
  24. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +4 -1
  25. package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.d.ts +4 -2
  26. package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.js +1 -0
  27. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +4 -2
  28. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +5 -4
  29. package/lib/src/brand-page/components/page/Page.mixin.d.ts +1 -1
  30. package/lib/src/brand-page/components/page/PageComponent.mixin.d.ts +1 -1
  31. package/lib/src/brand-page/components/payment/Payment.mixin.d.ts +3 -3
  32. package/lib/src/brand-page/components/payment/__fixtures__/request-payment.d.ts +13 -13
  33. package/lib/src/brand-page/components/payment/__fixtures__/support-me.d.ts +13 -13
  34. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.d.ts +4 -0
  35. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.js +4 -0
  36. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +4 -0
  37. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +4 -1
  38. package/lib/src/brand-page/components/video/Video.mixin.d.ts +4 -0
  39. package/lib/src/brand-page/components/video/Video.mixin.js +4 -0
  40. package/lib/src/brand-page/constants/font.constants.d.ts +4 -4
  41. package/lib/src/brand-page/constants/font.constants.js +4 -4
  42. package/lib/src/brand-page/constants/misc.constants.d.ts +35 -0
  43. package/lib/src/brand-page/constants/misc.constants.js +51 -0
  44. package/lib/src/brand-page/constants/sections/footer-display.constants.js +1 -1
  45. package/lib/src/brand-page/models/content.model.d.ts +2 -0
  46. package/lib/src/brand-page/models/index.d.ts +2 -1
  47. package/lib/src/brand-page/models/index.js +3 -0
  48. package/lib/src/brand-page/models/payment.model.d.ts +1 -1
  49. package/lib/src/brand-page/utils/content-padding.util.d.ts +13 -0
  50. package/lib/src/brand-page/utils/content-padding.util.js +10 -0
  51. package/lib/src/brand-page/utils/index.d.ts +1 -0
  52. package/lib/src/brand-page/utils/index.js +1 -0
  53. package/lib/src/brand-page/utils/migration/migration-17.d.ts +2 -0
  54. package/lib/src/brand-page/utils/migration/migration-17.js +60 -0
  55. package/lib/src/brand-page/utils/migration.util.js +10 -0
  56. package/lib/src/brand-page/utils/personalisation.util.js +72 -14
  57. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +21 -19
  58. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.js +1 -0
  59. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +16 -10
  60. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +5 -3
  61. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +193 -170
  62. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +3 -0
  63. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.js +1 -0
  64. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +12 -12
  65. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.js +2 -2
  66. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.js +0 -7
  67. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +162 -149
  68. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +21 -21
  69. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.js +1 -1
  70. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.d.ts +4 -2
  71. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.js +1 -0
  72. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.d.ts +4 -2
  73. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.js +1 -0
  74. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.d.ts +5 -2
  75. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.js +1 -0
  76. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.d.ts +4 -2
  77. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.js +1 -0
  78. package/lib/src/brand-page-maker/components/device/Device.mixin.d.ts +4 -2
  79. package/lib/src/brand-page-maker/components/device/Device.mixin.js +1 -0
  80. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +4 -2
  81. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.js +1 -0
  82. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +3 -3
  83. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +11 -11
  84. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +27 -25
  85. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.js +1 -0
  86. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +27 -27
  87. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.js +1 -1
  88. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +17 -12
  89. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +12 -12
  90. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +30 -32
  91. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +16 -5
  92. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +11 -11
  93. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +1 -1
  94. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +1 -1
  95. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +6 -6
  96. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +2 -2
  97. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +6 -6
  98. package/lib/src/brand-page-maker/constants/config-settings-constant.js +40 -1
  99. package/lib/src/brand-page-maker/convertors/about-display-style.convertor.js +9 -1
  100. package/lib/src/brand-page-maker/convertors/banner-align-display-style.convertor.js +7 -1
  101. package/lib/src/brand-page-maker/convertors/contact-layout-style.convertor.js +6 -1
  102. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.d.ts +1 -1
  103. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.js +1 -1
  104. package/lib/src/brand-page-maker/models/content-settings.d.ts +1 -1
  105. package/lib/src/brand-page-maker/models/content-settings.js +39 -2
  106. package/lib/src/brand-page-maker/models/navigation-style-configs.js +1 -1
  107. package/lib/src/brand-page-maker/routing/brand-page-maker-router.d.ts +1 -2
  108. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +378 -360
  109. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +5 -4
  110. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +8 -5
  111. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +3 -1
  112. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +7 -3
  113. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +15 -15
  114. package/lib/src/brand-page-maker/stores/ui/ui-store.d.ts +6 -0
  115. package/lib/src/brand-page-maker/stores/ui/ui-store.js +8 -0
  116. package/lib/src/brand-page-maker/utils/content-settings.util.js +1 -1
  117. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +1 -1
  118. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +4 -4
  119. package/lib/src/{bundled-translations-D1q3rSEz.js → bundled-translations-BUyt4scr.js} +9 -9
  120. package/lib/src/{bundled-translations.de-DE-BxqLLwbh.js → bundled-translations.de-DE-DEw_OVai.js} +1 -1
  121. package/lib/src/{bundled-translations.es-ES-uh249NlJ.js → bundled-translations.es-ES-CFKWmkgY.js} +17 -17
  122. package/lib/src/{bundled-translations.fr-CA-BEQmv2fX.js → bundled-translations.fr-CA-DCl5LJS4.js} +1 -1
  123. package/lib/src/{bundled-translations.fr-FR-BnNuCojH.js → bundled-translations.fr-FR-B5BjgllA.js} +1 -1
  124. package/lib/src/{bundled-translations.pt-BR-CJUOxVlq.js → bundled-translations.pt-BR-5PWpMPuM.js} +1 -1
  125. package/lib/src/{bundled-translations.pt-PT-Ds9cMEqK.js → bundled-translations.pt-PT-B9_wN0HR.js} +9 -9
  126. package/lib/src/bundles/bundled-translations.de-DE.json +2 -0
  127. package/lib/src/bundles/bundled-translations.es-ES.json +2 -0
  128. package/lib/src/bundles/bundled-translations.fr-CA.json +2 -0
  129. package/lib/src/bundles/bundled-translations.fr-FR.json +2 -0
  130. package/lib/src/bundles/bundled-translations.json +2 -0
  131. package/lib/src/bundles/bundled-translations.pt-BR.json +2 -0
  132. package/lib/src/bundles/bundled-translations.pt-PT.json +2 -0
  133. package/lib/src/clients/brand-page-client.d.ts +16 -15
  134. package/lib/src/clients/design-template-client.d.ts +3 -0
  135. package/lib/src/clients/media-client.d.ts +2 -2
  136. package/lib/src/clients/models.d.ts +2 -0
  137. package/lib/src/composables/useSnapshot.js +18 -18
  138. package/lib/src/css/library.brand-page-brandCrowd.min.css +441 -437
  139. package/lib/src/css/library.brand-page-brandPage.min.css +719 -437
  140. package/lib/src/css/library.brand-page-designCom.min.css +441 -437
  141. package/lib/src/css/library.brand-page-preview.min.css +697 -437
  142. package/lib/src/index.d.ts +1 -1
  143. package/lib/src/index.mjs +16 -15
  144. package/lib/src/{lib-tHPi9EKk.js → lib-DityivZa.js} +37011 -33834
  145. package/lib/src/lib.js +1 -1
  146. package/lib/src/metadata-builder/builders/footer-builder.js +90 -65
  147. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +1 -1
  148. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +1 -1
  149. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +1 -1
  150. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +1 -1
  151. package/lib/src/metadata-builder/builders/shape-color-utils.js +1 -1
  152. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.d.ts +1 -1
  153. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.js +8 -8
  154. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +13 -13
  155. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -3
  156. package/lib/src/shared/color-picker/components/ColorPicker.mixin.d.ts +4 -2
  157. package/lib/src/shared/color-picker/components/ColorPicker.mixin.js +2 -2
  158. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.d.ts +4 -2
  159. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.js +1 -0
  160. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.d.ts +5 -2
  161. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.js +1 -0
  162. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +0 -1
  163. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +145 -129
  164. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +2 -1
  165. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +125 -110
  166. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +96 -81
  167. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.js +5 -0
  168. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +129 -109
  169. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +1 -14
  170. package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +0 -1
  171. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +84 -70
  172. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +4 -3
  173. package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.d.ts +4 -4
  174. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.d.ts +3 -1
  175. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.js +1 -0
  176. package/lib/src/shared/content-settings/components/images-field/ImagesField.mixin.d.ts +2 -2
  177. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +4 -3
  178. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +1 -1
  179. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +40 -40
  180. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigOptionField.mixin.d.ts +5 -6
  181. package/lib/src/shared/content-settings/components/shape-field/ShapeField.mixin.d.ts +0 -1
  182. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.d.ts +2 -2
  183. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.js +9 -0
  184. package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +0 -1
  185. package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +1 -2
  186. package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +0 -1
  187. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.d.ts +1 -2
  188. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +1 -1
  189. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +28 -28
  190. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +0 -1
  191. package/lib/src/shared/content-settings/components/toggle-field/ToggleField.mixin.d.ts +2 -2
  192. package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +0 -1
  193. package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +0 -1
  194. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +51 -39
  195. package/lib/src/shared/content-settings/utils.js +0 -1
  196. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.d.ts +6 -4
  197. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.js +1 -0
  198. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.d.ts +4 -2
  199. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.js +1 -0
  200. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +29 -21
  201. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +1 -1
  202. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +50 -51
  203. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.d.ts +6 -4
  204. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.js +1 -0
  205. package/lib/src/shared/logo-settings/store/editable-logo-store.js +1 -1
  206. package/lib/src/shared/logo-settings/store/logo-settings-store.d.ts +1 -1
  207. package/lib/src/shared/logo-versions/LogoVersions.mixin.d.ts +13 -5
  208. package/lib/src/shared/logo-versions/LogoVersions.mixin.js +1 -0
  209. package/lib/src/shared/models.d.ts +2 -0
  210. package/lib/src/shared/my-designs/MyDesigns.mixin.d.ts +14 -6
  211. package/lib/src/shared/my-designs/MyDesigns.mixin.js +1 -0
  212. package/lib/src/shared/my-uploads/MyMedia.mixin.d.ts +14 -5
  213. package/lib/src/shared/my-uploads/MyMedia.mixin.js +1 -0
  214. package/lib/src/shared/my-uploads/MyUploads.mixin.d.ts +14 -5
  215. package/lib/src/shared/my-uploads/MyUploads.mixin.js +1 -0
  216. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.d.ts +5 -3
  217. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +1 -0
  218. package/lib/src/shared/navigation-style-settings/store/index.d.ts +2 -2
  219. package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +2 -2
  220. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +27 -28
  221. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.js +0 -2
  222. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +204 -177
  223. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +195 -175
  224. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +1 -1
  225. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +9 -9
  226. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +39 -39
  227. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +0 -1
  228. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +18 -18
  229. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +6 -6
  230. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +66 -60
  231. package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -1
  232. package/lib/src/shared/style-settings/store/style-settings-store.js +1 -1
  233. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +20 -450
  234. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.js +2 -2
  235. package/lib/src/shared/template-settings/models.d.ts +1 -0
  236. package/lib/src/shared/template-settings/store/template-settings-store.d.ts +4 -0
  237. package/lib/src/shared/template-settings/store/template-settings-store.js +79 -11
  238. package/lib/src/shared/unsplash-library/UnsplashLibrary.mixin.d.ts +9 -4
  239. package/lib/src/utils/minify-brand-page-metadata.js +11 -1
  240. package/package.json +61 -57
  241. package/src/brand-page/components/about-section/AboutSection.vue +10 -4
  242. package/src/brand-page/components/about-section/AboutSection.vue.test.ts +7 -5
  243. package/src/brand-page/components/banner-section/BannerSection.mixin.ts +210 -0
  244. package/src/brand-page/components/banner-section/BannerSection.vue +11 -4
  245. package/src/brand-page/components/booking-section/BookingSection.vue +11 -3
  246. package/src/brand-page/components/brand-page-footer/BrandPageFooter.vue +1 -1
  247. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +12 -6
  248. package/src/brand-page/components/contact-form/ContactForm.vue +105 -104
  249. package/src/brand-page/components/image/Image.mixin.ts +1 -1
  250. package/src/brand-page/components/image/Image.test.ts +1 -1
  251. package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +5 -0
  252. package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
  253. package/src/brand-page/components/images-section/ImagesSection.vue +0 -1
  254. package/src/brand-page/components/logo/LogoRender.vue +188 -188
  255. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -1
  256. package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
  257. package/src/brand-page/components/map/Map.vue +5 -1
  258. package/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.ts +1 -0
  259. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +15 -6
  260. package/src/brand-page/components/page-footer/PageFooter.vue +1 -0
  261. package/src/brand-page/components/page-header/HeaderLayout.vue +12 -6
  262. package/src/brand-page/components/page-header/PageHeader.vue +1 -0
  263. package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +5 -0
  264. package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -0
  265. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +8 -1
  266. package/src/brand-page/components/payment/support-me/SupportMe.vue +1 -0
  267. package/src/brand-page/components/shapes-section/ShapesSection.vue +1 -1
  268. package/src/brand-page/components/shop/CartModal.vue +1 -3
  269. package/src/brand-page/components/shop/FeaturedDisplay.vue +2 -2
  270. package/src/brand-page/components/shop/PaymentModal.vue +1 -5
  271. package/src/brand-page/components/shop/ProductDetailModal.vue +1 -1
  272. package/src/brand-page/components/shop/Shop.vue +8 -3
  273. package/src/brand-page/components/shop/TextDisplay.vue +1 -1
  274. package/src/brand-page/components/shop/ThumbnailDisplay.vue +2 -2
  275. package/src/brand-page/components/social-links/SocialLinks.vue +7 -3
  276. package/src/brand-page/components/testimonial-section/TestimonialSection.vue +120 -11
  277. package/src/brand-page/components/text/Text.vue +12 -5
  278. package/src/brand-page/components/text-media-section/TextMediaSection.vue +11 -3
  279. package/src/brand-page/components/text-wrapper/TextWrapper.vue +3 -1
  280. package/src/brand-page/components/video/Video.mixin.ts +5 -0
  281. package/src/brand-page/components/video/Video.vue +1 -1
  282. package/src/brand-page/constants/font.constants.ts +4 -4
  283. package/src/brand-page/constants/misc.constants.ts +58 -0
  284. package/src/brand-page/constants/sections/footer-display.constants.ts +1 -1
  285. package/src/brand-page/models/content.model.ts +2 -0
  286. package/src/brand-page/models/index.ts +4 -0
  287. package/src/brand-page/models/payment.model.ts +2 -1
  288. package/src/brand-page/models/shop.model.ts +0 -2
  289. package/src/brand-page/models/user-personalisation.model.ts +1 -2
  290. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +12 -3
  291. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +7 -6
  292. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +14 -12
  293. package/src/brand-page/utils/content-padding.util.test.ts +29 -0
  294. package/src/brand-page/utils/content-padding.util.ts +13 -0
  295. package/src/brand-page/utils/index.ts +1 -0
  296. package/src/brand-page/utils/migration/migration-01_1.ts +1 -1
  297. package/src/brand-page/utils/migration/migration-02.ts +0 -1
  298. package/src/brand-page/utils/migration/migration-03.ts +0 -1
  299. package/src/brand-page/utils/migration/migration-04.ts +0 -1
  300. package/src/brand-page/utils/migration/migration-05.ts +1 -5
  301. package/src/brand-page/utils/migration/migration-05_2.ts +1 -1
  302. package/src/brand-page/utils/migration/migration-08.test.ts +1 -1
  303. package/src/brand-page/utils/migration/migration-17.ts +77 -0
  304. package/src/brand-page/utils/migration.util.test.ts +290 -0
  305. package/src/brand-page/utils/migration.util.ts +11 -0
  306. package/src/brand-page/utils/personalisation.util.test.ts +35 -0
  307. package/src/brand-page/utils/personalisation.util.ts +119 -23
  308. package/src/brand-page/view-models.ts +38 -56
  309. package/src/brand-page-maker/assessors/banner-section-description-visibility.assessor.ts +6 -6
  310. package/src/brand-page-maker/assessors/color-replacement-icon-visibility.assessor.ts +2 -2
  311. package/src/brand-page-maker/assessors/color-replacement-profile-visibility.assessor.ts +2 -2
  312. package/src/brand-page-maker/assessors/color-replacement-visibility.assessor.ts +2 -2
  313. package/src/brand-page-maker/assessors/contact-form-visibility.assessor.ts +14 -14
  314. package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +1 -0
  315. package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +1 -0
  316. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +5 -1
  317. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.ts +1 -0
  318. package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.ts +2 -5
  319. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -5
  320. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.ts +0 -8
  321. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-site-template.examples.ts +0 -2
  322. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.vue +1 -0
  323. package/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.ts +1 -1
  324. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +1 -2
  325. package/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.ts +1 -0
  326. package/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.ts +1 -0
  327. package/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.ts +1 -0
  328. package/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.ts +1 -0
  329. package/src/brand-page-maker/components/device/Device.mixin.ts +1 -0
  330. package/src/brand-page-maker/components/navigation/Navigation.mixin.ts +1 -0
  331. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +3 -1
  332. package/src/brand-page-maker/components/sensitive-content/SensitiveContent.vue +1 -4
  333. package/src/brand-page-maker/components/seo-settings/DeleteDomainModal.vue +1 -1
  334. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.ts +1 -0
  335. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.vue +1 -1
  336. package/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.ts +0 -1
  337. package/src/brand-page-maker/components/seo-settings/UrlSettings.vue +0 -1
  338. package/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.vue +1 -5
  339. package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -1
  340. package/src/brand-page-maker/components/shop/ReplaceImageSettingsForShop.vue +1 -1
  341. package/src/brand-page-maker/components/social-share/SocialShare.vue +1 -1
  342. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +22 -8
  343. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +5 -10
  344. package/src/brand-page-maker/components/template-preview/TemplatePreviewAiBadge.vue +12 -0
  345. package/src/brand-page-maker/components/video-play/VideoPlayButton.vue +1 -1
  346. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +1 -1
  347. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +6 -6
  348. package/src/brand-page-maker/constants/config-settings-constant.ts +48 -3
  349. package/src/brand-page-maker/convertors/about-display-style.convertor.ts +10 -0
  350. package/src/brand-page-maker/convertors/banner-align-display-style.convertor.ts +8 -0
  351. package/src/brand-page-maker/convertors/contact-layout-style.convertor.test.ts +50 -0
  352. package/src/brand-page-maker/convertors/contact-layout-style.convertor.ts +8 -0
  353. package/src/brand-page-maker/convertors/text-image-display-style.convertor.ts +1 -1
  354. package/src/brand-page-maker/models/button-styles-config.ts +4 -2
  355. package/src/brand-page-maker/models/content-settings-configs.ts +4 -2
  356. package/src/brand-page-maker/models/content-settings.ts +43 -2
  357. package/src/brand-page-maker/models/navigation-style-configs.ts +5 -6
  358. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +0 -1
  359. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +8 -5
  360. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +1 -3
  361. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +12 -4
  362. package/src/brand-page-maker/stores/ui/ui-store.ts +16 -0
  363. package/src/brand-page-maker/utils/content-settings.util.ts +1 -1
  364. package/src/brand-page-maker/utils/rich-text-editor.util.ts +4 -4
  365. package/src/bundles/bundled-translations.de-DE.json +2 -0
  366. package/src/bundles/bundled-translations.es-ES.json +2 -0
  367. package/src/bundles/bundled-translations.fr-CA.json +2 -0
  368. package/src/bundles/bundled-translations.fr-FR.json +2 -0
  369. package/src/bundles/bundled-translations.json +2 -0
  370. package/src/bundles/bundled-translations.pt-BR.json +2 -0
  371. package/src/bundles/bundled-translations.pt-PT.json +2 -0
  372. package/src/clients/design-template-client.ts +3 -0
  373. package/src/clients/models.ts +2 -0
  374. package/src/composables/useSnapshot.ts +19 -22
  375. package/src/lib.ts +1 -0
  376. package/src/metadata-builder/builders/footer-builder.test.ts +137 -0
  377. package/src/metadata-builder/builders/footer-builder.ts +129 -89
  378. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +1 -1
  379. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +1 -1
  380. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +1 -1
  381. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +1 -1
  382. package/src/metadata-builder/builders/shape-color-utils.ts +2 -2
  383. package/src/plugins/google-maps-plugin/google-maps-plugin.ts +8 -8
  384. package/src/shared/background-settings/components/BackgroundSettings.vue +1 -1
  385. package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue +1 -1
  386. package/src/shared/color-picker/components/ColorPicker.mixin.ts +2 -7
  387. package/src/shared/color-picker/components/ColorPickerSwatch.mixin.ts +1 -0
  388. package/src/shared/common/NumberInput.vue +1 -0
  389. package/src/shared/common/SideBarSettingsHeader.vue +2 -2
  390. package/src/shared/confirm-modal/ConfirmModal.mixin.ts +1 -0
  391. package/src/shared/content-settings/components/booking-url-field/BookingUrlField.vue +1 -0
  392. package/src/shared/content-settings/components/button-configuration-field/ButtonConfigurationField.vue +1 -0
  393. package/src/shared/content-settings/components/color-field/ColorField.vue +3 -10
  394. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -1
  395. package/src/shared/content-settings/components/content-settings/ContentSettingsLockedButton.vue +1 -0
  396. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +2 -0
  397. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +2 -0
  398. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +2 -0
  399. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +2 -0
  400. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +2 -0
  401. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +2 -0
  402. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +2 -0
  403. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts +5 -0
  404. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +1 -1
  405. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +1 -14
  406. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +4 -6
  407. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +2 -2
  408. package/src/shared/content-settings/components/icon-library/IconLibrary.mixin.ts +1 -0
  409. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +1 -1
  410. package/src/shared/content-settings/components/logo-selection-field/LogoSelectionField.vue +1 -1
  411. package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -1
  412. package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +1 -1
  413. package/src/shared/content-settings/components/personalisation-role-field/PersonalisationRoleField.vue +4 -4
  414. package/src/shared/content-settings/components/slider-field/SliderField.mixin.ts +9 -0
  415. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +2 -8
  416. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +1 -1
  417. package/src/shared/content-settings/models.ts +3 -2
  418. package/src/shared/content-settings/utils.ts +0 -1
  419. package/src/shared/dropzone-image-uploader/components/DropzoneImageUploader.vue +1 -0
  420. package/src/shared/ecommerce-settings/store/cart-store.test.ts +1 -1
  421. package/src/shared/font-family-selector/FontFamilySelector.mixin.ts +1 -0
  422. package/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.ts +1 -0
  423. package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +1 -1
  424. package/src/shared/logo-settings/components/LogoSettings.mixin.ts +0 -1
  425. package/src/shared/logo-settings/components/LogoSettingsHeader.mixin.ts +1 -0
  426. package/src/shared/logo-settings/components/LogoStyleSettingsWithState.vue +2 -2
  427. package/src/shared/logo-settings/components/LogoTemplateSearch.vue +1 -1
  428. package/src/shared/logo-settings/store/editable-logo-store.ts +1 -1
  429. package/src/shared/logo-settings/store/logo-settings-store.test.ts +4 -4
  430. package/src/shared/logo-versions/LogoVersions.mixin.ts +1 -0
  431. package/src/shared/models.ts +6 -0
  432. package/src/shared/my-designs/MyDesigns.mixin.ts +1 -0
  433. package/src/shared/my-uploads/MyMedia.mixin.ts +1 -0
  434. package/src/shared/my-uploads/MyMediaSelectionItem.vue +2 -1
  435. package/src/shared/my-uploads/MyUploads.mixin.ts +1 -0
  436. package/src/shared/my-uploads/models.ts +1 -2
  437. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +1 -0
  438. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -1
  439. package/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.ts +0 -3
  440. package/src/shared/page-settings/components/page-settings/NestedDraggable.vue +1 -1
  441. package/src/shared/page-settings/components/page-settings/PageSettings.vue +1 -2
  442. package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.vue +1 -1
  443. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +1 -1
  444. package/src/shared/page-settings/store/page-settings-store.test.ts +4 -8
  445. package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +0 -1
  446. package/src/shared/shape-library/ShapeLibrary.vue +2 -2
  447. package/src/shared/style-settings/store/style-settings-store.ts +1 -1
  448. package/src/shared/template-settings/components/TemplatesSettings.mixin.ts +2 -2
  449. package/src/shared/template-settings/models.ts +1 -0
  450. package/src/shared/template-settings/store/template-settings-store.ts +105 -18
  451. package/src/shared/unsplash-library/UnsplashLibrary.vue +2 -6
  452. package/src/shared/video-library/VideoLibrary.vue +1 -1
  453. package/src/utils/minify-brand-page-metadata.ts +11 -1
  454. package/lib/src/brand-page/components/testimonial-section/TestimonialSection.mixin.js +0 -112
  455. package/src/brand-page/components/testimonial-section/TestimonialSection.mixin.ts +0 -132
@@ -19,6 +19,7 @@ import { migration13 } from './migration/migration-13';
19
19
  import { migration14 } from './migration/migration-14';
20
20
  import { migration15 } from './migration/migration-15';
21
21
  import { migration16 } from './migration/migration-16';
22
+ import { migration17 } from './migration/migration-17';
22
23
 
23
24
  export interface MigrationData {
24
25
  brandPageModel: BrandPageModel;
@@ -149,6 +150,16 @@ const MIGRATION_TABLE = [
149
150
  description:
150
151
  'Default sub nav background color to color match on for TAB_2 and hamburger navs depending on font color only on first load flow',
151
152
  },
153
+ {
154
+ version: 17,
155
+ migrateFn: migration17,
156
+ // runAlways: re-apply on every load (ticket stack) so already-migrated pages
157
+ // pick up newly-added block defaults (e.g. Store) without a new migration.
158
+ // Idempotent — only backfills when topPadding/bottomPadding aren't already set.
159
+ runAlways: true,
160
+ description:
161
+ 'Padding Control backfill (BP-5699 Tier 2 + BP-5700 Store): backfill existing top/bottom spacing as explicit padding for text (12px), images/social links/shapes/booking (32px), store (16px), contact form (per layout), banner and about (per display style)',
162
+ },
152
163
  ] as MigrationTableItem[];
153
164
 
154
165
  export const GetLatestModelVersion = () =>
@@ -701,6 +701,41 @@ describe('personalisation.util', async () => {
701
701
  ).toBe(title);
702
702
  });
703
703
 
704
+ test('applyUserPersonalisationToBrandPageModelAsync should fall back to a populated section when the block section was not generated', async () => {
705
+ // Arrange - simulate userPrompt AI content that only generated the core sections
706
+ // (profile/about/information/media); email/website/phone are never generated.
707
+ const personalisation = {
708
+ ...PERSONALISATION,
709
+ websiteSection: undefined,
710
+ emailSection: undefined,
711
+ phoneSection: undefined,
712
+ } as unknown as typeof PERSONALISATION;
713
+
714
+ // A block whose role points at the ungenerated website section - without the fallback
715
+ // this renders the designer's placeholder instead of personalised content.
716
+ const model = new BrandPageModel({
717
+ brandPageType: BRAND_PAGE_TYPES.brandSite,
718
+ styles: {
719
+ backgroundStyles: {
720
+ backgroundImageUrl: faker.internet.url(),
721
+ personalisationRole: 'website',
722
+ },
723
+ },
724
+ });
725
+
726
+ // Act
727
+ const result = await applyUserPersonalisationToBrandPageModelAsync(
728
+ personalisation,
729
+ model,
730
+ );
731
+
732
+ // Assert - it borrowed the first populated fallback section (profile).
733
+ expect(result.isModified).toBe(true);
734
+ expect(result.model.styles.backgroundStyles.backgroundImageUrl).toBe(
735
+ PERSONALISATION.profileSection.imageUrls?.[0].imageUrl,
736
+ );
737
+ });
738
+
704
739
  test('applyUserPersonalisationToBrandPageModelAsync should return modified text items when input has text with multiple items', async () => {
705
740
  // Arrange
706
741
  const textContent = {
@@ -326,6 +326,84 @@ const getPersonalisationValueAsync = async (
326
326
  return { value: propertyValue, section };
327
327
  };
328
328
 
329
+ // The userPrompt AI content generation only populates these content-bearing sections
330
+ // (see GenerateAiDesignMakerContentService / GenerateWebsiteContentService - About,
331
+ // Information, Profile, Media). Sections like email/website/phone are never generated, so
332
+ // blocks whose role points at an ungenerated section fall back to this pool.
333
+ const PERSONALISATION_FALLBACK_ROLES: PersonalisationRole[] = [
334
+ 'profile',
335
+ 'about',
336
+ 'information',
337
+ 'media',
338
+ ];
339
+
340
+ // "Effectively empty" = no renderable content (ungenerated userPrompt sections like
341
+ // email/website/phone). A section that has data but lacks one property is NOT empty - it
342
+ // intentionally keeps its original content.
343
+ const isSectionEffectivelyEmpty = (
344
+ section: UserPersonalisationSectionWithIndices | undefined,
345
+ ): boolean => {
346
+ if (!section) {
347
+ return true;
348
+ }
349
+
350
+ return (
351
+ !section.title &&
352
+ !section.name &&
353
+ !section.url &&
354
+ !section.description &&
355
+ !section.descriptionShort &&
356
+ !section.ctaTitle &&
357
+ !section.imageUrls?.length &&
358
+ !section.shapes?.length &&
359
+ !section.items?.length &&
360
+ !section.mainShapesCollection?.tall?.length &&
361
+ !section.mainShapesCollection?.square?.length &&
362
+ !section.mainShapesCollection?.wide?.length
363
+ );
364
+ };
365
+
366
+ // Resolve a property from a specific role's section. Returns null when that section is
367
+ // ungenerated (effectively empty) or cannot supply the property, so the caller can try the
368
+ // next role.
369
+ const resolvePersonalisationValueForRoleAsync = async (
370
+ role: PersonalisationRole,
371
+ property: keyof UserPersonalisationSection | keyof UserPersonalisationItem,
372
+ personalisation: UserPersonalisationWithIndices,
373
+ ): Promise<{
374
+ value: any;
375
+ personalisation: UserPersonalisationWithIndices;
376
+ valuesToUpdate?: Record<string, any>;
377
+ } | null> => {
378
+ const key = `${role}Section` as keyof UserPersonalisationWithIndices;
379
+ const section = personalisation[key] as
380
+ | UserPersonalisationSectionWithIndices
381
+ | undefined;
382
+
383
+ if (isSectionEffectivelyEmpty(section)) {
384
+ return null;
385
+ }
386
+
387
+ const {
388
+ value,
389
+ section: updatedSection,
390
+ valuesToUpdate,
391
+ } = await getPersonalisationValueAsync(
392
+ section as UserPersonalisationSectionWithIndices,
393
+ property,
394
+ );
395
+
396
+ if (value === undefined || value === null) {
397
+ return null;
398
+ }
399
+
400
+ return {
401
+ value,
402
+ personalisation: { ...personalisation, [key]: updatedSection },
403
+ valuesToUpdate,
404
+ };
405
+ };
406
+
329
407
  const getPersonalisationValueFromPropertyAsync = async (
330
408
  propertyKey: string,
331
409
  propertyValue: any,
@@ -342,16 +420,6 @@ const getPersonalisationValueFromPropertyAsync = async (
342
420
  return { value: undefined, personalisation };
343
421
  }
344
422
 
345
- const matchingValue = Object.entries(personalisation).find(
346
- ([key]) => key === `${personalisationRole}Section`,
347
- );
348
-
349
- if (!matchingValue) {
350
- return { value: undefined, personalisation };
351
- }
352
-
353
- const section = matchingValue[1] as UserPersonalisationSectionWithIndices;
354
-
355
423
  const mapping = getPersonalisationMappingForContentType(contentType);
356
424
 
357
425
  const matchingProperty = Object.entries(mapping).find(([, value]) =>
@@ -372,20 +440,48 @@ const getPersonalisationValueFromPropertyAsync = async (
372
440
  typeof propertyValue === 'string' && propertyValue.endsWith('.svg'),
373
441
  });
374
442
 
375
- const {
376
- value,
377
- section: updatedSection,
378
- valuesToUpdate,
379
- } = await getPersonalisationValueAsync(section, property);
443
+ const primaryKey =
444
+ `${personalisationRole}Section` as keyof UserPersonalisationWithIndices;
445
+ const primarySection = personalisation[primaryKey] as
446
+ | UserPersonalisationSectionWithIndices
447
+ | undefined;
448
+
449
+ // When the block's own section has content, use it as-is - this preserves existing
450
+ // behaviour, including legitimately keeping the original when that section lacks a
451
+ // specific property (e.g. no items, or an invalid shape).
452
+ if (!isSectionEffectivelyEmpty(primarySection)) {
453
+ const {
454
+ value,
455
+ section: updatedSection,
456
+ valuesToUpdate,
457
+ } = await getPersonalisationValueAsync(
458
+ primarySection as UserPersonalisationSectionWithIndices,
459
+ property,
460
+ );
380
461
 
381
- return {
382
- value,
383
- personalisation: {
384
- ...personalisation,
385
- [`${personalisationRole}Section`]: updatedSection,
386
- },
387
- valuesToUpdate,
388
- };
462
+ return {
463
+ value,
464
+ personalisation: { ...personalisation, [primaryKey]: updatedSection },
465
+ valuesToUpdate,
466
+ };
467
+ }
468
+
469
+ // The block's section was never generated - fall back to the first populated section that
470
+ // can supply this property, so it doesn't render the "should be AI generated" placeholder.
471
+ // Never reached when the section exists (above) or all are populated (AI Website Builder).
472
+ for (const role of PERSONALISATION_FALLBACK_ROLES) {
473
+ const resolved = await resolvePersonalisationValueForRoleAsync(
474
+ role,
475
+ property,
476
+ personalisation,
477
+ );
478
+
479
+ if (resolved) {
480
+ return resolved;
481
+ }
482
+ }
483
+
484
+ return { value: undefined, personalisation };
389
485
  };
390
486
 
391
487
  type ContentProperty = Record<string, string | any>;
@@ -1,5 +1,4 @@
1
1
  import type {
2
- PageStyles,
3
2
  ButtonWithModalContent,
4
3
  ProfileContent,
5
4
  TextContent,
@@ -32,11 +31,9 @@ import type {
32
31
  TextShapeItem,
33
32
  TextStyleDeclaration,
34
33
  AspectRatio,
35
- LogoVariation,
36
34
  LogoImageModel,
37
35
  LogoTemplateImageModel,
38
36
  CookieOptions,
39
- SensitiveContent,
40
37
  BookingSectionContent,
41
38
  MediaTypes,
42
39
  TextStyles,
@@ -84,8 +81,7 @@ export interface PageViewModel {
84
81
  }
85
82
 
86
83
  export interface ButtonViewModel
87
- extends ContentViewModel,
88
- Omit<ButtonWithModalContent, 'type'> {
84
+ extends ContentViewModel, Omit<ButtonWithModalContent, 'type'> {
89
85
  styles: Omit<ButtonStyles, 'templates'>;
90
86
  onClicked: (vm: ButtonViewModel) => void;
91
87
  buttonLinkType: ButtonLinkType;
@@ -95,7 +91,8 @@ export interface ButtonViewModel
95
91
  export type ImageViewModel = ContentViewModel & Omit<ImageContent, 'type'>;
96
92
 
97
93
  export interface ImageGalleryViewModel
98
- extends ContentViewModel,
94
+ extends
95
+ ContentViewModel,
99
96
  Omit<ImageGalleryContent, 'type' | 'galleryStyles'> {
100
97
  styles: GalleryStyles;
101
98
  }
@@ -114,14 +111,12 @@ export interface LogoViewModel extends ContentViewModel {
114
111
  }
115
112
 
116
113
  export interface ProfileViewModel
117
- extends ContentViewModel,
118
- Omit<ProfileContent, 'type'> {
114
+ extends ContentViewModel, Omit<ProfileContent, 'type'> {
119
115
  containerStyle?: BrandPageCssStyle;
120
116
  }
121
117
 
122
118
  export interface ShapesSectionViewModel
123
- extends ContentViewModel,
124
- Omit<ShapesSectionContent, 'type' | 'items'> {
119
+ extends ContentViewModel, Omit<ShapesSectionContent, 'type' | 'items'> {
125
120
  items: TextShapeItem[];
126
121
  isFullWidth: boolean;
127
122
  }
@@ -140,41 +135,35 @@ export type VideoViewModel = ContentViewModel &
140
135
  export type MapViewModel = ContentViewModel & Omit<MapContent, 'type'>;
141
136
 
142
137
  export interface MailingListViewModel
143
- extends ContentViewModel,
144
- Omit<MailingListContent, 'type'> {
138
+ extends ContentViewModel, Omit<MailingListContent, 'type'> {
145
139
  styles: Omit<ButtonStyles, 'templates'>;
146
140
  }
147
141
 
148
142
  export interface SupportMeViewModel
149
- extends ContentViewModel,
150
- Omit<SupportMeContent, 'type'> {
143
+ extends ContentViewModel, Omit<SupportMeContent, 'type'> {
151
144
  buttonStyles: ButtonStyles;
152
145
  }
153
146
 
154
147
  export interface RequestPaymentViewModel
155
- extends ContentViewModel,
156
- Omit<RequestPaymentContent, 'type'> {
148
+ extends ContentViewModel, Omit<RequestPaymentContent, 'type'> {
157
149
  buttonStyles: ButtonStyles;
158
150
  }
159
151
 
160
152
  export interface ShopViewModel
161
- extends ContentViewModel,
162
- Omit<ShopContent, 'type'> {
153
+ extends ContentViewModel, Omit<ShopContent, 'type'> {
163
154
  buttonStyles: ButtonStyles;
164
155
  isFullWidth: boolean;
165
156
  isShippingEnabled: boolean;
166
157
  }
167
158
 
168
159
  export interface ContactFormViewModel
169
- extends ContentViewModel,
170
- Omit<ContactFormContent, 'type'> {
160
+ extends ContentViewModel, Omit<ContactFormContent, 'type'> {
171
161
  buttonStyles: ButtonStyles;
172
162
  isFullWidth: boolean;
173
163
  }
174
164
 
175
165
  export interface BannerSectionViewModel
176
- extends ContentViewModel,
177
- Omit<BannerSectionContent, 'type'> {
166
+ extends ContentViewModel, Omit<BannerSectionContent, 'type'> {
178
167
  buttonViewModel: ButtonViewModel;
179
168
  isFullWidth: boolean;
180
169
  isBigImageType: boolean;
@@ -225,64 +214,57 @@ export interface TextImageSectionViewModel {
225
214
  }
226
215
 
227
216
  export interface TestimonialSectionViewModel
228
- extends ContentViewModel,
229
- Omit<TestimonialSectionContent, 'type'> {
217
+ extends ContentViewModel, Omit<TestimonialSectionContent, 'type'> {
230
218
  isFullWidth: boolean;
231
219
  }
232
220
 
233
221
  export interface AboutSectionViewModel
234
- extends ContentViewModel,
235
- Omit<AboutSectionContent, 'type'> {
222
+ extends ContentViewModel, Omit<AboutSectionContent, 'type'> {
236
223
  isFullWidth: boolean;
237
224
  }
238
225
 
239
226
  export interface SocialLinksViewModel
240
- extends ContentViewModel,
241
- Omit<SocialLinksContent, 'type'> {
227
+ extends ContentViewModel, Omit<SocialLinksContent, 'type'> {
242
228
  isFullWidth: boolean;
243
229
  }
244
230
 
245
231
  export interface DividerSectionViewModel
246
- extends ContentViewModel,
247
- Omit<DividerSectionContent, 'type'> {
232
+ extends ContentViewModel, Omit<DividerSectionContent, 'type'> {
248
233
  isFullWidth: boolean;
249
234
  }
250
235
 
251
236
  export interface BookingSectionViewModel
252
- extends ContentViewModel,
253
- Omit<BookingSectionContent, 'type'> {
237
+ extends ContentViewModel, Omit<BookingSectionContent, 'type'> {
254
238
  buttonViewModel: ButtonViewModel;
255
239
  isFullWidth: boolean;
256
240
  }
257
241
 
258
- export interface PageHeaderViewModel
259
- extends Omit<
260
- PageHeaderDesktop | PageHeaderMobile,
261
- | 'logoImage'
262
- | 'logoImageStyle'
263
- | 'isLogoOptional'
264
- | 'viewport'
265
- | 'isLogoVisible'
266
- | 'logoTemplateImage'
267
- | 'logoImageHeight'
268
- | 'logoImageWidth'
269
- > {
242
+ export interface PageHeaderViewModel extends Omit<
243
+ PageHeaderDesktop | PageHeaderMobile,
244
+ | 'logoImage'
245
+ | 'logoImageStyle'
246
+ | 'isLogoOptional'
247
+ | 'viewport'
248
+ | 'isLogoVisible'
249
+ | 'logoTemplateImage'
250
+ | 'logoImageHeight'
251
+ | 'logoImageWidth'
252
+ > {
270
253
  logo: LogoViewModel;
271
254
  pages: PageViewModel[];
272
255
  }
273
256
 
274
- export interface PageFooterViewModel
275
- extends Omit<
276
- PageFooterDesktop | PageFooterMobile,
277
- | 'logoImage'
278
- | 'logoImageStyle'
279
- | 'isLogoOptional'
280
- | 'viewport'
281
- | 'isLogoVisible'
282
- | 'logoTemplateImage'
283
- | 'logoImageHeight'
284
- | 'logoImageWidth'
285
- > {
257
+ export interface PageFooterViewModel extends Omit<
258
+ PageFooterDesktop | PageFooterMobile,
259
+ | 'logoImage'
260
+ | 'logoImageStyle'
261
+ | 'isLogoOptional'
262
+ | 'viewport'
263
+ | 'isLogoVisible'
264
+ | 'logoTemplateImage'
265
+ | 'logoImageHeight'
266
+ | 'logoImageWidth'
267
+ > {
286
268
  logo: LogoViewModel;
287
269
  }
288
270
 
@@ -48,11 +48,11 @@ export const bannerOverlayOptionsVisibilityAssessor: VisibilityAssessor<
48
48
  > = (content) => {
49
49
  return Boolean(
50
50
  (content.media?.type === 'getty-video' || content.imageUrl) &&
51
- [
52
- ALIGN_CARD_CENTER_IMAGE,
53
- ALIGN_CARD_LEFT_IMAGE,
54
- BIG_IMAGE,
55
- ALIGN_LEFT_BIG_IMAGE,
56
- ].includes(content.displayStyle),
51
+ [
52
+ ALIGN_CARD_CENTER_IMAGE,
53
+ ALIGN_CARD_LEFT_IMAGE,
54
+ BIG_IMAGE,
55
+ ALIGN_LEFT_BIG_IMAGE,
56
+ ].includes(content.displayStyle),
57
57
  );
58
58
  };
@@ -6,7 +6,7 @@ export const colorReplacementIconVisibilityTypeAssessor: VisibilityAssessor<
6
6
  > = (content) => {
7
7
  return Boolean(
8
8
  content?.colorReplacements &&
9
- content?.iconUrl &&
10
- content?.mediaType === 'shape',
9
+ content?.iconUrl &&
10
+ content?.mediaType === 'shape',
11
11
  );
12
12
  };
@@ -6,7 +6,7 @@ export const colorReplacementProfileVisibilityTypeAssessor: VisibilityAssessor<
6
6
  > = (content) => {
7
7
  return Boolean(
8
8
  content?.colorReplacements &&
9
- content?.avatarImageUrl &&
10
- content?.mediaType === 'shape',
9
+ content?.avatarImageUrl &&
10
+ content?.mediaType === 'shape',
11
11
  );
12
12
  };
@@ -10,7 +10,7 @@ export const colorReplacementVisibilityTypeAssessor: VisibilityAssessor<
10
10
  > = (content) => {
11
11
  return Boolean(
12
12
  content?.colorReplacements &&
13
- content?.imageUrl &&
14
- content?.mediaType === 'shape',
13
+ content?.imageUrl &&
14
+ content?.mediaType === 'shape',
15
15
  );
16
16
  };
@@ -15,12 +15,12 @@ export const contactCardDisplayTypeVisibilityAssessor: VisibilityAssessor<
15
15
  return (
16
16
  Boolean(
17
17
  content?.layoutStyle &&
18
- [
19
- ALIGN_CARD_CENTER_IMAGE,
20
- ALIGN_CARD_CENTER,
21
- ALIGN_LEFT_FULL_IMAGE,
22
- ALIGN_RIGHT_FULL_IMAGE,
23
- ].includes(content?.layoutStyle),
18
+ [
19
+ ALIGN_CARD_CENTER_IMAGE,
20
+ ALIGN_CARD_CENTER,
21
+ ALIGN_LEFT_FULL_IMAGE,
22
+ ALIGN_RIGHT_FULL_IMAGE,
23
+ ].includes(content?.layoutStyle),
24
24
  ) && context!.isBrandSite
25
25
  );
26
26
  };
@@ -37,11 +37,11 @@ export const imageUrlVisibilityAssessor: VisibilityAssessor<
37
37
  return (
38
38
  Boolean(
39
39
  content?.layoutStyle &&
40
- [
41
- ALIGN_CARD_CENTER_IMAGE,
42
- ALIGN_LEFT_FULL_IMAGE,
43
- ALIGN_RIGHT_FULL_IMAGE,
44
- ].includes(content?.layoutStyle),
40
+ [
41
+ ALIGN_CARD_CENTER_IMAGE,
42
+ ALIGN_LEFT_FULL_IMAGE,
43
+ ALIGN_RIGHT_FULL_IMAGE,
44
+ ].includes(content?.layoutStyle),
45
45
  ) && context!.isBrandSite
46
46
  );
47
47
  };
@@ -52,9 +52,9 @@ export const contactBackgroundDisplayTypeVisibilityAssessor: VisibilityAssessor<
52
52
  return (
53
53
  Boolean(
54
54
  content?.layoutStyle &&
55
- [ALIGN_CARD_CENTER, ALIGN_CENTERED, TEXT_ONLY].includes(
56
- content?.layoutStyle,
57
- ),
55
+ [ALIGN_CARD_CENTER, ALIGN_CENTERED, TEXT_ONLY].includes(
56
+ content?.layoutStyle,
57
+ ),
58
58
  ) && context!.isBrandSite
59
59
  );
60
60
  };
@@ -8,6 +8,7 @@ import { UPGRADE_CTA_LOCATIONS } from './../../composables/useEventTracker';
8
8
  import { BRAND_PAGE_TYPES } from '@brand-page/models';
9
9
 
10
10
  export default defineComponent({
11
+ emits: ['create-team-cards'],
11
12
  setup() {
12
13
  const userStore = useBrandPageMakerUserStore();
13
14
  const brandPageMakerStore = useBrandPageMakerStore();
@@ -1,3 +1,4 @@
1
+ <!-- eslint-disable vue/no-v-html -->
1
2
  <template>
2
3
  <div class="tw-mb-4" :class="containerClass">
3
4
  <div class="tw-flex" :class="containerClass">
@@ -47,7 +47,6 @@ import AssetLibraryClient from '../../../clients/asset-library-clients';
47
47
  import { useShopConfigStore } from '@shared/ecommerce-settings/store/shop-settings-store';
48
48
  import type { ShopConfigData } from '@brand-page/models/shop.model';
49
49
  import { useProductConfigStore } from '@brand-page-maker/stores/product-config/product-config-store';
50
- import type { UpdateItemValuePayload } from '@shared/content-settings/models';
51
50
  import { UPGRADE_CTA_LOCATIONS } from '../../composables/useEventTracker';
52
51
  import { commonTr } from '@src/composables/useTranslate';
53
52
  import { useSnapshot } from '../../../composables/useSnapshot';
@@ -70,6 +69,8 @@ export interface BrandPageMakerViewModel {
70
69
  initialCategories: InitialCategories;
71
70
  personalisation?: UserPersonalisationContent[];
72
71
  isPersonalisationEnabled?: boolean;
72
+ userPromptContentKey?: string;
73
+ showAiTemplatesTab?: boolean;
73
74
  brandPageType?: BrandPageType;
74
75
  businessName?: string;
75
76
  industry?: string;
@@ -85,6 +86,7 @@ export default defineComponent({
85
86
  required: true,
86
87
  },
87
88
  },
89
+ emits: ['create-team-cards'],
88
90
  setup() {
89
91
  const brandPageMakerStore = useBrandPageMakerStore();
90
92
  const sideBarStore = useUiSideBarStore();
@@ -227,6 +229,8 @@ export default defineComponent({
227
229
  personalisationData: this.viewModel.personalisation,
228
230
  isPersonalisationEnabled:
229
231
  this.viewModel.isPersonalisationEnabled || false,
232
+ userPromptContentKey: this.viewModel.userPromptContentKey,
233
+ showAiTemplatesTab: this.viewModel.showAiTemplatesTab || false,
230
234
  brandPageType: this.viewModel.brandPageType,
231
235
  businessName: this.viewModel.businessName,
232
236
  industry: this.viewModel.industry,
@@ -270,6 +270,7 @@ const InitialiseMakerStores = (options: {
270
270
  isContextualUpgradeModalVisible: false,
271
271
  gettyVideos: [],
272
272
  templateSearchTerm: undefined,
273
+ aiTemplateKeywords: undefined,
273
274
  });
274
275
 
275
276
  userStore.setUserState({
@@ -5,12 +5,9 @@ import type { Component } from 'vue';
5
5
  import MockAdapter from 'axios-mock-adapter';
6
6
  import { mockDesignTemplateTypeApi } from '@shared/template-settings/components/TemplatesSettings.test-helper';
7
7
  import BrandPageMakerTemplateSettings from './BrandPageMakerTemplateSettings.vue';
8
- import VueRouter, { createMemoryHistory, createRouter } from 'vue-router';
8
+ import { createMemoryHistory, createRouter } from 'vue-router';
9
9
  import { hexToRGB } from '@utils/helpers';
10
- import {
11
- BRAND_PAGE_TEMPLATE_BP_909,
12
- LOGO_IMAGE_URL,
13
- } from '../../../__fixtures__';
10
+ import { BRAND_PAGE_TEMPLATE_BP_909 } from '../../../__fixtures__';
14
11
  import { setupStoryPinia } from './__fixtures__/store-fixture';
15
12
  import { useUiLogoSettingsStore } from '@shared/logo-settings/store';
16
13
  import { useUiStore } from '@brand-page-maker/stores';
@@ -13,13 +13,8 @@ import type {
13
13
  TextContent,
14
14
  UserPersonalisation,
15
15
  ImageContent,
16
- ImageGalleryContent,
17
16
  ProfileContent,
18
- WebsiteContent,
19
- ImagesSectionContent,
20
17
  UserPersonalisationContent,
21
- EmailContent,
22
- PhoneContent,
23
18
  ShapesSectionContent,
24
19
  BannerSectionContent,
25
20
  } from '@brand-page';
@@ -56,14 +56,6 @@ export const brandPagePaymentConfigsResponse: BrandPagePaymentConfig[] = [
56
56
  },
57
57
  ];
58
58
 
59
- const stripePaymentIntent: StripePaymentIntent = {
60
- id: faker.datatype.uuid(),
61
- object: 'payment_intent',
62
- amount: 500,
63
- client_secret: faker.internet.password(),
64
- currency: 'USD',
65
- } as const;
66
-
67
59
  export const brandPageCreateCartResult: CreateCartResult<StripePaymentIntent> =
68
60
  {
69
61
  cartId: faker.datatype.uuid(),
@@ -1,5 +1,3 @@
1
- import type { PageModel } from '@brand-page';
2
-
3
1
  export const BRAND_SITE_TEMPLATE_SAMPLE: any[] = [
4
2
  {
5
3
  title: 'HOME',
@@ -1,3 +1,4 @@
1
+ <!-- eslint-disable vue/no-v-html -->
1
2
  <template>
2
3
  <Page
3
4
  data-component="brand-page-maker-page"
@@ -130,7 +130,7 @@ export default defineComponent({
130
130
  mode: BRANDPAGE_SETTINGS_MODES.edit,
131
131
  });
132
132
  },
133
- onDesignSelected(image: UserMediaItemWithDimensions) {
133
+ onDesignSelected() {
134
134
  this.brandPageMakerStore.setMode({ mode: BRANDPAGE_SETTINGS_MODES.edit });
135
135
  },
136
136
  },
@@ -68,7 +68,7 @@
68
68
  </template>
69
69
 
70
70
  <script setup lang="ts">
71
- import { ref, type PropType } from 'vue';
71
+ import { ref } from 'vue';
72
72
  import type { ColorValue } from 'src/shared/color-picker/models';
73
73
  import ClickOutside from 'click-outside-vue3';
74
74
  import ColorPicker from './BpColorPicker.vue';
@@ -106,7 +106,6 @@ const emit = defineEmits<{
106
106
  const pickerIdRef = ref<HTMLElement>();
107
107
 
108
108
  const popupTop = ref(0);
109
- const popupLeft = ref(0);
110
109
 
111
110
  const vClickOutside = ClickOutside.directive;
112
111