@designcrowd/library.brand-page 5.19.1-error-html2canvas-1 → 5.19.1-error-html2canvas-3

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 (361) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-CxCJU9cc.js → CreatedOnBrandCrowd-de-de-BPP1Wtpt.js} +3 -3
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-zDJCWP5n.js → CreatedOnBrandCrowd-en-us-BlfpQiIg.js} +3 -3
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-DNna1Sh9.js → CreatedOnBrandCrowd-es-es-Tldy_pIo.js} +3 -3
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-C5XVf_hD.js → CreatedOnBrandCrowd-fr-ca-CHmb3VQE.js} +3 -3
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-C5XVf_hD.js → CreatedOnBrandCrowd-fr-fr-CHmb3VQE.js} +3 -3
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-9eUHV_M3.js → CreatedOnBrandCrowd-pt-br-XbU3eK3Z.js} +3 -3
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-9eUHV_M3.js → CreatedOnBrandCrowd-pt-pt-XbU3eK3Z.js} +3 -3
  8. package/lib/src/{CreatedOnDcom-de-de-D9HMpK8Q.js → CreatedOnDcom-de-de-BVMFbVbI.js} +3 -3
  9. package/lib/src/{CreatedOnDcom-en-us-BCTkchV5.js → CreatedOnDcom-en-us--kaKb1kI.js} +3 -3
  10. package/lib/src/{CreatedOnDcom-es-es-B0N7VoTp.js → CreatedOnDcom-es-es-XXVLpF2I.js} +3 -3
  11. package/lib/src/{CreatedOnDcom-fr-ca-Gi4oz_Mm.js → CreatedOnDcom-fr-ca-D-7vtMZ5.js} +3 -3
  12. package/lib/src/{CreatedOnDcom-fr-fr-DJI8eJo1.js → CreatedOnDcom-fr-fr-CM9oQk77.js} +3 -3
  13. package/lib/src/{CreatedOnDcom-pt-br-YNWMAuQf.js → CreatedOnDcom-pt-br-VVgu3BEa.js} +3 -3
  14. package/lib/src/{CreatedOnDcom-pt-pt-DCIIK3sy.js → CreatedOnDcom-pt-pt-CWhA8Vla.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 +0 -1
  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 +5 -4
  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 -1
  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-logo-settings/AdminLogoSettings.mixin.d.ts +3 -3
  37. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +181 -170
  38. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +3 -0
  39. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.js +1 -0
  40. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +12 -12
  41. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.js +2 -2
  42. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.js +0 -7
  43. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +148 -149
  44. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +21 -21
  45. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.js +1 -1
  46. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.d.ts +4 -2
  47. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.js +1 -0
  48. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.d.ts +4 -2
  49. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.js +1 -0
  50. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.d.ts +5 -2
  51. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.js +1 -0
  52. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.d.ts +4 -2
  53. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.js +1 -0
  54. package/lib/src/brand-page-maker/components/device/Device.mixin.d.ts +4 -2
  55. package/lib/src/brand-page-maker/components/device/Device.mixin.js +1 -0
  56. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +4 -2
  57. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.js +1 -0
  58. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +3 -3
  59. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +11 -11
  60. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +27 -25
  61. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.js +1 -0
  62. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +27 -27
  63. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.js +1 -1
  64. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +17 -12
  65. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +12 -12
  66. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +30 -32
  67. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +16 -5
  68. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +11 -11
  69. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +1 -1
  70. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +1 -1
  71. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +6 -6
  72. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +2 -2
  73. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +6 -6
  74. package/lib/src/brand-page-maker/constants/config-settings-constant.js +1 -1
  75. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.d.ts +1 -1
  76. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.js +1 -1
  77. package/lib/src/brand-page-maker/models/content-settings.d.ts +1 -1
  78. package/lib/src/brand-page-maker/models/navigation-style-configs.js +1 -1
  79. package/lib/src/brand-page-maker/routing/brand-page-maker-router.d.ts +1 -2
  80. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +366 -360
  81. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +5 -4
  82. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +8 -5
  83. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +3 -1
  84. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +7 -3
  85. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +15 -15
  86. package/lib/src/brand-page-maker/stores/ui/ui-store.d.ts +6 -0
  87. package/lib/src/brand-page-maker/stores/ui/ui-store.js +8 -0
  88. package/lib/src/brand-page-maker/utils/content-settings.util.js +1 -1
  89. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +1 -1
  90. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +4 -4
  91. package/lib/src/clients/brand-page-client.d.ts +16 -15
  92. package/lib/src/clients/design-template-client.d.ts +3 -0
  93. package/lib/src/clients/media-client.d.ts +2 -2
  94. package/lib/src/clients/models.d.ts +2 -0
  95. package/lib/src/css/library.brand-page-brandCrowd.min.css +342 -324
  96. package/lib/src/css/library.brand-page-brandPage.min.css +620 -324
  97. package/lib/src/css/library.brand-page-designCom.min.css +342 -324
  98. package/lib/src/css/library.brand-page-preview.min.css +598 -324
  99. package/lib/src/index.d.ts +1 -1
  100. package/lib/src/index.mjs +16 -15
  101. package/lib/src/{lib-CaY174HB.js → lib-yEV1yYI5.js} +35293 -32254
  102. package/lib/src/lib.js +1 -1
  103. package/lib/src/metadata-builder/builders/footer-builder.js +103 -70
  104. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +1 -1
  105. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +1 -1
  106. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +1 -1
  107. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +1 -1
  108. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +7 -0
  109. package/lib/src/metadata-builder/builders/section-field-utils.js +1 -1
  110. package/lib/src/metadata-builder/builders/shape-color-utils.js +1 -1
  111. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +3 -3
  112. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.d.ts +1 -1
  113. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.js +8 -8
  114. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +13 -13
  115. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -3
  116. package/lib/src/shared/color-picker/components/ColorPicker.mixin.d.ts +4 -2
  117. package/lib/src/shared/color-picker/components/ColorPicker.mixin.js +2 -2
  118. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.d.ts +4 -2
  119. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.js +1 -0
  120. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.d.ts +5 -2
  121. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.js +1 -0
  122. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +0 -1
  123. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +131 -129
  124. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +2 -1
  125. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +111 -110
  126. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +84 -81
  127. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.js +5 -0
  128. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +117 -109
  129. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +1 -14
  130. package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +0 -1
  131. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +72 -70
  132. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +4 -3
  133. package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.d.ts +4 -4
  134. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.d.ts +3 -1
  135. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.js +1 -0
  136. package/lib/src/shared/content-settings/components/images-field/ImagesField.mixin.d.ts +2 -2
  137. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +4 -3
  138. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +1 -1
  139. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +40 -40
  140. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigOptionField.mixin.d.ts +5 -6
  141. package/lib/src/shared/content-settings/components/shape-field/ShapeField.mixin.d.ts +0 -1
  142. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.d.ts +2 -2
  143. package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +0 -1
  144. package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +1 -2
  145. package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +0 -1
  146. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.d.ts +1 -2
  147. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +1 -1
  148. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +28 -28
  149. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +0 -1
  150. package/lib/src/shared/content-settings/components/toggle-field/ToggleField.mixin.d.ts +2 -2
  151. package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +0 -1
  152. package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +0 -1
  153. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +39 -39
  154. package/lib/src/shared/content-settings/utils.js +0 -1
  155. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.d.ts +6 -4
  156. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.js +1 -0
  157. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.d.ts +4 -2
  158. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.js +1 -0
  159. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +29 -21
  160. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +1 -1
  161. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +50 -51
  162. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.d.ts +6 -4
  163. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.js +1 -0
  164. package/lib/src/shared/logo-settings/store/editable-logo-store.js +1 -1
  165. package/lib/src/shared/logo-settings/store/logo-settings-store.d.ts +1 -1
  166. package/lib/src/shared/logo-versions/LogoVersions.mixin.d.ts +13 -5
  167. package/lib/src/shared/logo-versions/LogoVersions.mixin.js +1 -0
  168. package/lib/src/shared/models.d.ts +2 -0
  169. package/lib/src/shared/my-designs/MyDesigns.mixin.d.ts +14 -6
  170. package/lib/src/shared/my-designs/MyDesigns.mixin.js +1 -0
  171. package/lib/src/shared/my-uploads/MyMedia.mixin.d.ts +14 -5
  172. package/lib/src/shared/my-uploads/MyMedia.mixin.js +1 -0
  173. package/lib/src/shared/my-uploads/MyUploads.mixin.d.ts +14 -5
  174. package/lib/src/shared/my-uploads/MyUploads.mixin.js +1 -0
  175. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.d.ts +5 -3
  176. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +1 -0
  177. package/lib/src/shared/navigation-style-settings/store/index.d.ts +2 -2
  178. package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +2 -2
  179. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +27 -28
  180. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.js +0 -2
  181. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +188 -177
  182. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +181 -175
  183. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +1 -1
  184. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +9 -9
  185. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +39 -39
  186. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +0 -1
  187. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +18 -18
  188. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +6 -6
  189. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +66 -60
  190. package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -1
  191. package/lib/src/shared/style-settings/store/style-settings-store.js +1 -1
  192. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +20 -450
  193. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.js +2 -2
  194. package/lib/src/shared/template-settings/models.d.ts +1 -0
  195. package/lib/src/shared/template-settings/store/template-settings-store.d.ts +4 -0
  196. package/lib/src/shared/template-settings/store/template-settings-store.js +79 -11
  197. package/lib/src/shared/unsplash-library/UnsplashLibrary.mixin.d.ts +9 -4
  198. package/package.json +61 -57
  199. package/src/brand-page/components/about-section/AboutSection.vue.test.ts +7 -5
  200. package/src/brand-page/components/banner-section/BannerSection.mixin.ts +210 -0
  201. package/src/brand-page/components/brand-page-footer/BrandPageFooter.vue +1 -1
  202. package/src/brand-page/components/image/Image.mixin.ts +1 -1
  203. package/src/brand-page/components/image/Image.test.ts +1 -1
  204. package/src/brand-page/components/images-section/ImagesSection.vue +0 -1
  205. package/src/brand-page/components/logo/LogoRender.vue +188 -188
  206. package/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.ts +1 -0
  207. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +15 -6
  208. package/src/brand-page/components/page-footer/PageFooter.vue +1 -0
  209. package/src/brand-page/components/page-header/HeaderLayout.vue +12 -6
  210. package/src/brand-page/components/page-header/PageHeader.vue +1 -0
  211. package/src/brand-page/components/shapes-section/ShapesSection.vue +1 -1
  212. package/src/brand-page/components/shop/CartModal.vue +1 -3
  213. package/src/brand-page/components/shop/FeaturedDisplay.vue +2 -2
  214. package/src/brand-page/components/shop/PaymentModal.vue +1 -5
  215. package/src/brand-page/components/shop/ProductDetailModal.vue +1 -1
  216. package/src/brand-page/components/shop/Shop.vue +1 -1
  217. package/src/brand-page/components/shop/TextDisplay.vue +1 -1
  218. package/src/brand-page/components/shop/ThumbnailDisplay.vue +2 -2
  219. package/src/brand-page/components/testimonial-section/TestimonialSection.vue +3 -3
  220. package/src/brand-page/components/text-wrapper/TextWrapper.vue +3 -1
  221. package/src/brand-page/constants/sections/footer-display.constants.ts +1 -1
  222. package/src/brand-page/models/index.ts +4 -0
  223. package/src/brand-page/models/payment.model.ts +2 -1
  224. package/src/brand-page/models/shop.model.ts +0 -2
  225. package/src/brand-page/models/user-personalisation.model.ts +1 -2
  226. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
  227. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  228. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  229. package/src/brand-page/utils/migration/migration-01_1.ts +1 -1
  230. package/src/brand-page/utils/migration/migration-02.ts +0 -1
  231. package/src/brand-page/utils/migration/migration-03.ts +0 -1
  232. package/src/brand-page/utils/migration/migration-04.ts +0 -1
  233. package/src/brand-page/utils/migration/migration-05.ts +1 -5
  234. package/src/brand-page/utils/migration/migration-05_2.ts +1 -1
  235. package/src/brand-page/utils/migration/migration-08.test.ts +1 -1
  236. package/src/brand-page/utils/personalisation.util.test.ts +35 -0
  237. package/src/brand-page/utils/personalisation.util.ts +119 -23
  238. package/src/brand-page/view-models.ts +38 -56
  239. package/src/brand-page-maker/assessors/banner-section-description-visibility.assessor.ts +6 -6
  240. package/src/brand-page-maker/assessors/color-replacement-icon-visibility.assessor.ts +2 -2
  241. package/src/brand-page-maker/assessors/color-replacement-profile-visibility.assessor.ts +2 -2
  242. package/src/brand-page-maker/assessors/color-replacement-visibility.assessor.ts +2 -2
  243. package/src/brand-page-maker/assessors/contact-form-visibility.assessor.ts +14 -14
  244. package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +1 -0
  245. package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +1 -0
  246. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +5 -1
  247. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.ts +1 -0
  248. package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.ts +2 -5
  249. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -5
  250. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.ts +0 -8
  251. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-site-template.examples.ts +0 -2
  252. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.vue +1 -0
  253. package/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.ts +1 -1
  254. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +1 -2
  255. package/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.ts +1 -0
  256. package/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.ts +1 -0
  257. package/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.ts +1 -0
  258. package/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.ts +1 -0
  259. package/src/brand-page-maker/components/device/Device.mixin.ts +1 -0
  260. package/src/brand-page-maker/components/navigation/Navigation.mixin.ts +1 -0
  261. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +3 -1
  262. package/src/brand-page-maker/components/sensitive-content/SensitiveContent.vue +1 -4
  263. package/src/brand-page-maker/components/seo-settings/DeleteDomainModal.vue +1 -1
  264. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.ts +1 -0
  265. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.vue +1 -1
  266. package/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.ts +0 -1
  267. package/src/brand-page-maker/components/seo-settings/UrlSettings.vue +0 -1
  268. package/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.vue +1 -5
  269. package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -1
  270. package/src/brand-page-maker/components/shop/ReplaceImageSettingsForShop.vue +1 -1
  271. package/src/brand-page-maker/components/social-share/SocialShare.vue +1 -1
  272. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +22 -8
  273. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +5 -10
  274. package/src/brand-page-maker/components/template-preview/TemplatePreviewAiBadge.vue +12 -0
  275. package/src/brand-page-maker/components/video-play/VideoPlayButton.vue +1 -1
  276. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +1 -1
  277. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +6 -6
  278. package/src/brand-page-maker/constants/config-settings-constant.ts +3 -3
  279. package/src/brand-page-maker/convertors/text-image-display-style.convertor.ts +1 -1
  280. package/src/brand-page-maker/models/button-styles-config.ts +4 -2
  281. package/src/brand-page-maker/models/content-settings-configs.ts +4 -2
  282. package/src/brand-page-maker/models/navigation-style-configs.ts +5 -6
  283. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +0 -1
  284. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +8 -5
  285. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +1 -3
  286. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +12 -4
  287. package/src/brand-page-maker/stores/ui/ui-store.ts +16 -0
  288. package/src/brand-page-maker/utils/content-settings.util.ts +1 -1
  289. package/src/brand-page-maker/utils/rich-text-editor.util.ts +4 -4
  290. package/src/clients/design-template-client.ts +3 -0
  291. package/src/clients/models.ts +2 -0
  292. package/src/lib.ts +1 -0
  293. package/src/metadata-builder/builders/footer-builder.test.ts +200 -1
  294. package/src/metadata-builder/builders/footer-builder.ts +151 -95
  295. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +1 -1
  296. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +1 -1
  297. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +1 -1
  298. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +1 -1
  299. package/src/metadata-builder/builders/section-field-utils.ts +1 -1
  300. package/src/metadata-builder/builders/shape-color-utils.ts +2 -2
  301. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +3 -3
  302. package/src/plugins/google-maps-plugin/google-maps-plugin.ts +8 -8
  303. package/src/shared/background-settings/components/BackgroundSettings.vue +1 -1
  304. package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue +1 -1
  305. package/src/shared/color-picker/components/ColorPicker.mixin.ts +2 -7
  306. package/src/shared/color-picker/components/ColorPickerSwatch.mixin.ts +1 -0
  307. package/src/shared/common/NumberInput.vue +1 -0
  308. package/src/shared/common/SideBarSettingsHeader.vue +2 -2
  309. package/src/shared/confirm-modal/ConfirmModal.mixin.ts +1 -0
  310. package/src/shared/content-settings/components/booking-url-field/BookingUrlField.vue +1 -0
  311. package/src/shared/content-settings/components/button-configuration-field/ButtonConfigurationField.vue +1 -0
  312. package/src/shared/content-settings/components/color-field/ColorField.vue +3 -10
  313. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -1
  314. package/src/shared/content-settings/components/content-settings/ContentSettingsLockedButton.vue +1 -0
  315. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts +5 -0
  316. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +1 -14
  317. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +4 -6
  318. package/src/shared/content-settings/components/icon-library/IconLibrary.mixin.ts +1 -0
  319. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +1 -1
  320. package/src/shared/content-settings/components/logo-selection-field/LogoSelectionField.vue +1 -1
  321. package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -1
  322. package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +1 -1
  323. package/src/shared/content-settings/components/personalisation-role-field/PersonalisationRoleField.vue +4 -4
  324. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +2 -8
  325. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +1 -1
  326. package/src/shared/content-settings/models.ts +3 -2
  327. package/src/shared/content-settings/utils.ts +0 -1
  328. package/src/shared/dropzone-image-uploader/components/DropzoneImageUploader.vue +1 -0
  329. package/src/shared/ecommerce-settings/store/cart-store.test.ts +1 -1
  330. package/src/shared/font-family-selector/FontFamilySelector.mixin.ts +1 -0
  331. package/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.ts +1 -0
  332. package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +1 -1
  333. package/src/shared/logo-settings/components/LogoSettings.mixin.ts +0 -1
  334. package/src/shared/logo-settings/components/LogoSettingsHeader.mixin.ts +1 -0
  335. package/src/shared/logo-settings/components/LogoStyleSettingsWithState.vue +2 -2
  336. package/src/shared/logo-settings/components/LogoTemplateSearch.vue +1 -1
  337. package/src/shared/logo-settings/store/editable-logo-store.ts +1 -1
  338. package/src/shared/logo-settings/store/logo-settings-store.test.ts +4 -4
  339. package/src/shared/logo-versions/LogoVersions.mixin.ts +1 -0
  340. package/src/shared/models.ts +6 -0
  341. package/src/shared/my-designs/MyDesigns.mixin.ts +1 -0
  342. package/src/shared/my-uploads/MyMedia.mixin.ts +1 -0
  343. package/src/shared/my-uploads/MyMediaSelectionItem.vue +2 -1
  344. package/src/shared/my-uploads/MyUploads.mixin.ts +1 -0
  345. package/src/shared/my-uploads/models.ts +1 -2
  346. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +1 -0
  347. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -1
  348. package/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.ts +0 -3
  349. package/src/shared/page-settings/components/page-settings/NestedDraggable.vue +1 -1
  350. package/src/shared/page-settings/components/page-settings/PageSettings.vue +1 -2
  351. package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.vue +1 -1
  352. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +1 -1
  353. package/src/shared/page-settings/store/page-settings-store.test.ts +4 -8
  354. package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +0 -1
  355. package/src/shared/shape-library/ShapeLibrary.vue +2 -2
  356. package/src/shared/style-settings/store/style-settings-store.ts +1 -1
  357. package/src/shared/template-settings/components/TemplatesSettings.mixin.ts +2 -2
  358. package/src/shared/template-settings/models.ts +1 -0
  359. package/src/shared/template-settings/store/template-settings-store.ts +105 -18
  360. package/src/shared/unsplash-library/UnsplashLibrary.vue +2 -6
  361. package/src/shared/video-library/VideoLibrary.vue +1 -1
@@ -1,7 +1,7 @@
1
1
  import { TEMPLATE_TABS } from '../models';
2
2
  import * as DesignTemplateClient from '../../../clients/design-template-client';
3
3
  import {} from '../../../clients/models';
4
- import { BP_DEFAULT_TEMPLATE_TYPE_NAME, SIDE_BAR_TAB_NAMES, } from '@brand-page-maker/constants';
4
+ import { BP_DEFAULT_TEMPLATE_TYPE_NAME, BP_BRAND_SITE_TEMPLATE_TYPE_NAME, SIDE_BAR_TAB_NAMES, } from '@brand-page-maker/constants';
5
5
  import { defineStore, storeToRefs } from 'pinia';
6
6
  import { useBrandPageContainerStore, useBrandPageMakerStore, useBrandPageMakerUserStore, useLogoStore, useUiStore, } from '@brand-page-maker/stores';
7
7
  import { useUiSideBarStore } from '../../side-bar/store';
@@ -9,9 +9,19 @@ import { BrandPageModel } from '@brand-page/models';
9
9
  import { migrateBrandPageModel } from '@brand-page/utils';
10
10
  import { getAiContentIndexByTemplateTokenAndNumberOfVariations } from '@brand-page-maker/utils/ai-content-selection.util';
11
11
  import { useUiEditableLogoStore, useUiLogoSettingsStore, } from '../../logo-settings/store';
12
+ import { useEventTracker } from '@brand-page-maker/composables/useEventTracker';
12
13
  import { templateSettingsTr, getCurrentLocale, } from '@src/composables/useTranslate';
13
14
  import { watch } from 'vue';
14
15
  export const DEFAULT_PAGE_SIZE = 6;
16
+ const POST_PURCHASE_PAGE_SECTION_BY_TAB = {
17
+ [TEMPLATE_TABS.all]: 'MakerPostPurchaseSidebarTemplatesAllTab',
18
+ [TEMPLATE_TABS.AI]: 'MakerPostPurchaseSidebarTemplatesAiTab',
19
+ [TEMPLATE_TABS.categories]: 'MakerPostPurchaseSidebarTemplatesCategoryTab',
20
+ };
21
+ const PRE_PURCHASE_PAGE_SECTION_BY_TAB = {
22
+ [TEMPLATE_TABS.all]: 'MakerPrePurchaseSidebarTemplatesAllTab',
23
+ [TEMPLATE_TABS.categories]: 'MakerPrePurchaseSidebarTemplatesCategoryTab',
24
+ };
15
25
  const LOAD_PAGE_RETRY_DELAY = 250;
16
26
  export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
17
27
  state: () => {
@@ -47,6 +57,7 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
47
57
  cachedTemplates: {},
48
58
  logoChangeWatcherInitialized: false,
49
59
  initialSearchTerm: undefined,
60
+ aiTemplateKeywords: undefined,
50
61
  onSearchTermChanged: undefined,
51
62
  };
52
63
  },
@@ -187,27 +198,65 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
187
198
  }
188
199
  }
189
200
  const editableLogoVariation = editableLogoStore.editableLogoVariations[logoVariation];
190
- const result = await designTemplateClient.getTemplateItemsByTemplateType(this.templateType, {
201
+ const isPrePurchase = brandPageContainerStore.isPrePurchase;
202
+ const isBrandSite = this.templateType === BP_BRAND_SITE_TEMPLATE_TYPE_NAME;
203
+ // Pre-purchase has no logo draft for logo-based recommendation, so fall back to the seeded
204
+ // search term (the keyword from the URL/cookie - never the business name) so the All tab
205
+ // stays relevant instead of generic (bp-5454).
206
+ const effectiveSearchTerm = !this.searchTerm &&
207
+ !this.selectedCategory &&
208
+ isPrePurchase &&
209
+ isBrandSite &&
210
+ this.selectedTab.key === TEMPLATE_TABS.all
211
+ ? this.initialSearchTerm
212
+ : this.searchTerm;
213
+ const pageSection = isBrandSite
214
+ ? (isPrePurchase
215
+ ? PRE_PURCHASE_PAGE_SECTION_BY_TAB
216
+ : POST_PURCHASE_PAGE_SECTION_BY_TAB)[this.selectedTab.key]
217
+ : undefined;
218
+ const pageName = isBrandSite
219
+ ? isPrePurchase
220
+ ? 'maker-pre-purchase'
221
+ : 'maker'
222
+ : undefined;
223
+ const baseParams = {
191
224
  page: pageNo,
192
- pageSize: DEFAULT_PAGE_SIZE,
193
225
  categoryName: this.selectedCategory,
194
- searchTerm: this.searchTerm,
226
+ searchTerm: effectiveSearchTerm,
227
+ keywords: this.aiTemplateKeywords,
195
228
  logoDraftToken: logoSettingsStore.selectedLogoImage.logoDraftToken,
196
229
  logoVariation: logoSettingsStore.selectedLogoImage.logoVariation,
197
- personalisable: this.selectedTab.key === TEMPLATE_TABS.AI,
198
230
  selectedTemplateToken: designTemplateToken,
199
231
  locale: currentLocale,
200
232
  logoS3Token: !isByo ? editableLogoVariation.s3Token : undefined,
201
233
  logoTemplateToken: isByo ? logoTemplateToken : undefined,
234
+ useLogoForRecommendedTemplates: isBrandSite && this.selectedTab.key === TEMPLATE_TABS.all,
235
+ pageSection,
236
+ pageName,
237
+ };
238
+ // AI templates are interleaved server-side for the Brand Site All tab
239
+ // (bp-5306); the frontend just renders the returned order.
240
+ const result = await designTemplateClient.getTemplateItemsByTemplateType(this.templateType, {
241
+ ...baseParams,
242
+ pageSize: DEFAULT_PAGE_SIZE,
243
+ personalisable: this.selectedTab.key === TEMPLATE_TABS.AI,
202
244
  });
203
245
  if (!result) {
204
246
  return;
205
247
  }
206
248
  this._setPageCount({ pageCount: result.pageCount });
249
+ if (pageNo === 1 &&
250
+ result.abTestValuesToBePushed &&
251
+ Object.keys(result.abTestValuesToBePushed).length > 0) {
252
+ const eventTracker = useEventTracker();
253
+ for (const [experimentName, experimentValue] of Object.entries(result.abTestValuesToBePushed)) {
254
+ eventTracker.sendExperimentStartedEvent(experimentName, experimentValue);
255
+ }
256
+ }
207
257
  const templates = await Promise.all(result.paginatedItems.map(async (item) => {
208
258
  try {
209
259
  if (brandPageMakerUserStore.isAdmin) {
210
- // Pre-purchase: full template with brandPageModel for live rendering
211
260
  const template = await designTemplateClient.getTemplateByTemplateToken(item.designTemplateToken);
212
261
  return this.safeMapToTemplateSettingsTemplate(template);
213
262
  }
@@ -217,14 +266,24 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
217
266
  if (uiStore.personalisationData?.length) {
218
267
  personalisationContentIndex =
219
268
  await getAiContentIndexByTemplateTokenAndNumberOfVariations(item.designTemplateToken, uiStore.personalisationData.length);
220
- // Get the contentKey from the selected personalisation variation
221
- // This is needed for the backend preview URL to show the correct variation
222
- const selectedPersonalisation = uiStore.personalisationData[personalisationContentIndex];
223
- contentKey = selectedPersonalisation.contentKey;
269
+ contentKey =
270
+ uiStore.personalisationData[personalisationContentIndex]
271
+ .contentKey;
272
+ }
273
+ else if (item.isPersonalisable) {
274
+ // Pre-purchase has no personalisationData; personalise AI
275
+ // template previews with the prompt content key (bp-5742).
276
+ contentKey = uiStore.userPromptContentKey;
224
277
  }
225
278
  return {
226
279
  id: item.designTemplateToken,
280
+ isPersonalisable: item.isPersonalisable,
227
281
  contentKey,
282
+ // A userPromptContentKey signals this design's real AI images live
283
+ // in the userPrompt bucket (post- or pre-purchase). The preview must
284
+ // then resolve via userPromptContentKey, not the regular bucket which
285
+ // holds placeholders post-purchase (bp-5454).
286
+ usesUserPromptContentKey: !!uiStore.userPromptContentKey,
228
287
  previewImageUrl: item.previewImageUrl,
229
288
  };
230
289
  }
@@ -235,7 +294,13 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
235
294
  }));
236
295
  // Filter out null templates before adding
237
296
  const validTemplates = templates.filter((t) => t !== null);
238
- this._addTemplates({ templates: validTemplates });
297
+ // The Categories tab must never surface AI templates or the AI badge
298
+ // (bp-5454 scenario 5). The badge is driven purely by isPersonalisable,
299
+ // so clear it for category results regardless of the template's catalog flag.
300
+ const displayTemplates = this.selectedTab.key === TEMPLATE_TABS.categories
301
+ ? validTemplates.map((t) => ({ ...t, isPersonalisable: false }))
302
+ : validTemplates;
303
+ this._addTemplates({ templates: displayTemplates });
239
304
  this._setPageNoLoaded({ pageNoLoaded: pageNo });
240
305
  }
241
306
  finally {
@@ -339,6 +404,9 @@ export const useUiTemplateSettingsStore = defineStore('uiTemplateSettings', {
339
404
  this.initialSearchTerm = payload.initialSearchTerm;
340
405
  this.onSearchTermChanged = payload.onSearchTermChanged;
341
406
  },
407
+ setAiTemplateKeywords(payload) {
408
+ this.aiTemplateKeywords = payload.aiTemplateKeywords;
409
+ },
342
410
  notifySearchTermChanged(searchTerm) {
343
411
  this.onSearchTermChanged?.(searchTerm);
344
412
  },
@@ -1,4 +1,3 @@
1
- /// <reference types="types/lodash-shims" />
2
1
  import UnsplashClient from '../../clients/unsplash-client';
3
2
  import { type DebounceHandle } from 'lodash.debounce';
4
3
  interface PreviewUrls {
@@ -30,14 +29,20 @@ declare const _default: import("vue").DefineComponent<{}, {
30
29
  thirdPartySettings: import("../models").UIRootStateThirdPartySettings;
31
30
  }): void;
32
31
  setDeviceMode({ mode }: {
33
- mode: "desktop" | "mobile";
32
+ mode: import("../models").UiDeviceMode;
34
33
  }): void;
35
34
  setScreenSizeMode({ mode }: {
36
- mode: "desktop" | "mobile";
35
+ mode: import("../models").UiScreenSizeMode;
37
36
  }): void;
38
37
  setUserPersonalisationData({ personalisationData, }: {
39
38
  personalisationData: import("../../brand-page").UserPersonalisationContent[];
40
39
  }): void;
40
+ setUserPromptContentKey({ userPromptContentKey, }: {
41
+ userPromptContentKey: string | undefined;
42
+ }): void;
43
+ setShowAiTemplatesTab({ showAiTemplatesTab, }: {
44
+ showAiTemplatesTab: boolean;
45
+ }): void;
41
46
  onBackgroundChanged(): void;
42
47
  onContentChanged(): void;
43
48
  onStyleChanged(): void;
@@ -50,7 +55,7 @@ declare const _default: import("vue").DefineComponent<{}, {
50
55
  type: string;
51
56
  }): Promise<void>;
52
57
  onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): Promise<void>;
53
- showUpgradeModalAndSaveAsync(contextualUpgradeType?: string | number | symbol | undefined): Promise<void>;
58
+ showUpgradeModalAndSaveAsync(contextualUpgradeType?: import("@brand-page-maker/stores").WebsiteContextUpgradeType): Promise<void>;
54
59
  setIsPersonalisationEnabled({ isPersonalisationEnabled, }: {
55
60
  isPersonalisationEnabled: boolean;
56
61
  }): void;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "5.19.1-error-html2canvas-1",
4
+ "version": "5.19.1-error-html2canvas-3",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -55,9 +55,9 @@
55
55
  "pre-push": "npm run test"
56
56
  },
57
57
  "dependencies": {
58
- "@ckpack/vue-color": "1.4.1",
59
- "@designcrowd/fe-shared-lib": "1.8.14",
60
- "@pinia/nuxt": "0.11.0",
58
+ "@ckpack/vue-color": "1.6.0",
59
+ "@designcrowd/fe-shared-lib": "2.0.0",
60
+ "@pinia/nuxt": "0.11.3",
61
61
  "@storybook/react": "9.0.4",
62
62
  "@tiptap/extension-bubble-menu": "^2.14.0",
63
63
  "@tiptap/extension-character-count": "2.11.7",
@@ -72,41 +72,42 @@
72
72
  "@tiptap/extension-underline": "2.11.5",
73
73
  "@tiptap/starter-kit": "2.11.5",
74
74
  "@tiptap/vue-3": "2.11.5",
75
- "axios": "1.6.7",
75
+ "axios": "1.13.5",
76
76
  "chroma-js": "2.4.2",
77
77
  "click-outside-vue3": "4.0.1",
78
- "color": "5.0.0",
78
+ "color": "5.0.3",
79
79
  "config": "3.3.10",
80
- "core-js": "3.35.1",
80
+ "core-js": "3.48.0",
81
81
  "css-color-names": "1.0.1",
82
82
  "date-utils": "1.2.21",
83
83
  "deepmerge": "4.3.1",
84
- "dompurify": "3.2.6",
84
+ "dompurify": "3.3.1",
85
85
  "dropzone-vue3": "1.0.2",
86
86
  "express": "4.18.2",
87
- "fs-extra": "11.2.0",
88
- "http-errors": "2.0.0",
87
+ "fs-extra": "11.3.3",
88
+ "http-errors": "2.0.1",
89
89
  "http-proxy-middleware": "2.0.6",
90
- "i18next": "25.2.1",
90
+ "i18next": "25.8.5",
91
91
  "jquery": "3.7.1",
92
92
  "lodash.clonedeep": "4.5.0",
93
93
  "lodash.debounce": "4.0.8",
94
94
  "lodash.throttle": "4.1.1",
95
95
  "lodash.uniq": "4.5.0",
96
- "nuxt": "3.17.4",
97
- "pinia": "3.0.2",
96
+ "nuxt": "4.4.5",
97
+ "pinia": "3.0.4",
98
98
  "portal-vue": "3.0.0",
99
99
  "raygun": "0.13.2",
100
- "raygun4js": "3.0.0",
100
+ "raygun4js": "3.1.4",
101
101
  "regenerator-runtime": "0.14.1",
102
102
  "slugify": "1.6.6",
103
103
  "svg-parser": "2.0.4",
104
104
  "uuid": "9.0.1",
105
- "validator": "13.11.0",
106
- "vue": "3.5.15",
105
+ "validator": "13.15.26",
106
+ "vue": "3.5.35",
107
107
  "vue-cropperjs": "5.0.0",
108
- "vue-router": "4.5.0",
108
+ "vue-router": "5.1.0",
109
109
  "vue-select": "4.0.0-beta.6",
110
+ "unstorage": "^1.17.5",
110
111
  "vue3-lazy-hydration": "1.2.1",
111
112
  "vue3-shortkey": "4.0.0",
112
113
  "vuedraggable": "4.1.0",
@@ -123,49 +124,49 @@
123
124
  "optionalDependencies": {
124
125
  "@esbuild/darwin-arm64": "0.27.1",
125
126
  "@esbuild/linux-x64": "0.27.1",
126
- "@rollup/rollup-linux-arm64-gnu": "4.12.0",
127
- "@rollup/rollup-linux-x64-gnu": "4.12.0"
127
+ "@rollup/rollup-linux-arm64-gnu": "4.43.0",
128
+ "@rollup/rollup-linux-x64-gnu": "4.43.0"
128
129
  },
129
130
  "devDependencies": {
130
131
  "@faker-js/faker": "8.4.0",
131
132
  "@frsource/cypress-plugin-visual-regression-diff": "3.3.10",
132
- "@nuxt/test-utils": "3.19.1",
133
- "@nuxt/types": "2.17.3",
133
+ "@nuxt/test-utils": "4.0.0",
134
+ "@nuxt/types": "2.18.1",
134
135
  "@nuxt/typescript-build": "3.0.2",
135
136
  "@storybook/addon-themes": "9.0.4",
136
137
  "@storybook/vue3": "9.0.4",
137
138
  "@storybook/vue3-vite": "9.0.4",
138
139
  "@stylistic/eslint-plugin": "1.5.4",
139
140
  "@types/axios-mock-adapter": "1.10.0",
140
- "@types/braces": "3.0.4",
141
+ "@types/braces": "3.0.5",
141
142
  "@types/dompurify": "3.2.0",
142
143
  "@types/express": "4.17.21",
143
144
  "@types/faker": "6.6.8",
144
145
  "@types/google.maps": "3.65.1",
145
146
  "@types/istanbul-lib-report": "3.0.3",
146
- "@types/jquery": "3.5.30",
147
+ "@types/jquery": "3.5.33",
147
148
  "@types/lodash.clonedeep": "4.5.9",
148
- "@types/mssql": "9.1.4",
149
+ "@types/mssql": "9.1.9",
149
150
  "@types/multer": "1.4.11",
150
151
  "@types/raygun4js": "3.0.0",
151
152
  "@types/react": "18.2.48",
152
153
  "@types/resize-observer-browser": "0.1.11",
153
- "@types/stripe-v3": "3.1.32",
154
+ "@types/stripe-v3": "3.1.33",
154
155
  "@types/svg-parser": "2.0.6",
155
- "@types/uglify-js": "3.17.4",
156
- "@types/unist": "3.0.2",
156
+ "@types/uglify-js": "3.17.5",
157
+ "@types/unist": "3.0.3",
157
158
  "@types/uuid": "9.0.8",
158
- "@types/validator": "13.11.8",
159
+ "@types/validator": "13.15.10",
159
160
  "@types/yargs-parser": "21.0.3",
160
161
  "@typescript-eslint/eslint-plugin": "6.20.0",
161
162
  "@typescript-eslint/parser": "6.20.0",
162
- "@vitejs/plugin-vue": "5.2.4",
163
+ "@vitejs/plugin-vue": "6.0.7",
163
164
  "@vue/eslint-config-typescript": "12.0.0",
164
- "@vue/test-utils": "2.4.4",
165
- "autoprefixer": "10.4.17",
165
+ "@vue/test-utils": "2.4.6",
166
+ "autoprefixer": "10.4.24",
166
167
  "axios-mock-adapter": "1.22.0",
167
168
  "copyfiles": "2.4.1",
168
- "cors": "2.8.5",
169
+ "cors": "2.8.6",
169
170
  "cross-env": "7.0.3",
170
171
  "css-loader": "6.9.1",
171
172
  "cypress": "13.6.3",
@@ -173,50 +174,50 @@
173
174
  "eslint-config-prettier": "9.1.0",
174
175
  "eslint-friendly-formatter": "4.0.1",
175
176
  "eslint-plugin-cypress": "2.15.1",
176
- "eslint-plugin-prettier": "5.1.3",
177
+ "eslint-plugin-prettier": "5.5.5",
177
178
  "eslint-plugin-vue": "9.21.1",
178
179
  "file-loader": "6.2.0",
179
- "happy-dom": "14.12.3",
180
- "html-loader": "5.0.0",
181
- "husky": "9.0.7",
180
+ "happy-dom": "20.6.1",
181
+ "html-loader": "5.1.0",
182
+ "husky": "9.1.7",
182
183
  "imports-loader": "5.0.0",
183
- "jest-image-snapshot": "6.4.0",
184
- "js-base64": "3.7.6",
185
- "jsdom": "24.0.0",
184
+ "jest-image-snapshot": "6.5.1",
185
+ "js-base64": "3.7.8",
186
+ "jsdom": "27.4.0",
186
187
  "jsdom-global": "3.0.2",
187
188
  "lint-staged": "15.2.0",
188
- "mini-css-extract-plugin": "2.7.7",
189
- "msw": "2.3.1",
190
- "msw-storybook-addon": "2.0.3",
189
+ "mini-css-extract-plugin": "2.10.0",
190
+ "msw": "2.12.10",
191
+ "msw-storybook-addon": "2.0.6",
191
192
  "multer": "1.4.3",
192
- "nodemon": "3.0.3",
193
+ "nodemon": "3.1.11",
193
194
  "npm-run-all": "4.1.5",
194
195
  "nyc": "15.1.0",
195
196
  "performance-now": "2.1.0",
196
- "picocolors": "1.0.0",
197
- "playwright-core": "1.47.0",
198
- "postcss": "8.4.38",
199
- "postcss-cli": "11.0.0",
200
- "postcss-loader": "8.0.0",
197
+ "picocolors": "1.1.1",
198
+ "playwright-core": "1.58.2",
199
+ "postcss": "8.5.6",
200
+ "postcss-cli": "11.0.1",
201
+ "postcss-loader": "8.2.0",
201
202
  "postcss-nested": "6.0.1",
202
203
  "postcss-prefix-selector": "1.16.0",
203
- "prettier": "3.2.4",
204
+ "prettier": "3.8.1",
204
205
  "request": "2.88.2",
205
206
  "rimraf": "5.0.5",
206
- "rollup-plugin-visualizer": "5.12.0",
207
+ "rollup-plugin-visualizer": "6.0.11",
207
208
  "run-func": "3.0.0",
208
209
  "shx": "0.3.4",
209
210
  "storybook": "9.0.4",
210
211
  "style-loader": "3.3.4",
211
212
  "tailwindcss": "3.4.1",
212
213
  "timsort": "0.3.0",
213
- "ts-loader": "9.5.1",
214
+ "ts-loader": "9.5.4",
214
215
  "ts-node": "10.9.2",
215
- "typescript": "5.3.3",
216
- "vite": "6.3.5",
216
+ "typescript": "5.9.3",
217
+ "vite": "7.3.5",
217
218
  "vite-plugin-commonjs": "0.10.4",
218
- "vite-plugin-node-polyfills": "0.23.0",
219
- "vitest": "3.1.4",
219
+ "vite-plugin-node-polyfills": "0.25.0",
220
+ "vitest": "4.0.18",
220
221
  "vue-eslint-parser": "9.4.2",
221
222
  "vue-loader": "17.4.2",
222
223
  "vue-style-loader": "4.1.3",
@@ -225,7 +226,10 @@
225
226
  "overrides": {
226
227
  "@achrinza/node-ipc": "10.1.10",
227
228
  "@parcel/watcher": "2.1.0",
228
- "rollup-plugin-visualizer": "5.12.0",
229
+ "@storybook/vue3-vite": {
230
+ "vite": "$vite"
231
+ },
232
+ "rollup-plugin-visualizer": "6.0.11",
229
233
  "vite": {
230
234
  "rollup": "npm:@rollup/wasm-node"
231
235
  }
@@ -244,4 +248,4 @@
244
248
  "public"
245
249
  ]
246
250
  }
247
- }
251
+ }
@@ -10,11 +10,13 @@ import {
10
10
  } from '@brand-page/models';
11
11
  import type { AboutSectionViewModel } from '@brand-page/view-models';
12
12
 
13
- global.ResizeObserver = vi.fn().mockImplementation(() => ({
14
- observe: vi.fn(),
15
- unobserve: vi.fn(),
16
- disconnect: vi.fn(),
17
- }));
13
+ global.ResizeObserver = vi.fn(function () {
14
+ return {
15
+ observe: vi.fn(),
16
+ unobserve: vi.fn(),
17
+ disconnect: vi.fn(),
18
+ } as unknown as ResizeObserver;
19
+ });
18
20
 
19
21
  const createTestBrandPageContext = (): BrandPageContext => ({
20
22
  brandPageSlug: faker.person.firstName(),
@@ -0,0 +1,210 @@
1
+ import { defineComponent } from 'vue';
2
+ import type { PropType } from 'vue';
3
+ import ComponentCommonMixin from '../mixins/component-common.mixin';
4
+ import type {
5
+ BannerSectionViewModel,
6
+ ButtonViewModel,
7
+ } from '@brand-page/view-models';
8
+ import { hasValidButton as shouldShowButtonUtil } from '../../../utils/validator.util';
9
+ import type { BrandPageContext } from '@brand-page/models';
10
+ import {
11
+ ALIGN_CENTERED,
12
+ ALIGN_LEFT_ALIGNED,
13
+ ALIGN_RIGHT_ALIGNED,
14
+ BIG_IMAGE,
15
+ ALIGN_LEFT_BIG_IMAGE,
16
+ ALIGN_RIGHT_FULL_IMAGE,
17
+ ALIGN_LEFT_FULL_IMAGE,
18
+ ALIGN_CARD_CENTER_IMAGE,
19
+ ALIGN_CARD_LEFT_IMAGE,
20
+ } from '../../constants';
21
+ import { getRenderText, escapeContentText } from '@brand-page/utils';
22
+ import { hasRTEContent } from '@brand-page-maker/utils';
23
+
24
+ export default defineComponent({
25
+ mixins: [ComponentCommonMixin],
26
+ props: {
27
+ viewModel: {
28
+ type: Object as PropType<BannerSectionViewModel>,
29
+ required: true,
30
+ },
31
+ context: {
32
+ type: Object as PropType<BrandPageContext>,
33
+ required: true,
34
+ },
35
+ containerClientWidth: {
36
+ type: Number as PropType<number | undefined>,
37
+ required: false,
38
+ default: undefined,
39
+ },
40
+ containerClientHeight: {
41
+ type: Number as PropType<number | undefined>,
42
+ required: false,
43
+ default: undefined,
44
+ },
45
+ contentIndex: {
46
+ type: Number,
47
+ required: false,
48
+ default: undefined,
49
+ },
50
+ },
51
+ data() {
52
+ return {
53
+ shouldStackOnTop: false,
54
+ };
55
+ },
56
+ mounted() {
57
+ this.$nextTick(() => {
58
+ window.addEventListener('resize', this.onResize);
59
+ });
60
+ },
61
+ unmounted() {
62
+ if (typeof window !== undefined) {
63
+ window.removeEventListener(`resize`, this.onResize);
64
+ }
65
+ },
66
+ computed: {
67
+ displayAlignClass() {
68
+ switch (this.viewModel.displayStyle) {
69
+ case ALIGN_CENTERED:
70
+ return 'tw-items-center tw-w-full';
71
+ case BIG_IMAGE:
72
+ return 'tw-items-center tw-w-full';
73
+ case ALIGN_LEFT_ALIGNED:
74
+ return 'tw-items-start tw-w-2/3';
75
+ case ALIGN_RIGHT_ALIGNED:
76
+ return 'tw-items-end tw-w-2/3';
77
+ case ALIGN_LEFT_BIG_IMAGE:
78
+ return 'tw-items-start tw-w-2/3';
79
+ case ALIGN_CARD_CENTER_IMAGE:
80
+ return 'tw-items-center tw-w-full';
81
+ case ALIGN_CARD_LEFT_IMAGE:
82
+ return 'tw-items-end';
83
+ default:
84
+ return '';
85
+ }
86
+ },
87
+ displayButtonClass() {
88
+ if (this.viewModel.buttonTextStyle) {
89
+ switch (this.viewModel.buttonTextStyle.textAlign) {
90
+ case 'left':
91
+ return 'tw-justify-start';
92
+ case 'center':
93
+ return 'tw-justify-center';
94
+ case 'right':
95
+ return 'tw-justify-end';
96
+ default:
97
+ return '';
98
+ }
99
+ } else {
100
+ return this.viewModel.displayStyle === ALIGN_CARD_CENTER_IMAGE ||
101
+ this.viewModel.displayStyle === ALIGN_CENTERED
102
+ ? 'tw-justify-center'
103
+ : 'tw-justify-start';
104
+ }
105
+ },
106
+ isLeftImageAligned(): boolean {
107
+ if (this.viewModel.displayStyle === ALIGN_LEFT_FULL_IMAGE) {
108
+ return true;
109
+ }
110
+
111
+ return false;
112
+ },
113
+ isRightImageAligned(): boolean {
114
+ if (this.viewModel.displayStyle === ALIGN_RIGHT_FULL_IMAGE) {
115
+ return true;
116
+ }
117
+
118
+ return false;
119
+ },
120
+
121
+ isDividedContent(): boolean {
122
+ if (
123
+ this.viewModel.displayStyle === ALIGN_RIGHT_FULL_IMAGE ||
124
+ this.viewModel.displayStyle === ALIGN_LEFT_FULL_IMAGE
125
+ ) {
126
+ return true;
127
+ }
128
+
129
+ return false;
130
+ },
131
+ isCardBannerContent(): boolean {
132
+ if (
133
+ this.viewModel.displayStyle === ALIGN_CARD_CENTER_IMAGE ||
134
+ this.viewModel.displayStyle === ALIGN_CARD_LEFT_IMAGE
135
+ ) {
136
+ return true;
137
+ }
138
+
139
+ return false;
140
+ },
141
+ isCardAlignedOnLeft() {
142
+ return this.viewModel.displayStyle === ALIGN_CARD_LEFT_IMAGE;
143
+ },
144
+ getbuttonViewModel(): ButtonViewModel {
145
+ const { buttonViewModel, buttonLinkType, pageSlug } = this.viewModel;
146
+
147
+ buttonViewModel.buttonLinkType = buttonLinkType;
148
+ buttonViewModel.pageSlug = pageSlug;
149
+
150
+ return buttonViewModel;
151
+ },
152
+
153
+ shouldShowButton(): boolean {
154
+ return shouldShowButtonUtil({
155
+ buttonText: this.viewModel.buttonText,
156
+ buttonViewModel: this.viewModel.buttonViewModel,
157
+ });
158
+ },
159
+
160
+ isHorizontalAligned(): boolean {
161
+ return (
162
+ this.viewModel.displayStyle === ALIGN_LEFT_ALIGNED ||
163
+ this.viewModel.displayStyle === ALIGN_RIGHT_ALIGNED ||
164
+ this.viewModel.displayStyle === ALIGN_LEFT_FULL_IMAGE ||
165
+ this.viewModel.displayStyle === ALIGN_RIGHT_FULL_IMAGE
166
+ );
167
+ },
168
+ isBigImageAligned(): boolean {
169
+ return (
170
+ this.viewModel.displayStyle === ALIGN_LEFT_BIG_IMAGE ||
171
+ this.viewModel.displayStyle === ALIGN_CARD_LEFT_IMAGE
172
+ );
173
+ },
174
+ renderText(): string {
175
+ if (!this.viewModel.description) {
176
+ return '';
177
+ }
178
+
179
+ if (hasRTEContent(this.viewModel.description)) {
180
+ return this.viewModel.description;
181
+ } else {
182
+ return getRenderText(this.viewModel.description);
183
+ }
184
+ },
185
+ hasDescriptionText(): boolean {
186
+ if (hasRTEContent(this.viewModel.description)) {
187
+ return escapeContentText(this.viewModel.description) !== '';
188
+ } else {
189
+ return this.viewModel?.description?.length > 0;
190
+ }
191
+ },
192
+ overlayColor(): BrandPageCssStyle {
193
+ return this.viewModel.overlayColor || 'rgb(0,0,0)';
194
+ },
195
+ opacity(): number {
196
+ return this.viewModel.overlayOpacity;
197
+ },
198
+ backgroundOverlay(): BrandPageCssStyle {
199
+ return {
200
+ background: this.overlayColor.backgroundColor,
201
+ opacity: `${this.opacity}%`,
202
+ };
203
+ },
204
+ },
205
+ methods: {
206
+ onResize() {
207
+ this.shouldStackOnTop = window.innerWidth < 640;
208
+ },
209
+ },
210
+ });
@@ -32,7 +32,7 @@
32
32
  </footer>
33
33
  </template>
34
34
  <script setup lang="ts">
35
- import { computed, onMounted, reactive, ref, watch, shallowRef } from 'vue';
35
+ import { computed, onMounted, reactive, watch, shallowRef } from 'vue';
36
36
  import { BRAND_PAGE_TYPES, type BrandPageContext } from '@brand-page/models';
37
37
  import {
38
38
  Icon,