@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
@@ -21,7 +21,6 @@ import {
21
21
  BRAND_PAGE_TYPES,
22
22
  SENSITIVE_CONTENT_TYPES,
23
23
  getAbTestResults,
24
- getValueType,
25
24
  type AbTest,
26
25
  type LogoContent,
27
26
  } from '@brand-page';
@@ -34,7 +33,6 @@ import {
34
33
  TRIGGER_TYPE,
35
34
  UPGRADE_CTA_LOCATIONS,
36
35
  useEventTracker,
37
- EVENTS,
38
36
  } from '@brand-page-maker/composables/useEventTracker';
39
37
  import { navigationTr } from '@src/composables/useTranslate';
40
38
  import type { WebsiteSlugCheckResponse } from '@brand-page-maker/models/api.model';
@@ -123,6 +121,7 @@ export type InitialisePayload = Omit<
123
121
  logoDraftAssets: LogoDraftAsset[];
124
122
  gettyVideos: GettyVideoEditorViewModelResponse[];
125
123
  templateSearchTerm: string | undefined;
124
+ aiTemplateKeywords: string | undefined;
126
125
  onSearchTermChanged?: OnSearchTermChangedCallback;
127
126
  };
128
127
 
@@ -266,6 +265,10 @@ export const useBrandPageContainerStore = defineStore('brandPageContainer', {
266
265
  onSearchTermChanged: payload.onSearchTermChanged,
267
266
  });
268
267
 
268
+ templateSettingsStore.setAiTemplateKeywords({
269
+ aiTemplateKeywords: payload.aiTemplateKeywords ?? '',
270
+ });
271
+
269
272
  brandPageMakerStore.setSelectedTemplateId({
270
273
  templateId: this.designTemplateToken,
271
274
  });
@@ -446,7 +449,7 @@ export const useBrandPageContainerStore = defineStore('brandPageContainer', {
446
449
 
447
450
  async publishBrandPage({ shouldPublish, slug }) {
448
451
  const brandPageMakerStore = useBrandPageMakerStore();
449
- const eventTracker = useEventTracker();
452
+ const _eventTracker = useEventTracker();
450
453
 
451
454
  if (!this.designDraftToken) {
452
455
  throw new Error(
@@ -553,7 +556,7 @@ export const useBrandPageContainerStore = defineStore('brandPageContainer', {
553
556
  isPurchasedDomain,
554
557
  }) {
555
558
  const brandPageMakerStore = useBrandPageMakerStore();
556
- const eventTracker = useEventTracker();
559
+ const _eventTracker = useEventTracker();
557
560
 
558
561
  if (!this.designDraftToken) {
559
562
  throw new Error(
@@ -887,7 +890,7 @@ export const useBrandPageContainerStore = defineStore('brandPageContainer', {
887
890
  ) {
888
891
  const userStore = useBrandPageMakerUserStore();
889
892
  const brandPageMakerStore = useBrandPageMakerStore();
890
- const eventTracker = useEventTracker();
893
+ const _eventTracker = useEventTracker();
891
894
 
892
895
  if (userStore.isAdmin) {
893
896
  throw new Error('save brand page is not allowed in admin mode');
@@ -2,7 +2,6 @@ import { vi } from 'vitest';
2
2
  import {
3
3
  BRAND_PAGE,
4
4
  INITIALISE_PAYLOAD,
5
- USER_FEATURES,
6
5
  userFeatures,
7
6
  } from '../../components/brand-page-maker/__fixtures__';
8
7
  import {
@@ -44,6 +43,7 @@ import { useUiBackgroundSettingsStore } from '@shared/background-settings/store'
44
43
  import { useBrandPageMakerUserStore } from '../user';
45
44
  import { useBrandPageContainerStore } from '../brandpage-container';
46
45
  import { useUiTemplateSettingsStore } from '@shared/template-settings/store';
46
+ import { usePageNavigationStore } from '@shared/page-navigation/store/page-navigation-store';
47
47
  import {
48
48
  CONTENT_SETTINGS_MODES,
49
49
  useUiContentSettingsStore,
@@ -54,8 +54,6 @@ import { SIDE_BAR_TAB_NAMES } from '@brand-page-maker/constants';
54
54
  import { PAGE_SECTIONS } from '@shared/page-settings/models';
55
55
  import { FabricRenderClient } from '../../../clients/fabric-render-client';
56
56
  import { setLocaleAsync } from '@src/composables/useTranslate';
57
- import { usePageNavigationStore } from '@shared/page-navigation/store/page-navigation-store';
58
- import type { NavModel } from '@brand-page/models';
59
57
 
60
58
  const createInitialisePayload = () => {
61
59
  const initialisePayload = {
@@ -23,14 +23,12 @@ import {
23
23
  CONTENT_TYPES,
24
24
  NavigationDesktop,
25
25
  NavigationMobile,
26
- NavModel,
27
26
  } from '@brand-page';
28
27
  import type {
29
28
  DesignTemplateType,
30
29
  InitialCategories,
31
30
  TemplateCategory,
32
31
  } from '@shared/template-settings/models';
33
- import type { UserFeatures } from '../user';
34
32
  import { useBrandPageMakerUserStore } from '../user';
35
33
  import { defineStore } from 'pinia';
36
34
  import { toRaw } from 'vue';
@@ -125,6 +123,8 @@ export interface InitialisePayload {
125
123
  templateCategories: TemplateCategory[];
126
124
  personalisationData?: UserPersonalisationContent[];
127
125
  isPersonalisationEnabled: boolean;
126
+ userPromptContentKey?: string;
127
+ showAiTemplatesTab?: boolean;
128
128
  businessName: string | undefined;
129
129
  industry: string | undefined;
130
130
  layout?: string;
@@ -1230,11 +1230,13 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
1230
1230
  templateCategories,
1231
1231
  personalisationData,
1232
1232
  isPersonalisationEnabled,
1233
+ userPromptContentKey,
1234
+ showAiTemplatesTab = false,
1233
1235
  businessName,
1234
1236
  industry,
1235
1237
  layout,
1236
1238
  logoVariationImageUrls,
1237
- shopConfigData,
1239
+ shopConfigData: _shopConfigData,
1238
1240
  isServerRenderOverride = false,
1239
1241
  }: InitialisePayload) {
1240
1242
  const brandPageContainerStore = useBrandPageContainerStore();
@@ -1246,7 +1248,7 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
1246
1248
  const backgroundSettingsStore = useUiBackgroundSettingsStore();
1247
1249
  const styleSettingsStore = useUiStyleSettingsStore();
1248
1250
  const navigationStyleSettingsStore = useUiNavigationStyleSettingsStore();
1249
- const sideBarStore = useUiSideBarStore();
1251
+ const _sideBarStore = useUiSideBarStore();
1250
1252
 
1251
1253
  navigationStyleSettingsStore.initialise({ reset: false });
1252
1254
 
@@ -1353,6 +1355,10 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
1353
1355
  });
1354
1356
  }
1355
1357
 
1358
+ uiStore.setUserPromptContentKey({ userPromptContentKey });
1359
+
1360
+ uiStore.setShowAiTemplatesTab({ showAiTemplatesTab });
1361
+
1356
1362
  templateSettingsStore.setTemplateCategories({
1357
1363
  categories: templateCategories,
1358
1364
  });
@@ -1800,6 +1806,7 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
1800
1806
  const navigationStyleSettingsStore = useUiNavigationStyleSettingsStore();
1801
1807
  const shopStore = useShopConfigStore();
1802
1808
  const pageNavigationStore = usePageNavigationStore();
1809
+ const uiStore = useUiStore();
1803
1810
 
1804
1811
  const pages = pageSettingsStore.pages.map((p) => ({
1805
1812
  ...p,
@@ -1817,6 +1824,7 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
1817
1824
 
1818
1825
  return {
1819
1826
  v: GetLatestModelVersion(),
1827
+ userPromptContentKey: uiStore.userPromptContentKey,
1820
1828
  pages,
1821
1829
  styles: {
1822
1830
  logoStyles,
@@ -48,6 +48,8 @@ export const useUiStore = defineStore('ui', {
48
48
  },
49
49
  personalisationData: undefined,
50
50
  isPersonalisationEnabled: false,
51
+ userPromptContentKey: undefined,
52
+ showAiTemplatesTab: false,
51
53
  }),
52
54
  actions: {
53
55
  setLogoTheme(payload: { logoTheme: LogoTheme }) {
@@ -78,6 +80,20 @@ export const useUiStore = defineStore('ui', {
78
80
  }) {
79
81
  this.personalisationData = personalisationData;
80
82
  },
83
+ setUserPromptContentKey({
84
+ userPromptContentKey,
85
+ }: {
86
+ userPromptContentKey: string | undefined;
87
+ }) {
88
+ this.userPromptContentKey = userPromptContentKey;
89
+ },
90
+ setShowAiTemplatesTab({
91
+ showAiTemplatesTab,
92
+ }: {
93
+ showAiTemplatesTab: boolean;
94
+ }) {
95
+ this.showAiTemplatesTab = showAiTemplatesTab;
96
+ },
81
97
  onBackgroundChanged() {
82
98
  const brandPageMakerStore = useBrandPageMakerStore();
83
99
 
@@ -7,7 +7,7 @@ import type {
7
7
  ContentSettingsConfig,
8
8
  CreateInitialContentOptions,
9
9
  } from '../models';
10
- import { SENSITIVE_CONTENT_TYPES, type Content } from '@brand-page';
10
+ import { type Content } from '@brand-page';
11
11
  import { RESERVED_FIELD_NAMES } from '@shared/content-settings/constants';
12
12
  import { CONTENT_SETTINGS_CONFIGS } from '../constants';
13
13
  import type { UIUserFeatures } from '@src/constants/ui';
@@ -431,7 +431,7 @@ const transformRTEField = (
431
431
  if (textStyleType && (textStyleType === type || uiStyleSettingsStore)) {
432
432
  let globalContentStyle = uiStyleSettingsStore
433
433
  ? uiStyleSettingsStore.textStyles.textStyleOptions[textStyleType].style
434
- : newStyle ?? ({} as TextStyleDeclaration);
434
+ : (newStyle ?? ({} as TextStyleDeclaration));
435
435
 
436
436
  globalContentStyle = {
437
437
  ...globalContentStyle,
@@ -549,7 +549,7 @@ export const transformToRTE = (
549
549
  ? uiStyleSettingsStore.textStyles.textStyleOptions[
550
550
  textItemStyleType
551
551
  ].style
552
- : newStyle ?? ({} as TextStyleDeclaration);
552
+ : (newStyle ?? ({} as TextStyleDeclaration));
553
553
 
554
554
  globalContentStyle = {
555
555
  ...globalContentStyle,
@@ -593,7 +593,7 @@ export const transformToRTE = (
593
593
  let globalContentStyle = uiStyleSettingsStore
594
594
  ? uiStyleSettingsStore.textStyles.textStyleOptions[textStyleType]
595
595
  .style
596
- : newStyle ?? ({} as TextStyleDeclaration);
596
+ : (newStyle ?? ({} as TextStyleDeclaration));
597
597
 
598
598
  globalContentStyle = {
599
599
  ...globalContentStyle,
@@ -647,7 +647,7 @@ export const switchAllContentToRTE = (
647
647
 
648
648
  if (textContent.textItems && textContent.textItems.length > 0) {
649
649
  for (const [
650
- itemIndex,
650
+ _itemIndex,
651
651
  textItemContent,
652
652
  ] of textContent.textItems.entries()) {
653
653
  const textItemStyleType = textItemContent.textStyle.textStyleType;
@@ -11,6 +11,7 @@ interface DesignTemplateClientOptions {}
11
11
  interface GetTemplatesAsyncOptions {
12
12
  categoryName?: string;
13
13
  searchTerm?: string;
14
+ keywords?: string;
14
15
  side?: string;
15
16
  logoDraftToken?: string;
16
17
  logoVariation?: number;
@@ -22,6 +23,8 @@ interface GetTemplatesAsyncOptions {
22
23
  locale?: string;
23
24
  logoS3Token?: string;
24
25
  logoTemplateToken?: string;
26
+ pageSection?: string;
27
+ pageName?: string;
25
28
  }
26
29
 
27
30
  export const getTemplatesEndpoint = (templateTypeName: string) =>
@@ -4,6 +4,7 @@ export interface Paginated<T> {
4
4
  pageSize: number;
5
5
  pageCount: number;
6
6
  totalResultCount: number;
7
+ abTestValuesToBePushed?: Record<string, string>;
7
8
  }
8
9
 
9
10
  export interface DesignTemplate {
@@ -14,6 +15,7 @@ export interface DesignTemplate {
14
15
 
15
16
  export interface PaginatedDesignTemplateItem {
16
17
  designTemplateToken: string;
18
+ isPersonalisable?: boolean;
17
19
  previewImageUrl?: string;
18
20
  }
19
21
 
package/src/lib.ts CHANGED
@@ -96,6 +96,7 @@ export {
96
96
  useEventManagerStore,
97
97
  useLocalisedRouteStore,
98
98
  useVideoStore,
99
+ useRouteStore,
99
100
  } from './brand-page-maker/stores';
100
101
  export { useShopConfigStore } from './shared/ecommerce-settings/store/shop-settings-store';
101
102
 
@@ -57,7 +57,7 @@ describe('FooterBuilder — copyright font vs global style', () => {
57
57
  });
58
58
 
59
59
  const { model: out } = await run(
60
- { copyright_text_font_family: 'Anton' },
60
+ { copyright_text_style: { fontFamily: 'Anton' } },
61
61
  model,
62
62
  );
63
63
 
@@ -73,4 +73,203 @@ describe('FooterBuilder — copyright font vs global style', () => {
73
73
  expect(style.color).toBe('#2d0b3f');
74
74
  expect(style.textAlign).toBe('center');
75
75
  });
76
+
77
+ it('applies copyright font size + weight via the style object, detaches, preserves the text', async () => {
78
+ const model = makeModel({
79
+ textStyleType: 'paragraphs',
80
+ textAlign: 'center',
81
+ fontWeight: 'bold',
82
+ });
83
+
84
+ const { model: out } = await run(
85
+ { copyright_text_style: { fontSize: '0.875em', fontWeight: 'normal' } },
86
+ model,
87
+ );
88
+
89
+ const desktop = out.pageFooterDesktop!;
90
+ const style = desktop.copyrightStyle as Record<string, unknown>;
91
+
92
+ expect(style.fontSize).toBe('0.875em');
93
+ expect(style.fontWeight).toBe('normal');
94
+ expect(style.textStyleType).toBeUndefined();
95
+ // preset values resolved in, not lost
96
+ expect(style.fontFamily).toBe('Inter');
97
+ expect(style.textAlign).toBe('center');
98
+ // style-only change must NOT touch the copyright text itself
99
+ expect(desktop.copyrightText).toBeUndefined();
100
+ });
101
+
102
+ it('applies copyright style to both viewports', async () => {
103
+ const model = makeModel({ textStyleType: 'paragraphs' });
104
+
105
+ const { model: out } = await run(
106
+ { copyright_text_style: { fontSize: '0.75em', fontWeight: 'normal' } },
107
+ model,
108
+ );
109
+
110
+ for (const vp of [out.pageFooterDesktop!, out.pageFooterMobile!]) {
111
+ const style = vp.copyrightStyle as Record<string, unknown>;
112
+
113
+ expect(style.fontSize).toBe('0.75em');
114
+ expect(style.fontWeight).toBe('normal');
115
+ expect(style.textStyleType).toBeUndefined();
116
+ }
117
+ });
118
+
119
+ it('applies copyright colour and normalises letterSpacing (int→em) via the style object', async () => {
120
+ const model = makeModel({ textStyleType: 'paragraphs' });
121
+
122
+ const { model: out } = await run(
123
+ { copyright_text_style: { color: '#f5f5f5', letterSpacing: 50 } },
124
+ model,
125
+ );
126
+
127
+ const style = out.pageFooterDesktop!.copyrightStyle as Record<
128
+ string,
129
+ unknown
130
+ >;
131
+
132
+ expect(style.color).toBe('#f5f5f5');
133
+ // letterSpacing int 0–100 is normalised to an em string (50 → '0.5em'),
134
+ // exactly as section *_style values are.
135
+ expect(style.letterSpacing).toBe('0.5em');
136
+ expect(style.textStyleType).toBeUndefined();
137
+ });
138
+ });
139
+
140
+ type Link = { imageUrl: string; url: string };
141
+
142
+ const link = (imageUrl: string): Link => ({
143
+ imageUrl,
144
+ url: `https://${imageUrl}.com`,
145
+ });
146
+
147
+ /**
148
+ * Footers migrated from the legacy single `footerStyles` model
149
+ * (migration-01) split into desktop + mobile via a shallow spread, leaving
150
+ * both viewports' `socialLinks` pointing at ONE shared array. `cloneDeep`
151
+ * preserves that shared reference. This factory reproduces that shape.
152
+ */
153
+ const makeSharedSocialModel = (links: Link[]): BrandPageModel => {
154
+ const shared = links.map((l) => ({ ...l }));
155
+
156
+ return {
157
+ styles: { textStyles: { textStyleOptions } },
158
+ pageFooterDesktop: { socialLinks: shared },
159
+ pageFooterMobile: { socialLinks: shared },
160
+ } as unknown as BrandPageModel;
161
+ };
162
+
163
+ const makeIndependentSocialModel = (links: Link[]): BrandPageModel =>
164
+ ({
165
+ styles: { textStyles: { textStyleOptions } },
166
+ pageFooterDesktop: { socialLinks: links.map((l) => ({ ...l })) },
167
+ pageFooterMobile: { socialLinks: links.map((l) => ({ ...l })) },
168
+ }) as unknown as BrandPageModel;
169
+
170
+ const socialIcons = (footer: { socialLinks?: Link[] } | undefined) =>
171
+ (footer?.socialLinks ?? []).map((l) => l.imageUrl);
172
+
173
+ describe('FooterBuilder — social link removal (shared-array regression)', () => {
174
+ // Reproduces the bug: a single requested removal index dropped TWO links
175
+ // because both viewports shared one array and the builder spliced it twice.
176
+ it('removes exactly one link per requested index even when viewports share the array', async () => {
177
+ const model = makeSharedSocialModel([
178
+ link('facebook'),
179
+ link('instagram'),
180
+ link('x'),
181
+ link('youtube'),
182
+ ]);
183
+
184
+ const { model: out } = await run(
185
+ { _remove_social_link_indices: [2] },
186
+ model,
187
+ );
188
+
189
+ expect(socialIcons(out.pageFooterDesktop)).toEqual([
190
+ 'facebook',
191
+ 'instagram',
192
+ 'youtube',
193
+ ]);
194
+ expect(socialIcons(out.pageFooterMobile)).toEqual([
195
+ 'facebook',
196
+ 'instagram',
197
+ 'youtube',
198
+ ]);
199
+ });
200
+
201
+ it('un-shares the viewport arrays so later in-place edits cannot cross-corrupt', async () => {
202
+ const model = makeSharedSocialModel([
203
+ link('facebook'),
204
+ link('instagram'),
205
+ link('x'),
206
+ ]);
207
+
208
+ const { model: out } = await run(
209
+ { _remove_social_link_indices: [0] },
210
+ model,
211
+ );
212
+
213
+ expect(out.pageFooterDesktop!.socialLinks).not.toBe(
214
+ out.pageFooterMobile!.socialLinks,
215
+ );
216
+ });
217
+
218
+ it('handles multiple removal indices on a shared array (descending splice)', async () => {
219
+ const model = makeSharedSocialModel([
220
+ link('facebook'),
221
+ link('instagram'),
222
+ link('x'),
223
+ link('youtube'),
224
+ ]);
225
+
226
+ const { model: out } = await run(
227
+ { _remove_social_link_indices: [0, 2] },
228
+ model,
229
+ );
230
+
231
+ expect(socialIcons(out.pageFooterDesktop)).toEqual([
232
+ 'instagram',
233
+ 'youtube',
234
+ ]);
235
+ expect(socialIcons(out.pageFooterMobile)).toEqual(['instagram', 'youtube']);
236
+ });
237
+
238
+ it('removes one link per index for independent viewport arrays (no regression)', async () => {
239
+ const model = makeIndependentSocialModel([
240
+ link('facebook'),
241
+ link('instagram'),
242
+ link('x'),
243
+ ]);
244
+
245
+ const { model: out } = await run(
246
+ { _remove_social_link_indices: [1] },
247
+ model,
248
+ );
249
+
250
+ expect(socialIcons(out.pageFooterDesktop)).toEqual(['facebook', 'x']);
251
+ expect(socialIcons(out.pageFooterMobile)).toEqual(['facebook', 'x']);
252
+ });
253
+
254
+ it('inserts exactly one link on a shared array (symmetric add guard)', async () => {
255
+ const model = makeSharedSocialModel([link('facebook'), link('instagram')]);
256
+
257
+ const { model: out } = await run(
258
+ {
259
+ social_links: [{ insert_at: 1, social_link_icon: 'x', url: 'x.com' }],
260
+ },
261
+ model,
262
+ );
263
+
264
+ expect(socialIcons(out.pageFooterDesktop)).toEqual([
265
+ 'facebook',
266
+ 'x',
267
+ 'instagram',
268
+ ]);
269
+ expect(socialIcons(out.pageFooterMobile)).toEqual([
270
+ 'facebook',
271
+ 'x',
272
+ 'instagram',
273
+ ]);
274
+ });
76
275
  });