@designcrowd/library.brand-page 5.17.3 → 5.17.5-ai-tab-1

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 (251) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-yFg0wq_8.js → CreatedOnBrandCrowd-de-de-CtODijXU.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-D4sUyR-U.js → CreatedOnBrandCrowd-en-us-CFOzipix.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CjXHshc0.js → CreatedOnBrandCrowd-es-es-Bed6cQwT.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CtsyncLl.js → CreatedOnBrandCrowd-fr-ca-CDtut9SG.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CtsyncLl.js → CreatedOnBrandCrowd-fr-fr-CDtut9SG.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-D8Z-gS4q.js → CreatedOnBrandCrowd-pt-br-BxubZ9Pn.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-D8Z-gS4q.js → CreatedOnBrandCrowd-pt-pt-BxubZ9Pn.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-k7a8-Akd.js → CreatedOnDcom-de-de-Bpi74lME.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-Bh5mbVcr.js → CreatedOnDcom-en-us-DcV-Kjz6.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-DkEBWtQn.js → CreatedOnDcom-es-es-G_POK1Z1.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DcarvQ1r.js → CreatedOnDcom-fr-ca-B-6Lowfi.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-Cbe-yOPu.js → CreatedOnDcom-fr-fr-Cd3WjtRX.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-DlWu_Kwc.js → CreatedOnDcom-pt-br-DuNWZ0KP.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DZp9RWfH.js → CreatedOnDcom-pt-pt-CcPfyNH6.js} +1 -1
  15. package/lib/src/brand-page/clients/brand-page.client.d.ts +2 -1
  16. package/lib/src/brand-page/clients/brand-page.client.js +1 -0
  17. package/lib/src/brand-page/models/index.d.ts +1 -0
  18. package/lib/src/brand-page/models/payment.model.d.ts +42 -0
  19. package/lib/src/brand-page/models/payment.model.js +9 -0
  20. package/lib/src/brand-page/utils/view-model.util.js +1 -0
  21. package/lib/src/brand-page/view-models.d.ts +1 -0
  22. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +3 -1
  23. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +1 -0
  24. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +1 -0
  25. package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.js +11 -10
  26. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -1
  27. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +6 -6
  28. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.d.ts +2 -0
  29. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +258 -0
  30. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +2 -0
  31. package/lib/src/brand-page-maker/composables/useEventTracker.js +6 -0
  32. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +1 -0
  33. package/lib/src/brand-page-maker/constants/config-settings-constant.js +7 -0
  34. package/lib/src/brand-page-maker/constants/sidebar-constant.d.ts +1 -0
  35. package/lib/src/brand-page-maker/constants/sidebar-constant.js +8 -0
  36. package/lib/src/brand-page-maker/models/content-settings.js +1 -0
  37. package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.d.ts +128 -4
  38. package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.js +8 -0
  39. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +16 -0
  40. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.js +14 -0
  41. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +2 -0
  42. package/lib/src/brand-page-maker/stores/index.d.ts +1 -0
  43. package/lib/src/brand-page-maker/stores/index.js +1 -0
  44. package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.d.ts +2 -0
  45. package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.js +9 -0
  46. package/lib/src/bundled-translations-D5A4swr0.js +173 -0
  47. package/lib/src/bundled-translations.de-DE-Bq6H28Hz.js +173 -0
  48. package/lib/src/bundled-translations.es-ES-Bo-UGy51.js +173 -0
  49. package/lib/src/bundled-translations.fr-CA-7GXawEcN.js +173 -0
  50. package/lib/src/bundled-translations.fr-FR-DzVwt2U-.js +173 -0
  51. package/lib/src/bundled-translations.pt-BR-DSZZ-i-B.js +173 -0
  52. package/lib/src/bundled-translations.pt-PT-SNbEX0GM.js +173 -0
  53. package/lib/src/bundles/bundled-translations.de-DE.json +965 -1
  54. package/lib/src/bundles/bundled-translations.es-ES.json +965 -1
  55. package/lib/src/bundles/bundled-translations.fr-CA.json +965 -1
  56. package/lib/src/bundles/bundled-translations.fr-FR.json +965 -1
  57. package/lib/src/bundles/bundled-translations.json +965 -1
  58. package/lib/src/bundles/bundled-translations.pt-BR.json +965 -1
  59. package/lib/src/bundles/bundled-translations.pt-PT.json +965 -1
  60. package/lib/src/clients/ai-assistant-client.d.ts +8 -0
  61. package/lib/src/clients/ai-assistant-client.js +11 -1
  62. package/lib/src/composables/useSnapshot.js +33 -0
  63. package/lib/src/composables/useTranslate.d.ts +7 -1
  64. package/lib/src/composables/useTranslate.js +9 -1
  65. package/lib/src/css/library.brand-page-brandCrowd.min.css +52 -20
  66. package/lib/src/css/library.brand-page-brandPage.min.css +52 -20
  67. package/lib/src/css/library.brand-page-designCom.min.css +52 -20
  68. package/lib/src/css/library.brand-page-preview.min.css +52 -20
  69. package/lib/src/index.d.ts +1 -0
  70. package/lib/src/index.mjs +96 -94
  71. package/lib/src/{lib-DOfGX3z2.js → lib-BBkLrEZM.js} +31733 -29570
  72. package/lib/src/lib.js +1 -0
  73. package/lib/src/metadata-builder/ai-metadata-executor.d.ts +1 -1
  74. package/lib/src/metadata-builder/ai-metadata-executor.js +68 -7
  75. package/lib/src/metadata-builder/builders/add-page-builder.d.ts +14 -0
  76. package/lib/src/metadata-builder/builders/add-page-builder.js +66 -0
  77. package/lib/src/metadata-builder/builders/remove-page-builder.d.ts +13 -0
  78. package/lib/src/metadata-builder/builders/remove-page-builder.js +50 -0
  79. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.d.ts +6 -0
  80. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +17 -0
  81. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.d.ts +6 -0
  82. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +25 -0
  83. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.d.ts +40 -0
  84. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.js +108 -0
  85. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.d.ts +6 -0
  86. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.js +16 -0
  87. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.d.ts +6 -0
  88. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +27 -0
  89. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.d.ts +13 -0
  90. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.js +37 -0
  91. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.d.ts +6 -0
  92. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.js +16 -0
  93. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.d.ts +6 -0
  94. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +76 -0
  95. package/lib/src/metadata-builder/builders/section-builders/image-section-builder.d.ts +6 -0
  96. package/lib/src/metadata-builder/builders/section-builders/image-section-builder.js +16 -0
  97. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.d.ts +6 -0
  98. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +158 -0
  99. package/lib/src/metadata-builder/builders/section-builders/index.d.ts +17 -0
  100. package/lib/src/metadata-builder/builders/section-builders/index.js +17 -0
  101. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.d.ts +6 -0
  102. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +17 -0
  103. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.d.ts +6 -0
  104. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +16 -0
  105. package/lib/src/metadata-builder/builders/section-builders/move-section-builder.d.ts +15 -0
  106. package/lib/src/metadata-builder/builders/section-builders/move-section-builder.js +62 -0
  107. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.d.ts +6 -0
  108. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +16 -0
  109. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.d.ts +6 -0
  110. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +162 -0
  111. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.d.ts +6 -0
  112. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +50 -0
  113. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.d.ts +6 -0
  114. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +133 -0
  115. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.d.ts +6 -0
  116. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +154 -0
  117. package/lib/src/metadata-builder/builders/section-content-factory.d.ts +3 -0
  118. package/lib/src/metadata-builder/builders/section-content-factory.js +13 -0
  119. package/lib/src/metadata-builder/builders/section-field-maps.d.ts +12 -0
  120. package/lib/src/metadata-builder/builders/section-field-maps.js +180 -0
  121. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +11 -0
  122. package/lib/src/metadata-builder/builders/section-field-utils.js +109 -0
  123. package/lib/src/metadata-builder/builders/update-content-text-builder.js +0 -5
  124. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +6 -0
  125. package/lib/src/metadata-builder/helpers/rte.helpers.js +16 -1
  126. package/lib/src/metadata-builder/logger.d.ts +2 -0
  127. package/lib/src/metadata-builder/logger.js +6 -0
  128. package/lib/src/metadata-builder/metadata-executor.js +71 -1
  129. package/lib/src/metadata-builder/models.d.ts +54 -0
  130. package/lib/src/metadata-builder/models.js +58 -0
  131. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +51 -3
  132. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +110 -13
  133. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +285 -0
  134. package/lib/src/metadata-builder/parsers/section-tool-arguments.js +7 -0
  135. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +1 -0
  136. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +1 -0
  137. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +1 -0
  138. package/lib/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.mixin.d.ts +13 -1
  139. package/lib/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.mixin.js +10 -0
  140. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +2 -1
  141. package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
  142. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +1 -0
  143. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +1 -0
  144. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +1 -0
  145. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +1 -0
  146. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +2 -1
  147. package/lib/src/utils/minify-brand-page-metadata.d.ts +22 -0
  148. package/lib/src/utils/minify-brand-page-metadata.js +344 -0
  149. package/package.json +1 -1
  150. package/src/brand-page/clients/brand-page.client.ts +3 -0
  151. package/src/brand-page/components/payment/RequestPaymentStripe.vue +381 -44
  152. package/src/brand-page/components/shop/PaymentModal.vue +7 -1
  153. package/src/brand-page/components/shop/PaymentShippingAddress.vue +297 -0
  154. package/src/brand-page/components/shop/Shop.vue +1 -0
  155. package/src/brand-page/components/shop/i18n/countries.de-DE.json +240 -0
  156. package/src/brand-page/components/shop/i18n/countries.es-ES.json +240 -0
  157. package/src/brand-page/components/shop/i18n/countries.fr-CA.json +240 -0
  158. package/src/brand-page/components/shop/i18n/countries.fr-FR.json +240 -0
  159. package/src/brand-page/components/shop/i18n/countries.json +240 -0
  160. package/src/brand-page/components/shop/i18n/countries.pt-BR.json +240 -0
  161. package/src/brand-page/components/shop/i18n/countries.pt-PT.json +240 -0
  162. package/src/brand-page/components/shop/i18n/payment-shipping-address.de-DE.json +18 -0
  163. package/src/brand-page/components/shop/i18n/payment-shipping-address.es-ES.json +18 -0
  164. package/src/brand-page/components/shop/i18n/payment-shipping-address.fr-CA.json +18 -0
  165. package/src/brand-page/components/shop/i18n/payment-shipping-address.fr-FR.json +18 -0
  166. package/src/brand-page/components/shop/i18n/payment-shipping-address.json +18 -0
  167. package/src/brand-page/components/shop/i18n/payment-shipping-address.pt-BR.json +18 -0
  168. package/src/brand-page/components/shop/i18n/payment-shipping-address.pt-PT.json +18 -0
  169. package/src/brand-page/models/index.ts +1 -0
  170. package/src/brand-page/models/payment.model.ts +24 -0
  171. package/src/brand-page/utils/view-model.util.ts +1 -0
  172. package/src/brand-page/view-models.ts +1 -0
  173. package/src/brand-page-maker/components/ai-text-edit/AiTextEdit.vue +1 -1
  174. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +80 -0
  175. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +4 -0
  176. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +9 -2
  177. package/src/brand-page-maker/composables/ai-chat/useAiChat.ts +16 -17
  178. package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +6 -6
  179. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +363 -0
  180. package/src/brand-page-maker/composables/useEventTracker.ts +6 -0
  181. package/src/brand-page-maker/constants/config-settings-constant.ts +8 -0
  182. package/src/brand-page-maker/constants/sidebar-constant.ts +8 -0
  183. package/src/brand-page-maker/models/content-settings.ts +1 -0
  184. package/src/brand-page-maker/stores/ai-thread/ai-thread-store.ts +13 -1
  185. package/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.ts +19 -0
  186. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +4 -0
  187. package/src/brand-page-maker/stores/index.ts +1 -0
  188. package/src/brand-page-maker/stores/snapshot/snapshot-store.ts +12 -0
  189. package/src/bundles/bundled-translations.de-DE.json +965 -1
  190. package/src/bundles/bundled-translations.es-ES.json +965 -1
  191. package/src/bundles/bundled-translations.fr-CA.json +965 -1
  192. package/src/bundles/bundled-translations.fr-FR.json +965 -1
  193. package/src/bundles/bundled-translations.json +965 -1
  194. package/src/bundles/bundled-translations.pt-BR.json +965 -1
  195. package/src/bundles/bundled-translations.pt-PT.json +965 -1
  196. package/src/clients/ai-assistant-client.ts +17 -1
  197. package/src/composables/useSnapshot.ts +47 -0
  198. package/src/composables/useTranslate.ts +15 -0
  199. package/src/lib.ts +4 -0
  200. package/src/metadata-builder/ai-metadata-executor.ts +116 -26
  201. package/src/metadata-builder/builders/add-page-builder.ts +98 -0
  202. package/src/metadata-builder/builders/remove-page-builder.ts +83 -0
  203. package/src/metadata-builder/builders/section-builders/about-section-builder.ts +28 -0
  204. package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +45 -0
  205. package/src/metadata-builder/builders/section-builders/base-section-builder.ts +160 -0
  206. package/src/metadata-builder/builders/section-builders/button-section-builder.ts +24 -0
  207. package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +43 -0
  208. package/src/metadata-builder/builders/section-builders/delete-section-builder.ts +63 -0
  209. package/src/metadata-builder/builders/section-builders/divider-section-builder.ts +27 -0
  210. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +111 -0
  211. package/src/metadata-builder/builders/section-builders/image-section-builder.ts +24 -0
  212. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +223 -0
  213. package/src/metadata-builder/builders/section-builders/index.ts +21 -0
  214. package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +29 -0
  215. package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +27 -0
  216. package/src/metadata-builder/builders/section-builders/move-section-builder.ts +100 -0
  217. package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +27 -0
  218. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +231 -0
  219. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +79 -0
  220. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +194 -0
  221. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +234 -0
  222. package/src/metadata-builder/builders/section-content-factory.ts +20 -0
  223. package/src/metadata-builder/builders/section-field-maps.ts +235 -0
  224. package/src/metadata-builder/builders/section-field-utils.ts +157 -0
  225. package/src/metadata-builder/builders/update-content-text-builder.ts +0 -6
  226. package/src/metadata-builder/helpers/rte.helpers.ts +23 -1
  227. package/src/metadata-builder/logger.ts +7 -0
  228. package/src/metadata-builder/metadata-executor.ts +96 -4
  229. package/src/metadata-builder/models.ts +62 -0
  230. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +141 -17
  231. package/src/metadata-builder/parsers/section-tool-arguments.ts +417 -0
  232. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +3 -1
  233. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +3 -1
  234. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +3 -1
  235. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +3 -1
  236. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +3 -1
  237. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +3 -1
  238. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +3 -1
  239. package/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.mixin.ts +12 -0
  240. package/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.vue +9 -1
  241. package/src/utils/minify-brand-page-metadata.ts +407 -0
  242. package/lib/src/brand-page/components/payment/RequestPaymentStripe.mixin.d.ts +0 -106
  243. package/lib/src/brand-page/components/payment/RequestPaymentStripe.mixin.js +0 -253
  244. package/lib/src/bundled-translations-B6qZE8LU.js +0 -169
  245. package/lib/src/bundled-translations.de-DE-CsU6YsZb.js +0 -169
  246. package/lib/src/bundled-translations.es-ES-unPBdcJx.js +0 -169
  247. package/lib/src/bundled-translations.fr-CA-Dpa2wEtC.js +0 -169
  248. package/lib/src/bundled-translations.fr-FR-BPloaUjN.js +0 -169
  249. package/lib/src/bundled-translations.pt-BR-CFRGdaDO.js +0 -169
  250. package/lib/src/bundled-translations.pt-PT-BHVYCE0K.js +0 -169
  251. package/src/brand-page/components/payment/RequestPaymentStripe.mixin.ts +0 -364
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DOfGX3z2.js";
2
+ import { _ as t } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DOfGX3z2.js";
2
+ import { _ as e } from "./lib-BBkLrEZM.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DOfGX3z2.js";
2
+ import { _ as e } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DOfGX3z2.js";
2
+ import { _ as e } from "./lib-BBkLrEZM.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DOfGX3z2.js";
2
+ import { _ as e } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DOfGX3z2.js";
2
+ import { _ as e } from "./lib-BBkLrEZM.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-DOfGX3z2.js";
2
+ import { _ as M } from "./lib-BBkLrEZM.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-DOfGX3z2.js";
2
+ import { _ as M } from "./lib-BBkLrEZM.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,4 +1,4 @@
1
- import type { CreateCartResult, CreateStripePaymentIntentResponse } from '../models';
1
+ import type { CreateCartResult, CreateStripePaymentIntentResponse, StripeShippingDetails } from '../models';
2
2
  export interface FormResult {
3
3
  success: boolean;
4
4
  errMessage?: string;
@@ -31,6 +31,7 @@ declare const _default: {
31
31
  customerEmail: string;
32
32
  customerRequestDetails?: string | undefined;
33
33
  customerMessage?: string | undefined;
34
+ shippingDetails?: StripeShippingDetails | undefined;
34
35
  }) => Promise<CreateStripePaymentIntentResponse | null>;
35
36
  };
36
37
  export default _default;
@@ -99,6 +99,7 @@ const createStripePaymentIntent = async (request) => {
99
99
  customerEmail: request.customerEmail,
100
100
  customerRequestDetails: request.customerRequestDetails,
101
101
  customerMessage: request.customerMessage,
102
+ shipping: request.shippingDetails,
102
103
  }, {
103
104
  headers: {
104
105
  'Content-Type': 'application/json',
@@ -297,6 +297,7 @@ export interface TextMediaItem extends ImageItem {
297
297
  }
298
298
  export interface TextShapeItem extends TextMediaItem {
299
299
  colorReplacements: ColorReplacement[];
300
+ keepColor?: boolean;
300
301
  aspectRatio?: number | null;
301
302
  }
302
303
  export interface ShapeItem extends ImageItem {
@@ -1,6 +1,47 @@
1
1
  import type { Content } from './content.model';
2
2
  import type { ProductModel } from './shop.model';
3
3
  import type { TextStyleDeclaration } from './styles.model';
4
+ export declare const STRIPE_ADDRESS_LIMITS: {
5
+ readonly name: {
6
+ readonly min: 1;
7
+ readonly max: 350;
8
+ };
9
+ readonly line1: {
10
+ readonly min: 1;
11
+ readonly max: 200;
12
+ };
13
+ readonly line2: {
14
+ readonly min: 0;
15
+ readonly max: 200;
16
+ };
17
+ readonly city: {
18
+ readonly min: 0;
19
+ readonly max: 100;
20
+ };
21
+ readonly state: {
22
+ readonly min: 0;
23
+ readonly max: 100;
24
+ };
25
+ readonly postalCode: {
26
+ readonly min: 0;
27
+ readonly max: 20;
28
+ };
29
+ readonly country: {
30
+ readonly min: 2;
31
+ readonly max: 2;
32
+ };
33
+ };
34
+ export type StripeAddressField = keyof typeof STRIPE_ADDRESS_LIMITS;
35
+ export interface StripeShippingDetails {
36
+ name: string;
37
+ line1: string;
38
+ line2?: string;
39
+ city?: string;
40
+ state?: string;
41
+ postalCode?: string;
42
+ country: string;
43
+ phone?: string;
44
+ }
4
45
  export interface StripePaymentIntent {
5
46
  id: string;
6
47
  object: 'payment_intent';
@@ -98,6 +139,7 @@ export interface ShopContentConfig extends PaymentConfig {
98
139
  paymentOptionDisplayType: PaymentOptionDisplayType;
99
140
  paymentOptionImageType: PaymentOptionImageType;
100
141
  isCustomerRequestDetailsEnabled: boolean;
142
+ isShippingEnabled: boolean;
101
143
  }
102
144
  export interface ShopContent extends Content {
103
145
  type: 'shop-section';
@@ -1,3 +1,12 @@
1
+ export const STRIPE_ADDRESS_LIMITS = {
2
+ name: { min: 1, max: 350 },
3
+ line1: { min: 1, max: 200 },
4
+ line2: { min: 0, max: 200 },
5
+ city: { min: 0, max: 100 },
6
+ state: { min: 0, max: 100 },
7
+ postalCode: { min: 0, max: 20 },
8
+ country: { min: 2, max: 2 },
9
+ };
1
10
  export const isStripePaymentIntent = (value) => {
2
11
  return (value &&
3
12
  typeof value === 'object' &&
@@ -544,6 +544,7 @@ const mapToShopViewModel = (content, styles) => {
544
544
  ...content.fillColor,
545
545
  },
546
546
  isFullWidth: true,
547
+ isShippingEnabled: content.shopPaymentConfig?.isShippingEnabled ?? false,
547
548
  }, styles);
548
549
  };
549
550
  const mapToTestimonialSectionViewModel = (content, styles) => {
@@ -61,6 +61,7 @@ export interface RequestPaymentViewModel extends ContentViewModel, Omit<RequestP
61
61
  export interface ShopViewModel extends ContentViewModel, Omit<ShopContent, 'type'> {
62
62
  buttonStyles: ButtonStyles;
63
63
  isFullWidth: boolean;
64
+ isShippingEnabled: boolean;
64
65
  }
65
66
  export interface ContactFormViewModel extends ContentViewModel, Omit<ContactFormContent, 'type'> {
66
67
  buttonStyles: ButtonStyles;
@@ -1021,7 +1021,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
1021
1021
  searchTerm: string | undefined;
1022
1022
  }): void;
1023
1023
  _setSelectedTab({ tabName }: {
1024
- tabName: "all" | "AI" | "categories";
1024
+ tabName: "AI" | "all" | "categories";
1025
1025
  }): void;
1026
1026
  _setSelectedCategory({ categoryName, }: {
1027
1027
  categoryName: string | undefined;
@@ -1183,6 +1183,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
1183
1183
  setBase64Snapshot(base64: string | null): void;
1184
1184
  setIsCapturing(isCapturing: boolean): void;
1185
1185
  clearSnapshot(): void;
1186
+ registerCaptureCallback(callback: () => Promise<void>): void;
1187
+ refreshSnapshotAsync(): Promise<void>;
1186
1188
  }>;
1187
1189
  captureSnapshot: (element: HTMLElement | null) => Promise<string | null>;
1188
1190
  videoStore: import("pinia").Store<"video", import("@brand-page-maker/stores").videoStoreState, {
@@ -200,6 +200,7 @@ export default defineComponent({
200
200
  document.body.classList.remove('sb-main-padded');
201
201
  }
202
202
  fontLoaderUtil.loadAllFonts();
203
+ this.snapshotStore.registerCaptureCallback(() => this.handleCaptureSnapshot());
203
204
  this.setUiScreenSizeModeBasedOnDeviceWidth();
204
205
  if (this.isBrandPageOrIsBrandContact) {
205
206
  this.brandPageMakerStore.setViewport({ viewport: VIEWPORTS.mobile });
@@ -1009,6 +1009,7 @@ declare const _default: import("vue").DefineComponent<{}, {
1009
1009
  setPreviousSelectedDisplayStyle(viewport: string, displayStyle: string): void;
1010
1010
  }>;
1011
1011
  eventTracker: {
1012
+ sendShippingToggleEvent: (isEnabled: boolean) => void;
1012
1013
  sendSaveContactEvent: () => void;
1013
1014
  sendStartForFreeEvent: () => void;
1014
1015
  sendFooterLinkClickEvent: (linkType: "watermark_logo" | "create_your_website") => void;
@@ -1,6 +1,7 @@
1
1
  import { ref, computed, watch, nextTick, } from 'vue';
2
2
  import { getInstance as getAiAssistantClient, AI_ASSISTANT_AGENT_TYPES, buildWebsiteTextElementMessage, } from '../../../clients/ai-assistant-client';
3
3
  import { getCurrentLocale } from '../../../composables/useTranslate';
4
+ import { storeToRefs } from 'pinia';
4
5
  import { useSnapshotStore, useAiThreadStore } from '../../stores';
5
6
  import { useBrandPageMakerStore } from '../../stores';
6
7
  import { useUiPageSettingsStore } from '../../../shared/page-settings/store';
@@ -22,24 +23,22 @@ export const createWelcomeMessage = (currentValue) => ({
22
23
  : 'What would you like to generate?',
23
24
  timestamp: new Date(),
24
25
  });
25
- const aiLogger = new Logger();
26
26
  export function useAiChat(options) {
27
27
  const aiThreadStore = useAiThreadStore();
28
28
  const snapshotStore = useSnapshotStore();
29
29
  const brandPageMakerStore = useBrandPageMakerStore();
30
30
  const pageSettingsStore = useUiPageSettingsStore();
31
+ const aiLogger = new Logger(!brandPageMakerStore.isProduction);
31
32
  const aiMetadataBuilder = useAiMetadataBuilder(aiLogger);
32
33
  const hasStoredMessages = aiThreadStore.messages.length > 0;
33
- const threadItems = ref(aiThreadStore.messages.length > 0
34
- ? aiThreadStore.messages
35
- : [createWelcomeMessage(options?.currentValue || '')]);
34
+ if (!hasStoredMessages) {
35
+ aiThreadStore.addThreadItem(createWelcomeMessage(options?.currentValue || ''));
36
+ }
37
+ const { messages: threadItems } = storeToRefs(aiThreadStore);
36
38
  const isProcessing = ref(false);
37
39
  watch(isProcessing, (newValue) => {
38
40
  aiThreadStore.isProcessing = newValue;
39
41
  });
40
- watch(threadItems, (newMessages) => {
41
- aiThreadStore.messages = newMessages;
42
- }, { deep: true });
43
42
  const currentTypingMessageId = ref(null);
44
43
  const isStopped = ref(false);
45
44
  const generatedText = ref(null);
@@ -82,7 +81,7 @@ export function useAiChat(options) {
82
81
  };
83
82
  });
84
83
  updateResult.parsedToolCalls.forEach((toolCall) => {
85
- const { message } = toolCall.arguments;
84
+ const message = toolCall.arguments.message;
86
85
  if (message) {
87
86
  aiMessage = aiMessage ? `${aiMessage} ${message}` : message;
88
87
  }
@@ -90,6 +89,8 @@ export function useAiChat(options) {
90
89
  await brandPageMakerStore.initialiseStoresByBrandPageModelAsync(updateResult.model);
91
90
  // Allow Vue to process reactive updates
92
91
  await nextTick();
92
+ // Re-capture snapshot so subsequent messages reflect the updated page
93
+ await snapshotStore.refreshSnapshotAsync();
93
94
  return {
94
95
  shouldContinue: toolResults.length > 0 && aiThreadStore.runId !== null,
95
96
  toolResults,
@@ -245,7 +246,7 @@ export function useAiChat(options) {
245
246
  text: text || '',
246
247
  timestamp: new Date(),
247
248
  };
248
- threadItems.value.push(userMessage);
249
+ aiThreadStore.addThreadItem(userMessage);
249
250
  const agentMessageId = (Date.now() + 1).toString();
250
251
  currentTypingMessageId.value = agentMessageId;
251
252
  const agentMessage = {
@@ -256,7 +257,7 @@ export function useAiChat(options) {
256
257
  isTyping: true,
257
258
  timestamp: new Date(),
258
259
  };
259
- threadItems.value.push(agentMessage);
260
+ aiThreadStore.addThreadItem(agentMessage);
260
261
  try {
261
262
  aiLogger.log('sendMessageAsync', {
262
263
  messageOptions,
@@ -11,7 +11,7 @@ export interface AiMetadataBuilderResult {
11
11
  parsedToolCalls: ParsedToolCall[];
12
12
  }
13
13
  export declare function useAiMetadataBuilder(logger: Logger): {
14
- applyAiToolCallsAsync: (model: BrandPageModel, aiAssistantToolCall: AiAssistantToolCall[], options: {
14
+ applyAiToolCallsAsync: (model: BrandPageModel, aiAssistantToolCall: AiAssistantToolCall[], options?: {
15
15
  maxCharacters?: number;
16
16
  }) => Promise<AiMetadataBuilderResult>;
17
17
  };
@@ -1,18 +1,18 @@
1
- import { executeAiToolUseAsync } from '../../../metadata-builder/ai-metadata-executor';
2
- import { parseAiToolcall, } from '../../../metadata-builder/parsers/ai-toolcall-parser';
1
+ import { executeToolCallsAsync } from '../../../metadata-builder/ai-metadata-executor';
2
+ import { parseToolCalls, } from '../../../metadata-builder/parsers/ai-toolcall-parser';
3
3
  export function useAiMetadataBuilder(logger) {
4
4
  // Debug purpose
5
5
  window.aiLogger = logger;
6
- const applyAiToolCallsAsync = async (model, aiAssistantToolCall, options) => {
6
+ const applyAiToolCallsAsync = async (model, aiAssistantToolCall, options = {}) => {
7
7
  try {
8
- const requests = parseAiToolcall(aiAssistantToolCall);
9
- const result = await executeAiToolUseAsync(model, requests, {
8
+ const parsed = parseToolCalls(aiAssistantToolCall);
9
+ const result = await executeToolCallsAsync(model, parsed, {
10
10
  ...options,
11
11
  logger,
12
12
  });
13
13
  return {
14
14
  model: result.model,
15
- parsedToolCalls: requests,
15
+ parsedToolCalls: parsed,
16
16
  results: result.results.map((x) => {
17
17
  return {
18
18
  toolId: x.request.id,
@@ -0,0 +1,2 @@
1
+ import type { UseAiChatResult } from './useAiChat';
2
+ export declare function useAiWebsiteBuilderChat(): UseAiChatResult;
@@ -0,0 +1,258 @@
1
+ import { ref, computed, watch, nextTick } from 'vue';
2
+ import { getInstance as getAiAssistantClient, AI_ASSISTANT_AGENT_TYPES, buildWebsiteBuilderMessage, } from '../../../clients/ai-assistant-client';
3
+ import { minifyBrandPageMetadata } from '../../../utils/minify-brand-page-metadata';
4
+ import { useSnapshotStore, useAiWebsiteBuilderThreadStore } from '../../stores';
5
+ import { useBrandPageMakerStore } from '../../stores';
6
+ import { useUiPageSettingsStore } from '../../../shared/page-settings/store';
7
+ import { useAiMetadataBuilder } from './useAiMetadataBuilder';
8
+ import { Logger } from '../../../metadata-builder/logger';
9
+ const MAX_TOOL_CALL_ITERATIONS = 5;
10
+ const aiLogger = new Logger();
11
+ export function useAiWebsiteBuilderChat() {
12
+ const aiThreadStore = useAiWebsiteBuilderThreadStore();
13
+ const snapshotStore = useSnapshotStore();
14
+ const brandPageMakerStore = useBrandPageMakerStore();
15
+ const pageSettingsStore = useUiPageSettingsStore();
16
+ const aiMetadataBuilder = useAiMetadataBuilder(aiLogger);
17
+ const hasStoredMessages = aiThreadStore.messages.length > 0;
18
+ const threadItems = ref(aiThreadStore.messages.length > 0
19
+ ? aiThreadStore.messages
20
+ : [
21
+ {
22
+ id: '1',
23
+ type: 'text',
24
+ role: 'agent',
25
+ text: 'What changes would you like to make to your website?',
26
+ timestamp: new Date(),
27
+ },
28
+ ]);
29
+ const isProcessing = ref(false);
30
+ watch(isProcessing, (newValue) => {
31
+ aiThreadStore.isProcessing = newValue;
32
+ });
33
+ watch(threadItems, (newMessages) => {
34
+ aiThreadStore.messages = newMessages;
35
+ }, { deep: true });
36
+ const currentTypingMessageId = ref(null);
37
+ const isStopped = ref(false);
38
+ const generatedText = ref(null);
39
+ const generatedStyle = ref(null);
40
+ const buildMessage = (userPrompt) => {
41
+ const minified = minifyBrandPageMetadata(brandPageMakerStore.brandPageData);
42
+ return buildWebsiteBuilderMessage(userPrompt, minified);
43
+ };
44
+ const applyToolCallsAsync = async (response) => {
45
+ let aiMessage = response.message || '';
46
+ const modelToUpdate = brandPageMakerStore.brandPageData;
47
+ const updateResult = await aiMetadataBuilder.applyAiToolCallsAsync(modelToUpdate, response.toolCalls || []);
48
+ const toolResults = updateResult.results.map((x) => {
49
+ return {
50
+ toolId: x.toolId,
51
+ success: x.errors && x.errors.length > 0 ? 'failed' : 'success',
52
+ };
53
+ });
54
+ updateResult.parsedToolCalls.forEach((toolCall) => {
55
+ const args = toolCall.arguments;
56
+ if (args.message) {
57
+ aiMessage = aiMessage ? `${aiMessage} ${args.message}` : args.message;
58
+ }
59
+ });
60
+ console.log('updateResult.model', JSON.parse(JSON.stringify(updateResult.model)));
61
+ await brandPageMakerStore.initialiseStoresByBrandPageModelAsync(updateResult.model);
62
+ await nextTick();
63
+ // Re-capture snapshot so subsequent messages reflect the updated page
64
+ await snapshotStore.refreshSnapshotAsync();
65
+ return {
66
+ shouldContinue: toolResults.length > 0 && aiThreadStore.runId !== null,
67
+ toolResults,
68
+ aiMessage,
69
+ };
70
+ };
71
+ const submitToolResults = async (toolResults) => {
72
+ if (!aiThreadStore.threadId || !aiThreadStore.runId || !toolResults.length)
73
+ return null;
74
+ const client = getAiAssistantClient();
75
+ const { response } = await client.submitWebsiteToolCallOutputAsync(aiThreadStore.threadId, {
76
+ runId: aiThreadStore.runId,
77
+ toolCalls: toolResults,
78
+ agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
79
+ websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
80
+ });
81
+ return response;
82
+ };
83
+ const callApiAsync = async (userPrompt) => {
84
+ generatedText.value = null;
85
+ generatedStyle.value = null;
86
+ const client = getAiAssistantClient();
87
+ let aiAssistantResponse = {};
88
+ if (!aiThreadStore.threadId) {
89
+ const { response } = await client.createWebsiteThreadAndSendMessageAsync({
90
+ message: buildMessage(userPrompt || ''),
91
+ websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
92
+ agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
93
+ });
94
+ aiAssistantResponse = response;
95
+ aiThreadStore.threadId = response.threadId;
96
+ aiThreadStore.runId = response.runId || null;
97
+ }
98
+ else {
99
+ const { response } = await client.sendWebsiteMessageAsync(aiThreadStore.threadId, {
100
+ message: buildMessage(userPrompt),
101
+ websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
102
+ agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
103
+ });
104
+ aiAssistantResponse = response;
105
+ }
106
+ aiLogger.log('callApiAsync response', { aiAssistantResponse });
107
+ if (isStopped.value)
108
+ return null;
109
+ const handledResponse = await handleAiResponseAsync(aiAssistantResponse);
110
+ return (handledResponse.aiMessage ||
111
+ 'I was unable to make the changes. Please try again.');
112
+ };
113
+ const handleToolResponseAsync = async (response) => {
114
+ let { shouldContinue, toolResults, aiMessage } = await applyToolCallsAsync(response);
115
+ let iterations = 0;
116
+ while (shouldContinue && iterations < MAX_TOOL_CALL_ITERATIONS) {
117
+ if (isStopped.value)
118
+ return { aiMessage: '' };
119
+ const nextResponse = await submitToolResults(toolResults);
120
+ aiLogger.log('handleToolResponseAsync submitToolResults', {
121
+ toolResults,
122
+ nextResponse,
123
+ });
124
+ if (!nextResponse)
125
+ break;
126
+ const retryResult = await applyToolCallsAsync(nextResponse);
127
+ shouldContinue = retryResult.shouldContinue;
128
+ toolResults = retryResult.toolResults;
129
+ aiMessage = retryResult.aiMessage || aiMessage;
130
+ iterations += 1;
131
+ }
132
+ return { aiMessage };
133
+ };
134
+ const handleAiResponseAsync = async (response) => {
135
+ const aiMessageResult = response.message || '';
136
+ if (response.toolCalls && response.toolCalls.length > 0) {
137
+ const toolResult = await handleToolResponseAsync(response);
138
+ // Todo: For now dont show tool result message as it is not functional
139
+ // aiMessageResult = toolResult.aiMessage || aiMessageResult;
140
+ aiLogger.log('handleAiResponseAsync toolResult', { toolResult });
141
+ }
142
+ return { aiMessage: aiMessageResult };
143
+ };
144
+ const sendMessageAsync = async (messageOptions) => {
145
+ const { text, images } = messageOptions;
146
+ if (!text?.trim() && (!images || images.length === 0))
147
+ return;
148
+ isStopped.value = false;
149
+ isProcessing.value = true;
150
+ const userMessage = images
151
+ ? {
152
+ id: Date.now().toString(),
153
+ type: 'image',
154
+ role: 'user',
155
+ images,
156
+ text,
157
+ timestamp: new Date(),
158
+ }
159
+ : {
160
+ id: Date.now().toString(),
161
+ type: 'text',
162
+ role: 'user',
163
+ text: text || '',
164
+ timestamp: new Date(),
165
+ };
166
+ threadItems.value.push(userMessage);
167
+ const agentMessageId = (Date.now() + 1).toString();
168
+ currentTypingMessageId.value = agentMessageId;
169
+ const agentMessage = {
170
+ id: agentMessageId,
171
+ type: 'text',
172
+ role: 'agent',
173
+ text: '',
174
+ isTyping: true,
175
+ timestamp: new Date(),
176
+ };
177
+ threadItems.value.push(agentMessage);
178
+ try {
179
+ aiLogger.log('sendMessageAsync', { messageOptions });
180
+ const responseText = await callApiAsync(text || '');
181
+ if (isStopped.value)
182
+ return;
183
+ const messageIndex = threadItems.value.findIndex((msg) => msg.id === agentMessageId);
184
+ if (messageIndex !== -1) {
185
+ if (responseText) {
186
+ threadItems.value[messageIndex].text = responseText;
187
+ threadItems.value[messageIndex].isTyping = false;
188
+ }
189
+ else {
190
+ threadItems.value[messageIndex].text =
191
+ 'Failed to apply changes. Please try again.';
192
+ threadItems.value[messageIndex].isTyping = false;
193
+ threadItems.value[messageIndex].isError = true;
194
+ }
195
+ }
196
+ }
197
+ catch (error) {
198
+ if (isStopped.value)
199
+ return;
200
+ const messageIndex = threadItems.value.findIndex((msg) => msg.id === agentMessageId);
201
+ if (messageIndex !== -1) {
202
+ threadItems.value[messageIndex].text =
203
+ error?.response?.data?.error ||
204
+ 'An error occurred. Please try again.';
205
+ threadItems.value[messageIndex].isTyping = false;
206
+ threadItems.value[messageIndex].isError = true;
207
+ }
208
+ }
209
+ finally {
210
+ currentTypingMessageId.value = null;
211
+ isProcessing.value = false;
212
+ }
213
+ console.log('aiLogger', aiLogger);
214
+ };
215
+ const deleteMessage = (messageId) => {
216
+ const index = threadItems.value.findIndex((msg) => msg.id === messageId);
217
+ if (index !== -1) {
218
+ threadItems.value.splice(index, 1);
219
+ }
220
+ };
221
+ const stopGenerationAsync = async () => {
222
+ isStopped.value = true;
223
+ if (currentTypingMessageId.value) {
224
+ deleteMessage(currentTypingMessageId.value);
225
+ currentTypingMessageId.value = null;
226
+ }
227
+ isProcessing.value = false;
228
+ };
229
+ const formattedMessages = computed(() => {
230
+ const initialMessageCount = hasStoredMessages
231
+ ? aiThreadStore.messages.length
232
+ : 1;
233
+ return threadItems.value.map((msg, index) => ({
234
+ type: msg.type,
235
+ props: {
236
+ ...(msg.type === 'text' && { text: msg.text }),
237
+ ...(msg.type === 'image' && { images: msg.images, text: msg.text }),
238
+ isUser: msg.role === 'user',
239
+ isAi: msg.role === 'agent',
240
+ showIcon: msg.role === 'agent',
241
+ isTyping: msg.isTyping,
242
+ isResponse: index >= 1,
243
+ disableAnimation: index < initialMessageCount,
244
+ },
245
+ }));
246
+ });
247
+ return {
248
+ threadItems,
249
+ isProcessing,
250
+ currentTypingMessageId,
251
+ generatedText,
252
+ generatedStyle,
253
+ sendMessageAsync,
254
+ deleteMessage,
255
+ stopGenerationAsync,
256
+ formattedMessages,
257
+ };
258
+ }