@designcrowd/library.brand-page 5.17.6 → 5.17.7

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 (172) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-BI2KuOEF.js → CreatedOnBrandCrowd-de-de-BUQFMhZb.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BYLJCjLJ.js → CreatedOnBrandCrowd-en-us-QS-5r4XI.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-Y_D6cuGE.js → CreatedOnBrandCrowd-es-es-CP2iH-n0.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CqCBRjYh.js → CreatedOnBrandCrowd-fr-ca-qfD4NmQZ.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CqCBRjYh.js → CreatedOnBrandCrowd-fr-fr-qfD4NmQZ.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Bt0YF6DA.js → CreatedOnBrandCrowd-pt-br-CfmaB7zE.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Bt0YF6DA.js → CreatedOnBrandCrowd-pt-pt-CfmaB7zE.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-CEk8FBEG.js → CreatedOnDcom-de-de-BxSUWfGN.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DWw4Tm2L.js → CreatedOnDcom-en-us-CSeUdR6v.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-DpG-8o98.js → CreatedOnDcom-es-es-g7rCfAtP.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-CEla7RmR.js → CreatedOnDcom-fr-ca-Bh_BTb-O.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DRXeVTlV.js → CreatedOnDcom-fr-fr-Clgd_Ujm.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-Bzu_phZc.js → CreatedOnDcom-pt-br-Dlgk0myX.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DWax8Er7.js → CreatedOnDcom-pt-pt-B14APfrn.js} +1 -1
  15. package/lib/src/brand-page/models/brand-page-context.model.d.ts +2 -1
  16. package/lib/src/brand-page/models/brand-page-context.model.js +5 -0
  17. package/lib/src/brand-page/models/index.d.ts +1 -0
  18. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +62 -2
  19. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +1 -0
  20. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +60 -2
  21. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +30 -1
  22. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +60 -2
  23. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +60 -2
  24. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +60 -2
  25. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +60 -2
  26. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +60 -2
  27. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +60 -2
  28. package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.js +3 -1
  29. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -1
  30. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +6 -6
  31. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.d.ts +2 -0
  32. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +258 -0
  33. package/lib/src/brand-page-maker/constants/sidebar-constant.d.ts +1 -0
  34. package/lib/src/brand-page-maker/constants/sidebar-constant.js +8 -0
  35. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +16 -0
  36. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.js +14 -0
  37. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +62 -3
  38. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +2 -0
  39. package/lib/src/brand-page-maker/stores/index.d.ts +1 -0
  40. package/lib/src/brand-page-maker/stores/index.js +1 -0
  41. package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.d.ts +2 -0
  42. package/lib/src/brand-page-maker/stores/snapshot/snapshot-store.js +9 -0
  43. package/lib/src/clients/ai-assistant-client.d.ts +8 -0
  44. package/lib/src/clients/ai-assistant-client.js +11 -1
  45. package/lib/src/composables/useSnapshot.js +33 -0
  46. package/lib/src/css/library.brand-page-brandCrowd.min.css +19 -6
  47. package/lib/src/css/library.brand-page-brandPage.min.css +19 -6
  48. package/lib/src/css/library.brand-page-designCom.min.css +19 -6
  49. package/lib/src/css/library.brand-page-preview.min.css +19 -6
  50. package/lib/src/index.d.ts +1 -0
  51. package/lib/src/index.mjs +42 -41
  52. package/lib/src/{lib-DODSa6QK.js → lib-pOkCQP0J.js} +28820 -26841
  53. package/lib/src/lib.js +1 -0
  54. package/lib/src/metadata-builder/ai-metadata-executor.d.ts +1 -1
  55. package/lib/src/metadata-builder/ai-metadata-executor.js +68 -7
  56. package/lib/src/metadata-builder/builders/add-page-builder.d.ts +14 -0
  57. package/lib/src/metadata-builder/builders/add-page-builder.js +66 -0
  58. package/lib/src/metadata-builder/builders/remove-page-builder.d.ts +13 -0
  59. package/lib/src/metadata-builder/builders/remove-page-builder.js +50 -0
  60. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.d.ts +6 -0
  61. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +17 -0
  62. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.d.ts +6 -0
  63. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +25 -0
  64. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.d.ts +40 -0
  65. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.js +108 -0
  66. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.d.ts +6 -0
  67. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.js +16 -0
  68. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.d.ts +6 -0
  69. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +27 -0
  70. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.d.ts +13 -0
  71. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.js +37 -0
  72. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.d.ts +6 -0
  73. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.js +16 -0
  74. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.d.ts +6 -0
  75. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +76 -0
  76. package/lib/src/metadata-builder/builders/section-builders/image-section-builder.d.ts +6 -0
  77. package/lib/src/metadata-builder/builders/section-builders/image-section-builder.js +16 -0
  78. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.d.ts +6 -0
  79. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +158 -0
  80. package/lib/src/metadata-builder/builders/section-builders/index.d.ts +17 -0
  81. package/lib/src/metadata-builder/builders/section-builders/index.js +17 -0
  82. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.d.ts +6 -0
  83. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +17 -0
  84. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.d.ts +6 -0
  85. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +16 -0
  86. package/lib/src/metadata-builder/builders/section-builders/move-section-builder.d.ts +15 -0
  87. package/lib/src/metadata-builder/builders/section-builders/move-section-builder.js +62 -0
  88. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.d.ts +6 -0
  89. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +16 -0
  90. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.d.ts +6 -0
  91. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +162 -0
  92. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.d.ts +6 -0
  93. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +50 -0
  94. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.d.ts +6 -0
  95. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +133 -0
  96. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.d.ts +6 -0
  97. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +154 -0
  98. package/lib/src/metadata-builder/builders/section-content-factory.d.ts +3 -0
  99. package/lib/src/metadata-builder/builders/section-content-factory.js +13 -0
  100. package/lib/src/metadata-builder/builders/section-field-maps.d.ts +12 -0
  101. package/lib/src/metadata-builder/builders/section-field-maps.js +180 -0
  102. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +11 -0
  103. package/lib/src/metadata-builder/builders/section-field-utils.js +109 -0
  104. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +6 -0
  105. package/lib/src/metadata-builder/helpers/rte.helpers.js +16 -1
  106. package/lib/src/metadata-builder/metadata-executor.js +71 -1
  107. package/lib/src/metadata-builder/models.d.ts +54 -0
  108. package/lib/src/metadata-builder/models.js +58 -0
  109. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +51 -3
  110. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +110 -13
  111. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +285 -0
  112. package/lib/src/metadata-builder/parsers/section-tool-arguments.js +7 -0
  113. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +60 -2
  114. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +60 -2
  115. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +60 -2
  116. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +60 -2
  117. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +90 -3
  118. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +61 -2
  119. package/lib/src/shared/side-bar/components/SideBar.mixin.js +6 -0
  120. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +60 -2
  121. package/lib/src/utils/minify-brand-page-metadata.d.ts +22 -0
  122. package/lib/src/utils/minify-brand-page-metadata.js +344 -0
  123. package/package.json +1 -1
  124. package/src/brand-page/models/brand-page-context.model.ts +12 -3
  125. package/src/brand-page/models/index.ts +1 -0
  126. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +80 -0
  127. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +4 -0
  128. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +9 -2
  129. package/src/brand-page-maker/composables/ai-chat/useAiChat.ts +4 -1
  130. package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +6 -6
  131. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +363 -0
  132. package/src/brand-page-maker/constants/sidebar-constant.ts +8 -0
  133. package/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.ts +19 -0
  134. package/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.ts +3 -1
  135. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +4 -0
  136. package/src/brand-page-maker/stores/index.ts +1 -0
  137. package/src/brand-page-maker/stores/snapshot/snapshot-store.ts +12 -0
  138. package/src/clients/ai-assistant-client.ts +17 -1
  139. package/src/composables/useSnapshot.ts +47 -0
  140. package/src/lib.ts +4 -0
  141. package/src/metadata-builder/ai-metadata-executor.ts +116 -26
  142. package/src/metadata-builder/builders/add-page-builder.ts +98 -0
  143. package/src/metadata-builder/builders/remove-page-builder.ts +83 -0
  144. package/src/metadata-builder/builders/section-builders/about-section-builder.ts +28 -0
  145. package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +45 -0
  146. package/src/metadata-builder/builders/section-builders/base-section-builder.ts +160 -0
  147. package/src/metadata-builder/builders/section-builders/button-section-builder.ts +24 -0
  148. package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +43 -0
  149. package/src/metadata-builder/builders/section-builders/delete-section-builder.ts +63 -0
  150. package/src/metadata-builder/builders/section-builders/divider-section-builder.ts +27 -0
  151. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +111 -0
  152. package/src/metadata-builder/builders/section-builders/image-section-builder.ts +24 -0
  153. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +223 -0
  154. package/src/metadata-builder/builders/section-builders/index.ts +21 -0
  155. package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +29 -0
  156. package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +27 -0
  157. package/src/metadata-builder/builders/section-builders/move-section-builder.ts +100 -0
  158. package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +27 -0
  159. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +231 -0
  160. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +79 -0
  161. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +194 -0
  162. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +234 -0
  163. package/src/metadata-builder/builders/section-content-factory.ts +20 -0
  164. package/src/metadata-builder/builders/section-field-maps.ts +235 -0
  165. package/src/metadata-builder/builders/section-field-utils.ts +157 -0
  166. package/src/metadata-builder/helpers/rte.helpers.ts +23 -1
  167. package/src/metadata-builder/metadata-executor.ts +96 -4
  168. package/src/metadata-builder/models.ts +62 -0
  169. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +141 -17
  170. package/src/metadata-builder/parsers/section-tool-arguments.ts +417 -0
  171. package/src/shared/side-bar/components/SideBar.mixin.ts +10 -0
  172. package/src/utils/minify-brand-page-metadata.ts +407 -0
@@ -64,7 +64,36 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
64
64
  eventButtonLocation?: string | undefined;
65
65
  websiteUpsellModalViewModel?: any;
66
66
  showPublishOptionModal?: boolean | undefined;
67
- abTests: Record<string, string>;
67
+ abTests: {
68
+ bp_3926_freemium_watermark?: {
69
+ key: string;
70
+ value: string;
71
+ isControl: boolean;
72
+ isVariation: boolean;
73
+ isExcluded: boolean;
74
+ } | undefined;
75
+ bp_4572_ai_text_generation_post_purchase?: {
76
+ key: string;
77
+ value: string;
78
+ isControl: boolean;
79
+ isVariation: boolean;
80
+ isExcluded: boolean;
81
+ } | undefined;
82
+ bp_4964_ai_text_generation_improvement?: {
83
+ key: string;
84
+ value: string;
85
+ isControl: boolean;
86
+ isVariation: boolean;
87
+ isExcluded: boolean;
88
+ } | undefined;
89
+ bp_5245_ai_website_assistant?: {
90
+ key: string;
91
+ value: string;
92
+ isControl: boolean;
93
+ isVariation: boolean;
94
+ isExcluded: boolean;
95
+ } | undefined;
96
+ };
68
97
  isSubsequentPublish: boolean;
69
98
  isContextualUpgradeModalVisible: boolean;
70
99
  contextualUpgradeType: string | number | symbol | undefined;
@@ -126,7 +155,36 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
126
155
  eventButtonLocation?: string | undefined;
127
156
  websiteUpsellModalViewModel?: any;
128
157
  showPublishOptionModal?: boolean | undefined;
129
- abTests: Record<string, string>;
158
+ abTests: {
159
+ bp_3926_freemium_watermark?: {
160
+ key: string;
161
+ value: string;
162
+ isControl: boolean;
163
+ isVariation: boolean;
164
+ isExcluded: boolean;
165
+ } | undefined;
166
+ bp_4572_ai_text_generation_post_purchase?: {
167
+ key: string;
168
+ value: string;
169
+ isControl: boolean;
170
+ isVariation: boolean;
171
+ isExcluded: boolean;
172
+ } | undefined;
173
+ bp_4964_ai_text_generation_improvement?: {
174
+ key: string;
175
+ value: string;
176
+ isControl: boolean;
177
+ isVariation: boolean;
178
+ isExcluded: boolean;
179
+ } | undefined;
180
+ bp_5245_ai_website_assistant?: {
181
+ key: string;
182
+ value: string;
183
+ isControl: boolean;
184
+ isVariation: boolean;
185
+ isExcluded: boolean;
186
+ } | undefined;
187
+ };
130
188
  isSubsequentPublish: boolean;
131
189
  isContextualUpgradeModalVisible: boolean;
132
190
  contextualUpgradeType: string | number | symbol | undefined;
@@ -139,7 +139,36 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
139
139
  eventButtonLocation?: string | undefined;
140
140
  websiteUpsellModalViewModel?: any;
141
141
  showPublishOptionModal?: boolean | undefined;
142
- abTests: Record<string, string>;
142
+ abTests: {
143
+ bp_3926_freemium_watermark?: {
144
+ key: string;
145
+ value: string;
146
+ isControl: boolean;
147
+ isVariation: boolean;
148
+ isExcluded: boolean;
149
+ } | undefined;
150
+ bp_4572_ai_text_generation_post_purchase?: {
151
+ key: string;
152
+ value: string;
153
+ isControl: boolean;
154
+ isVariation: boolean;
155
+ isExcluded: boolean;
156
+ } | undefined;
157
+ bp_4964_ai_text_generation_improvement?: {
158
+ key: string;
159
+ value: string;
160
+ isControl: boolean;
161
+ isVariation: boolean;
162
+ isExcluded: boolean;
163
+ } | undefined;
164
+ bp_5245_ai_website_assistant?: {
165
+ key: string;
166
+ value: string;
167
+ isControl: boolean;
168
+ isVariation: boolean;
169
+ isExcluded: boolean;
170
+ } | undefined;
171
+ };
143
172
  isSubsequentPublish: boolean;
144
173
  isContextualUpgradeModalVisible: boolean;
145
174
  contextualUpgradeType: string | number | symbol | undefined;
@@ -201,7 +230,36 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
201
230
  eventButtonLocation?: string | undefined;
202
231
  websiteUpsellModalViewModel?: any;
203
232
  showPublishOptionModal?: boolean | undefined;
204
- abTests: Record<string, string>;
233
+ abTests: {
234
+ bp_3926_freemium_watermark?: {
235
+ key: string;
236
+ value: string;
237
+ isControl: boolean;
238
+ isVariation: boolean;
239
+ isExcluded: boolean;
240
+ } | undefined;
241
+ bp_4572_ai_text_generation_post_purchase?: {
242
+ key: string;
243
+ value: string;
244
+ isControl: boolean;
245
+ isVariation: boolean;
246
+ isExcluded: boolean;
247
+ } | undefined;
248
+ bp_4964_ai_text_generation_improvement?: {
249
+ key: string;
250
+ value: string;
251
+ isControl: boolean;
252
+ isVariation: boolean;
253
+ isExcluded: boolean;
254
+ } | undefined;
255
+ bp_5245_ai_website_assistant?: {
256
+ key: string;
257
+ value: string;
258
+ isControl: boolean;
259
+ isVariation: boolean;
260
+ isExcluded: boolean;
261
+ } | undefined;
262
+ };
205
263
  isSubsequentPublish: boolean;
206
264
  isContextualUpgradeModalVisible: boolean;
207
265
  contextualUpgradeType: string | number | symbol | undefined;
@@ -64,7 +64,36 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
64
64
  eventButtonLocation?: string | undefined;
65
65
  websiteUpsellModalViewModel?: any;
66
66
  showPublishOptionModal?: boolean | undefined;
67
- abTests: Record<string, string>;
67
+ abTests: {
68
+ bp_3926_freemium_watermark?: {
69
+ key: string;
70
+ value: string;
71
+ isControl: boolean;
72
+ isVariation: boolean;
73
+ isExcluded: boolean;
74
+ } | undefined;
75
+ bp_4572_ai_text_generation_post_purchase?: {
76
+ key: string;
77
+ value: string;
78
+ isControl: boolean;
79
+ isVariation: boolean;
80
+ isExcluded: boolean;
81
+ } | undefined;
82
+ bp_4964_ai_text_generation_improvement?: {
83
+ key: string;
84
+ value: string;
85
+ isControl: boolean;
86
+ isVariation: boolean;
87
+ isExcluded: boolean;
88
+ } | undefined;
89
+ bp_5245_ai_website_assistant?: {
90
+ key: string;
91
+ value: string;
92
+ isControl: boolean;
93
+ isVariation: boolean;
94
+ isExcluded: boolean;
95
+ } | undefined;
96
+ };
68
97
  isSubsequentPublish: boolean;
69
98
  isContextualUpgradeModalVisible: boolean;
70
99
  contextualUpgradeType: string | number | symbol | undefined;
@@ -126,7 +155,36 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
126
155
  eventButtonLocation?: string | undefined;
127
156
  websiteUpsellModalViewModel?: any;
128
157
  showPublishOptionModal?: boolean | undefined;
129
- abTests: Record<string, string>;
158
+ abTests: {
159
+ bp_3926_freemium_watermark?: {
160
+ key: string;
161
+ value: string;
162
+ isControl: boolean;
163
+ isVariation: boolean;
164
+ isExcluded: boolean;
165
+ } | undefined;
166
+ bp_4572_ai_text_generation_post_purchase?: {
167
+ key: string;
168
+ value: string;
169
+ isControl: boolean;
170
+ isVariation: boolean;
171
+ isExcluded: boolean;
172
+ } | undefined;
173
+ bp_4964_ai_text_generation_improvement?: {
174
+ key: string;
175
+ value: string;
176
+ isControl: boolean;
177
+ isVariation: boolean;
178
+ isExcluded: boolean;
179
+ } | undefined;
180
+ bp_5245_ai_website_assistant?: {
181
+ key: string;
182
+ value: string;
183
+ isControl: boolean;
184
+ isVariation: boolean;
185
+ isExcluded: boolean;
186
+ } | undefined;
187
+ };
130
188
  isSubsequentPublish: boolean;
131
189
  isContextualUpgradeModalVisible: boolean;
132
190
  contextualUpgradeType: string | number | symbol | undefined;
@@ -81,7 +81,7 @@ export function useAiChat(options) {
81
81
  };
82
82
  });
83
83
  updateResult.parsedToolCalls.forEach((toolCall) => {
84
- const { message } = toolCall.arguments;
84
+ const message = toolCall.arguments.message;
85
85
  if (message) {
86
86
  aiMessage = aiMessage ? `${aiMessage} ${message}` : message;
87
87
  }
@@ -89,6 +89,8 @@ export function useAiChat(options) {
89
89
  await brandPageMakerStore.initialiseStoresByBrandPageModelAsync(updateResult.model);
90
90
  // Allow Vue to process reactive updates
91
91
  await nextTick();
92
+ // Re-capture snapshot so subsequent messages reflect the updated page
93
+ await snapshotStore.refreshSnapshotAsync();
92
94
  return {
93
95
  shouldContinue: toolResults.length > 0 && aiThreadStore.runId !== null,
94
96
  toolResults,
@@ -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
+ }
@@ -10,5 +10,6 @@ export declare const SIDE_BAR_TAB_NAMES: {
10
10
  STYLE_SETTINGS: string;
11
11
  BRANDPAGE_SETTINGS: string;
12
12
  AI_TEXT_EDIT: string;
13
+ AI_WEBSITE_BUILDER: string;
13
14
  };
14
15
  export declare const DEFAULT_SIDE_BAR_TABS: () => SideBarTab[];
@@ -10,6 +10,7 @@ export const SIDE_BAR_TAB_NAMES = {
10
10
  STYLE_SETTINGS: 'StyleSettings',
11
11
  BRANDPAGE_SETTINGS: 'BrandPageSettings',
12
12
  AI_TEXT_EDIT: 'AiTextEdit',
13
+ AI_WEBSITE_BUILDER: 'AiWebsiteBuilder',
13
14
  };
14
15
  export const DEFAULT_SIDE_BAR_TABS = () => [
15
16
  {
@@ -42,6 +43,13 @@ export const DEFAULT_SIDE_BAR_TABS = () => [
42
43
  accessibleDisplayName: 'AI Text Edit',
43
44
  isVisible: false,
44
45
  },
46
+ {
47
+ name: SIDE_BAR_TAB_NAMES.AI_WEBSITE_BUILDER,
48
+ displayName: 'AI Builder',
49
+ iconName: 'ai',
50
+ accessibleDisplayName: 'AI Website Builder',
51
+ isVisible: true,
52
+ },
45
53
  {
46
54
  name: SIDE_BAR_TAB_NAMES.BACKGROUND_SETTINGS,
47
55
  displayName: constantsTr(`backgroundDisplayName`),
@@ -0,0 +1,16 @@
1
+ export declare const useAiWebsiteBuilderThreadStore: import("pinia").StoreDefinition<"aiWebsiteBuilderThread", Pick<{
2
+ threadId: import("vue").Ref<string | null, string | null>;
3
+ runId: import("vue").Ref<string | null, string | null>;
4
+ messages: import("vue").Ref<any[], any[]>;
5
+ isProcessing: import("vue").Ref<boolean, boolean>;
6
+ }, "threadId" | "runId" | "messages" | "isProcessing">, Pick<{
7
+ threadId: import("vue").Ref<string | null, string | null>;
8
+ runId: import("vue").Ref<string | null, string | null>;
9
+ messages: import("vue").Ref<any[], any[]>;
10
+ isProcessing: import("vue").Ref<boolean, boolean>;
11
+ }, never>, Pick<{
12
+ threadId: import("vue").Ref<string | null, string | null>;
13
+ runId: import("vue").Ref<string | null, string | null>;
14
+ messages: import("vue").Ref<any[], any[]>;
15
+ isProcessing: import("vue").Ref<boolean, boolean>;
16
+ }, never>>;
@@ -0,0 +1,14 @@
1
+ import { defineStore } from 'pinia';
2
+ import { ref } from 'vue';
3
+ export const useAiWebsiteBuilderThreadStore = defineStore('aiWebsiteBuilderThread', () => {
4
+ const threadId = ref(null);
5
+ const runId = ref(null);
6
+ const messages = ref([]);
7
+ const isProcessing = ref(false);
8
+ return {
9
+ threadId,
10
+ runId,
11
+ messages,
12
+ isProcessing,
13
+ };
14
+ });