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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DhzvKlTS.js → CreatedOnBrandCrowd-de-de-SHCspMwS.js} +3 -3
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DKH4lmNV.js → CreatedOnBrandCrowd-en-us-C6lITAAT.js} +3 -3
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-RloPCLuV.js → CreatedOnBrandCrowd-es-es-Uh69c4vZ.js} +3 -3
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-Cu9e2H0K.js → CreatedOnBrandCrowd-fr-ca-Bb0rp7BV.js} +3 -3
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-Cu9e2H0K.js → CreatedOnBrandCrowd-fr-fr-Bb0rp7BV.js} +3 -3
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-CiCnjxBZ.js → CreatedOnBrandCrowd-pt-br-DsrQHcjs.js} +3 -3
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-CiCnjxBZ.js → CreatedOnBrandCrowd-pt-pt-DsrQHcjs.js} +3 -3
  8. package/lib/src/{CreatedOnDcom-de-de-CwlnedFV.js → CreatedOnDcom-de-de-BshZYzSp.js} +3 -3
  9. package/lib/src/{CreatedOnDcom-en-us-DFHex61v.js → CreatedOnDcom-en-us-CLu8mKUW.js} +3 -3
  10. package/lib/src/{CreatedOnDcom-es-es-BTxH6I4V.js → CreatedOnDcom-es-es-BZYhkONd.js} +3 -3
  11. package/lib/src/{CreatedOnDcom-fr-ca-BVw0KYxu.js → CreatedOnDcom-fr-ca-CIaBEp_9.js} +3 -3
  12. package/lib/src/{CreatedOnDcom-fr-fr-DaqNz1Er.js → CreatedOnDcom-fr-fr-dyF7hioJ.js} +3 -3
  13. package/lib/src/{CreatedOnDcom-pt-br-B4KsMI8W.js → CreatedOnDcom-pt-br-CUHjk2du.js} +3 -3
  14. package/lib/src/{CreatedOnDcom-pt-pt-CWoHEtOZ.js → CreatedOnDcom-pt-pt-CWDvQidv.js} +3 -3
  15. package/lib/src/brand-page/clients/brand-page.client.d.ts +9 -9
  16. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.d.ts +103 -0
  17. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.js +178 -0
  18. package/lib/src/brand-page/components/image-gallery/masonry/MasonryGallery.mixin.d.ts +1 -2
  19. package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.d.ts +4 -2
  20. package/lib/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.js +1 -0
  21. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +4 -2
  22. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +11 -5
  23. package/lib/src/brand-page/components/page/Page.mixin.d.ts +1 -1
  24. package/lib/src/brand-page/components/page/PageComponent.mixin.d.ts +1 -1
  25. package/lib/src/brand-page/components/payment/Payment.mixin.d.ts +3 -3
  26. package/lib/src/brand-page/components/payment/__fixtures__/request-payment.d.ts +13 -13
  27. package/lib/src/brand-page/components/payment/__fixtures__/support-me.d.ts +13 -13
  28. package/lib/src/brand-page/constants/sections/footer-display.constants.js +1 -1
  29. package/lib/src/brand-page/models/index.d.ts +2 -13
  30. package/lib/src/brand-page/models/index.js +3 -0
  31. package/lib/src/brand-page/models/payment.model.d.ts +1 -1
  32. package/lib/src/brand-page/utils/personalisation.util.js +72 -14
  33. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +21 -19
  34. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.js +1 -0
  35. package/lib/src/brand-page-maker/components/admin-background-settings/AdminBackgroundSettings.mixin.d.ts +16 -10
  36. package/lib/src/brand-page-maker/components/admin-background-settings/ShapePositionSlider.mixin.d.ts +1 -1
  37. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +3 -3
  38. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +181 -170
  39. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +3 -0
  40. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.js +1 -0
  41. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +12 -12
  42. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.js +2 -2
  43. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.js +0 -7
  44. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +148 -149
  45. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +21 -21
  46. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.js +1 -1
  47. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.d.ts +4 -2
  48. package/lib/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.js +1 -0
  49. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.d.ts +4 -2
  50. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.js +1 -0
  51. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.d.ts +5 -2
  52. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.js +1 -0
  53. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.d.ts +4 -2
  54. package/lib/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.js +1 -0
  55. package/lib/src/brand-page-maker/components/device/Device.mixin.d.ts +4 -2
  56. package/lib/src/brand-page-maker/components/device/Device.mixin.js +1 -0
  57. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +4 -2
  58. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.js +1 -0
  59. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +3 -3
  60. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +11 -11
  61. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +27 -25
  62. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.js +1 -0
  63. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +27 -27
  64. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.js +1 -1
  65. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +17 -12
  66. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +12 -12
  67. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +30 -32
  68. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +16 -5
  69. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +11 -11
  70. package/lib/src/brand-page-maker/composables/ai-chat/types.d.ts +3 -0
  71. package/lib/src/brand-page-maker/composables/ai-chat/ui-actions.d.ts +29 -0
  72. package/lib/src/brand-page-maker/composables/ai-chat/ui-actions.js +32 -0
  73. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +204 -177
  74. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +1 -1
  75. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +6 -6
  76. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +3 -2
  77. package/lib/src/brand-page-maker/composables/useEventTracker.js +1 -0
  78. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +6 -6
  79. package/lib/src/brand-page-maker/constants/config-settings-constant.js +3 -3
  80. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.d.ts +1 -1
  81. package/lib/src/brand-page-maker/convertors/text-image-display-style.convertor.js +1 -1
  82. package/lib/src/brand-page-maker/models/content-settings.d.ts +1 -1
  83. package/lib/src/brand-page-maker/models/navigation-style-configs.js +1 -1
  84. package/lib/src/brand-page-maker/routing/brand-page-maker-router.d.ts +1 -2
  85. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +366 -378
  86. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +5 -4
  87. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.js +8 -5
  88. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +3 -1
  89. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +7 -3
  90. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +15 -15
  91. package/lib/src/brand-page-maker/stores/ui/ui-store.d.ts +6 -0
  92. package/lib/src/brand-page-maker/stores/ui/ui-store.js +8 -0
  93. package/lib/src/brand-page-maker/utils/content-settings.util.js +1 -1
  94. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +1 -1
  95. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +4 -4
  96. package/lib/src/clients/ai-assistant-client.d.ts +7 -0
  97. package/lib/src/clients/brand-page-client.d.ts +16 -15
  98. package/lib/src/clients/design-template-client.d.ts +3 -0
  99. package/lib/src/clients/media-client.d.ts +2 -2
  100. package/lib/src/clients/models.d.ts +2 -0
  101. package/lib/src/composables/useSnapshot.js +18 -18
  102. package/lib/src/css/library.brand-page-brandCrowd.min.css +371 -344
  103. package/lib/src/css/library.brand-page-brandPage.min.css +649 -344
  104. package/lib/src/css/library.brand-page-designCom.min.css +371 -344
  105. package/lib/src/css/library.brand-page-preview.min.css +627 -344
  106. package/lib/src/index.d.ts +4 -0
  107. package/lib/src/index.mjs +107 -104
  108. package/lib/src/{lib-BPI8E2Ui.js → lib-COw-Rz05.js} +37005 -33761
  109. package/lib/src/lib.js +10 -0
  110. package/lib/src/metadata-builder/builders/footer-builder.js +105 -62
  111. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +68 -57
  112. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +93 -58
  113. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +99 -66
  114. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +17 -57
  115. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +85 -51
  116. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +74 -49
  117. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +7 -0
  118. package/lib/src/metadata-builder/builders/section-field-utils.js +1 -1
  119. package/lib/src/metadata-builder/builders/shape-color-utils.js +1 -1
  120. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +7 -16
  121. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +48 -66
  122. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.d.ts +1 -1
  123. package/lib/src/plugins/google-maps-plugin/google-maps-plugin.js +8 -8
  124. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +13 -13
  125. package/lib/src/shared/background-settings/store/background-settings-store.d.ts +3 -3
  126. package/lib/src/shared/color-picker/components/ColorPicker.mixin.d.ts +4 -2
  127. package/lib/src/shared/color-picker/components/ColorPicker.mixin.js +2 -2
  128. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.d.ts +4 -2
  129. package/lib/src/shared/color-picker/components/ColorPickerSwatch.mixin.js +1 -0
  130. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.d.ts +5 -2
  131. package/lib/src/shared/confirm-modal/ConfirmModal.mixin.js +1 -0
  132. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +0 -1
  133. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +131 -129
  134. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +2 -1
  135. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +111 -110
  136. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +84 -81
  137. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.js +5 -0
  138. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +117 -109
  139. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +1 -14
  140. package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +0 -1
  141. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +72 -70
  142. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +4 -3
  143. package/lib/src/shared/content-settings/components/form-fields-field/FormFieldsField.mixin.d.ts +4 -4
  144. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.d.ts +3 -1
  145. package/lib/src/shared/content-settings/components/icon-library/IconLibrary.mixin.js +1 -0
  146. package/lib/src/shared/content-settings/components/images-field/ImagesField.mixin.d.ts +2 -2
  147. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +4 -3
  148. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +1 -1
  149. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +40 -40
  150. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigOptionField.mixin.d.ts +5 -6
  151. package/lib/src/shared/content-settings/components/shape-field/ShapeField.mixin.d.ts +0 -1
  152. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.d.ts +2 -2
  153. package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +0 -1
  154. package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +1 -2
  155. package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +0 -1
  156. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.d.ts +1 -2
  157. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +1 -1
  158. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +28 -28
  159. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +0 -1
  160. package/lib/src/shared/content-settings/components/toggle-field/ToggleField.mixin.d.ts +2 -2
  161. package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +0 -1
  162. package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +0 -1
  163. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +39 -39
  164. package/lib/src/shared/content-settings/utils.js +0 -1
  165. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.d.ts +6 -4
  166. package/lib/src/shared/font-family-selector/FontFamilySelector.mixin.js +1 -0
  167. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.d.ts +4 -2
  168. package/lib/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.js +1 -0
  169. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +29 -21
  170. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.js +1 -1
  171. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +50 -51
  172. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.d.ts +6 -4
  173. package/lib/src/shared/logo-settings/components/LogoSettingsHeader.mixin.js +1 -0
  174. package/lib/src/shared/logo-settings/store/editable-logo-store.js +1 -1
  175. package/lib/src/shared/logo-settings/store/logo-settings-store.d.ts +1 -1
  176. package/lib/src/shared/logo-versions/LogoVersions.mixin.d.ts +13 -5
  177. package/lib/src/shared/logo-versions/LogoVersions.mixin.js +1 -0
  178. package/lib/src/shared/models.d.ts +2 -0
  179. package/lib/src/shared/my-designs/MyDesigns.mixin.d.ts +14 -6
  180. package/lib/src/shared/my-designs/MyDesigns.mixin.js +1 -0
  181. package/lib/src/shared/my-uploads/MyMedia.mixin.d.ts +14 -5
  182. package/lib/src/shared/my-uploads/MyMedia.mixin.js +1 -0
  183. package/lib/src/shared/my-uploads/MyUploads.mixin.d.ts +14 -5
  184. package/lib/src/shared/my-uploads/MyUploads.mixin.js +1 -0
  185. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.d.ts +5 -3
  186. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +1 -0
  187. package/lib/src/shared/navigation-style-settings/store/index.d.ts +2 -2
  188. package/lib/src/shared/page-navigation/store/page-navigation-store.d.ts +2 -2
  189. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +27 -28
  190. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.js +0 -2
  191. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +188 -179
  192. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +181 -177
  193. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +1 -1
  194. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +9 -9
  195. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +39 -39
  196. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +0 -1
  197. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +18 -18
  198. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +6 -6
  199. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +66 -60
  200. package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -1
  201. package/lib/src/shared/style-settings/store/style-settings-store.js +1 -1
  202. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +20 -450
  203. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.js +2 -2
  204. package/lib/src/shared/template-settings/models.d.ts +1 -0
  205. package/lib/src/shared/template-settings/store/template-settings-store.d.ts +4 -0
  206. package/lib/src/shared/template-settings/store/template-settings-store.js +79 -11
  207. package/lib/src/shared/unsplash-library/UnsplashLibrary.mixin.d.ts +9 -4
  208. package/lib/src/utils/build-asset-manifest.d.ts +4 -0
  209. package/lib/src/utils/build-asset-manifest.js +8 -0
  210. package/lib/src/utils/minify-brand-page-metadata.d.ts +0 -2
  211. package/lib/src/utils/minify-brand-page-metadata.js +2 -17
  212. package/package.json +60 -56
  213. package/src/brand-page/components/about-section/AboutSection.vue.test.ts +7 -5
  214. package/src/brand-page/components/banner-section/BannerSection.mixin.ts +210 -0
  215. package/src/brand-page/components/banner-section/BannerSection.vue +5 -1
  216. package/src/brand-page/components/brand-page-footer/BrandPageFooter.vue +1 -1
  217. package/src/brand-page/components/image/Image.mixin.ts +1 -1
  218. package/src/brand-page/components/image/Image.test.ts +1 -1
  219. package/src/brand-page/components/image-gallery/masonry/MasonryGallery.mixin.ts +1 -2
  220. package/src/brand-page/components/images-section/ImagesSection.vue +0 -1
  221. package/src/brand-page/components/logo/LogoRender.vue +188 -188
  222. package/src/brand-page/components/navigation/hamburger/HamburgerNavigation.mixin.ts +1 -0
  223. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +25 -8
  224. package/src/brand-page/components/page-footer/PageFooter.vue +1 -0
  225. package/src/brand-page/components/page-header/HeaderLayout.vue +12 -6
  226. package/src/brand-page/components/page-header/PageHeader.vue +1 -0
  227. package/src/brand-page/components/shapes-section/ShapesSection.vue +1 -1
  228. package/src/brand-page/components/shop/CartModal.vue +1 -3
  229. package/src/brand-page/components/shop/FeaturedDisplay.vue +2 -2
  230. package/src/brand-page/components/shop/PaymentModal.vue +1 -5
  231. package/src/brand-page/components/shop/ProductDetailModal.vue +1 -1
  232. package/src/brand-page/components/shop/Shop.vue +1 -5
  233. package/src/brand-page/components/shop/TextDisplay.vue +1 -1
  234. package/src/brand-page/components/shop/ThumbnailDisplay.vue +2 -2
  235. package/src/brand-page/components/testimonial-section/TestimonialSection.vue +3 -3
  236. package/src/brand-page/components/text-wrapper/TextWrapper.vue +3 -1
  237. package/src/brand-page/constants/sections/footer-display.constants.ts +1 -1
  238. package/src/brand-page/models/index.ts +4 -12
  239. package/src/brand-page/models/payment.model.ts +2 -1
  240. package/src/brand-page/models/shop.model.ts +0 -2
  241. package/src/brand-page/models/user-personalisation.model.ts +1 -2
  242. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -0
  243. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  244. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  245. package/src/brand-page/utils/migration/migration-01_1.ts +1 -1
  246. package/src/brand-page/utils/migration/migration-02.ts +0 -1
  247. package/src/brand-page/utils/migration/migration-03.ts +0 -1
  248. package/src/brand-page/utils/migration/migration-04.ts +0 -1
  249. package/src/brand-page/utils/migration/migration-05.ts +1 -5
  250. package/src/brand-page/utils/migration/migration-05_2.ts +1 -1
  251. package/src/brand-page/utils/migration/migration-08.test.ts +1 -1
  252. package/src/brand-page/utils/personalisation.util.test.ts +35 -0
  253. package/src/brand-page/utils/personalisation.util.ts +119 -23
  254. package/src/brand-page/view-models.ts +38 -56
  255. package/src/brand-page-maker/assessors/banner-section-description-visibility.assessor.ts +6 -6
  256. package/src/brand-page-maker/assessors/color-replacement-icon-visibility.assessor.ts +2 -2
  257. package/src/brand-page-maker/assessors/color-replacement-profile-visibility.assessor.ts +2 -2
  258. package/src/brand-page-maker/assessors/color-replacement-visibility.assessor.ts +2 -2
  259. package/src/brand-page-maker/assessors/contact-form-visibility.assessor.ts +14 -14
  260. package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +1 -0
  261. package/src/brand-page-maker/components/ai-text-edit/AiActionButtons.vue +27 -12
  262. package/src/brand-page-maker/components/ai-text-edit/AiChatbox.vue +3 -2
  263. package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +8 -7
  264. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +21 -1
  265. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +5 -1
  266. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.stories.ts +1 -0
  267. package/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.stories.ts +2 -5
  268. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -5
  269. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-payment.ts +0 -8
  270. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-site-template.examples.ts +0 -2
  271. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.vue +1 -0
  272. package/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.ts +1 -1
  273. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +1 -2
  274. package/src/brand-page-maker/components/color-picker/components/ColorModeSelect.mixin.ts +1 -0
  275. package/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.ts +1 -0
  276. package/src/brand-page-maker/components/color-picker/components/GradientColorSliderHandler.mixin.ts +1 -0
  277. package/src/brand-page-maker/components/color-picker/components/GradientTypeSelector.mixin.ts +1 -0
  278. package/src/brand-page-maker/components/device/Device.mixin.ts +1 -0
  279. package/src/brand-page-maker/components/navigation/Navigation.mixin.ts +1 -0
  280. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +3 -1
  281. package/src/brand-page-maker/components/sensitive-content/SensitiveContent.vue +1 -4
  282. package/src/brand-page-maker/components/seo-settings/DeleteDomainModal.vue +1 -1
  283. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.ts +1 -0
  284. package/src/brand-page-maker/components/seo-settings/SeoPageSettings.vue +1 -1
  285. package/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.ts +0 -1
  286. package/src/brand-page-maker/components/seo-settings/UrlSettings.vue +0 -1
  287. package/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.vue +1 -5
  288. package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -1
  289. package/src/brand-page-maker/components/shop/ReplaceImageSettingsForShop.vue +1 -1
  290. package/src/brand-page-maker/components/social-share/SocialShare.vue +1 -1
  291. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +22 -8
  292. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +5 -10
  293. package/src/brand-page-maker/components/template-preview/TemplatePreviewAiBadge.vue +12 -0
  294. package/src/brand-page-maker/components/video-play/VideoPlayButton.vue +1 -1
  295. package/src/brand-page-maker/composables/ai-chat/types.ts +6 -0
  296. package/src/brand-page-maker/composables/ai-chat/ui-actions.test.ts +80 -0
  297. package/src/brand-page-maker/composables/ai-chat/ui-actions.ts +58 -0
  298. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +308 -262
  299. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +6 -6
  300. package/src/brand-page-maker/composables/useEventTracker.ts +1 -0
  301. package/src/brand-page-maker/constants/config-settings-constant.ts +5 -5
  302. package/src/brand-page-maker/convertors/text-image-display-style.convertor.ts +1 -1
  303. package/src/brand-page-maker/models/button-styles-config.ts +4 -2
  304. package/src/brand-page-maker/models/content-settings-configs.ts +4 -2
  305. package/src/brand-page-maker/models/navigation-style-configs.ts +5 -6
  306. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +0 -1
  307. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +8 -5
  308. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +1 -3
  309. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +12 -4
  310. package/src/brand-page-maker/stores/ui/ui-store.ts +16 -0
  311. package/src/brand-page-maker/utils/content-settings.util.ts +1 -1
  312. package/src/brand-page-maker/utils/rich-text-editor.util.ts +4 -4
  313. package/src/clients/ai-assistant-client.ts +7 -0
  314. package/src/clients/design-template-client.ts +3 -0
  315. package/src/clients/models.ts +2 -0
  316. package/src/composables/useSnapshot.ts +19 -22
  317. package/src/lib.ts +12 -0
  318. package/src/metadata-builder/builders/footer-builder.test.ts +130 -229
  319. package/src/metadata-builder/builders/footer-builder.ts +155 -90
  320. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +88 -62
  321. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +129 -66
  322. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +160 -105
  323. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +20 -65
  324. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +146 -83
  325. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +122 -70
  326. package/src/metadata-builder/builders/section-field-utils.ts +1 -1
  327. package/src/metadata-builder/builders/shape-color-utils.ts +2 -2
  328. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +7 -16
  329. package/src/metadata-builder/parsers/section-tool-arguments.ts +48 -66
  330. package/src/plugins/google-maps-plugin/google-maps-plugin.ts +8 -8
  331. package/src/shared/background-settings/components/BackgroundSettings.vue +1 -1
  332. package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue +1 -1
  333. package/src/shared/color-picker/components/ColorPicker.mixin.ts +2 -7
  334. package/src/shared/color-picker/components/ColorPickerSwatch.mixin.ts +1 -0
  335. package/src/shared/common/NumberInput.vue +1 -0
  336. package/src/shared/common/SideBarSettingsHeader.vue +2 -2
  337. package/src/shared/confirm-modal/ConfirmModal.mixin.ts +1 -0
  338. package/src/shared/content-settings/components/booking-url-field/BookingUrlField.vue +1 -0
  339. package/src/shared/content-settings/components/button-configuration-field/ButtonConfigurationField.vue +1 -0
  340. package/src/shared/content-settings/components/color-field/ColorField.vue +3 -10
  341. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -1
  342. package/src/shared/content-settings/components/content-settings/ContentSettingsLockedButton.vue +1 -0
  343. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts +5 -0
  344. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +1 -14
  345. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +4 -6
  346. package/src/shared/content-settings/components/icon-library/IconLibrary.mixin.ts +1 -0
  347. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +1 -1
  348. package/src/shared/content-settings/components/logo-selection-field/LogoSelectionField.vue +1 -1
  349. package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -1
  350. package/src/shared/content-settings/components/page-dropdown-field/PageDropdownField.vue +1 -1
  351. package/src/shared/content-settings/components/personalisation-role-field/PersonalisationRoleField.vue +4 -4
  352. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +2 -8
  353. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +1 -1
  354. package/src/shared/content-settings/models.ts +3 -2
  355. package/src/shared/content-settings/utils.ts +0 -1
  356. package/src/shared/dropzone-image-uploader/components/DropzoneImageUploader.vue +1 -0
  357. package/src/shared/ecommerce-settings/store/cart-store.test.ts +1 -1
  358. package/src/shared/font-family-selector/FontFamilySelector.mixin.ts +1 -0
  359. package/src/shared/image-gallery-style-settings/ImageGalleryStyleSettings.mixin.ts +1 -0
  360. package/src/shared/logo-settings/components/EditLogoSettings.mixin.ts +1 -1
  361. package/src/shared/logo-settings/components/LogoSettings.mixin.ts +0 -1
  362. package/src/shared/logo-settings/components/LogoSettingsHeader.mixin.ts +1 -0
  363. package/src/shared/logo-settings/components/LogoStyleSettingsWithState.vue +2 -2
  364. package/src/shared/logo-settings/components/LogoTemplateSearch.vue +1 -1
  365. package/src/shared/logo-settings/store/editable-logo-store.ts +1 -1
  366. package/src/shared/logo-settings/store/logo-settings-store.test.ts +4 -4
  367. package/src/shared/logo-versions/LogoVersions.mixin.ts +1 -0
  368. package/src/shared/models.ts +6 -0
  369. package/src/shared/my-designs/MyDesigns.mixin.ts +1 -0
  370. package/src/shared/my-uploads/MyMedia.mixin.ts +1 -0
  371. package/src/shared/my-uploads/MyMediaSelectionItem.vue +2 -1
  372. package/src/shared/my-uploads/MyUploads.mixin.ts +1 -0
  373. package/src/shared/my-uploads/models.ts +1 -2
  374. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +1 -0
  375. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -1
  376. package/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.ts +0 -3
  377. package/src/shared/page-settings/components/page-settings/NestedDraggable.vue +1 -1
  378. package/src/shared/page-settings/components/page-settings/PageSettings.vue +1 -2
  379. package/src/shared/page-settings/components/page-settings-section-styles/HeaderDisplayStyle.vue +1 -1
  380. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +1 -1
  381. package/src/shared/page-settings/store/page-settings-store.test.ts +4 -8
  382. package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +0 -1
  383. package/src/shared/shape-library/ShapeLibrary.vue +2 -2
  384. package/src/shared/style-settings/store/style-settings-store.ts +1 -1
  385. package/src/shared/template-settings/components/TemplatesSettings.mixin.ts +2 -2
  386. package/src/shared/template-settings/models.ts +1 -0
  387. package/src/shared/template-settings/store/template-settings-store.ts +105 -18
  388. package/src/shared/unsplash-library/UnsplashLibrary.vue +2 -6
  389. package/src/shared/video-library/VideoLibrary.vue +1 -1
  390. package/src/utils/build-asset-manifest.ts +12 -0
  391. package/src/utils/minify-brand-page-metadata.ts +7 -27
  392. package/lib/src/metadata-builder/builders/item-id-utils.d.ts +0 -54
  393. package/lib/src/metadata-builder/builders/item-id-utils.js +0 -96
  394. package/src/metadata-builder/builders/item-id-utils.test.ts +0 -184
  395. package/src/metadata-builder/builders/item-id-utils.ts +0 -117
@@ -14,6 +14,7 @@
14
14
  class="tw-flex-1 tw-overflow-hidden tw-px-5"
15
15
  @send="onSendMessage"
16
16
  @stop-generation="onStopGeneration"
17
+ @action-click="onActionClick"
17
18
  />
18
19
  </div>
19
20
  </template>
@@ -24,12 +25,22 @@ import { storeToRefs } from 'pinia';
24
25
  import SideBarSettingsHeader from '../../../shared/common/SideBarSettingsHeader.vue';
25
26
  import AiChatbox from '../ai-text-edit/AiChatbox.vue';
26
27
  import { useUiSideBarStore } from '../../../shared/side-bar/store';
27
- import { useSnapshotStore, useAiWebsiteBuilderThreadStore } from '../../stores';
28
+ import {
29
+ useSnapshotStore,
30
+ useAiWebsiteBuilderThreadStore,
31
+ useBrandPageContainerStore,
32
+ } from '../../stores';
28
33
  import { SIDE_BAR_TAB_NAMES } from '../../constants';
29
34
  import { useAiWebsiteBuilderChat } from '../../composables/ai-chat/useAiWebsiteBuilderChat';
35
+ import {
36
+ UI_ACTIONS,
37
+ type AgentActionType,
38
+ } from '../../composables/ai-chat/ui-actions';
39
+ import { AI_CTA_LOCATIONS } from '../../composables/useEventTracker';
30
40
 
31
41
  const sideBarStore = useUiSideBarStore();
32
42
  const snapshotStore = useSnapshotStore();
43
+ const brandPageContainerStore = useBrandPageContainerStore();
33
44
  const aiWebsiteBuilderThreadStore = useAiWebsiteBuilderThreadStore();
34
45
  const { promptText } = storeToRefs(aiWebsiteBuilderThreadStore);
35
46
 
@@ -59,6 +70,15 @@ const onStopGeneration = async () => {
59
70
  await stopGenerationAsync();
60
71
  };
61
72
 
73
+ const onActionClick = async (type: AgentActionType) => {
74
+ if (type === UI_ACTIONS.UPGRADE) {
75
+ await brandPageContainerStore.showUpgradeModalAndSaveAsync(
76
+ undefined,
77
+ AI_CTA_LOCATIONS.AI_BUILDER_CHAT_UPSELL,
78
+ );
79
+ }
80
+ };
81
+
62
82
  defineExpose({
63
83
  stopGenerationAsync,
64
84
  });
@@ -47,7 +47,6 @@ import AssetLibraryClient from '../../../clients/asset-library-clients';
47
47
  import { useShopConfigStore } from '@shared/ecommerce-settings/store/shop-settings-store';
48
48
  import type { ShopConfigData } from '@brand-page/models/shop.model';
49
49
  import { useProductConfigStore } from '@brand-page-maker/stores/product-config/product-config-store';
50
- import type { UpdateItemValuePayload } from '@shared/content-settings/models';
51
50
  import { UPGRADE_CTA_LOCATIONS } from '../../composables/useEventTracker';
52
51
  import { commonTr } from '@src/composables/useTranslate';
53
52
  import { useSnapshot } from '../../../composables/useSnapshot';
@@ -70,6 +69,8 @@ export interface BrandPageMakerViewModel {
70
69
  initialCategories: InitialCategories;
71
70
  personalisation?: UserPersonalisationContent[];
72
71
  isPersonalisationEnabled?: boolean;
72
+ userPromptContentKey?: string;
73
+ showAiTemplatesTab?: boolean;
73
74
  brandPageType?: BrandPageType;
74
75
  businessName?: string;
75
76
  industry?: string;
@@ -85,6 +86,7 @@ export default defineComponent({
85
86
  required: true,
86
87
  },
87
88
  },
89
+ emits: ['create-team-cards'],
88
90
  setup() {
89
91
  const brandPageMakerStore = useBrandPageMakerStore();
90
92
  const sideBarStore = useUiSideBarStore();
@@ -227,6 +229,8 @@ export default defineComponent({
227
229
  personalisationData: this.viewModel.personalisation,
228
230
  isPersonalisationEnabled:
229
231
  this.viewModel.isPersonalisationEnabled || false,
232
+ userPromptContentKey: this.viewModel.userPromptContentKey,
233
+ showAiTemplatesTab: this.viewModel.showAiTemplatesTab || false,
230
234
  brandPageType: this.viewModel.brandPageType,
231
235
  businessName: this.viewModel.businessName,
232
236
  industry: this.viewModel.industry,
@@ -270,6 +270,7 @@ const InitialiseMakerStores = (options: {
270
270
  isContextualUpgradeModalVisible: false,
271
271
  gettyVideos: [],
272
272
  templateSearchTerm: undefined,
273
+ aiTemplateKeywords: undefined,
273
274
  });
274
275
 
275
276
  userStore.setUserState({
@@ -5,12 +5,9 @@ import type { Component } from 'vue';
5
5
  import MockAdapter from 'axios-mock-adapter';
6
6
  import { mockDesignTemplateTypeApi } from '@shared/template-settings/components/TemplatesSettings.test-helper';
7
7
  import BrandPageMakerTemplateSettings from './BrandPageMakerTemplateSettings.vue';
8
- import VueRouter, { createMemoryHistory, createRouter } from 'vue-router';
8
+ import { createMemoryHistory, createRouter } from 'vue-router';
9
9
  import { hexToRGB } from '@utils/helpers';
10
- import {
11
- BRAND_PAGE_TEMPLATE_BP_909,
12
- LOGO_IMAGE_URL,
13
- } from '../../../__fixtures__';
10
+ import { BRAND_PAGE_TEMPLATE_BP_909 } from '../../../__fixtures__';
14
11
  import { setupStoryPinia } from './__fixtures__/store-fixture';
15
12
  import { useUiLogoSettingsStore } from '@shared/logo-settings/store';
16
13
  import { useUiStore } from '@brand-page-maker/stores';
@@ -13,13 +13,8 @@ import type {
13
13
  TextContent,
14
14
  UserPersonalisation,
15
15
  ImageContent,
16
- ImageGalleryContent,
17
16
  ProfileContent,
18
- WebsiteContent,
19
- ImagesSectionContent,
20
17
  UserPersonalisationContent,
21
- EmailContent,
22
- PhoneContent,
23
18
  ShapesSectionContent,
24
19
  BannerSectionContent,
25
20
  } from '@brand-page';
@@ -56,14 +56,6 @@ export const brandPagePaymentConfigsResponse: BrandPagePaymentConfig[] = [
56
56
  },
57
57
  ];
58
58
 
59
- const stripePaymentIntent: StripePaymentIntent = {
60
- id: faker.datatype.uuid(),
61
- object: 'payment_intent',
62
- amount: 500,
63
- client_secret: faker.internet.password(),
64
- currency: 'USD',
65
- } as const;
66
-
67
59
  export const brandPageCreateCartResult: CreateCartResult<StripePaymentIntent> =
68
60
  {
69
61
  cartId: faker.datatype.uuid(),
@@ -1,5 +1,3 @@
1
- import type { PageModel } from '@brand-page';
2
-
3
1
  export const BRAND_SITE_TEMPLATE_SAMPLE: any[] = [
4
2
  {
5
3
  title: 'HOME',
@@ -1,3 +1,4 @@
1
+ <!-- eslint-disable vue/no-v-html -->
1
2
  <template>
2
3
  <Page
3
4
  data-component="brand-page-maker-page"
@@ -130,7 +130,7 @@ export default defineComponent({
130
130
  mode: BRANDPAGE_SETTINGS_MODES.edit,
131
131
  });
132
132
  },
133
- onDesignSelected(image: UserMediaItemWithDimensions) {
133
+ onDesignSelected() {
134
134
  this.brandPageMakerStore.setMode({ mode: BRANDPAGE_SETTINGS_MODES.edit });
135
135
  },
136
136
  },
@@ -68,7 +68,7 @@
68
68
  </template>
69
69
 
70
70
  <script setup lang="ts">
71
- import { ref, type PropType } from 'vue';
71
+ import { ref } from 'vue';
72
72
  import type { ColorValue } from 'src/shared/color-picker/models';
73
73
  import ClickOutside from 'click-outside-vue3';
74
74
  import ColorPicker from './BpColorPicker.vue';
@@ -106,7 +106,6 @@ const emit = defineEmits<{
106
106
  const pickerIdRef = ref<HTMLElement>();
107
107
 
108
108
  const popupTop = ref(0);
109
- const popupLeft = ref(0);
110
109
 
111
110
  const vClickOutside = ClickOutside.directive;
112
111
 
@@ -23,6 +23,7 @@ export default defineComponent({
23
23
  default: COLOR_PICKER_MODE.SOLID,
24
24
  },
25
25
  },
26
+ emits: ['update:modelValue'],
26
27
  data() {
27
28
  return {
28
29
  colorPickerModes: COLOR_PICKER_MODE_OPTIONS,
@@ -27,6 +27,7 @@ export default defineComponent({
27
27
  default: 5,
28
28
  },
29
29
  },
30
+ emits: ['update:activeHandlerId'],
30
31
  data() {
31
32
  return {
32
33
  internalActiveHandlerId: 0,
@@ -18,6 +18,7 @@ export default defineComponent({
18
18
  default: false,
19
19
  },
20
20
  },
21
+ emits: ['on-selected', 'on-position-changed'],
21
22
  data() {
22
23
  return {
23
24
  startPosInPixel,
@@ -12,6 +12,7 @@ export default defineComponent({
12
12
  default: GRADIENT_COLOR_TYPE.LINEAR,
13
13
  },
14
14
  },
15
+ emits: ['update:modelValue'],
15
16
  data() {
16
17
  return {
17
18
  isLinear: true,
@@ -18,6 +18,7 @@ export default defineComponent({
18
18
  default: false,
19
19
  },
20
20
  },
21
+ emits: ['toggle-should-play'],
21
22
  data() {
22
23
  return {
23
24
  visible: false,
@@ -40,6 +40,7 @@ export default defineComponent({
40
40
  default: false,
41
41
  },
42
42
  },
43
+ emits: ['create-team-cards'],
43
44
  methods: {
44
45
  saveBrandPage() {
45
46
  this.$emit(EVENTS.Save);
@@ -552,6 +552,7 @@ const availableTextFontFamilyOptions = computed(
552
552
  () => styleSettingsStore.availableTextFontFamilyOptions,
553
553
  );
554
554
 
555
+ // eslint-disable-next-line vue/require-prop-types
555
556
  const model = defineModel();
556
557
  const emit = defineEmits([
557
558
  'focus',
@@ -709,7 +710,8 @@ watch(
709
710
  () =>
710
711
  contentSettingStore.getItem(props.rawId)?.settings?.content?.textItemsStyle
711
712
  ?.color,
712
- (newColor) => {
713
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
714
+ (_newColor) => {
713
715
  if (isAdmin.value) {
714
716
  if (props.textItemIndex !== undefined && selectedGlobalTextStyles) {
715
717
  toggleTextColor.value =
@@ -92,7 +92,7 @@
92
92
  </template>
93
93
  <script setup lang="ts">
94
94
  import { Button } from '@designcrowd/fe-shared-lib';
95
- import { computed, reactive, nextTick, useTemplateRef } from 'vue';
95
+ import { computed, reactive, nextTick } from 'vue';
96
96
  import {
97
97
  SENSITIVE_CONTENT_TYPES,
98
98
  type SensitiveContent,
@@ -109,9 +109,6 @@ const brandPageMakerStore = useBrandPageMakerStore();
109
109
 
110
110
  const props = defineProps<Props>();
111
111
 
112
- const isBrandPage = computed(() => brandPageMakerStore.isBrandPage);
113
- const isBrandContact = computed(() => brandPageMakerStore.isBrandContact);
114
-
115
112
  const data = reactive({
116
113
  sensitiveSettings: [
117
114
  {
@@ -59,7 +59,7 @@ interface Props {
59
59
  isCustomDomainRequestFailed?: boolean;
60
60
  }
61
61
 
62
- const props = defineProps<Props>();
62
+ defineProps<Props>();
63
63
  const emit = defineEmits<{ (e: 'on-confirm'): void; (e: 'on-cancel'): void }>();
64
64
 
65
65
  const emitConfirm = () => emit('on-confirm');
@@ -41,6 +41,7 @@ export default defineComponent({
41
41
  default: undefined,
42
42
  },
43
43
  },
44
+ emits: ['update-settings'],
44
45
  setup() {
45
46
  const brandPageMakerStore = useBrandPageMakerStore();
46
47
  const localisedRouteStore = useLocalisedRouteStore();
@@ -106,7 +106,7 @@
106
106
  <script>
107
107
  import { Button, TextInput, Textarea } from '@designcrowd/fe-shared-lib';
108
108
  import SeoPageSettingsMixin from './SeoPageSettings.mixin.ts';
109
- import { tr, commonTr, seoSettingsTr } from '@src/composables/useTranslate';
109
+ import { commonTr, seoSettingsTr } from '@src/composables/useTranslate';
110
110
 
111
111
  export default {
112
112
  components: {
@@ -9,7 +9,6 @@ import {
9
9
  useBrandPageContainerStore,
10
10
  useBrandPageMakerStore,
11
11
  useLocalisedRouteStore,
12
- useBrandPageMakerUserStore,
13
12
  } from '@brand-page-maker/stores';
14
13
  import { defaultUSDCurrency } from '@brand-page-maker/constants/currency-constants';
15
14
  import { validateCustomDomainName } from '@brand-page-maker/utils';
@@ -393,7 +393,6 @@ import { Button, Loader, TextInput } from '@designcrowd/fe-shared-lib';
393
393
  import { SellDomainNameWidget } from '@designcrowd/fe-shared-lib';
394
394
  import UrlSettingsMixin from './UrlSettings.mixin.ts';
395
395
  import DeleteDomainModal from './DeleteDomainModal.vue';
396
- import ConfirmModal from '@shared/confirm-modal/ConfirmModal.vue';
397
396
  import UseExistingDomainModal from './UseExistingDomainModal.vue';
398
397
  import { commonTr, seoSettingsTr } from '@src/composables/useTranslate';
399
398
 
@@ -178,11 +178,7 @@ import {
178
178
  Loader,
179
179
  } from '@designcrowd/fe-shared-lib';
180
180
  import UseExistingDomainModalMixin from './UseExistingDomainModal.mixin.ts';
181
- import {
182
- tr,
183
- commonTr,
184
- existingDomainModalTr,
185
- } from '@src/composables/useTranslate';
181
+ import { commonTr, existingDomainModalTr } from '@src/composables/useTranslate';
186
182
 
187
183
  export default {
188
184
  components: {
@@ -172,7 +172,7 @@ const enableNotes = computed(() => productSettingStore.productEnableNotes);
172
172
  const hasVariants = computed(() => productSettingStore.productHasVariants);
173
173
  const currencySymbol = computed(() => shopConfigStore.currencySymbol);
174
174
 
175
- const emit = defineEmits(['update:modelValue']);
175
+ defineEmits(['update:modelValue']);
176
176
 
177
177
  const onImageUpload = () => {
178
178
  productSettingStore.setImageUpload(true);
@@ -25,7 +25,7 @@ import {
25
25
  import type { UserMediaItemWithDimensions } from 'src/shared/my-uploads/models';
26
26
  const productSettingStore = useProductConfigStore();
27
27
 
28
- const emit = defineEmits(['on-close', 'on-save']);
28
+ defineEmits(['on-close', 'on-save']);
29
29
 
30
30
  const onBack = () => {
31
31
  productSettingStore.setImageUpload(false);
@@ -55,7 +55,7 @@
55
55
  <!-- End Loader Overlay -->
56
56
  </template>
57
57
  <script>
58
- import { Button, Loader, TextInput } from '@designcrowd/fe-shared-lib';
58
+ import { Loader, TextInput } from '@designcrowd/fe-shared-lib';
59
59
  import SocialShareMixin from './SocialShare.mixin';
60
60
  import ImageField from '@shared/content-settings/components/image-field/ImageField.vue';
61
61
  import { socialShareTr, commonTr } from '@src/composables/useTranslate';
@@ -15,10 +15,7 @@ import {
15
15
  getBrandPageViewModelFromBrandPageModel,
16
16
  } from '@brand-page/utils';
17
17
  import { STYLE_THEME_KEYS } from '@brand-page/constants';
18
- import {
19
- TEMPLATE_TABS,
20
- type TemplateSettingsTemplate,
21
- } from '@shared/template-settings/models';
18
+ import type { TemplateSettingsTemplate } from '@shared/template-settings/models';
22
19
  import type { DebounceHandle } from 'lodash.debounce';
23
20
  import debounce from 'lodash.debounce';
24
21
  import { MOBILE_HEIGHT, MOBILE_WIDTH } from '@brand-page-maker/constants';
@@ -74,7 +71,6 @@ export default defineComponent({
74
71
  isBrandSite: computed(
75
72
  () => brandPageMakerStore.brandPageType === BRAND_PAGE_TYPES.brandSite,
76
73
  ),
77
- selectedTab: computed(() => templateSettingsStore.selectedTab.key),
78
74
  renderAsImage: computed(() => templateSettingsStore.renderAsImage),
79
75
  brandPageMakerUserStore,
80
76
  brandPageContainerStore,
@@ -241,10 +237,28 @@ export default defineComponent({
241
237
  return '';
242
238
  }
243
239
 
244
- if (this.selectedTab === TEMPLATE_TABS.AI && this.template.contentKey) {
245
- if (this.userToken) {
246
- previewImageUrl += `&contentKey=${this.template.contentKey}&userToken=${this.userToken}`;
240
+ const isAlreadyPersonalised =
241
+ previewImageUrl.includes('contentKey=') ||
242
+ previewImageUrl.includes('userPromptContentKey=');
243
+
244
+ if (
245
+ this.isPersonalisable &&
246
+ this.template.contentKey &&
247
+ !isAlreadyPersonalised
248
+ ) {
249
+ if (this.userToken && !this.template.usesUserPromptContentKey) {
250
+ previewImageUrl += `&contentKey=${this.template.contentKey}`;
251
+
252
+ // The backend already bakes userToken into brand-site preview URLs. Only add
253
+ // it when missing - two userToken params parse as an array and the preview
254
+ // renderer rejects it ("userToken must be a string type") (bp-5765).
255
+ if (!previewImageUrl.includes('userToken=')) {
256
+ previewImageUrl += `&userToken=${this.userToken}`;
257
+ }
247
258
  } else {
259
+ // userPromptContentKey resolves from the userPrompt S3 bucket (real AI images).
260
+ // Post-purchase designs with a userPrompt key route here too, NOT through the
261
+ // userToken/regular-bucket branch above which holds placeholders (bp-5454).
248
262
  previewImageUrl += `&userPromptContentKey=${this.template.contentKey}`;
249
263
  }
250
264
  }
@@ -2,7 +2,7 @@
2
2
  <div
3
3
  ref="container"
4
4
  data-component="template-preview"
5
- class="template-preview-container hover:!tw-shadow-[0_0_0_3px] hover:!tw-shadow-info-500 tw-overflow-hidden"
5
+ class="template-preview-container hover:!tw-shadow-[0_0_0_3px] hover:!tw-shadow-info-500 tw-overflow-hidden tw-relative tw-isolate"
6
6
  :style="containerStyle"
7
7
  :class="{
8
8
  '!tw-shadow-[0_0_0_3px] !tw-shadow-info-500':
@@ -55,17 +55,10 @@
55
55
  />
56
56
  </div>
57
57
  <!-- End Preview Image -->
58
- <!-- Start personalisation tag -->
59
- <div
60
- v-if="isPersonalisable"
61
- class="tw-absolute tw-bottom-0 tw-right-0 tw-p-2 tw-z-50 tw-text-white"
62
- style="background: lightgreen"
63
- >
64
- <span>Personalisable</span>
65
- </div>
66
- <!-- End personalisation tag -->
67
58
  </div>
68
59
  </div>
60
+ <!-- AI badge outside scaled container so it renders at natural size -->
61
+ <TemplatePreviewAiBadge v-if="isPersonalisable" />
69
62
  </div>
70
63
  </template>
71
64
  <script>
@@ -73,11 +66,13 @@ import { defineComponent } from 'vue';
73
66
  import TemplatePreviewMixin from './TemplatePreview.mixin.ts';
74
67
  import Page from '@brand-page/components/page/Page.vue';
75
68
  import { Loader } from '@designcrowd/fe-shared-lib';
69
+ import TemplatePreviewAiBadge from './TemplatePreviewAiBadge.vue';
76
70
 
77
71
  export default defineComponent({
78
72
  components: {
79
73
  Page,
80
74
  Loader,
75
+ TemplatePreviewAiBadge,
81
76
  },
82
77
  mixins: [TemplatePreviewMixin],
83
78
  setup(props, context) {
@@ -0,0 +1,12 @@
1
+ <template>
2
+ <div
3
+ data-test-ai-design
4
+ class="tw-flex tw-flex-row tw-absolute tw-top-2.5 tw-left-2.5 tw-rounded-full tw-py-1 tw-px-2 tw-text-white tw-text-xs tw-font-bold tw-z-[25] tw-bg-gradient-to-t tw-from-[#d946ef] tw-to-[#8b5cf6]"
5
+ >
6
+ <Icon name="ai" class="tw-text-white tw-pr-1" size="sm" />
7
+ <span>AI</span>
8
+ </div>
9
+ </template>
10
+ <script setup lang="ts">
11
+ import { Icon } from '@designcrowd/fe-shared-lib';
12
+ </script>
@@ -28,5 +28,5 @@ interface Props {
28
28
  iconColor?: string;
29
29
  }
30
30
 
31
- const props = defineProps<Props>();
31
+ defineProps<Props>();
32
32
  </script>
@@ -1,5 +1,10 @@
1
1
  import type { ComputedRef, Ref } from 'vue';
2
2
  import { type PlanItem } from '../../../clients/websocket-gateway-client';
3
+ import type { AgentAction } from './ui-actions';
4
+
5
+ // Re-exported for the chat components that consume it; defined alongside the
6
+ // UI-action registry in ./ui-actions.
7
+ export type { AgentAction };
3
8
 
4
9
  export interface BaseThreadMessage {
5
10
  id: string;
@@ -16,6 +21,7 @@ export interface TextThreadMessage extends BaseThreadMessage {
16
21
  initialMessage?: string;
17
22
  planItems?: PlanItem[];
18
23
  completedItemIds?: string[];
24
+ actions?: AgentAction[];
19
25
  }
20
26
 
21
27
  export interface ImageThreadMessage extends BaseThreadMessage {
@@ -0,0 +1,80 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import {
3
+ partitionAiToolCalls,
4
+ UI_ACTIONS,
5
+ AI_CHAT_UI_ACTIONS,
6
+ } from './ui-actions';
7
+ import type { AiAssistantToolCall } from '../../../clients/ai-assistant-client';
8
+
9
+ const tc = (fn: string, toolId = fn, args = '{}'): AiAssistantToolCall => ({
10
+ toolId,
11
+ function: fn,
12
+ arguments: args,
13
+ });
14
+
15
+ describe('partitionAiToolCalls', () => {
16
+ // The core invariant: a UI-action CTA must never land in mutationToolCalls,
17
+ // because those feed applyToolCallsAsync -> toolResults -> submitToolResults.
18
+ // A UI action has no tool result, so leaking one would leave an unresolved
19
+ // tool call in the thread and break the next LLM turn.
20
+ it('keeps an upgrade CTA out of the mutation set', () => {
21
+ const mutation = tc('build_banner_section', 'm1');
22
+ const upgrade = tc(UI_ACTIONS.UPGRADE, 'u1');
23
+
24
+ const { mutationToolCalls, actions } = partitionAiToolCalls([
25
+ mutation,
26
+ upgrade,
27
+ ]);
28
+
29
+ expect(mutationToolCalls).toEqual([mutation]);
30
+ expect(
31
+ mutationToolCalls.some((t) => t.function === UI_ACTIONS.UPGRADE),
32
+ ).toBe(false);
33
+ expect(actions).toEqual([
34
+ { type: UI_ACTIONS.UPGRADE, ...AI_CHAT_UI_ACTIONS[UI_ACTIONS.UPGRADE] },
35
+ ]);
36
+ });
37
+
38
+ it('routes a standalone upgrade to actions with zero mutations', () => {
39
+ const { mutationToolCalls, actions } = partitionAiToolCalls([
40
+ tc(UI_ACTIONS.UPGRADE),
41
+ ]);
42
+
43
+ expect(mutationToolCalls).toEqual([]);
44
+ expect(actions.map((a) => a.type)).toEqual([UI_ACTIONS.UPGRADE]);
45
+ });
46
+
47
+ it('treats unknown tool names as mutations (never swallows a real tool call)', () => {
48
+ const unknown = tc('some_future_tool');
49
+
50
+ const { mutationToolCalls, actions } = partitionAiToolCalls([unknown]);
51
+
52
+ expect(mutationToolCalls).toEqual([unknown]);
53
+ expect(actions).toEqual([]);
54
+ });
55
+
56
+ it('does not treat inherited Object keys (e.g. "constructor") as UI actions', () => {
57
+ const ctor = tc('constructor');
58
+
59
+ const { mutationToolCalls, actions } = partitionAiToolCalls([ctor]);
60
+
61
+ expect(mutationToolCalls).toEqual([ctor]);
62
+ expect(actions).toEqual([]);
63
+ });
64
+
65
+ it('resolves label/icon from the registry, not the wire arguments', () => {
66
+ const { actions } = partitionAiToolCalls([
67
+ tc(UI_ACTIONS.UPGRADE, 'u1', '{"label":"WRONG","icon":"WRONG"}'),
68
+ ]);
69
+
70
+ expect(actions[0].label).toBe('Upgrade');
71
+ expect(actions[0].icon).toBe('upgrade-alt');
72
+ });
73
+
74
+ it('returns empty partitions for no tool calls', () => {
75
+ expect(partitionAiToolCalls([])).toEqual({
76
+ mutationToolCalls: [],
77
+ actions: [],
78
+ });
79
+ });
80
+ });
@@ -0,0 +1,58 @@
1
+ // Single source of truth for the AI-chat actionable buttons (the Upgrade CTA, etc.).
2
+ //
3
+ // The AI pipeline decides WHICH action to surface and WHETHER the user is
4
+ // eligible, then emits only the action identity as a tool call. How each action
5
+ // looks — its button label and icon — is a frontend concern and lives here.
6
+ // Click behaviour is wired in AiWebsiteBuilder, where the relevant stores live.
7
+ import type { AiAssistantToolCall } from '../../../clients/ai-assistant-client';
8
+
9
+ // Action identities — must match the tool names emitted by the AI pipeline.
10
+ export const UI_ACTIONS = {
11
+ UPGRADE: 'upgrade',
12
+ } as const;
13
+
14
+ export const AI_CHAT_UI_ACTIONS = {
15
+ [UI_ACTIONS.UPGRADE]: { label: 'Upgrade', icon: 'upgrade-alt' },
16
+ } as const;
17
+
18
+ export type AgentActionType = keyof typeof AI_CHAT_UI_ACTIONS;
19
+
20
+ // A resolved actionable button shown under an AI message. `type` identifies the
21
+ // action; `label`/`icon` are resolved from AI_CHAT_UI_ACTIONS, never from the wire.
22
+ export type AgentAction = {
23
+ type: AgentActionType;
24
+ label: string;
25
+ icon?: string;
26
+ };
27
+
28
+ // `hasOwnProperty` (not `in`) so inherited Object keys like "constructor" are never
29
+ // mistaken for a UI action.
30
+ const isUiActionFn = (fn: string | undefined): fn is AgentActionType =>
31
+ !!fn && Object.prototype.hasOwnProperty.call(AI_CHAT_UI_ACTIONS, fn);
32
+
33
+ /**
34
+ * Split server tool calls into page mutations and UI-action CTAs.
35
+ *
36
+ * Mutations are executed by the metadata-builder and answered with tool results;
37
+ * UI actions (e.g. the Upgrade button) are rendered only. UI actions MUST stay out
38
+ * of `mutationToolCalls`: they are never executed and never get a tool result, so
39
+ * leaking one into the mutation set would leave an unresolved tool call and break
40
+ * the next LLM turn on the same thread.
41
+ */
42
+ export function partitionAiToolCalls(toolCalls: AiAssistantToolCall[]): {
43
+ mutationToolCalls: AiAssistantToolCall[];
44
+ actions: AgentAction[];
45
+ } {
46
+ const mutationToolCalls: AiAssistantToolCall[] = [];
47
+ const actions: AgentAction[] = [];
48
+
49
+ for (const tc of toolCalls) {
50
+ if (isUiActionFn(tc.function)) {
51
+ actions.push({ type: tc.function, ...AI_CHAT_UI_ACTIONS[tc.function] });
52
+ } else {
53
+ mutationToolCalls.push(tc);
54
+ }
55
+ }
56
+
57
+ return { mutationToolCalls, actions };
58
+ }