@designcrowd/library.brand-page 6.2.3 → 6.2.4-ast-faq-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-Cn0M-eZ1.js → CreatedOnBrandCrowd-de-de-DZKdhDPm.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DRLMSDZr.js → CreatedOnBrandCrowd-en-us-BwRkzbWs.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BglTu73U.js → CreatedOnBrandCrowd-es-es-D5c5FXPv.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-Bj6YZ_el.js → CreatedOnBrandCrowd-fr-ca-CbeeC4am.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-Bj6YZ_el.js → CreatedOnBrandCrowd-fr-fr-CbeeC4am.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-DEoOmQ1F.js → CreatedOnBrandCrowd-pt-br-Ar-FCaji.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-DEoOmQ1F.js → CreatedOnBrandCrowd-pt-pt-Ar-FCaji.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-BZ7gTt4Z.js → CreatedOnDcom-de-de-CASR2x4B.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-CD6Km5sH.js → CreatedOnDcom-en-us-CzbgCbGq.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CNpZHvEl.js → CreatedOnDcom-es-es-Bo-jkBIJ.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-URS-ydJ1.js → CreatedOnDcom-fr-ca-DjLS3NVf.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-D2AVeA3H.js → CreatedOnDcom-fr-fr-EuVNSQHo.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-C32frnFs.js → CreatedOnDcom-pt-br-DoaEvDmC.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-TDYGjRXS.js → CreatedOnDcom-pt-pt-D-nbucbq.js} +1 -1
  15. package/lib/src/brand-page/constants/misc.constants.d.ts +8 -0
  16. package/lib/src/brand-page/constants/misc.constants.js +7 -0
  17. package/lib/src/brand-page/constants/styles.constants.d.ts +2 -0
  18. package/lib/src/brand-page/constants/styles.constants.js +2 -0
  19. package/lib/src/brand-page/models/brand-page-context.model.d.ts +5 -0
  20. package/lib/src/brand-page/models/brand-page-context.model.js +8 -1
  21. package/lib/src/brand-page/models/content.model.d.ts +1 -0
  22. package/lib/src/brand-page/models/content.model.js +1 -0
  23. package/lib/src/brand-page/models/index.d.ts +22 -0
  24. package/lib/src/brand-page/utils/content-callback-util.d.ts +2 -1
  25. package/lib/src/brand-page/utils/content-callback-util.js +3 -0
  26. package/lib/src/brand-page/utils/view-model.util.d.ts +2 -0
  27. package/lib/src/brand-page/utils/view-model.util.js +23 -0
  28. package/lib/src/brand-page/view-models.d.ts +9 -2
  29. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +31 -0
  30. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +31 -0
  31. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +7 -0
  32. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +21 -0
  33. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +22 -1
  34. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +21 -0
  35. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +21 -0
  36. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +21 -0
  37. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +21 -0
  38. package/lib/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.d.ts +10 -0
  39. package/lib/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.js +11 -0
  40. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +14 -4
  41. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +13 -0
  42. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +78 -50
  43. package/lib/src/brand-page-maker/constants/config-settings-constant.d.ts +2 -1
  44. package/lib/src/brand-page-maker/constants/config-settings-constant.js +100 -3
  45. package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.d.ts +3 -0
  46. package/lib/src/brand-page-maker/convertors/faq-display-style.convertor.js +47 -0
  47. package/lib/src/brand-page-maker/models/content-settings-configs.d.ts +1 -0
  48. package/lib/src/brand-page-maker/models/content-settings-configs.js +1 -0
  49. package/lib/src/brand-page-maker/models/content-settings.d.ts +4 -1
  50. package/lib/src/brand-page-maker/models/content-settings.js +47 -1
  51. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +9 -2
  52. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.js +20 -0
  53. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +21 -0
  54. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +1 -0
  55. package/lib/src/brand-page-maker/utils/apply-color-strategy.js +45 -17
  56. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +6 -0
  57. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +24 -1
  58. package/lib/src/brand-page-maker/validators/field.validator.js +2 -0
  59. package/lib/src/bundled-translations-BlnNpIYu.js +179 -0
  60. package/lib/src/bundles/bundled-translations.json +20 -2
  61. package/lib/src/clients/ai-assistant-client.d.ts +1 -0
  62. package/lib/src/clients/ai-assistant-client.js +1 -0
  63. package/lib/src/composables/useTranslate.d.ts +1 -1
  64. package/lib/src/composables/useTranslate.js +1 -1
  65. package/lib/src/css/library.brand-page-brandCrowd.min.css +154 -47
  66. package/lib/src/css/library.brand-page-brandPage.min.css +154 -47
  67. package/lib/src/css/library.brand-page-designCom.min.css +154 -47
  68. package/lib/src/css/library.brand-page-preview.min.css +154 -47
  69. package/lib/src/index.mjs +224 -222
  70. package/lib/src/{lib-Dm9AuOJL.js → lib-BS9Le912.js} +30727 -29779
  71. package/lib/src/metadata-builder/builders/global-font-propagation.d.ts +41 -0
  72. package/lib/src/metadata-builder/builders/global-font-propagation.js +146 -0
  73. package/lib/src/metadata-builder/builders/global-styles-builder.js +29 -1
  74. package/lib/src/metadata-builder/builders/header-builder.js +8 -0
  75. package/lib/src/metadata-builder/builders/section-builders/index.d.ts +1 -0
  76. package/lib/src/metadata-builder/builders/section-builders/index.js +1 -0
  77. package/lib/src/metadata-builder/builders/section-builders/support-me-builder.d.ts +8 -0
  78. package/lib/src/metadata-builder/builders/section-builders/support-me-builder.js +25 -0
  79. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +5 -2
  80. package/lib/src/metadata-builder/builders/section-field-maps.js +15 -0
  81. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +6 -1
  82. package/lib/src/metadata-builder/builders/section-field-utils.js +48 -12
  83. package/lib/src/metadata-builder/builders/section-rules/support-me.rules.d.ts +2 -0
  84. package/lib/src/metadata-builder/builders/section-rules/support-me.rules.js +17 -0
  85. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +9 -0
  86. package/lib/src/metadata-builder/helpers/rte.helpers.js +60 -1
  87. package/lib/src/metadata-builder/metadata-executor.js +3 -1
  88. package/lib/src/metadata-builder/models.d.ts +2 -0
  89. package/lib/src/metadata-builder/models.js +2 -0
  90. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +1 -0
  91. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +4 -0
  92. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +14 -2
  93. package/lib/src/shared/color-strategies/color-strategies.js +4 -0
  94. package/lib/src/shared/color-strategies/rte-field-pairs.d.ts +12 -0
  95. package/lib/src/shared/color-strategies/rte-field-pairs.js +10 -0
  96. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +1 -1
  97. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +10 -0
  98. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +11 -1
  99. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +10 -0
  100. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +10 -0
  101. package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +1 -1
  102. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +10 -0
  103. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.d.ts +14 -1
  104. package/lib/src/shared/content-settings/components/items-field/ItemsField.mixin.js +11 -1
  105. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +21 -0
  106. package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +1 -1
  107. package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +1 -1
  108. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +13 -1
  109. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.js +5 -0
  110. package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +1 -1
  111. package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +1 -1
  112. package/lib/src/shared/content-settings/models.d.ts +6 -0
  113. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +14 -1
  114. package/lib/src/shared/content-settings/store/content-settings-store.js +24 -2
  115. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +21 -0
  116. package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
  117. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +31 -0
  118. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +31 -0
  119. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +28 -0
  120. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +21 -0
  121. package/lib/src/shared/style-settings/button-style-preset.d.ts +12 -0
  122. package/lib/src/shared/style-settings/button-style-preset.js +39 -0
  123. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +21 -0
  124. package/lib/src/shared/style-settings/store/style-settings-store.js +6 -32
  125. package/lib/src/utils/minify-brand-page-metadata.d.ts +9 -0
  126. package/lib/src/utils/minify-brand-page-metadata.js +23 -1
  127. package/package.json +2 -13
  128. package/src/brand-page/components/faq-section/FaqSection.test.ts +354 -0
  129. package/src/brand-page/components/faq-section/FaqSection.vue +335 -0
  130. package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.vue +1 -0
  131. package/src/brand-page/components/page/PageComponent.vue +2 -0
  132. package/src/brand-page/constants/misc.constants.ts +12 -0
  133. package/src/brand-page/constants/styles.constants.ts +2 -0
  134. package/src/brand-page/models/brand-page-context.model.ts +14 -1
  135. package/src/brand-page/models/content.model.ts +1 -0
  136. package/src/brand-page/models/index.ts +24 -0
  137. package/src/brand-page/utils/content-callback-util.ts +5 -0
  138. package/src/brand-page/utils/view-model.util.test.ts +112 -0
  139. package/src/brand-page/utils/view-model.util.ts +48 -0
  140. package/src/brand-page/view-models.ts +12 -1
  141. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +1 -1
  142. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.test.ts +165 -0
  143. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +17 -49
  144. package/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.test.ts +82 -0
  145. package/src/brand-page-maker/composables/ai-chat/ai-builder-experiment.ts +19 -0
  146. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +18 -4
  147. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +103 -49
  148. package/src/brand-page-maker/constants/config-settings-constant.ts +104 -1
  149. package/src/brand-page-maker/constants/faq-section-config.test.ts +59 -0
  150. package/src/brand-page-maker/convertors/faq-display-style.convertor.ts +59 -0
  151. package/src/brand-page-maker/convertors/i18n/converter.json +4 -1
  152. package/src/brand-page-maker/models/content-settings-configs.ts +1 -0
  153. package/src/brand-page-maker/models/content-settings.ts +59 -0
  154. package/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.ts +30 -0
  155. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +2 -0
  156. package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +3820 -300
  157. package/src/brand-page-maker/utils/apply-color-strategy.test.ts +123 -2
  158. package/src/brand-page-maker/utils/apply-color-strategy.ts +73 -19
  159. package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +110 -0
  160. package/src/brand-page-maker/utils/rich-text-editor.util.ts +66 -0
  161. package/src/brand-page-maker/validators/field.validator.ts +2 -0
  162. package/src/bundles/bundled-translations.json +20 -2
  163. package/src/clients/ai-assistant-client.ts +1 -0
  164. package/src/composables/useTranslate.ts +2 -1
  165. package/src/metadata-builder/builders/global-font-propagation.test.ts +401 -0
  166. package/src/metadata-builder/builders/global-font-propagation.ts +238 -0
  167. package/src/metadata-builder/builders/global-styles-builder.test.ts +107 -0
  168. package/src/metadata-builder/builders/global-styles-builder.ts +38 -1
  169. package/src/metadata-builder/builders/header-builder.test.ts +45 -0
  170. package/src/metadata-builder/builders/header-builder.ts +20 -0
  171. package/src/metadata-builder/builders/item-id-utils.test.ts +24 -0
  172. package/src/metadata-builder/builders/section-builders/index.ts +1 -0
  173. package/src/metadata-builder/builders/section-builders/support-me-builder.test.ts +177 -0
  174. package/src/metadata-builder/builders/section-builders/support-me-builder.ts +43 -0
  175. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +5 -2
  176. package/src/metadata-builder/builders/section-field-maps.ts +18 -0
  177. package/src/metadata-builder/builders/section-field-utils.test.ts +83 -0
  178. package/src/metadata-builder/builders/section-field-utils.ts +69 -18
  179. package/src/metadata-builder/builders/section-rules/support-me.rules.ts +39 -0
  180. package/src/metadata-builder/helpers/rte.helpers.ts +82 -1
  181. package/src/metadata-builder/metadata-executor.ts +3 -0
  182. package/src/metadata-builder/models.ts +2 -0
  183. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +4 -0
  184. package/src/metadata-builder/parsers/section-tool-arguments.ts +16 -2
  185. package/src/shared/color-strategies/color-strategies.ts +4 -0
  186. package/src/shared/color-strategies/rte-field-pairs.ts +23 -0
  187. package/src/shared/content-settings/components/color-field/ColorField.test.ts +29 -0
  188. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +17 -1
  189. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +2 -0
  190. package/src/shared/content-settings/components/faq-items-field/FaqItemsField.test.ts +272 -0
  191. package/src/shared/content-settings/components/faq-items-field/FaqItemsField.vue +282 -0
  192. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +1 -0
  193. package/src/shared/content-settings/components/items-field/ItemsField.mixin.ts +11 -1
  194. package/src/shared/content-settings/components/items-field/ItemsField.test.ts +92 -0
  195. package/src/shared/content-settings/components/items-field/ItemsField.vue +8 -2
  196. package/src/shared/content-settings/components/textarea-field/TextareaField.mixin.ts +6 -0
  197. package/src/shared/content-settings/components/textarea-field/TextareaField.vue +1 -0
  198. package/src/shared/content-settings/models.ts +7 -0
  199. package/src/shared/content-settings/store/content-settings-store.test.ts +49 -0
  200. package/src/shared/content-settings/store/content-settings-store.ts +37 -3
  201. package/src/shared/style-settings/button-style-preset.test.ts +67 -0
  202. package/src/shared/style-settings/button-style-preset.ts +56 -0
  203. package/src/shared/style-settings/store/style-settings-store.ts +9 -38
  204. package/src/utils/minify-brand-page-metadata.test.ts +201 -1
  205. package/src/utils/minify-brand-page-metadata.ts +31 -1
  206. package/lib/src/bundled-translations-BYUfWBT3.js +0 -179
@@ -94,6 +94,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
94
94
  isVariation: boolean;
95
95
  isExcluded: boolean;
96
96
  } | undefined;
97
+ bp_6136_v2_ai_builder?: {
98
+ key: string;
99
+ value: string;
100
+ isControl: boolean;
101
+ isVariation: boolean;
102
+ isExcluded: boolean;
103
+ } | undefined;
97
104
  };
98
105
  isSubsequentPublish: boolean;
99
106
  isContextualUpgradeModalVisible: boolean;
@@ -169,6 +176,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
169
176
  isVariation: boolean;
170
177
  isExcluded: boolean;
171
178
  } | undefined;
179
+ bp_6136_v2_ai_builder?: {
180
+ key: string;
181
+ value: string;
182
+ isControl: boolean;
183
+ isVariation: boolean;
184
+ isExcluded: boolean;
185
+ } | undefined;
172
186
  };
173
187
  isSubsequentPublish: boolean;
174
188
  isContextualUpgradeModalVisible: boolean;
@@ -244,6 +258,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
244
258
  isVariation: boolean;
245
259
  isExcluded: boolean;
246
260
  } | undefined;
261
+ bp_6136_v2_ai_builder?: {
262
+ key: string;
263
+ value: string;
264
+ isControl: boolean;
265
+ isVariation: boolean;
266
+ isExcluded: boolean;
267
+ } | undefined;
247
268
  };
248
269
  isSubsequentPublish: boolean;
249
270
  isContextualUpgradeModalVisible: boolean;
@@ -554,9 +575,9 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
554
575
  }>> & Readonly<{
555
576
  "onUpdate-settings"?: ((...args: any[]) => any) | undefined;
556
577
  }>, {
557
- brandPageType: string;
558
578
  pageTitle: string;
559
579
  designDraftToken: string;
580
+ brandPageType: string;
560
581
  pageDescription: string;
561
582
  isMaker: boolean;
562
583
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -99,6 +99,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
99
99
  isVariation: boolean;
100
100
  isExcluded: boolean;
101
101
  } | undefined;
102
+ bp_6136_v2_ai_builder?: {
103
+ key: string;
104
+ value: string;
105
+ isControl: boolean;
106
+ isVariation: boolean;
107
+ isExcluded: boolean;
108
+ } | undefined;
102
109
  };
103
110
  isSubsequentPublish: boolean;
104
111
  isContextualUpgradeModalVisible: boolean;
@@ -174,6 +181,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
174
181
  isVariation: boolean;
175
182
  isExcluded: boolean;
176
183
  } | undefined;
184
+ bp_6136_v2_ai_builder?: {
185
+ key: string;
186
+ value: string;
187
+ isControl: boolean;
188
+ isVariation: boolean;
189
+ isExcluded: boolean;
190
+ } | undefined;
177
191
  };
178
192
  isSubsequentPublish: boolean;
179
193
  isContextualUpgradeModalVisible: boolean;
@@ -249,6 +263,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
249
263
  isVariation: boolean;
250
264
  isExcluded: boolean;
251
265
  } | undefined;
266
+ bp_6136_v2_ai_builder?: {
267
+ key: string;
268
+ value: string;
269
+ isControl: boolean;
270
+ isVariation: boolean;
271
+ isExcluded: boolean;
272
+ } | undefined;
252
273
  };
253
274
  isSubsequentPublish: boolean;
254
275
  isContextualUpgradeModalVisible: boolean;
@@ -80,6 +80,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
80
80
  isVariation: boolean;
81
81
  isExcluded: boolean;
82
82
  } | undefined;
83
+ bp_6136_v2_ai_builder?: {
84
+ key: string;
85
+ value: string;
86
+ isControl: boolean;
87
+ isVariation: boolean;
88
+ isExcluded: boolean;
89
+ } | undefined;
83
90
  };
84
91
  isSubsequentPublish: boolean;
85
92
  isContextualUpgradeModalVisible: boolean;
@@ -155,6 +162,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
155
162
  isVariation: boolean;
156
163
  isExcluded: boolean;
157
164
  } | undefined;
165
+ bp_6136_v2_ai_builder?: {
166
+ key: string;
167
+ value: string;
168
+ isControl: boolean;
169
+ isVariation: boolean;
170
+ isExcluded: boolean;
171
+ } | undefined;
158
172
  };
159
173
  isSubsequentPublish: boolean;
160
174
  isContextualUpgradeModalVisible: boolean;
@@ -230,6 +244,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
230
244
  isVariation: boolean;
231
245
  isExcluded: boolean;
232
246
  } | undefined;
247
+ bp_6136_v2_ai_builder?: {
248
+ key: string;
249
+ value: string;
250
+ isControl: boolean;
251
+ isVariation: boolean;
252
+ isExcluded: boolean;
253
+ } | undefined;
233
254
  };
234
255
  isSubsequentPublish: boolean;
235
256
  isContextualUpgradeModalVisible: boolean;
@@ -148,6 +148,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
148
148
  isVariation: boolean;
149
149
  isExcluded: boolean;
150
150
  } | undefined;
151
+ bp_6136_v2_ai_builder?: {
152
+ key: string;
153
+ value: string;
154
+ isControl: boolean;
155
+ isVariation: boolean;
156
+ isExcluded: boolean;
157
+ } | undefined;
151
158
  };
152
159
  isSubsequentPublish: boolean;
153
160
  isContextualUpgradeModalVisible: boolean;
@@ -223,6 +230,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
223
230
  isVariation: boolean;
224
231
  isExcluded: boolean;
225
232
  } | undefined;
233
+ bp_6136_v2_ai_builder?: {
234
+ key: string;
235
+ value: string;
236
+ isControl: boolean;
237
+ isVariation: boolean;
238
+ isExcluded: boolean;
239
+ } | undefined;
226
240
  };
227
241
  isSubsequentPublish: boolean;
228
242
  isContextualUpgradeModalVisible: boolean;
@@ -298,6 +312,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
298
312
  isVariation: boolean;
299
313
  isExcluded: boolean;
300
314
  } | undefined;
315
+ bp_6136_v2_ai_builder?: {
316
+ key: string;
317
+ value: string;
318
+ isControl: boolean;
319
+ isVariation: boolean;
320
+ isExcluded: boolean;
321
+ } | undefined;
301
322
  };
302
323
  isSubsequentPublish: boolean;
303
324
  isContextualUpgradeModalVisible: boolean;
@@ -75,6 +75,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
75
75
  isVariation: boolean;
76
76
  isExcluded: boolean;
77
77
  } | undefined;
78
+ bp_6136_v2_ai_builder?: {
79
+ key: string;
80
+ value: string;
81
+ isControl: boolean;
82
+ isVariation: boolean;
83
+ isExcluded: boolean;
84
+ } | undefined;
78
85
  };
79
86
  isSubsequentPublish: boolean;
80
87
  isContextualUpgradeModalVisible: boolean;
@@ -150,6 +157,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
150
157
  isVariation: boolean;
151
158
  isExcluded: boolean;
152
159
  } | undefined;
160
+ bp_6136_v2_ai_builder?: {
161
+ key: string;
162
+ value: string;
163
+ isControl: boolean;
164
+ isVariation: boolean;
165
+ isExcluded: boolean;
166
+ } | undefined;
153
167
  };
154
168
  isSubsequentPublish: boolean;
155
169
  isContextualUpgradeModalVisible: boolean;
@@ -225,6 +239,13 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
225
239
  isVariation: boolean;
226
240
  isExcluded: boolean;
227
241
  } | undefined;
242
+ bp_6136_v2_ai_builder?: {
243
+ key: string;
244
+ value: string;
245
+ isControl: boolean;
246
+ isVariation: boolean;
247
+ isExcluded: boolean;
248
+ } | undefined;
228
249
  };
229
250
  isSubsequentPublish: boolean;
230
251
  isContextualUpgradeModalVisible: boolean;
@@ -0,0 +1,10 @@
1
+ import type { AbTestResult } from '../../../brand-page/models/brand-page-context.model';
2
+ import { type AiAssistantAgentType } from '../../../clients/ai-assistant-client';
3
+ /**
4
+ * A/B test: control keeps the V1 AI website builder, variation-1 gets V2.
5
+ *
6
+ * bc-net (WebsiteMakerInteractor) buckets post-purchase users who get the AI tab at
7
+ * editor load and sends the arm in `abTests`. No arm, control and excluded all stay
8
+ * on V1, so a missing value is today's production behaviour.
9
+ */
10
+ export declare const aiBuilderAgentTypeForArm: (arm: AbTestResult | undefined) => AiAssistantAgentType;
@@ -0,0 +1,11 @@
1
+ import { AI_ASSISTANT_AGENT_TYPES, } from '../../../clients/ai-assistant-client';
2
+ /**
3
+ * A/B test: control keeps the V1 AI website builder, variation-1 gets V2.
4
+ *
5
+ * bc-net (WebsiteMakerInteractor) buckets post-purchase users who get the AI tab at
6
+ * editor load and sends the arm in `abTests`. No arm, control and excluded all stay
7
+ * on V1, so a missing value is today's production behaviour.
8
+ */
9
+ export const aiBuilderAgentTypeForArm = (arm) => arm?.isVariation
10
+ ? AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER_V2
11
+ : AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER;
@@ -1,6 +1,6 @@
1
1
  import { ref, computed, watch, nextTick } from 'vue';
2
2
  import { getCurrentLocale } from '../../../composables/useTranslate';
3
- import { getInstance as getAiAssistantClient, AI_ASSISTANT_AGENT_TYPES, } from '../../../clients/ai-assistant-client';
3
+ import { getInstance as getAiAssistantClient, } from '../../../clients/ai-assistant-client';
4
4
  import { FabricRenderClient } from '../../../clients/fabric-render-client';
5
5
  import { parseLogoThemeToCssStyles } from '../../../brand-page/utils/style.util';
6
6
  import { AI_ASSISTANT_TOOL_NAMES } from '../../../metadata-builder/parsers/ai-toolcall-parser';
@@ -19,6 +19,7 @@ import { useHistoryStore } from '../../stores/history/history-store';
19
19
  import { useUndoRedoFlag } from '../useUndoRedoFlag';
20
20
  import { useBrandPageMakerUserStore } from '../../stores/user/user-store';
21
21
  import { useAiMetadataBuilder } from './useAiMetadataBuilder';
22
+ import { aiBuilderAgentTypeForArm } from './ai-builder-experiment';
22
23
  import { pickErrorMessage, pickWsErrorMessage, buildSubmitErrorReport, } from './aiErrorCopy';
23
24
  import raygunUtil from '../../../brand-page/utils/raygun.util';
24
25
  import { useEventTracker, AI_CTA_LOCATIONS } from '../useEventTracker';
@@ -361,13 +362,18 @@ export function useAiWebsiteBuilderChat() {
361
362
  const userPlan = userStore.hasPremiumSubscription
362
363
  ? 'premium'
363
364
  : 'free';
365
+ if (!aiThreadStore.threadId) {
366
+ // The A/B arm bc-net bucketed at editor load decides which builder owns the
367
+ // new thread; the message and tool-result calls below reuse it.
368
+ aiThreadStore.setAgentType(aiBuilderAgentTypeForArm(containerStore.abTests.bp_6136_v2_ai_builder));
369
+ }
364
370
  let buildResponse;
365
371
  if (!aiThreadStore.threadId) {
366
372
  buildResponse = await client.createWebsiteThreadBuildAsync({
367
373
  message,
368
374
  websiteContext,
369
375
  websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
370
- agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
376
+ agentType: aiThreadStore.agentType,
371
377
  userPlan,
372
378
  connectionId,
373
379
  ...buildAttributionFields(),
@@ -378,7 +384,7 @@ export function useAiWebsiteBuilderChat() {
378
384
  message,
379
385
  websiteContext,
380
386
  websiteSnapshot: snapshotStore.snapshotBase64 || undefined,
381
- agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
387
+ agentType: aiThreadStore.agentType,
382
388
  userPlan,
383
389
  connectionId,
384
390
  ...buildAttributionFields(),
@@ -524,9 +530,13 @@ export function useAiWebsiteBuilderChat() {
524
530
  failedResults,
525
531
  retryCount,
526
532
  });
533
+ // Tool submissions must go to the SAME agent that ran the thread
534
+ // (AI QA 2026-07-05 T19: a mismatched agentType routes tool results
535
+ // to a service with no state for the thread and fails the build).
536
+ // The thread store holds this thread's agent (A/B arm: V1 control, V2 variation-1).
527
537
  const submitResult = await client.submitToolResultsBuildAsync(aiThreadStore.threadId, {
528
538
  toolCalls: toolResults,
529
- agentType: AI_ASSISTANT_AGENT_TYPES.WEBSITE_BUILDER,
539
+ agentType: aiThreadStore.agentType,
530
540
  connectionId,
531
541
  retryCount,
532
542
  userPlan,
@@ -4,6 +4,8 @@ import type { StyleTextFontFamilyOption } from '@shared/style-settings/models';
4
4
  import type { HyperlinkType, TextStyleOption } from '@brand-page';
5
5
  import { type TextItem, type TextStyleDeclaration } from '@brand-page';
6
6
  import type { ButtonGroupOption } from '@brand-page-maker/models/button-group.model';
7
+ import { useUiContentSettingsStore } from '@shared/content-settings/store';
8
+ import type { RteItemStyleTarget } from '@shared/content-settings/models';
7
9
  interface UseRichTextEditorReturn {
8
10
  editor: Editor;
9
11
  onFocus: () => void;
@@ -55,6 +57,16 @@ interface EditorOptionType {
55
57
  export declare const useExternalRichTextEditor: () => {
56
58
  externalEditor: Editor;
57
59
  };
60
+ /**
61
+ * Where an editor's toolbar styles land: its list item's own style (`itemStyleTarget`),
62
+ * a Text block item, or the section's `${name}Style`.
63
+ */
64
+ export declare const writeEditorStyles: (store: ReturnType<typeof useUiContentSettingsStore>, props: {
65
+ rawId: string;
66
+ name: string;
67
+ textItemIndex: number;
68
+ itemStyleTarget?: RteItemStyleTarget;
69
+ }, value: TextStyleDeclaration, isHydrationWrite?: boolean) => void;
58
70
  export declare const useRichTextEditor: (model: ModelRef<any>, props: {
59
71
  id: string;
60
72
  name: string;
@@ -66,6 +78,7 @@ export declare const useRichTextEditor: (model: ModelRef<any>, props: {
66
78
  textItemIndex: number;
67
79
  item: TextItem;
68
80
  contentType: string;
81
+ itemStyleTarget?: RteItemStyleTarget;
69
82
  }, emit: (event: "focus" | "blur" | "update:modelValue", ...args: any[]) => void, fontSettings: {
70
83
  selectedTextStyle: string;
71
84
  selectedFont: string;
@@ -24,6 +24,34 @@ export const useExternalRichTextEditor = () => {
24
24
  externalEditor,
25
25
  };
26
26
  };
27
+ /**
28
+ * Where an editor's toolbar styles land: its list item's own style (`itemStyleTarget`),
29
+ * a Text block item, or the section's `${name}Style`.
30
+ */
31
+ export const writeEditorStyles = (store, props, value, isHydrationWrite) => {
32
+ const { rawId: id, name } = props;
33
+ if (props.itemStyleTarget) {
34
+ store.updateListItemTextStyles({
35
+ id,
36
+ name,
37
+ value,
38
+ target: props.itemStyleTarget,
39
+ isHydrationWrite,
40
+ });
41
+ }
42
+ else if (name === 'textItems') {
43
+ store.updateTextItemTextStyleTypeWithStyles({
44
+ id,
45
+ name,
46
+ value,
47
+ index: props.textItemIndex,
48
+ isHydrationWrite,
49
+ });
50
+ }
51
+ else {
52
+ store.updateTextStyles({ id, name, value, isHydrationWrite });
53
+ }
54
+ };
27
55
  export const useRichTextEditor = (model, props, emit, fontSettings, fontStyleDropdownRef,
28
56
  // One entry of `textStyleOptions`; `undefined` when the selection is "none".
29
57
  selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyleTypeOptions, markedText, isHyperlinkPopupOpen, selectedLinkTypeValue) => {
@@ -204,6 +232,21 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
204
232
  });
205
233
  }
206
234
  });
235
+ // Set while a toolbar command runs. The toolbar has taken focus by then, so
236
+ // `isFocused` alone would tag the command's write as hydration and fold it into
237
+ // the previous undo entry — hidden only when a style write rides along and opens
238
+ // an entry of its own. Synchronous commands only: the spacing sliders dispatch
239
+ // after a debounce and are not covered.
240
+ let isRunningToolbarCommand = false;
241
+ const runAsToolbarCommand = (command) => {
242
+ isRunningToolbarCommand = true;
243
+ try {
244
+ return command();
245
+ }
246
+ finally {
247
+ isRunningToolbarCommand = false;
248
+ }
249
+ };
207
250
  // Update model when editor content changes. RTE content is stored as Tiptap
208
251
  // JSON (BP-5787). getJSON() is already in hand (the editor holds the doc) and
209
252
  // is sanitised natively — no getHTML(), no DOMPurify, no extra editor — so
@@ -217,15 +260,9 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
217
260
  // field → store chain and arms the history merge at the moment of the
218
261
  // store write — arming here at emit time would lapse before the
219
262
  // debounce fires. Genuine edits happen while focused and commit
220
- // normally.
221
- //
222
- // Known limitation: a programmatic toolbar command run on an editor the
223
- // user hasn't focused yet would also merge (losing that undo step). Today
224
- // the RTE only mounts inside an already-open settings drawer and the user
225
- // focuses it before formatting, so this doesn't occur — revisit if a
226
- // consumer ever drives toolbar actions on an unfocused editor.
263
+ // normally, and so do synchronous toolbar commands (isRunningToolbarCommand).
227
264
  emit('update:modelValue', sanitizeRteJson(editor.getJSON()), {
228
- isHydrationWrite: !editor.isFocused,
265
+ isHydrationWrite: !editor.isFocused && !isRunningToolbarCommand,
229
266
  });
230
267
  });
231
268
  editor.on('selectionUpdate', () => {
@@ -303,26 +340,34 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
303
340
  // write lands ~100ms BEFORE the editor's canonical text write-back, and
304
341
  // an unflagged write here would open a plain capture burst that
305
342
  // swallows the flagged text write into a phantom entry (BP-5810).
306
- contentSettingStore.updateTextStyles({
307
- id: props.rawId,
308
- name: props.name,
309
- value: {
310
- fontSize: globalStyles.fontSize,
311
- fontFamily: globalStyles.fontFamily,
312
- fontWeight: globalStyles.fontWeight,
313
- fontStyle: globalStyles.fontStyle,
314
- textDecoration: globalStyles.textDecoration,
315
- // Keep an element colour override (a creation-time contrast bake, or a
316
- // colour picked while linked) — only fall back to the global style's colour
317
- // when the element has none, mirroring `resolveTextColor`'s element-first
318
- // cascade. Blindly taking `globalStyles.color` here re-derived the linked
319
- // colour on every RTE mount and clobbered the override.
320
- color: props.styles?.color || globalStyles.color,
321
- lineHeight: globalStyles.lineHeight,
322
- letterSpacing: globalStyles.letterSpacing,
323
- },
324
- isHydrationWrite: !editor.isFocused,
325
- });
343
+ const syncedStyles = {
344
+ fontSize: globalStyles.fontSize,
345
+ fontFamily: globalStyles.fontFamily,
346
+ fontWeight: globalStyles.fontWeight,
347
+ fontStyle: globalStyles.fontStyle,
348
+ textDecoration: globalStyles.textDecoration,
349
+ // Keep an element colour override (a creation-time contrast bake, or a
350
+ // colour picked while linked) — only fall back to the global style's colour
351
+ // when the element has none, mirroring `resolveTextColor`'s element-first
352
+ // cascade. Blindly taking `globalStyles.color` here re-derived the linked
353
+ // colour on every RTE mount and clobbered the override.
354
+ color: props.styles?.color || globalStyles.color,
355
+ lineHeight: globalStyles.lineHeight,
356
+ letterSpacing: globalStyles.letterSpacing,
357
+ };
358
+ const isHydrationWrite = !editor.isFocused;
359
+ // A Text block item's mount sync still writes the section's `textItemsStyle`.
360
+ if (props.itemStyleTarget) {
361
+ writeEditorStyles(contentSettingStore, props, syncedStyles, isHydrationWrite);
362
+ }
363
+ else {
364
+ contentSettingStore.updateTextStyles({
365
+ id: props.rawId,
366
+ name: props.name,
367
+ value: syncedStyles,
368
+ isHydrationWrite,
369
+ });
370
+ }
326
371
  // sync toolbar editor styles
327
372
  fontSettings.selectedFont = globalStyles?.fontFamily ?? 'Lato';
328
373
  fontSettings.selectedFontSize = globalStyles?.fontSize ?? '2.25em';
@@ -476,26 +521,9 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
476
521
  syncContentSettings(fontStyleChanges);
477
522
  };
478
523
  const syncContentSettings = (fontStyleChanges) => {
479
- if (props.name === 'textItems') {
480
- contentSettingStore.updateTextItemTextStyleTypeWithStyles({
481
- id: props.rawId,
482
- name: props.name,
483
- value: {
484
- ...fontStyleChanges,
485
- fontSize: fontSettings.selectedFontSize,
486
- },
487
- index: props.textItemIndex,
488
- });
489
- }
490
- else {
491
- contentSettingStore.updateTextStyles({
492
- id: props.rawId,
493
- name: props.name,
494
- value: {
495
- ...fontStyleChanges,
496
- },
497
- });
498
- }
524
+ writeEditorStyles(contentSettingStore, props, props.name === 'textItems'
525
+ ? { ...fontStyleChanges, fontSize: fontSettings.selectedFontSize }
526
+ : { ...fontStyleChanges });
499
527
  };
500
528
  const onFocus = () => {
501
529
  emit('focus');
@@ -584,7 +612,7 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
584
612
  editor,
585
613
  onFocus,
586
614
  onBlur,
587
- triggerEditorStyleChange,
615
+ triggerEditorStyleChange: (editorOption) => runAsToolbarCommand(() => triggerEditorStyleChange(editorOption)),
588
616
  toggleBold,
589
617
  toggleItalic,
590
618
  toggleUnderline,
@@ -601,7 +629,7 @@ selectedGlobalTextStyles, onSelectTextStyleType, updateRichTextEditor, textStyle
601
629
  setInitialStyleSettings,
602
630
  copyGlobalStyleSettings,
603
631
  unsetAllMarks,
604
- handleHyperlink,
632
+ handleHyperlink: (...args) => runAsToolbarCommand(() => handleHyperlink(...args)),
605
633
  hyperlinkValue,
606
634
  setHyperlinkUrlValue,
607
635
  shouldShow,
@@ -1,4 +1,4 @@
1
- import type { LogoContent, FacebookContent, GeneralLinkContent, PhoneContent, EmailContent, ImageContent, InstagramContent, LinkedInContent, PinterestContent, ProfileContent, TextContent, TiktokContent, TwitchContent, XContent, VideoContent, WebsiteContent, YoutubeContent, ContentType, MapContent, ImageGalleryContent, MailingListContent, RequestPaymentContent, SupportMeContent, ContactFormContent, BannerSectionContent, SocialLinksContent, ImagesSectionContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ShopContent, BookingSectionContent } from '@brand-page';
1
+ import type { LogoContent, FacebookContent, GeneralLinkContent, PhoneContent, EmailContent, ImageContent, InstagramContent, LinkedInContent, PinterestContent, ProfileContent, TextContent, TiktokContent, TwitchContent, XContent, VideoContent, WebsiteContent, YoutubeContent, ContentType, MapContent, ImageGalleryContent, MailingListContent, RequestPaymentContent, SupportMeContent, ContactFormContent, BannerSectionContent, SocialLinksContent, ImagesSectionContent, TestimonialSectionContent, AboutSectionContent, DividerSectionContent, ShapesSectionContent, ShopContent, BookingSectionContent, FaqSectionContent } from '@brand-page';
2
2
  import type { ContentSettingsConfig, ContentSettingsField, ContentSettingsMultiField } from '../models';
3
3
  export declare const LOGO_SETTINGS_CONFIG: () => ContentSettingsConfig<Omit<LogoContent, "version" | "logoVariation" | "logoImageHeight" | "logoImageWidth" | "logoLastUpdate" | "logoImageBase64Url">>;
4
4
  export declare const GENERAL_LINK_CONTENT_SETTINGS_CONFIG: () => ContentSettingsConfig<GeneralLinkContent>;
@@ -51,4 +51,5 @@ export declare const SHOP_SECTION_SETTINGS_CONFIG: () => ContentSettingsConfig<S
51
51
  isShippingEnabled: boolean;
52
52
  }>;
53
53
  export declare const BOOKING_SECTION_SETTINGS_CONFIG: () => ContentSettingsConfig<BookingSectionContent>;
54
+ export declare const FAQ_SECTION_SETTINGS_CONFIG: () => ContentSettingsConfig<FaqSectionContent>;
54
55
  export declare const CONTENT_SETTINGS_CONFIGS: () => Record<ContentType, ContentSettingsConfig<any>>;