@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.
- package/lib/src/{CreatedOnBrandCrowd-de-de-yFg0wq_8.js → CreatedOnBrandCrowd-de-de-CtODijXU.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-D4sUyR-U.js → CreatedOnBrandCrowd-en-us-CFOzipix.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-CjXHshc0.js → CreatedOnBrandCrowd-es-es-Bed6cQwT.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-CtsyncLl.js → CreatedOnBrandCrowd-fr-ca-CDtut9SG.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-CtsyncLl.js → CreatedOnBrandCrowd-fr-fr-CDtut9SG.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-D8Z-gS4q.js → CreatedOnBrandCrowd-pt-br-BxubZ9Pn.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-D8Z-gS4q.js → CreatedOnBrandCrowd-pt-pt-BxubZ9Pn.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-k7a8-Akd.js → CreatedOnDcom-de-de-Bpi74lME.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-Bh5mbVcr.js → CreatedOnDcom-en-us-DcV-Kjz6.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-DkEBWtQn.js → CreatedOnDcom-es-es-G_POK1Z1.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-DcarvQ1r.js → CreatedOnDcom-fr-ca-B-6Lowfi.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-Cbe-yOPu.js → CreatedOnDcom-fr-fr-Cd3WjtRX.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-DlWu_Kwc.js → CreatedOnDcom-pt-br-DuNWZ0KP.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-DZp9RWfH.js → CreatedOnDcom-pt-pt-CcPfyNH6.js} +1 -1
- package/lib/src/brand-page/clients/brand-page.client.d.ts +2 -1
- package/lib/src/brand-page/clients/brand-page.client.js +1 -0
- package/lib/src/brand-page/models/index.d.ts +1 -0
- package/lib/src/brand-page/models/payment.model.d.ts +42 -0
- package/lib/src/brand-page/models/payment.model.js +9 -0
- package/lib/src/brand-page/utils/view-model.util.js +1 -0
- package/lib/src/brand-page/view-models.d.ts +1 -0
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +3 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +1 -0
- package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +1 -0
- package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.js +11 -10
- package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -1
- package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +6 -6
- package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.d.ts +2 -0
- package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +258 -0
- package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +2 -0
- package/lib/src/brand-page-maker/composables/useEventTracker.js +6 -0
- package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +1 -0
- package/lib/src/brand-page-maker/constants/config-settings-constant.js +7 -0
- package/lib/src/brand-page-maker/constants/sidebar-constant.d.ts +1 -0
- package/lib/src/brand-page-maker/constants/sidebar-constant.js +8 -0
- package/lib/src/brand-page-maker/models/content-settings.js +1 -0
- package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.d.ts +128 -4
- package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.js +8 -0
- package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +16 -0
- package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.js +14 -0
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +2 -0
- package/lib/src/brand-page-maker/stores/index.d.ts +1 -0
- package/lib/src/brand-page-maker/stores/index.js +1 -0
- package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.d.ts +2 -0
- package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.js +9 -0
- package/lib/src/bundled-translations-D5A4swr0.js +173 -0
- package/lib/src/bundled-translations.de-DE-Bq6H28Hz.js +173 -0
- package/lib/src/bundled-translations.es-ES-Bo-UGy51.js +173 -0
- package/lib/src/bundled-translations.fr-CA-7GXawEcN.js +173 -0
- package/lib/src/bundled-translations.fr-FR-DzVwt2U-.js +173 -0
- package/lib/src/bundled-translations.pt-BR-DSZZ-i-B.js +173 -0
- package/lib/src/bundled-translations.pt-PT-SNbEX0GM.js +173 -0
- package/lib/src/bundles/bundled-translations.de-DE.json +965 -1
- package/lib/src/bundles/bundled-translations.es-ES.json +965 -1
- package/lib/src/bundles/bundled-translations.fr-CA.json +965 -1
- package/lib/src/bundles/bundled-translations.fr-FR.json +965 -1
- package/lib/src/bundles/bundled-translations.json +965 -1
- package/lib/src/bundles/bundled-translations.pt-BR.json +965 -1
- package/lib/src/bundles/bundled-translations.pt-PT.json +965 -1
- package/lib/src/clients/ai-assistant-client.d.ts +8 -0
- package/lib/src/clients/ai-assistant-client.js +11 -1
- package/lib/src/composables/useSnapshot.js +33 -0
- package/lib/src/composables/useTranslate.d.ts +7 -1
- package/lib/src/composables/useTranslate.js +9 -1
- package/lib/src/css/library.brand-page-brandCrowd.min.css +52 -20
- package/lib/src/css/library.brand-page-brandPage.min.css +52 -20
- package/lib/src/css/library.brand-page-designCom.min.css +52 -20
- package/lib/src/css/library.brand-page-preview.min.css +52 -20
- package/lib/src/index.d.ts +1 -0
- package/lib/src/index.mjs +96 -94
- package/lib/src/{lib-DOfGX3z2.js → lib-BBkLrEZM.js} +31733 -29570
- package/lib/src/lib.js +1 -0
- package/lib/src/metadata-builder/ai-metadata-executor.d.ts +1 -1
- package/lib/src/metadata-builder/ai-metadata-executor.js +68 -7
- package/lib/src/metadata-builder/builders/add-page-builder.d.ts +14 -0
- package/lib/src/metadata-builder/builders/add-page-builder.js +66 -0
- package/lib/src/metadata-builder/builders/remove-page-builder.d.ts +13 -0
- package/lib/src/metadata-builder/builders/remove-page-builder.js +50 -0
- package/lib/src/metadata-builder/builders/section-builders/about-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +17 -0
- package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +25 -0
- package/lib/src/metadata-builder/builders/section-builders/base-section-builder.d.ts +40 -0
- package/lib/src/metadata-builder/builders/section-builders/base-section-builder.js +108 -0
- package/lib/src/metadata-builder/builders/section-builders/button-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/button-section-builder.js +16 -0
- package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +27 -0
- package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.d.ts +13 -0
- package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.js +37 -0
- package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.js +16 -0
- package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +76 -0
- package/lib/src/metadata-builder/builders/section-builders/image-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/image-section-builder.js +16 -0
- package/lib/src/metadata-builder/builders/section-builders/images-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +158 -0
- package/lib/src/metadata-builder/builders/section-builders/index.d.ts +17 -0
- package/lib/src/metadata-builder/builders/section-builders/index.js +17 -0
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +17 -0
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +16 -0
- package/lib/src/metadata-builder/builders/section-builders/move-section-builder.d.ts +15 -0
- package/lib/src/metadata-builder/builders/section-builders/move-section-builder.js +62 -0
- package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +16 -0
- package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +162 -0
- package/lib/src/metadata-builder/builders/section-builders/social-links-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +50 -0
- package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +133 -0
- package/lib/src/metadata-builder/builders/section-builders/text-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +154 -0
- package/lib/src/metadata-builder/builders/section-content-factory.d.ts +3 -0
- package/lib/src/metadata-builder/builders/section-content-factory.js +13 -0
- package/lib/src/metadata-builder/builders/section-field-maps.d.ts +12 -0
- package/lib/src/metadata-builder/builders/section-field-maps.js +180 -0
- package/lib/src/metadata-builder/builders/section-field-utils.d.ts +11 -0
- package/lib/src/metadata-builder/builders/section-field-utils.js +109 -0
- package/lib/src/metadata-builder/builders/update-content-text-builder.js +0 -5
- package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +6 -0
- package/lib/src/metadata-builder/helpers/rte.helpers.js +16 -1
- package/lib/src/metadata-builder/logger.d.ts +2 -0
- package/lib/src/metadata-builder/logger.js +6 -0
- package/lib/src/metadata-builder/metadata-executor.js +71 -1
- package/lib/src/metadata-builder/models.d.ts +54 -0
- package/lib/src/metadata-builder/models.js +58 -0
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +51 -3
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +110 -13
- package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +285 -0
- package/lib/src/metadata-builder/parsers/section-tool-arguments.js +7 -0
- package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +1 -0
- package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +1 -0
- package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +1 -0
- package/lib/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.mixin.d.ts +13 -1
- package/lib/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.mixin.js +10 -0
- package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +2 -1
- package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
- package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +1 -0
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +1 -0
- package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +1 -0
- package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +1 -0
- package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +2 -1
- package/lib/src/utils/minify-brand-page-metadata.d.ts +22 -0
- package/lib/src/utils/minify-brand-page-metadata.js +344 -0
- package/package.json +1 -1
- package/src/brand-page/clients/brand-page.client.ts +3 -0
- package/src/brand-page/components/payment/RequestPaymentStripe.vue +381 -44
- package/src/brand-page/components/shop/PaymentModal.vue +7 -1
- package/src/brand-page/components/shop/PaymentShippingAddress.vue +297 -0
- package/src/brand-page/components/shop/Shop.vue +1 -0
- package/src/brand-page/components/shop/i18n/countries.de-DE.json +240 -0
- package/src/brand-page/components/shop/i18n/countries.es-ES.json +240 -0
- package/src/brand-page/components/shop/i18n/countries.fr-CA.json +240 -0
- package/src/brand-page/components/shop/i18n/countries.fr-FR.json +240 -0
- package/src/brand-page/components/shop/i18n/countries.json +240 -0
- package/src/brand-page/components/shop/i18n/countries.pt-BR.json +240 -0
- package/src/brand-page/components/shop/i18n/countries.pt-PT.json +240 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.de-DE.json +18 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.es-ES.json +18 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.fr-CA.json +18 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.fr-FR.json +18 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.json +18 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.pt-BR.json +18 -0
- package/src/brand-page/components/shop/i18n/payment-shipping-address.pt-PT.json +18 -0
- package/src/brand-page/models/index.ts +1 -0
- package/src/brand-page/models/payment.model.ts +24 -0
- package/src/brand-page/utils/view-model.util.ts +1 -0
- package/src/brand-page/view-models.ts +1 -0
- package/src/brand-page-maker/components/ai-text-edit/AiTextEdit.vue +1 -1
- package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +80 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +4 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +9 -2
- package/src/brand-page-maker/composables/ai-chat/useAiChat.ts +16 -17
- package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +6 -6
- package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +363 -0
- package/src/brand-page-maker/composables/useEventTracker.ts +6 -0
- package/src/brand-page-maker/constants/config-settings-constant.ts +8 -0
- package/src/brand-page-maker/constants/sidebar-constant.ts +8 -0
- package/src/brand-page-maker/models/content-settings.ts +1 -0
- package/src/brand-page-maker/stores/ai-thread/ai-thread-store.ts +13 -1
- package/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.ts +19 -0
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +4 -0
- package/src/brand-page-maker/stores/index.ts +1 -0
- package/src/brand-page-maker/stores/snapshot/snapshot-store.ts +12 -0
- package/src/bundles/bundled-translations.de-DE.json +965 -1
- package/src/bundles/bundled-translations.es-ES.json +965 -1
- package/src/bundles/bundled-translations.fr-CA.json +965 -1
- package/src/bundles/bundled-translations.fr-FR.json +965 -1
- package/src/bundles/bundled-translations.json +965 -1
- package/src/bundles/bundled-translations.pt-BR.json +965 -1
- package/src/bundles/bundled-translations.pt-PT.json +965 -1
- package/src/clients/ai-assistant-client.ts +17 -1
- package/src/composables/useSnapshot.ts +47 -0
- package/src/composables/useTranslate.ts +15 -0
- package/src/lib.ts +4 -0
- package/src/metadata-builder/ai-metadata-executor.ts +116 -26
- package/src/metadata-builder/builders/add-page-builder.ts +98 -0
- package/src/metadata-builder/builders/remove-page-builder.ts +83 -0
- package/src/metadata-builder/builders/section-builders/about-section-builder.ts +28 -0
- package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +45 -0
- package/src/metadata-builder/builders/section-builders/base-section-builder.ts +160 -0
- package/src/metadata-builder/builders/section-builders/button-section-builder.ts +24 -0
- package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +43 -0
- package/src/metadata-builder/builders/section-builders/delete-section-builder.ts +63 -0
- package/src/metadata-builder/builders/section-builders/divider-section-builder.ts +27 -0
- package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +111 -0
- package/src/metadata-builder/builders/section-builders/image-section-builder.ts +24 -0
- package/src/metadata-builder/builders/section-builders/images-section-builder.ts +223 -0
- package/src/metadata-builder/builders/section-builders/index.ts +21 -0
- package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +29 -0
- package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +27 -0
- package/src/metadata-builder/builders/section-builders/move-section-builder.ts +100 -0
- package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +27 -0
- package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +231 -0
- package/src/metadata-builder/builders/section-builders/social-links-builder.ts +79 -0
- package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +194 -0
- package/src/metadata-builder/builders/section-builders/text-section-builder.ts +234 -0
- package/src/metadata-builder/builders/section-content-factory.ts +20 -0
- package/src/metadata-builder/builders/section-field-maps.ts +235 -0
- package/src/metadata-builder/builders/section-field-utils.ts +157 -0
- package/src/metadata-builder/builders/update-content-text-builder.ts +0 -6
- package/src/metadata-builder/helpers/rte.helpers.ts +23 -1
- package/src/metadata-builder/logger.ts +7 -0
- package/src/metadata-builder/metadata-executor.ts +96 -4
- package/src/metadata-builder/models.ts +62 -0
- package/src/metadata-builder/parsers/ai-toolcall-parser.ts +141 -17
- package/src/metadata-builder/parsers/section-tool-arguments.ts +417 -0
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +3 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +3 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +3 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +3 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +3 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +3 -1
- package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +3 -1
- package/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.mixin.ts +12 -0
- package/src/shared/content-settings/components/payment-config-field/payment-toggle-field/PaymentToggleField.vue +9 -1
- package/src/utils/minify-brand-page-metadata.ts +407 -0
- package/lib/src/brand-page/components/payment/RequestPaymentStripe.mixin.d.ts +0 -106
- package/lib/src/brand-page/components/payment/RequestPaymentStripe.mixin.js +0 -253
- package/lib/src/bundled-translations-B6qZE8LU.js +0 -169
- package/lib/src/bundled-translations.de-DE-CsU6YsZb.js +0 -169
- package/lib/src/bundled-translations.es-ES-unPBdcJx.js +0 -169
- package/lib/src/bundled-translations.fr-CA-Dpa2wEtC.js +0 -169
- package/lib/src/bundled-translations.fr-FR-BPloaUjN.js +0 -169
- package/lib/src/bundled-translations.pt-BR-CFRGdaDO.js +0 -169
- package/lib/src/bundled-translations.pt-PT-BHVYCE0K.js +0 -169
- package/src/brand-page/components/payment/RequestPaymentStripe.mixin.ts +0 -364
|
@@ -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: "
|
|
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 });
|
package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts
CHANGED
|
@@ -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
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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 {
|
|
2
|
-
import {
|
|
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
|
|
9
|
-
const result = await
|
|
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:
|
|
15
|
+
parsedToolCalls: parsed,
|
|
16
16
|
results: result.results.map((x) => {
|
|
17
17
|
return {
|
|
18
18
|
toolId: x.request.id,
|
|
@@ -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
|
+
}
|