@designcrowd/library.brand-page 5.17.13 → 5.17.14-ai-25
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-Bca5lK0D.js → CreatedOnBrandCrowd-de-de-DkGTldc-.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-en-us-DsSv9Yb3.js → CreatedOnBrandCrowd-en-us-wgwqydJU.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-es-es-bmyh0Hhu.js → CreatedOnBrandCrowd-es-es-BTDT65kO.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-fr-CEY5Vwyl.js → CreatedOnBrandCrowd-fr-ca-TWVdI9Nt.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-fr-ca-CEY5Vwyl.js → CreatedOnBrandCrowd-fr-fr-TWVdI9Nt.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-pt-B0qQyIQj.js → CreatedOnBrandCrowd-pt-br-ebVyarx-.js} +1 -1
- package/lib/src/{CreatedOnBrandCrowd-pt-br-B0qQyIQj.js → CreatedOnBrandCrowd-pt-pt-ebVyarx-.js} +1 -1
- package/lib/src/{CreatedOnDcom-de-de-Bge8ajmJ.js → CreatedOnDcom-de-de-CXYKC-pc.js} +1 -1
- package/lib/src/{CreatedOnDcom-en-us-DEPPhuhr.js → CreatedOnDcom-en-us-DOjUSjgi.js} +1 -1
- package/lib/src/{CreatedOnDcom-es-es-DPj_Ew87.js → CreatedOnDcom-es-es-yEPtGijb.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-ca-Cpq5wFjs.js → CreatedOnDcom-fr-ca-CBSzc6PH.js} +1 -1
- package/lib/src/{CreatedOnDcom-fr-fr-CBQ2WuX-.js → CreatedOnDcom-fr-fr-CI2mcMeh.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-br-erHhjco0.js → CreatedOnDcom-pt-br-jjk32xcB.js} +1 -1
- package/lib/src/{CreatedOnDcom-pt-pt-mQnDH1e3.js → CreatedOnDcom-pt-pt-CtKCvM0k.js} +1 -1
- package/lib/src/brand-page/models/brand-page-context.model.js +1 -1
- package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +9 -7
- package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.js +9 -0
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +4 -1
- package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +3 -0
- package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +3 -0
- package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.js +3 -0
- package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.d.ts +5 -0
- package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.js +9 -2
- package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +149 -49
- package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +2 -0
- package/lib/src/brand-page-maker/composables/useEventTracker.js +2 -0
- package/lib/src/brand-page-maker/constants/sidebar-constant.js +7 -7
- package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.d.ts +48 -0
- package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +34 -2
- package/lib/src/bundled-translations-C3bP1jT9.js +29 -0
- package/lib/src/bundled-translations-JUkaTF4h.js +173 -0
- package/lib/src/bundled-translations.de-DE-BS9DHJM-.js +173 -0
- package/lib/src/bundled-translations.de-DE-Ived4RSM.js +29 -0
- package/lib/src/bundled-translations.es-ES-C5Ar9cHx.js +173 -0
- package/lib/src/bundled-translations.es-ES-eeZf0FxG.js +29 -0
- package/lib/src/bundled-translations.fr-CA-01-9B5oP.js +29 -0
- package/lib/src/bundled-translations.fr-CA-BzKxkt5L.js +173 -0
- package/lib/src/bundled-translations.fr-FR-BBf1NoEQ.js +29 -0
- package/lib/src/bundled-translations.fr-FR-GXszyber.js +173 -0
- package/lib/src/bundled-translations.pt-BR-BgdLpX4p.js +173 -0
- package/lib/src/bundled-translations.pt-BR-YR-O3Wc5.js +29 -0
- package/lib/src/bundled-translations.pt-PT-D9LhV8fV.js +29 -0
- package/lib/src/bundled-translations.pt-PT-USM01NF6.js +173 -0
- package/lib/src/bundles/bundled-translations.de-DE.json +2 -1
- package/lib/src/bundles/bundled-translations.es-ES.json +2 -1
- package/lib/src/bundles/bundled-translations.fr-CA.json +2 -1
- package/lib/src/bundles/bundled-translations.fr-FR.json +2 -1
- package/lib/src/bundles/bundled-translations.json +2 -1
- package/lib/src/bundles/bundled-translations.pt-BR.json +2 -1
- package/lib/src/bundles/bundled-translations.pt-PT.json +2 -1
- package/lib/src/clients/ai-assistant-client.d.ts +11 -2
- package/lib/src/clients/ai-assistant-client.js +16 -0
- package/lib/src/clients/websocket-gateway-client.d.ts +9 -1
- package/lib/src/css/library.brand-page-brandCrowd.min.css +172 -28
- package/lib/src/css/library.brand-page-brandPage.min.css +173 -28
- package/lib/src/css/library.brand-page-designCom.min.css +172 -28
- package/lib/src/css/library.brand-page-preview.min.css +172 -28
- package/lib/src/index.mjs +1 -1
- package/lib/src/{lib-DLa849MC.js → lib-C0hhrCRW.js} +21974 -21329
- package/lib/src/metadata-builder/ai-metadata-executor.js +26 -1
- package/lib/src/metadata-builder/builders/footer-builder.d.ts +11 -0
- package/lib/src/metadata-builder/builders/footer-builder.js +128 -0
- package/lib/src/metadata-builder/builders/global-styles-builder.d.ts +14 -0
- package/lib/src/metadata-builder/builders/global-styles-builder.js +79 -0
- package/lib/src/metadata-builder/builders/header-builder.d.ts +11 -0
- package/lib/src/metadata-builder/builders/header-builder.js +135 -0
- package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +42 -4
- package/lib/src/metadata-builder/builders/section-builders/base-section-builder.d.ts +5 -2
- package/lib/src/metadata-builder/builders/section-builders/base-section-builder.js +39 -4
- package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.d.ts +6 -0
- package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.js +50 -0
- package/lib/src/metadata-builder/builders/section-builders/button-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.js +7 -1
- package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +4 -8
- package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +31 -10
- package/lib/src/metadata-builder/builders/section-builders/index.d.ts +1 -0
- package/lib/src/metadata-builder/builders/section-builders/index.js +1 -0
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +39 -1
- package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +28 -3
- package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +1 -1
- package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +32 -18
- package/lib/src/metadata-builder/builders/section-field-maps.js +14 -0
- package/lib/src/metadata-builder/builders/section-field-utils.d.ts +1 -8
- package/lib/src/metadata-builder/builders/section-field-utils.js +7 -42
- package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +6 -4
- package/lib/src/metadata-builder/helpers/rte.helpers.js +15 -10
- package/lib/src/metadata-builder/metadata-executor.js +12 -1
- package/lib/src/metadata-builder/models.d.ts +5 -0
- package/lib/src/metadata-builder/models.js +8 -0
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +110 -0
- package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +10 -0
- package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +57 -13
- package/lib/src/metadata-builder/parsers/section-tool-arguments.js +5 -1
- package/lib/src/shared/navigation-style-settings/store/index.js +1 -0
- package/lib/src/shared/page-navigation/store/page-navigation-store.js +1 -20
- package/lib/src/shared/page-navigation/utils/nav-order-utils.d.ts +3 -0
- package/lib/src/shared/page-navigation/utils/nav-order-utils.js +20 -0
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +3 -1
- package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.js +5 -0
- package/lib/src/utils/minify-brand-page-metadata.d.ts +45 -0
- package/lib/src/utils/minify-brand-page-metadata.js +115 -120
- package/package.json +2 -2
- package/src/brand-page/models/brand-page-context.model.ts +1 -1
- package/src/brand-page-maker/components/action-bar/ActionBar.mixin.ts +12 -0
- package/src/brand-page-maker/components/action-bar/ActionBar.vue +7 -0
- package/src/brand-page-maker/components/action-bar/ActionBarNavigation.vue +10 -0
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.de-DE.json +5 -4
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.es-ES.json +5 -4
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.fr-CA.json +5 -4
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.fr-FR.json +5 -4
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.json +2 -1
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.pt-BR.json +5 -4
- package/src/brand-page-maker/components/action-bar/i18n/action-bar.pt-PT.json +5 -4
- package/src/brand-page-maker/components/ai-text-edit/AiProgressFeed.vue +162 -0
- package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +44 -4
- package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +1 -2
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +3 -0
- package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +2 -0
- package/src/brand-page-maker/components/navigation/Navigation.mixin.ts +3 -0
- package/src/brand-page-maker/components/navigation/Navigation.vue +1 -0
- package/src/brand-page-maker/composables/ai-chat/useAiChat.ts +17 -2
- package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +181 -57
- package/src/brand-page-maker/composables/useEventTracker.ts +2 -0
- package/src/brand-page-maker/constants/sidebar-constant.ts +7 -7
- package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +67 -0
- package/src/bundles/bundled-translations.de-DE.json +2 -1
- package/src/bundles/bundled-translations.es-ES.json +2 -1
- package/src/bundles/bundled-translations.fr-CA.json +2 -1
- package/src/bundles/bundled-translations.fr-FR.json +2 -1
- package/src/bundles/bundled-translations.json +2 -1
- package/src/bundles/bundled-translations.pt-BR.json +2 -1
- package/src/bundles/bundled-translations.pt-PT.json +2 -1
- package/src/clients/ai-assistant-client.ts +37 -2
- package/src/clients/websocket-gateway-client.ts +17 -1
- package/src/metadata-builder/ai-metadata-executor.ts +36 -0
- package/src/metadata-builder/builders/footer-builder.ts +190 -0
- package/src/metadata-builder/builders/global-styles-builder.ts +123 -0
- package/src/metadata-builder/builders/header-builder.ts +204 -0
- package/src/metadata-builder/builders/section-builders/about-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +49 -8
- package/src/metadata-builder/builders/section-builders/base-section-builder.ts +56 -4
- package/src/metadata-builder/builders/section-builders/booking-section-builder.ts +68 -0
- package/src/metadata-builder/builders/section-builders/button-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/divider-section-builder.ts +8 -1
- package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +23 -27
- package/src/metadata-builder/builders/section-builders/images-section-builder.ts +62 -45
- package/src/metadata-builder/builders/section-builders/index.ts +1 -0
- package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +44 -2
- package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +31 -10
- package/src/metadata-builder/builders/section-builders/social-links-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +1 -1
- package/src/metadata-builder/builders/section-builders/text-section-builder.ts +58 -21
- package/src/metadata-builder/builders/section-field-maps.ts +17 -0
- package/src/metadata-builder/builders/section-field-utils.ts +12 -56
- package/src/metadata-builder/helpers/rte.helpers.ts +18 -13
- package/src/metadata-builder/metadata-executor.ts +15 -0
- package/src/metadata-builder/models.ts +11 -0
- package/src/metadata-builder/parsers/ai-toolcall-parser.ts +112 -0
- package/src/metadata-builder/parsers/section-tool-arguments.ts +81 -13
- package/src/shared/navigation-style-settings/store/index.ts +5 -0
- package/src/shared/page-navigation/store/page-navigation-store.ts +4 -31
- package/src/shared/page-navigation/utils/nav-order-utils.ts +32 -0
- package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.ts +5 -0
- package/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.vue +1 -1
- package/src/shared/side-bar/components/SideBar.vue +10 -1
- package/src/utils/minify-brand-page-metadata.ts +180 -121
- package/lib/src/bundled-translations-7nBFAyc1.js +0 -173
- package/lib/src/bundled-translations-D68IyOT-.js +0 -29
- package/lib/src/bundled-translations.de-DE-CXZ-2vzJ.js +0 -173
- package/lib/src/bundled-translations.de-DE-CutkEApx.js +0 -29
- package/lib/src/bundled-translations.es-ES-BBU9Jjfn.js +0 -173
- package/lib/src/bundled-translations.es-ES-DYz1JSy9.js +0 -29
- package/lib/src/bundled-translations.fr-CA-BtoS9CoB.js +0 -173
- package/lib/src/bundled-translations.fr-CA-CcZ2d8Di.js +0 -29
- package/lib/src/bundled-translations.fr-FR-Bm8CtJY-.js +0 -173
- package/lib/src/bundled-translations.fr-FR-DjJ0JiGa.js +0 -29
- package/lib/src/bundled-translations.pt-BR-Bq5FfF0e.js +0 -29
- package/lib/src/bundled-translations.pt-BR-CSz7z0l3.js +0 -173
- package/lib/src/bundled-translations.pt-PT-BSItSGh9.js +0 -173
- package/lib/src/bundled-translations.pt-PT-CHJAMmIT.js +0 -29
|
@@ -26,7 +26,7 @@ const AB_TEST_KEYS = {
|
|
|
26
26
|
BP_3926_FREEMIUM_WATERMARK: 'bc-bp-3926-freemium-cta-in-website-editor',
|
|
27
27
|
BP_4572_AI_TEXT_GENERATION_POST_PURCHASE: 'bc-bp-4572-ai-text-generation-post-purchase',
|
|
28
28
|
BP_4964_AI_TEXT_GENERATION_IMPROVEMENT: 'bc-bp-4964-ai-text-improvement-post-purchase-on-website',
|
|
29
|
-
BP_5245_AI_WEBSITE_ASSISTANT: 'bc-bp-5245-ai-website-assistant',
|
|
29
|
+
BP_5245_AI_WEBSITE_ASSISTANT: 'bc-bp-5245-ai-website-assistant-postpurchase',
|
|
30
30
|
};
|
|
31
31
|
export const MEDIA_SIZES = {
|
|
32
32
|
size1x: 'size1x',
|
|
@@ -3,6 +3,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
3
3
|
isSaving: import("vue").ComputedRef<boolean>;
|
|
4
4
|
isPublished: import("vue").ComputedRef<boolean>;
|
|
5
5
|
isPublishButtonEnabled: import("vue").ComputedRef<boolean>;
|
|
6
|
+
isBrandContact: import("vue").ComputedRef<boolean>;
|
|
6
7
|
userStore: import("pinia").Store<"brandPageMakerUser", import("@brand-page-maker/stores").UserState, {}, {
|
|
7
8
|
setUserState(payload: {
|
|
8
9
|
emailAddress?: string | undefined;
|
|
@@ -17,7 +18,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
17
18
|
contentErrorCount(): number;
|
|
18
19
|
brandPageBaseUrl(): string;
|
|
19
20
|
brandPageContentTypes(): string[];
|
|
20
|
-
brandPageData(): import("
|
|
21
|
+
brandPageData(): import("@brand-page/models").BrandPageModel;
|
|
21
22
|
brandPageToken(): string | undefined;
|
|
22
23
|
brandPageDescription(): string;
|
|
23
24
|
brandPageSlug(): string;
|
|
@@ -112,22 +113,22 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
112
113
|
onTemplateSelected(payload: import("@brand-page-maker/stores").OnTemplateSelectedPayload): void;
|
|
113
114
|
setSelectedTabName(payload: any): void;
|
|
114
115
|
showNextNotificationMessage(): Promise<void>;
|
|
115
|
-
updateContent<TContent extends import("
|
|
116
|
+
updateContent<TContent extends import("@brand-page/models").Content, P extends {
|
|
116
117
|
id: string;
|
|
117
118
|
content: TContent;
|
|
118
119
|
}>(payload: P): Promise<void>;
|
|
119
|
-
export(): import("
|
|
120
|
+
export(): import("@brand-page/models").BrandPageModel;
|
|
120
121
|
setBrandPageType({ brandPageType }: {
|
|
121
122
|
brandPageType: "default" | "brandSite" | "brandContact";
|
|
122
123
|
}): void;
|
|
123
|
-
initialiseStoresByBrandPageModelAsync(brandPageModel: import("
|
|
124
|
+
initialiseStoresByBrandPageModelAsync(brandPageModel: import("@brand-page/models").BrandPageModel): Promise<void>;
|
|
124
125
|
initialise({ brandPage, brandPageType, logoDraftDesignAttributes, unsplashApplicationName, templateCategories, personalisationData, isPersonalisationEnabled, businessName, industry, logoVariationImageUrls, shopConfigData, isServerRenderOverride, }: import("@brand-page-maker/stores").InitialisePayload): Promise<void>;
|
|
125
126
|
initialisePages({ pages, sections, }: {
|
|
126
|
-
pages: import("
|
|
127
|
+
pages: import("@brand-page/models").PageModel[];
|
|
127
128
|
sections: import("../../../shared/page-settings/store").PageSettingsStateSections;
|
|
128
129
|
}): void;
|
|
129
130
|
initialisePagesForCurrentPage({ pages, sections, }: {
|
|
130
|
-
pages: import("
|
|
131
|
+
pages: import("@brand-page/models").PageModel[];
|
|
131
132
|
sections: import("../../../shared/page-settings/store").PageSettingsStateSections;
|
|
132
133
|
}): void;
|
|
133
134
|
initialiseAdminMaker(payload: {
|
|
@@ -146,7 +147,7 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
146
147
|
validateContentItems(): Promise<void>;
|
|
147
148
|
validateBrandPageData(): Promise<void>;
|
|
148
149
|
setViewport(payload: {
|
|
149
|
-
viewport: import("
|
|
150
|
+
viewport: import("@brand-page/models").ViewportsType;
|
|
150
151
|
}): void;
|
|
151
152
|
showStripeOnboardingModal(): Promise<void>;
|
|
152
153
|
selectInitialCategories(payload: import("../../../shared/template-settings/models").InitialCategories): void;
|
|
@@ -154,5 +155,6 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
154
155
|
}, {}, {}, {
|
|
155
156
|
saveBrandPage(): void;
|
|
156
157
|
saveAndPublishBrandPage(isActionBar: boolean): void;
|
|
158
|
+
createTeamCards(isTopNav: boolean): void;
|
|
157
159
|
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
158
160
|
export default _default;
|
|
@@ -2,6 +2,7 @@ import { EVENTS } from '../../../constants/brand-page-maker';
|
|
|
2
2
|
import { useBrandPageMakerUserStore, useBrandPageMakerStore, } from '@brand-page-maker/stores';
|
|
3
3
|
import { computed, defineComponent } from 'vue';
|
|
4
4
|
import { UPGRADE_CTA_LOCATIONS } from './../../composables/useEventTracker';
|
|
5
|
+
import { BRAND_PAGE_TYPES } from '@brand-page/models';
|
|
5
6
|
export default defineComponent({
|
|
6
7
|
setup() {
|
|
7
8
|
const userStore = useBrandPageMakerUserStore();
|
|
@@ -11,6 +12,7 @@ export default defineComponent({
|
|
|
11
12
|
isSaving: computed(() => brandPageMakerStore.isSaving),
|
|
12
13
|
isPublished: computed(() => brandPageMakerStore.isPublished),
|
|
13
14
|
isPublishButtonEnabled: computed(() => brandPageMakerStore.isPublishButtonEnabled),
|
|
15
|
+
isBrandContact: computed(() => brandPageMakerStore.brandPageType === BRAND_PAGE_TYPES.brandContact),
|
|
14
16
|
userStore,
|
|
15
17
|
brandPageMakerStore,
|
|
16
18
|
};
|
|
@@ -29,5 +31,12 @@ export default defineComponent({
|
|
|
29
31
|
: UPGRADE_CTA_LOCATIONS.EDITOR_PUBLISH_TOP,
|
|
30
32
|
});
|
|
31
33
|
},
|
|
34
|
+
createTeamCards(isTopNav) {
|
|
35
|
+
this.$emit('create-team-cards', {
|
|
36
|
+
cta_location: isTopNav
|
|
37
|
+
? UPGRADE_CTA_LOCATIONS.NAV_TOP
|
|
38
|
+
: UPGRADE_CTA_LOCATIONS.NAV_BOTTOM,
|
|
39
|
+
});
|
|
40
|
+
},
|
|
32
41
|
},
|
|
33
42
|
});
|
|
@@ -32,7 +32,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
32
32
|
}>, {
|
|
33
33
|
commonTr: (key: any) => any;
|
|
34
34
|
currentNotificationMessage: import("vue").ComputedRef<false | {
|
|
35
|
-
type: "
|
|
35
|
+
type: "error" | "success" | "warning";
|
|
36
36
|
label: string;
|
|
37
37
|
description: string | false;
|
|
38
38
|
}>;
|
|
@@ -1328,6 +1328,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
1328
1328
|
onChangeTemplateConfirmModalCancel(): void;
|
|
1329
1329
|
onChangeTemplateConfirmModalConfirm(): void;
|
|
1330
1330
|
onVideoPlayToggle(): void;
|
|
1331
|
+
onCreateTeamCards(payload: {
|
|
1332
|
+
cta_location: string;
|
|
1333
|
+
}): void;
|
|
1331
1334
|
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
1332
1335
|
viewModel: {
|
|
1333
1336
|
type: PropType<BrandPageMakerViewModel>;
|
|
@@ -38,6 +38,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
|
|
|
38
38
|
saveBrandPage(): void;
|
|
39
39
|
saveAndPublishBrandPage(): void;
|
|
40
40
|
handleBackClick(): void;
|
|
41
|
+
onCreateTeamCards(payload: {
|
|
42
|
+
cta_location: string;
|
|
43
|
+
}): void;
|
|
41
44
|
}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
42
45
|
isAdmin: {
|
|
43
46
|
type: BooleanConstructor;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type ComputedRef, type Ref } from 'vue';
|
|
2
|
+
import { type PlanItem } from '../../../clients/websocket-gateway-client';
|
|
2
3
|
export interface BaseThreadMessage {
|
|
3
4
|
id: string;
|
|
4
5
|
role: 'user' | 'agent';
|
|
@@ -10,7 +11,11 @@ export interface BaseThreadMessage {
|
|
|
10
11
|
export interface TextThreadMessage extends BaseThreadMessage {
|
|
11
12
|
type: 'text';
|
|
12
13
|
text: string;
|
|
14
|
+
initialMessage?: string;
|
|
15
|
+
planItems?: PlanItem[];
|
|
16
|
+
completedItemIds?: string[];
|
|
13
17
|
}
|
|
18
|
+
export { type PlanItem };
|
|
14
19
|
export interface ImageThreadMessage extends BaseThreadMessage {
|
|
15
20
|
type: 'image';
|
|
16
21
|
images: {
|
|
@@ -1,5 +1,6 @@
|
|
|
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
|
+
import {} from '../../../clients/websocket-gateway-client';
|
|
3
4
|
import { getCurrentLocale } from '../../../composables/useTranslate';
|
|
4
5
|
import { storeToRefs } from 'pinia';
|
|
5
6
|
import { useSnapshotStore, useAiThreadStore } from '../../stores';
|
|
@@ -7,6 +8,7 @@ import { useBrandPageMakerStore } from '../../stores';
|
|
|
7
8
|
import { useUiPageSettingsStore } from '../../../shared/page-settings/store';
|
|
8
9
|
import { useAiMetadataBuilder } from '../ai-chat/useAiMetadataBuilder';
|
|
9
10
|
import { Logger } from '../../../metadata-builder/logger';
|
|
11
|
+
export {};
|
|
10
12
|
const MAX_TOOL_CALL_ITERATIONS = 5;
|
|
11
13
|
const TEXT_DISPLAY_LIMIT = 150;
|
|
12
14
|
const truncateText = (text) => {
|
|
@@ -186,10 +188,15 @@ export function useAiChat(options) {
|
|
|
186
188
|
await submitCancelledToolCallsAsync();
|
|
187
189
|
return { aiMessage: '' };
|
|
188
190
|
}
|
|
189
|
-
|
|
191
|
+
// Only submit failed tool results — skip submission entirely if all succeeded
|
|
192
|
+
const failedResults = toolResults.filter((tr) => tr.success !== 'success');
|
|
193
|
+
if (failedResults.length === 0) {
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
const nextResponse = await submitToolResults(failedResults);
|
|
190
197
|
pendingToolCalls.value = []; // Cleared after successful submission
|
|
191
198
|
aiLogger.log('handleToolResponseAsync submitToolResults', {
|
|
192
|
-
toolResults,
|
|
199
|
+
toolResults: failedResults,
|
|
193
200
|
nextResponse,
|
|
194
201
|
});
|
|
195
202
|
if (!nextResponse)
|
|
@@ -4,16 +4,17 @@ import { WebSocketGatewayClient, } from '../../../clients/websocket-gateway-clie
|
|
|
4
4
|
import { minifyBrandPageMetadata } from '../../../utils/minify-brand-page-metadata';
|
|
5
5
|
import { useSnapshotStore, useAiWebsiteBuilderThreadStore } from '../../stores';
|
|
6
6
|
import { useBrandPageMakerStore } from '../../stores';
|
|
7
|
+
import { useBrandPageMakerUserStore } from '../../stores/user/user-store';
|
|
7
8
|
import { useAiMetadataBuilder } from './useAiMetadataBuilder';
|
|
8
9
|
import { Logger } from '../../../metadata-builder/logger';
|
|
9
10
|
const BUILD_TIMEOUT_MS = 600000;
|
|
10
11
|
const aiLogger = new Logger();
|
|
11
12
|
let activeBuildWsClient = null;
|
|
12
|
-
const MAX_TOOL_CALL_ITERATIONS = 5;
|
|
13
13
|
export function useAiWebsiteBuilderChat() {
|
|
14
14
|
const aiThreadStore = useAiWebsiteBuilderThreadStore();
|
|
15
15
|
const snapshotStore = useSnapshotStore();
|
|
16
16
|
const brandPageMakerStore = useBrandPageMakerStore();
|
|
17
|
+
const userStore = useBrandPageMakerUserStore();
|
|
17
18
|
const aiMetadataBuilder = useAiMetadataBuilder(aiLogger);
|
|
18
19
|
const hasStoredMessages = aiThreadStore.messages.length > 0;
|
|
19
20
|
const threadItems = ref(aiThreadStore.messages.length > 0
|
|
@@ -77,10 +78,12 @@ export function useAiWebsiteBuilderChat() {
|
|
|
77
78
|
let aiMessage = response.message || '';
|
|
78
79
|
const modelToUpdate = brandPageMakerStore.brandPageData;
|
|
79
80
|
const updateResult = await aiMetadataBuilder.applyAiToolCallsAsync(modelToUpdate, response.toolCalls || []);
|
|
80
|
-
const toolResults = updateResult.results.map((x) => {
|
|
81
|
+
const toolResults = updateResult.results.map((x, i) => {
|
|
81
82
|
return {
|
|
82
83
|
toolId: x.toolId,
|
|
83
84
|
success: x.errors && x.errors.length > 0 ? 'failed' : 'success',
|
|
85
|
+
name: (response.toolCalls || [])[i]?.function,
|
|
86
|
+
errorMessage: x.errors?.length ? x.errors.join('; ') : undefined,
|
|
84
87
|
};
|
|
85
88
|
});
|
|
86
89
|
updateResult.parsedToolCalls.forEach((toolCall) => {
|
|
@@ -89,7 +92,6 @@ export function useAiWebsiteBuilderChat() {
|
|
|
89
92
|
aiMessage = aiMessage ? `${aiMessage} ${args.message}` : args.message;
|
|
90
93
|
}
|
|
91
94
|
});
|
|
92
|
-
console.log('updateResult.model', JSON.parse(JSON.stringify(updateResult.model)));
|
|
93
95
|
await brandPageMakerStore.initialiseStoresByBrandPageModelAsync(updateResult.model);
|
|
94
96
|
await nextTick();
|
|
95
97
|
// Re-capture snapshot so subsequent messages reflect the updated page
|
|
@@ -106,13 +108,16 @@ export function useAiWebsiteBuilderChat() {
|
|
|
106
108
|
try {
|
|
107
109
|
const client = getAiAssistantClient();
|
|
108
110
|
const message = buildMessage(userPrompt);
|
|
109
|
-
|
|
111
|
+
const userPlan = userStore.hasPremiumSubscription
|
|
112
|
+
? 'premium'
|
|
113
|
+
: 'free';
|
|
110
114
|
let buildResponse;
|
|
111
115
|
if (!aiThreadStore.threadId) {
|
|
112
116
|
buildResponse = await client.createWebsiteThreadBuildAsync({
|
|
113
117
|
message,
|
|
114
118
|
websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
|
|
115
119
|
agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
|
|
120
|
+
userPlan,
|
|
116
121
|
connectionId,
|
|
117
122
|
});
|
|
118
123
|
}
|
|
@@ -121,6 +126,7 @@ export function useAiWebsiteBuilderChat() {
|
|
|
121
126
|
message,
|
|
122
127
|
websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
|
|
123
128
|
agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
|
|
129
|
+
userPlan,
|
|
124
130
|
connectionId,
|
|
125
131
|
});
|
|
126
132
|
}
|
|
@@ -131,8 +137,18 @@ export function useAiWebsiteBuilderChat() {
|
|
|
131
137
|
const langChainUrl = buildResponse.langChainUrl;
|
|
132
138
|
wsClient.setBuildActive(true);
|
|
133
139
|
wsClient.startResponseHeartbeat();
|
|
140
|
+
const withTypingMessage = (fn) => {
|
|
141
|
+
const typingId = currentTypingMessageId.value;
|
|
142
|
+
if (!typingId)
|
|
143
|
+
return;
|
|
144
|
+
const idx = threadItems.value.findIndex((m) => m.id === typingId);
|
|
145
|
+
if (idx !== -1)
|
|
146
|
+
fn(threadItems.value[idx]);
|
|
147
|
+
};
|
|
134
148
|
return new Promise((resolve, reject) => {
|
|
135
149
|
let settled = false;
|
|
150
|
+
let retryCount = 0;
|
|
151
|
+
let lastAiMessage = null;
|
|
136
152
|
let handler = null;
|
|
137
153
|
const finishBuild = () => {
|
|
138
154
|
aiThreadStore.isBuildInProgress = false;
|
|
@@ -151,53 +167,132 @@ export function useAiWebsiteBuilderChat() {
|
|
|
151
167
|
handler = (msg) => {
|
|
152
168
|
if (settled)
|
|
153
169
|
return;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
170
|
+
try {
|
|
171
|
+
if (msg.buildId !== aiThreadStore.buildId)
|
|
172
|
+
return;
|
|
173
|
+
if (isStopped.value) {
|
|
174
|
+
settled = true;
|
|
175
|
+
clearTimeout(timeout);
|
|
176
|
+
finishBuild();
|
|
177
|
+
resolve({ text: null });
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (msg.type === 'chat_started' && msg.message) {
|
|
181
|
+
withTypingMessage((m) => {
|
|
182
|
+
m.initialMessage = msg.message;
|
|
183
|
+
});
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (msg.type === 'plan_announced' && msg.items) {
|
|
187
|
+
withTypingMessage((m) => {
|
|
188
|
+
if (!m.planItems)
|
|
189
|
+
m.planItems = msg.items;
|
|
190
|
+
});
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (msg.type === 'item_complete' && msg.itemId) {
|
|
194
|
+
const itemId = msg.itemId;
|
|
195
|
+
withTypingMessage((m) => {
|
|
196
|
+
if (!m.completedItemIds?.includes(itemId)) {
|
|
197
|
+
m.completedItemIds = [
|
|
198
|
+
...(m.completedItemIds ?? []),
|
|
199
|
+
itemId,
|
|
200
|
+
];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
if (msg.type === 'server_response') {
|
|
206
|
+
const toolCalls = (msg.toolCalls ||
|
|
207
|
+
[]);
|
|
208
|
+
const aiResponse = {
|
|
209
|
+
threadId: aiThreadStore.threadId || '',
|
|
210
|
+
toolCalls,
|
|
211
|
+
message: msg.message || null,
|
|
212
|
+
type: 'tool_calls',
|
|
213
|
+
totalPaidToolCalls: 0,
|
|
214
|
+
timestamp: Date.now(),
|
|
215
|
+
};
|
|
216
|
+
(async () => {
|
|
217
|
+
try {
|
|
218
|
+
// No tool calls = build cycle complete (success, max retries, or no retryable sections)
|
|
219
|
+
if (toolCalls.length === 0) {
|
|
220
|
+
settled = true;
|
|
221
|
+
clearTimeout(timeout);
|
|
222
|
+
finishBuild();
|
|
223
|
+
await snapshotStore.refreshSnapshotAsync();
|
|
224
|
+
resolve({
|
|
225
|
+
text: aiResponse.message ||
|
|
226
|
+
lastAiMessage ||
|
|
227
|
+
'Your website has been updated.',
|
|
228
|
+
langChainUrl,
|
|
229
|
+
});
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
// Tool calls present — apply locally and submit results back
|
|
233
|
+
const { toolResults, aiMessage } = await applyToolCallsAsync(aiResponse);
|
|
234
|
+
lastAiMessage = aiMessage;
|
|
235
|
+
// Only submit failed tool results — the server retries only failed sections.
|
|
236
|
+
const failedResults = toolResults.filter((tr) => tr.success !== 'success');
|
|
237
|
+
if (failedResults.length === 0) {
|
|
238
|
+
settled = true;
|
|
239
|
+
clearTimeout(timeout);
|
|
240
|
+
finishBuild();
|
|
241
|
+
resolve({
|
|
242
|
+
text: aiMessage || 'Your website has been updated.',
|
|
243
|
+
langChainUrl,
|
|
244
|
+
});
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
aiLogger.log('tool submission for failed results', {
|
|
248
|
+
failedResults,
|
|
249
|
+
retryCount,
|
|
250
|
+
});
|
|
251
|
+
const submitResult = await client.submitToolResultsBuildAsync(aiThreadStore.threadId, {
|
|
252
|
+
toolCalls: failedResults,
|
|
253
|
+
agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
|
|
254
|
+
connectionId,
|
|
255
|
+
retryCount,
|
|
256
|
+
userPlan,
|
|
257
|
+
});
|
|
258
|
+
// Update buildId so the handler matches subsequent WS messages
|
|
259
|
+
if (submitResult.buildId) {
|
|
260
|
+
aiThreadStore.buildId = submitResult.buildId;
|
|
261
|
+
}
|
|
262
|
+
// eslint-disable-next-line no-plusplus
|
|
263
|
+
retryCount++;
|
|
264
|
+
}
|
|
265
|
+
catch (err) {
|
|
266
|
+
aiLogger.log('server_response apply error', { err });
|
|
267
|
+
settled = true;
|
|
268
|
+
clearTimeout(timeout);
|
|
269
|
+
finishBuild();
|
|
270
|
+
resolve({ text: 'An error occurred applying changes.' });
|
|
179
271
|
}
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
})();
|
|
272
|
+
})();
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
if (msg.type === 'server_error' || msg.type === 'build_error') {
|
|
276
|
+
settled = true;
|
|
277
|
+
clearTimeout(timeout);
|
|
278
|
+
finishBuild();
|
|
279
|
+
resolve({
|
|
280
|
+
text: msg.error || 'An error occurred during the build.',
|
|
281
|
+
});
|
|
282
|
+
return;
|
|
283
|
+
}
|
|
193
284
|
}
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
resolve({
|
|
199
|
-
text: msg.error || 'An error occurred during the build.',
|
|
285
|
+
catch (err) {
|
|
286
|
+
aiLogger.log('Unexpected error in WS message handler', {
|
|
287
|
+
err,
|
|
288
|
+
type: msg.type,
|
|
200
289
|
});
|
|
290
|
+
if (!settled) {
|
|
291
|
+
settled = true;
|
|
292
|
+
clearTimeout(timeout);
|
|
293
|
+
finishBuild();
|
|
294
|
+
resolve({ text: 'An error occurred during the build.' });
|
|
295
|
+
}
|
|
201
296
|
}
|
|
202
297
|
};
|
|
203
298
|
wsClient.onMessage(handler);
|
|
@@ -287,7 +382,6 @@ export function useAiWebsiteBuilderChat() {
|
|
|
287
382
|
// was destroyed (tab switch) and the writable computed setter is inert.
|
|
288
383
|
aiThreadStore.isProcessing = false;
|
|
289
384
|
}
|
|
290
|
-
console.log('aiLogger', aiLogger);
|
|
291
385
|
};
|
|
292
386
|
const deleteMessage = (messageId) => {
|
|
293
387
|
const index = threadItems.value.findIndex((msg) => msg.id === messageId);
|
|
@@ -331,6 +425,12 @@ export function useAiWebsiteBuilderChat() {
|
|
|
331
425
|
isResponse: index >= 1,
|
|
332
426
|
disableAnimation: index < initialMessageCount,
|
|
333
427
|
langChainUrl: msg.langChainUrl,
|
|
428
|
+
...(msg.type === 'text' &&
|
|
429
|
+
msg.isTyping && {
|
|
430
|
+
initialMessage: msg.initialMessage,
|
|
431
|
+
planItems: msg.planItems ?? [],
|
|
432
|
+
completedItemIds: msg.completedItemIds ?? [],
|
|
433
|
+
}),
|
|
334
434
|
},
|
|
335
435
|
}));
|
|
336
436
|
});
|
|
@@ -79,6 +79,8 @@ export declare const UPGRADE_CTA_LOCATIONS: {
|
|
|
79
79
|
GOOGLE_ADSENSE: string;
|
|
80
80
|
QUICK_LINKS: string;
|
|
81
81
|
SAVE_CONTACT_SETTINGS: string;
|
|
82
|
+
NAV_TOP: string;
|
|
83
|
+
NAV_BOTTOM: string;
|
|
82
84
|
};
|
|
83
85
|
export declare const GENERATE_AI_TEXT_CTA_LOCATIONS: {
|
|
84
86
|
BANNER_DESCRIPTION: string;
|
|
@@ -60,6 +60,8 @@ export const UPGRADE_CTA_LOCATIONS = {
|
|
|
60
60
|
GOOGLE_ADSENSE: 'google_adsense',
|
|
61
61
|
QUICK_LINKS: 'quick_links',
|
|
62
62
|
SAVE_CONTACT_SETTINGS: 'save_contact_settings',
|
|
63
|
+
NAV_TOP: 'nav_top',
|
|
64
|
+
NAV_BOTTOM: 'nav_bottom',
|
|
63
65
|
};
|
|
64
66
|
export const GENERATE_AI_TEXT_CTA_LOCATIONS = {
|
|
65
67
|
BANNER_DESCRIPTION: 'banner_description',
|