@designcrowd/library.brand-page 5.17.28 → 5.18.0

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 (380) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-CJZpKPNH.js → CreatedOnBrandCrowd-de-de-xmkupPus.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DkIa7iEb.js → CreatedOnBrandCrowd-en-us-Ck7EdTtb.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CE2p6XHz.js → CreatedOnBrandCrowd-es-es-BC8sJuDH.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-BBjOZS3M.js → CreatedOnBrandCrowd-fr-ca-CN-UBe1q.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-BBjOZS3M.js → CreatedOnBrandCrowd-fr-fr-CN-UBe1q.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Dayzl4BZ.js → CreatedOnBrandCrowd-pt-br-CajQyNkx.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Dayzl4BZ.js → CreatedOnBrandCrowd-pt-pt-CajQyNkx.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-CFzDqfCb.js → CreatedOnDcom-de-de-BRCNMmDq.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-C2jIPBDY.js → CreatedOnDcom-en-us-BzQDtZhc.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-qejpzqho.js → CreatedOnDcom-es-es-D-qAM4Cd.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DMO9Ld7K.js → CreatedOnDcom-fr-ca-CZ1irFOc.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-BFWN9qTP.js → CreatedOnDcom-fr-fr-Gb5BCF0N.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-CneD3ghF.js → CreatedOnDcom-pt-br-CAQV0q6o.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-Cg1B7s0o.js → CreatedOnDcom-pt-pt-D6tQdQFh.js} +1 -1
  15. package/lib/src/brand-page/components/image-gallery/ImageGalleryModal.mixin.js +2 -2
  16. package/lib/src/brand-page/models/brand-page-context.model.d.ts +0 -2
  17. package/lib/src/brand-page/models/brand-page-context.model.js +1 -11
  18. package/lib/src/brand-page/models/index.d.ts +1 -0
  19. package/lib/src/brand-page/models/index.js +1 -0
  20. package/lib/src/brand-page/utils/color.util.js +23 -3
  21. package/lib/src/brand-page/utils/raygun.util.d.ts +5 -1
  22. package/lib/src/brand-page/utils/raygun.util.js +7 -2
  23. package/lib/src/brand-page/utils/svg-color.util.js +1 -2
  24. package/lib/src/brand-page/utils/view-model.util.js +1 -1
  25. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +1 -31
  26. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.js +0 -2
  27. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +2 -31
  28. package/lib/src/brand-page-maker/components/preview/Preview.mixin.d.ts +0 -14
  29. package/lib/src/brand-page-maker/components/quick-link-bar/QuickLinkBar.mixin.d.ts +0 -28
  30. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +0 -28
  31. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +0 -28
  32. package/lib/src/brand-page-maker/components/seo-settings/UseExistingDomainModal.mixin.d.ts +0 -28
  33. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +0 -28
  34. package/lib/src/brand-page-maker/components/upgrade-to-premium-button/UpgradeToPremiumButton.mixin.d.ts +0 -28
  35. package/lib/src/brand-page-maker/composables/ai-chat/aiErrorCopy.d.ts +35 -0
  36. package/lib/src/brand-page-maker/composables/ai-chat/aiErrorCopy.js +108 -0
  37. package/lib/src/brand-page-maker/composables/ai-chat/{useAiChat.d.ts → types.d.ts} +5 -13
  38. package/lib/src/brand-page-maker/composables/ai-chat/types.js +1 -0
  39. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +19 -0
  40. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +1 -0
  41. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.d.ts +1 -1
  42. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +488 -82
  43. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +5 -5
  44. package/lib/src/brand-page-maker/composables/useEventTracker.d.ts +6 -16
  45. package/lib/src/brand-page-maker/composables/useEventTracker.js +19 -21
  46. package/lib/src/brand-page-maker/constants/sidebar-constant.d.ts +0 -1
  47. package/lib/src/brand-page-maker/constants/sidebar-constant.js +7 -15
  48. package/lib/src/brand-page-maker/convertors/image-aspect-ratio.convertor.js +2 -2
  49. package/lib/src/brand-page-maker/convertors/text-size-value.convertor.js +3 -1
  50. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +30660 -0
  51. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.js +34 -0
  52. package/lib/src/brand-page-maker/stores/ai-thread/ai-website-builder-thread-store.d.ts +1 -1
  53. package/lib/src/brand-page-maker/stores/brandpage-container/brand-page-container-store.d.ts +0 -28
  54. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +42 -2
  55. package/lib/src/brand-page-maker/stores/index.d.ts +1 -1
  56. package/lib/src/brand-page-maker/stores/index.js +1 -1
  57. package/lib/src/brand-page-maker/stores/user/user-store.js +0 -1
  58. package/lib/src/bundled-translations-CnareLWC.js +175 -0
  59. package/lib/src/bundled-translations.de-DE-2Ys7epLO.js +175 -0
  60. package/lib/src/bundled-translations.es-ES-Cjp-G8rT.js +175 -0
  61. package/lib/src/bundled-translations.fr-CA-CsaW4Oae.js +175 -0
  62. package/lib/src/bundled-translations.fr-FR-DIT2dd8J.js +175 -0
  63. package/lib/src/bundled-translations.pt-BR-BamoBpDW.js +175 -0
  64. package/lib/src/bundled-translations.pt-PT-C9A4hY_e.js +175 -0
  65. package/lib/src/bundles/bundled-translations.de-DE.json +1 -20
  66. package/lib/src/bundles/bundled-translations.es-ES.json +1 -20
  67. package/lib/src/bundles/bundled-translations.fr-CA.json +1 -20
  68. package/lib/src/bundles/bundled-translations.fr-FR.json +1 -20
  69. package/lib/src/bundles/bundled-translations.json +1 -20
  70. package/lib/src/bundles/bundled-translations.pt-BR.json +1 -20
  71. package/lib/src/bundles/bundled-translations.pt-PT.json +1 -20
  72. package/lib/src/clients/ai-assistant-client.d.ts +30 -29
  73. package/lib/src/clients/ai-assistant-client.js +16 -16
  74. package/lib/src/clients/design-template-client.d.ts +0 -2
  75. package/lib/src/clients/design-template-client.js +0 -38
  76. package/lib/src/clients/websocket-gateway-client.d.ts +9 -1
  77. package/lib/src/composables/useTranslate.d.ts +2 -1
  78. package/lib/src/composables/useTranslate.js +2 -1
  79. package/lib/src/constants/ui.d.ts +0 -1
  80. package/lib/src/css/library.brand-page-brandCrowd.min.css +225 -134
  81. package/lib/src/css/library.brand-page-brandPage.min.css +227 -121
  82. package/lib/src/css/library.brand-page-designCom.min.css +225 -134
  83. package/lib/src/css/library.brand-page-preview.min.css +225 -118
  84. package/lib/src/index.d.ts +1 -1
  85. package/lib/src/index.mjs +1 -1
  86. package/lib/src/{lib-33w_DBny.js → lib-CSRUPpSo.js} +30887 -29395
  87. package/lib/src/metadata-builder/ai-metadata-executor.d.ts +21 -0
  88. package/lib/src/metadata-builder/ai-metadata-executor.js +56 -3
  89. package/lib/src/metadata-builder/builders/add-page-builder.d.ts +2 -4
  90. package/lib/src/metadata-builder/builders/add-page-builder.js +5 -8
  91. package/lib/src/metadata-builder/builders/footer-builder.d.ts +11 -0
  92. package/lib/src/metadata-builder/builders/footer-builder.js +151 -0
  93. package/lib/src/metadata-builder/builders/global-styles-builder.d.ts +15 -0
  94. package/lib/src/metadata-builder/builders/global-styles-builder.js +129 -0
  95. package/lib/src/metadata-builder/builders/header-builder.d.ts +11 -0
  96. package/lib/src/metadata-builder/builders/header-builder.js +167 -0
  97. package/lib/src/metadata-builder/builders/rename-page-builder.d.ts +12 -0
  98. package/lib/src/metadata-builder/builders/rename-page-builder.js +49 -0
  99. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.d.ts +2 -0
  100. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +44 -4
  101. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.d.ts +2 -0
  102. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +70 -6
  103. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.d.ts +36 -4
  104. package/lib/src/metadata-builder/builders/section-builders/base-section-builder.js +102 -12
  105. package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.d.ts +8 -0
  106. package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.js +50 -0
  107. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.d.ts +2 -0
  108. package/lib/src/metadata-builder/builders/section-builders/button-section-builder.js +5 -1
  109. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.d.ts +2 -0
  110. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +47 -3
  111. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.d.ts +2 -1
  112. package/lib/src/metadata-builder/builders/section-builders/delete-section-builder.js +5 -2
  113. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.d.ts +2 -0
  114. package/lib/src/metadata-builder/builders/section-builders/divider-section-builder.js +11 -1
  115. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.d.ts +2 -0
  116. package/lib/src/metadata-builder/builders/section-builders/image-gallery-builder.js +52 -13
  117. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.d.ts +2 -0
  118. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +47 -17
  119. package/lib/src/metadata-builder/builders/section-builders/index.d.ts +1 -0
  120. package/lib/src/metadata-builder/builders/section-builders/index.js +1 -0
  121. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.d.ts +2 -0
  122. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +20 -2
  123. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.d.ts +2 -0
  124. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +20 -2
  125. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.d.ts +2 -0
  126. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +36 -2
  127. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.d.ts +2 -0
  128. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +70 -27
  129. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.d.ts +2 -0
  130. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +7 -2
  131. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.d.ts +2 -0
  132. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +91 -26
  133. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.d.ts +2 -0
  134. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +69 -31
  135. package/lib/src/metadata-builder/builders/section-content-factory.d.ts +2 -2
  136. package/lib/src/metadata-builder/builders/section-content-factory.js +8 -2
  137. package/lib/src/metadata-builder/builders/section-field-maps.js +30 -2
  138. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +46 -7
  139. package/lib/src/metadata-builder/builders/section-field-utils.js +86 -62
  140. package/lib/src/metadata-builder/builders/section-rules/about-section.rules.d.ts +2 -0
  141. package/lib/src/metadata-builder/builders/section-rules/about-section.rules.js +20 -0
  142. package/lib/src/metadata-builder/builders/section-rules/add-page.rules.d.ts +7 -0
  143. package/lib/src/metadata-builder/builders/section-rules/add-page.rules.js +8 -0
  144. package/lib/src/metadata-builder/builders/section-rules/banner-section.rules.d.ts +2 -0
  145. package/lib/src/metadata-builder/builders/section-rules/banner-section.rules.js +27 -0
  146. package/lib/src/metadata-builder/builders/section-rules/booking-section.rules.d.ts +2 -0
  147. package/lib/src/metadata-builder/builders/section-rules/booking-section.rules.js +16 -0
  148. package/lib/src/metadata-builder/builders/section-rules/button-section.rules.d.ts +2 -0
  149. package/lib/src/metadata-builder/builders/section-rules/button-section.rules.js +13 -0
  150. package/lib/src/metadata-builder/builders/section-rules/contact-form.rules.d.ts +2 -0
  151. package/lib/src/metadata-builder/builders/section-rules/contact-form.rules.js +16 -0
  152. package/lib/src/metadata-builder/builders/section-rules/divider-section.rules.d.ts +2 -0
  153. package/lib/src/metadata-builder/builders/section-rules/divider-section.rules.js +7 -0
  154. package/lib/src/metadata-builder/builders/section-rules/footer.rules.d.ts +4 -0
  155. package/lib/src/metadata-builder/builders/section-rules/footer.rules.js +5 -0
  156. package/lib/src/metadata-builder/builders/section-rules/global-styles.rules.d.ts +6 -0
  157. package/lib/src/metadata-builder/builders/section-rules/global-styles.rules.js +26 -0
  158. package/lib/src/metadata-builder/builders/section-rules/header.rules.d.ts +4 -0
  159. package/lib/src/metadata-builder/builders/section-rules/header.rules.js +41 -0
  160. package/lib/src/metadata-builder/builders/section-rules/image-gallery.rules.d.ts +2 -0
  161. package/lib/src/metadata-builder/builders/section-rules/image-gallery.rules.js +10 -0
  162. package/lib/src/metadata-builder/builders/section-rules/images-section.rules.d.ts +2 -0
  163. package/lib/src/metadata-builder/builders/section-rules/images-section.rules.js +31 -0
  164. package/lib/src/metadata-builder/builders/section-rules/mailing-list.rules.d.ts +2 -0
  165. package/lib/src/metadata-builder/builders/section-rules/mailing-list.rules.js +11 -0
  166. package/lib/src/metadata-builder/builders/section-rules/profile.rules.d.ts +2 -0
  167. package/lib/src/metadata-builder/builders/section-rules/profile.rules.js +14 -0
  168. package/lib/src/metadata-builder/builders/section-rules/rename-page.rules.d.ts +7 -0
  169. package/lib/src/metadata-builder/builders/section-rules/rename-page.rules.js +8 -0
  170. package/lib/src/metadata-builder/builders/section-rules/shapes-section.rules.d.ts +2 -0
  171. package/lib/src/metadata-builder/builders/section-rules/shapes-section.rules.js +27 -0
  172. package/lib/src/metadata-builder/builders/section-rules/social-links.rules.d.ts +2 -0
  173. package/lib/src/metadata-builder/builders/section-rules/social-links.rules.js +9 -0
  174. package/lib/src/metadata-builder/builders/section-rules/testimonial-section.rules.d.ts +7 -0
  175. package/lib/src/metadata-builder/builders/section-rules/testimonial-section.rules.js +26 -0
  176. package/lib/src/metadata-builder/builders/section-rules/text-section.rules.d.ts +2 -0
  177. package/lib/src/metadata-builder/builders/section-rules/text-section.rules.js +14 -0
  178. package/lib/src/metadata-builder/builders/shape-color-utils.d.ts +26 -0
  179. package/lib/src/metadata-builder/builders/shape-color-utils.js +52 -0
  180. package/lib/src/metadata-builder/builders/undo-builder.d.ts +48 -0
  181. package/lib/src/metadata-builder/builders/undo-builder.js +58 -0
  182. package/lib/src/metadata-builder/builders/update-content-text-style-builder.js +5 -1
  183. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +15 -4
  184. package/lib/src/metadata-builder/helpers/rte.helpers.js +24 -10
  185. package/lib/src/metadata-builder/metadata-executor.d.ts +2 -1
  186. package/lib/src/metadata-builder/metadata-executor.js +32 -5
  187. package/lib/src/metadata-builder/models.d.ts +26 -1
  188. package/lib/src/metadata-builder/models.js +14 -1
  189. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +144 -0
  190. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +17 -0
  191. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +113 -24
  192. package/lib/src/metadata-builder/parsers/section-tool-arguments.js +5 -1
  193. package/lib/src/metadata-builder/sanitizers/rte-schema-check.d.ts +22 -0
  194. package/lib/src/metadata-builder/sanitizers/rte-schema-check.js +84 -0
  195. package/lib/src/metadata-builder/sanitizers/sanitizer-rules.d.ts +47 -0
  196. package/lib/src/metadata-builder/sanitizers/sanitizer-rules.js +60 -0
  197. package/lib/src/metadata-builder/sanitizers/section-args-validator.d.ts +41 -0
  198. package/lib/src/metadata-builder/sanitizers/section-args-validator.js +274 -0
  199. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +2 -1
  200. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +2 -16
  201. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.stories.js +0 -1
  202. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +2 -1
  203. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +2 -3
  204. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +0 -4
  205. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +6 -8
  206. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +0 -28
  207. package/lib/src/shared/logo-settings/components/EditLogoSettings.mixin.d.ts +2 -1
  208. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +0 -28
  209. package/lib/src/shared/navigation-style-settings/store/index.js +1 -0
  210. package/lib/src/shared/page-navigation/store/page-navigation-store.js +1 -20
  211. package/lib/src/shared/page-navigation/utils/nav-order-utils.d.ts +3 -0
  212. package/lib/src/shared/page-navigation/utils/nav-order-utils.js +20 -0
  213. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +2 -30
  214. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +0 -28
  215. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +2 -43
  216. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +0 -30
  217. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +2 -3
  218. package/lib/src/shared/side-bar/store/side-bar-store.d.ts +0 -12
  219. package/lib/src/shared/side-bar/store/side-bar-store.js +0 -7
  220. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +2 -29
  221. package/lib/src/shared/template-settings/components/TemplatesSettings.mixin.d.ts +2 -1
  222. package/lib/src/utils/build-asset-manifest.d.ts +26 -0
  223. package/lib/src/utils/build-asset-manifest.js +114 -0
  224. package/lib/src/utils/minify-brand-page-metadata.d.ts +49 -1
  225. package/lib/src/utils/minify-brand-page-metadata.js +216 -129
  226. package/package.json +1 -1
  227. package/src/brand-page/components/banner-section/BannerSection.vue +1 -1
  228. package/src/brand-page/components/contact-form/ContactForm.vue +29 -26
  229. package/src/brand-page/components/image-gallery/ImageGalleryModal.mixin.ts +6 -2
  230. package/src/brand-page/components/text-media-section/TextMediaSection.vue +1 -5
  231. package/src/brand-page/models/brand-page-context.model.ts +1 -25
  232. package/src/brand-page/models/index.ts +1 -0
  233. package/src/brand-page/utils/color.util.test.ts +48 -0
  234. package/src/brand-page/utils/color.util.ts +29 -4
  235. package/src/brand-page/utils/raygun.util.ts +11 -2
  236. package/src/brand-page/utils/svg-color.util.ts +1 -3
  237. package/src/brand-page/utils/view-model.util.ts +1 -4
  238. package/src/brand-page-maker/components/ai-text-edit/AiChatbox.vue +2 -2
  239. package/src/brand-page-maker/components/ai-text-edit/AiProgressFeed.vue +162 -0
  240. package/src/brand-page-maker/components/ai-text-edit/TextBubble.vue +57 -5
  241. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.de-DE.json +0 -20
  242. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.es-ES.json +0 -20
  243. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.fr-CA.json +0 -20
  244. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.fr-FR.json +0 -20
  245. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.json +0 -20
  246. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.pt-BR.json +0 -20
  247. package/src/brand-page-maker/components/ai-text-edit/i18n/generate-ai.pt-PT.json +0 -20
  248. package/src/brand-page-maker/components/ai-website-builder/AiWebsiteBuilder.vue +1 -2
  249. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.de-DE.json +3 -0
  250. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.es-ES.json +3 -0
  251. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.fr-CA.json +3 -0
  252. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.fr-FR.json +3 -0
  253. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.json +3 -0
  254. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.pt-BR.json +3 -0
  255. package/src/brand-page-maker/components/ai-website-builder/i18n/ai-website-builder.pt-PT.json +3 -0
  256. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +3 -28
  257. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -2
  258. package/src/brand-page-maker/composables/ai-chat/aiErrorCopy.test.ts +229 -0
  259. package/src/brand-page-maker/composables/ai-chat/aiErrorCopy.ts +164 -0
  260. package/src/brand-page-maker/composables/ai-chat/types.ts +49 -0
  261. package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +20 -0
  262. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +651 -94
  263. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +9 -9
  264. package/src/brand-page-maker/composables/useEventTracker.ts +31 -25
  265. package/src/brand-page-maker/constants/sidebar-constant.ts +7 -15
  266. package/src/brand-page-maker/convertors/image-aspect-ratio.convertor.ts +2 -2
  267. package/src/brand-page-maker/convertors/text-size-value.convertor.ts +3 -3
  268. package/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.ts +54 -0
  269. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +76 -0
  270. package/src/brand-page-maker/stores/index.ts +1 -1
  271. package/src/brand-page-maker/stores/user/user-store.ts +0 -1
  272. package/src/bundles/bundled-translations.de-DE.json +1 -20
  273. package/src/bundles/bundled-translations.es-ES.json +1 -20
  274. package/src/bundles/bundled-translations.fr-CA.json +1 -20
  275. package/src/bundles/bundled-translations.fr-FR.json +1 -20
  276. package/src/bundles/bundled-translations.json +1 -20
  277. package/src/bundles/bundled-translations.pt-BR.json +1 -20
  278. package/src/bundles/bundled-translations.pt-PT.json +1 -20
  279. package/src/clients/ai-assistant-client.ts +59 -46
  280. package/src/clients/design-template-client.ts +0 -66
  281. package/src/clients/websocket-gateway-client.ts +17 -1
  282. package/src/composables/useTranslate.ts +3 -0
  283. package/src/constants/ui.ts +0 -1
  284. package/src/lib.ts +1 -0
  285. package/src/metadata-builder/ai-metadata-executor.ts +94 -1
  286. package/src/metadata-builder/builders/add-page-builder.ts +9 -13
  287. package/src/metadata-builder/builders/footer-builder.test.ts +76 -0
  288. package/src/metadata-builder/builders/footer-builder.ts +226 -0
  289. package/src/metadata-builder/builders/global-styles-builder.ts +187 -0
  290. package/src/metadata-builder/builders/header-builder.test.ts +106 -0
  291. package/src/metadata-builder/builders/header-builder.ts +254 -0
  292. package/src/metadata-builder/builders/rename-page-builder.ts +79 -0
  293. package/src/metadata-builder/builders/section-builders/about-section-builder.ts +73 -5
  294. package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +112 -7
  295. package/src/metadata-builder/builders/section-builders/base-section-builder.ts +149 -11
  296. package/src/metadata-builder/builders/section-builders/booking-section-builder.ts +87 -0
  297. package/src/metadata-builder/builders/section-builders/button-section-builder.ts +6 -1
  298. package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +74 -4
  299. package/src/metadata-builder/builders/section-builders/delete-section-builder.ts +15 -1
  300. package/src/metadata-builder/builders/section-builders/divider-section-builder.ts +13 -1
  301. package/src/metadata-builder/builders/section-builders/image-gallery-builder.ts +91 -31
  302. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +102 -48
  303. package/src/metadata-builder/builders/section-builders/index.ts +1 -0
  304. package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +38 -2
  305. package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +38 -2
  306. package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +55 -3
  307. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +170 -77
  308. package/src/metadata-builder/builders/section-builders/social-links-builder.test.ts +119 -0
  309. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +13 -2
  310. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +178 -57
  311. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +130 -30
  312. package/src/metadata-builder/builders/section-content-factory.ts +15 -2
  313. package/src/metadata-builder/builders/section-field-maps.ts +34 -1
  314. package/src/metadata-builder/builders/section-field-utils.ts +131 -72
  315. package/src/metadata-builder/builders/section-rules/about-section.rules.ts +38 -0
  316. package/src/metadata-builder/builders/section-rules/add-page.rules.ts +17 -0
  317. package/src/metadata-builder/builders/section-rules/banner-section.rules.ts +49 -0
  318. package/src/metadata-builder/builders/section-rules/booking-section.rules.ts +34 -0
  319. package/src/metadata-builder/builders/section-rules/button-section.rules.ts +22 -0
  320. package/src/metadata-builder/builders/section-rules/contact-form.rules.ts +30 -0
  321. package/src/metadata-builder/builders/section-rules/divider-section.rules.ts +17 -0
  322. package/src/metadata-builder/builders/section-rules/footer.rules.ts +21 -0
  323. package/src/metadata-builder/builders/section-rules/global-styles.rules.ts +44 -0
  324. package/src/metadata-builder/builders/section-rules/header.rules.ts +75 -0
  325. package/src/metadata-builder/builders/section-rules/image-gallery.rules.ts +22 -0
  326. package/src/metadata-builder/builders/section-rules/images-section.rules.ts +55 -0
  327. package/src/metadata-builder/builders/section-rules/mailing-list.rules.ts +21 -0
  328. package/src/metadata-builder/builders/section-rules/profile.rules.ts +27 -0
  329. package/src/metadata-builder/builders/section-rules/rename-page.rules.ts +17 -0
  330. package/src/metadata-builder/builders/section-rules/shapes-section.rules.ts +51 -0
  331. package/src/metadata-builder/builders/section-rules/social-links.rules.ts +27 -0
  332. package/src/metadata-builder/builders/section-rules/testimonial-section.rules.ts +48 -0
  333. package/src/metadata-builder/builders/section-rules/text-section.rules.ts +28 -0
  334. package/src/metadata-builder/builders/shape-color-utils.test.ts +115 -0
  335. package/src/metadata-builder/builders/shape-color-utils.ts +75 -0
  336. package/src/metadata-builder/builders/undo-builder.ts +105 -0
  337. package/src/metadata-builder/builders/update-content-text-style-builder.ts +4 -1
  338. package/src/metadata-builder/helpers/rte.helpers.ts +27 -13
  339. package/src/metadata-builder/metadata-executor.ts +42 -2
  340. package/src/metadata-builder/models.ts +39 -1
  341. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +152 -0
  342. package/src/metadata-builder/parsers/section-tool-arguments.ts +138 -24
  343. package/src/metadata-builder/sanitizers/__tests__/section-args-validator.test.ts +659 -0
  344. package/src/metadata-builder/sanitizers/rte-schema-check.ts +99 -0
  345. package/src/metadata-builder/sanitizers/sanitizer-rules.ts +97 -0
  346. package/src/metadata-builder/sanitizers/section-args-validator.ts +445 -0
  347. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +10 -16
  348. package/src/shared/content-settings/components/content-settings/ContentSettings.stories.ts +0 -1
  349. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +6 -10
  350. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +1 -23
  351. package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.vue +0 -15
  352. package/src/shared/content-settings/components/text-items-field/TextItemsField.vue +0 -15
  353. package/src/shared/navigation-style-settings/store/index.ts +5 -0
  354. package/src/shared/page-navigation/store/page-navigation-store.ts +4 -31
  355. package/src/shared/page-navigation/utils/nav-order-utils.ts +32 -0
  356. package/src/shared/side-bar/components/SideBar.vue +14 -1
  357. package/src/shared/side-bar/store/side-bar-store.ts +0 -20
  358. package/src/utils/build-asset-manifest.ts +153 -0
  359. package/src/utils/minify-brand-page-metadata.ts +362 -130
  360. package/lib/src/brand-page-maker/composables/ai-chat/useAiChat.js +0 -368
  361. package/lib/src/brand-page-maker/composables/ai-chat/useAiTextEditPrompts.d.ts +0 -18
  362. package/lib/src/brand-page-maker/composables/ai-chat/useAiTextEditPrompts.js +0 -144
  363. package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.d.ts +0 -155
  364. package/lib/src/brand-page-maker/stores/ai-thread/ai-thread-store.js +0 -25
  365. package/lib/src/brand-page-maker/utils/mixpanel.util.d.ts +0 -1
  366. package/lib/src/brand-page-maker/utils/mixpanel.util.js +0 -29
  367. package/lib/src/bundled-translations-CNK7l6_v.js +0 -173
  368. package/lib/src/bundled-translations.de-DE-BLE4_y0H.js +0 -173
  369. package/lib/src/bundled-translations.es-ES-thO9osbg.js +0 -173
  370. package/lib/src/bundled-translations.fr-CA-BZkhiNgU.js +0 -173
  371. package/lib/src/bundled-translations.fr-FR-bhDLPKgZ.js +0 -173
  372. package/lib/src/bundled-translations.pt-BR-CI9a5Bq1.js +0 -173
  373. package/lib/src/bundled-translations.pt-PT-DBoErBaq.js +0 -173
  374. package/src/brand-page-maker/components/ai-text-edit/AiTextEdit.vue +0 -154
  375. package/src/brand-page-maker/composables/ai-chat/useAiChat.ts +0 -562
  376. package/src/brand-page-maker/composables/ai-chat/useAiTextEditPrompts.ts +0 -196
  377. package/src/brand-page-maker/stores/ai-thread/ai-thread-store.ts +0 -31
  378. package/src/brand-page-maker/utils/mixpanel.util.ts +0 -42
  379. package/src/shared/content-settings/components/generate-ai-button/GenerateAiButton.vue +0 -114
  380. package/src/shared/content-settings/components/generate-ai-modal/GenerateAiModal.vue +0 -761
@@ -25,8 +25,13 @@ import {
25
25
  } from '@brand-page-maker/utils';
26
26
  import { isDefaultContentText } from '@shared/content-settings/utils';
27
27
  import { useUiLogoSettingsStore } from '../../../logo-settings/store';
28
- import { getCtaLocationFromFieldType } from '@brand-page-maker/utils/mixpanel.util';
29
28
 
29
+ const RTE_DISALLOWED_STYLE_FIELD_NAMES = [
30
+ 'descriptionStyle',
31
+ 'titleStyle',
32
+ 'textStyle',
33
+ 'paragraphStyle',
34
+ ];
30
35
  const AI_ALLOWED_SECTION_TYPES = [
31
36
  'banner-section',
32
37
  'text',
@@ -222,12 +227,6 @@ export default defineComponent({
222
227
  disableTransparent(): boolean {
223
228
  return this.field.disableTransparent || false;
224
229
  },
225
- showGenerateText(): boolean {
226
- return (
227
- AI_ALLOWED_SECTION_TYPES.includes(this.type) &&
228
- AI_ALLOWED_FIELD_NAMES.includes(this.fieldName)
229
- );
230
- },
231
230
  plainTextValue(): string {
232
231
  const plainText = getPlainTextFromRTE(this.value);
233
232
 
@@ -235,9 +234,6 @@ export default defineComponent({
235
234
 
236
235
  return plainText;
237
236
  },
238
- ctaLocation(): string {
239
- return getCtaLocationFromFieldType(this.field.name, this.type);
240
- },
241
237
  },
242
238
  watch: {
243
239
  fieldType() {
@@ -20,27 +20,7 @@
20
20
  }"
21
21
  >
22
22
  <div class="tw-flex tw-flex-row tw-w-full tw-justify-between">
23
- <FieldSubHeader
24
- :class="{
25
- 'tw-mb-2': !showGenerateText || (!field.showToggle && !isInline),
26
- }"
27
- :title="field.title"
28
- />
29
- <GenerateAiButton
30
- v-if="showGenerateText"
31
- :id="id"
32
- :existing-text="plainTextValue"
33
- :is-design-com="isDesignCom"
34
- :cta-location="ctaLocation"
35
- :ai-context="{
36
- fieldName: field.name,
37
- maxChars: maxLength,
38
- textStyle: content[styleName],
39
- }"
40
- @capture-snapshot="onCaptureSnapshot"
41
- @on-use-text="onUseGeneratedText"
42
- @on-use-style="onUseGeneratedStyle"
43
- />
23
+ <FieldSubHeader class="tw-mb-2" :title="field.title" />
44
24
  </div>
45
25
  <Toggle
46
26
  v-if="showToggle"
@@ -134,7 +114,6 @@ import SliderField from '../slider-field/SliderField.vue';
134
114
  import PageDropdownField from '../page-dropdown-field/PageDropdownField.vue';
135
115
  import PersonalisationOverrideField from '../personalisation-override-field/PersonalisationOverrideField.vue';
136
116
  import BookingUrlField from '../booking-url-field/BookingUrlField.vue';
137
- import GenerateAiButton from '../generate-ai-button/GenerateAiButton.vue';
138
117
 
139
118
  export default {
140
119
  components: {
@@ -173,7 +152,6 @@ export default {
173
152
  'product-config-option-field': ProductConfigOptionField,
174
153
  FieldSubHeader,
175
154
  Toggle,
176
- GenerateAiButton,
177
155
  'page-dropdown-field': PageDropdownField,
178
156
  'personalisation-override-field': PersonalisationOverrideField,
179
157
  },
@@ -17,17 +17,6 @@
17
17
  <h4 class="tw-mt-3 tw-mb-1.5 tw-text-sm tw-font-bold">
18
18
  {{ testimonialItemsFieldTr(`testimonial`) }}
19
19
  </h4>
20
- <GenerateAiButton
21
- :id="id"
22
- :existing-text="getPlainTextValue(option.index)"
23
- :is-design-com="isDesignCom"
24
- :ai-context="{
25
- fieldName: `${name}.${option.index}.testimonials`,
26
- index: option.index,
27
- }"
28
- :cta-location="getCtaLocationFromFieldType('testimonials')"
29
- @capture-snapshot="onCaptureSnapshot"
30
- />
31
20
  </div>
32
21
  <TextareaField
33
22
  :value="options[option.index].testimonials"
@@ -205,9 +194,7 @@ import ImageField from '../image-field/ImageField.vue';
205
194
  import ItemsField from '../items-field/ItemsField.vue';
206
195
  import TextareaField from '../../../content-settings/components/textarea-field/TextareaField.vue';
207
196
  import ColorReplacementsField from '../color-replacements-field/ColorReplacementsField.vue';
208
- import GenerateAiButton from '../generate-ai-button/GenerateAiButton.vue';
209
197
  import { testimonialItemsFieldTr } from '@src/composables/useTranslate';
210
- import { getCtaLocationFromFieldType } from '@brand-page-maker/utils/mixpanel.util';
211
198
  import PersonalisationOverrideField from '../../../content-settings/components/personalisation-override-field/PersonalisationOverrideField.vue';
212
199
 
213
200
  export default {
@@ -218,14 +205,12 @@ export default {
218
205
  ImageField,
219
206
  TextareaField,
220
207
  ColorReplacementsField,
221
- GenerateAiButton,
222
208
  PersonalisationOverrideField,
223
209
  },
224
210
  mixins: [TestimonialItemsFieldMixin],
225
211
  setup() {
226
212
  return {
227
213
  testimonialItemsFieldTr,
228
- getCtaLocationFromFieldType,
229
214
  };
230
215
  },
231
216
  };
@@ -17,17 +17,6 @@
17
17
  <h4 class="tw-mt-3 tw-mb-1.5 tw-text-sm tw-font-bold">
18
18
  {{ commonTr(`text`) }}
19
19
  </h4>
20
- <GenerateAiButton
21
- :id="id"
22
- :existing-text="getPlainTextValue(option.index)"
23
- :is-design-com="isDesignCom"
24
- :ai-context="{
25
- fieldName: `${name}.${option.index}.text`,
26
- index: option.index,
27
- }"
28
- :cta-location="getCtaLocationFromFieldType('text')"
29
- @capture-snapshot="onCaptureSnapshot"
30
- />
31
20
  </div>
32
21
  <TextareaField
33
22
  :id="id"
@@ -95,10 +84,8 @@ import TextItemsFieldMixin from './TextItemsField.mixin';
95
84
  import ItemsField from '../items-field/ItemsField.vue';
96
85
  import TextareaField from '../../../content-settings/components/textarea-field/TextareaField.vue';
97
86
  import TextStyleField from '../../../content-settings/components/text-style-field/TextStyleField.vue';
98
- import GenerateAiButton from '../generate-ai-button/GenerateAiButton.vue';
99
87
  import { commonTr, textItemsFieldTr } from '@src/composables/useTranslate';
100
88
  import PersonalisationOverrideField from '../../../content-settings/components/personalisation-override-field/PersonalisationOverrideField.vue';
101
- import { getCtaLocationFromFieldType } from '@brand-page-maker/utils/mixpanel.util';
102
89
 
103
90
  export default {
104
91
  components: {
@@ -106,7 +93,6 @@ export default {
106
93
  ItemsField,
107
94
  TextareaField,
108
95
  TextStyleField,
109
- GenerateAiButton,
110
96
  PersonalisationOverrideField,
111
97
  },
112
98
  mixins: [TextItemsFieldMixin],
@@ -114,7 +100,6 @@ export default {
114
100
  return {
115
101
  commonTr,
116
102
  textItemsFieldTr,
117
- getCtaLocationFromFieldType,
118
103
  };
119
104
  },
120
105
  };
@@ -145,6 +145,11 @@ export const useUiNavigationStyleSettingsStore = defineStore(
145
145
  this.navigation[section][viewport].defaultButtonStyle,
146
146
  style,
147
147
  );
148
+
149
+ console.log(
150
+ 'This is the updated default button style: ',
151
+ this.navigation[section][viewport].defaultButtonStyle,
152
+ );
148
153
  },
149
154
 
150
155
  _setSelectedButtonStyle({
@@ -3,6 +3,10 @@ import { NavModel, type NavOrder, type NavRoute } from '@brand-page';
3
3
  import { getPageSlugFromPageTitle } from '@brand-page-maker/utils/slug.util';
4
4
  import { navigateToPageByPageId } from '../../../brand-page-maker/routing';
5
5
  import { useUiPageSettingsStore } from '@src/shared/page-settings/store';
6
+ import {
7
+ findParentOrderByRouteId,
8
+ removeOrderByRouteId,
9
+ } from '../utils/nav-order-utils';
6
10
 
7
11
  export interface PageNavigationState {
8
12
  routes: NavRoute[];
@@ -10,37 +14,6 @@ export interface PageNavigationState {
10
14
  activePageId: string;
11
15
  }
12
16
 
13
- const findParentOrderByRouteId = (
14
- orders: NavOrder[],
15
- routeId: string,
16
- ): NavOrder | undefined => {
17
- for (const order of orders) {
18
- if (order.routeId === routeId) {
19
- return order;
20
- }
21
-
22
- const found = findParentOrderByRouteId(order.subRoutes, routeId);
23
-
24
- if (found) {
25
- return found;
26
- }
27
- }
28
-
29
- return undefined;
30
- };
31
-
32
- const removeOrderByRouteId = (
33
- orders: NavOrder[],
34
- routeId: string,
35
- ): NavOrder[] => {
36
- return orders
37
- .filter((order) => order.routeId !== routeId)
38
- .map((order) => ({
39
- ...order,
40
- subRoutes: removeOrderByRouteId(order.subRoutes, routeId), // Recursively filter out the route
41
- }));
42
- };
43
-
44
17
  const findParentRouteIdForRouteId = (
45
18
  orders: NavOrder[],
46
19
  targetRouteId: string,
@@ -0,0 +1,32 @@
1
+ import type { NavOrder } from '@brand-page';
2
+
3
+ export const findParentOrderByRouteId = (
4
+ orders: NavOrder[],
5
+ routeId: string,
6
+ ): NavOrder | undefined => {
7
+ for (const order of orders) {
8
+ if (order.routeId === routeId) {
9
+ return order;
10
+ }
11
+
12
+ const found = findParentOrderByRouteId(order.subRoutes, routeId);
13
+
14
+ if (found) {
15
+ return found;
16
+ }
17
+ }
18
+
19
+ return undefined;
20
+ };
21
+
22
+ export const removeOrderByRouteId = (
23
+ orders: NavOrder[],
24
+ routeId: string,
25
+ ): NavOrder[] => {
26
+ return orders
27
+ .filter((order) => order.routeId !== routeId)
28
+ .map((order) => ({
29
+ ...order,
30
+ subRoutes: removeOrderByRouteId(order.subRoutes, routeId),
31
+ }));
32
+ };
@@ -19,6 +19,7 @@
19
19
  :class="{
20
20
  'tw-pt-24': !hasQuickLinks,
21
21
  'tw-pt-36': hasQuickLinks,
22
+ 'c-sidebar-content--ai': selectedTabName === 'AiWebsiteBuilder',
22
23
  }"
23
24
  >
24
25
  <div
@@ -30,7 +31,8 @@
30
31
  <div
31
32
  v-else
32
33
  :class="{
33
- 'c-sidebar-content__inner': selectedTabName !== 'AiTextEdit',
34
+ 'c-sidebar-content__inner': selectedTabName !== 'AiWebsiteBuilder',
35
+ 'tw-h-full': selectedTabName === 'AiWebsiteBuilder',
34
36
  }"
35
37
  >
36
38
  <slot name="tab" />
@@ -64,6 +66,17 @@ export default {
64
66
  @apply tw-mb-14;
65
67
  }
66
68
 
69
+ .c-sidebar-content--ai {
70
+ overflow-y: hidden !important;
71
+ padding-bottom: 3.5rem !important; /* clear fixed mobile tab bar (tw-h-14) */
72
+ }
73
+
74
+ @screen lg {
75
+ .c-sidebar-content--ai {
76
+ padding-bottom: 0 !important;
77
+ }
78
+ }
79
+
67
80
  .c-tab {
68
81
  border: none;
69
82
  border-right: 1px solid #d0d0d0;
@@ -10,22 +10,11 @@ import {
10
10
  useUiPageSettingsStore,
11
11
  } from '../../page-settings/store';
12
12
 
13
- export interface AiTextEditContext {
14
- fieldValue: string;
15
- fieldId: string;
16
- fieldName: string;
17
- contentType: string;
18
- maxChars?: number;
19
- textStyle?: BrandPageCssStyle;
20
- index?: number;
21
- }
22
-
23
13
  export interface SideBarState {
24
14
  tabs: SideBarTab[];
25
15
  selectedTabName: string;
26
16
  isSwitchingTab: boolean;
27
17
  selectedSettingsSection?: string;
28
- aiTextEditContext?: AiTextEditContext;
29
18
  }
30
19
 
31
20
  export const useUiSideBarStore = defineStore('uiSideBar', {
@@ -34,7 +23,6 @@ export const useUiSideBarStore = defineStore('uiSideBar', {
34
23
  selectedTabName: DEFAULT_SIDE_BAR_TABS()[1].name,
35
24
  isSwitchingTab: false,
36
25
  selectedSettingsSection: undefined,
37
- aiTextEditContext: undefined,
38
26
  }),
39
27
  actions: {
40
28
  setBrandPageSettingsTabVisibility(payload: { isVisible: boolean }) {
@@ -74,13 +62,5 @@ export const useUiSideBarStore = defineStore('uiSideBar', {
74
62
  setSelectedSettingsSection(payload: { sectionName?: string }) {
75
63
  this.selectedSettingsSection = payload.sectionName;
76
64
  },
77
-
78
- setAiTextEditContext(payload: AiTextEditContext) {
79
- this.aiTextEditContext = payload;
80
- },
81
-
82
- clearAiTextEditContext() {
83
- this.aiTextEditContext = undefined;
84
- },
85
65
  },
86
66
  });
@@ -0,0 +1,153 @@
1
+ import type { BrandPageModel } from '../brand-page/models';
2
+ import type { LogoImageModel } from '../brand-page/models/logo.model';
3
+ import { FabricRenderClient } from '../clients/fabric-render-client';
4
+
5
+ export interface AssetEntry {
6
+ key: string;
7
+ type: 'logo' | 'image' | 'shape';
8
+ data: string;
9
+ }
10
+
11
+ /**
12
+ * Resolve a logo's data for the asset manifest.
13
+ *
14
+ * Priority:
15
+ * 1. Construct a render URL from logoImage (logoDraftToken + variation) — preferred
16
+ * because URLs are lightweight and the pipeline can download the rendered PNG.
17
+ * 2. Fall back to logoImageBase64Url if logoImage is unavailable.
18
+ */
19
+ export function resolveLogoData(
20
+ logoImage: LogoImageModel | undefined,
21
+ logoImageBase64Url: string | undefined,
22
+ ): string | undefined {
23
+ // Try constructing URL from logoImage
24
+ if (logoImage?.logoDraftToken) {
25
+ try {
26
+ const client = FabricRenderClient.getInstance();
27
+ const url = client.getLogoVariationUrlByLogoVariationIndex(
28
+ logoImage.logoDraftToken,
29
+ logoImage.logoLastUpdate,
30
+ logoImage.logoVariation ?? 0,
31
+ 'png',
32
+ );
33
+
34
+ if (url) return url;
35
+ } catch {
36
+ // FabricRenderClient not initialized — fall through to base64
37
+ }
38
+ }
39
+
40
+ // Fallback to base64 if available
41
+ return logoImageBase64Url || undefined;
42
+ }
43
+
44
+ /**
45
+ * Hash a string using SHA-256 and return the first 16 hex characters.
46
+ * Uses the Web Crypto API (available in browsers and modern runtimes).
47
+ */
48
+ async function hashData(data: string): Promise<string> {
49
+ const encoder = new TextEncoder();
50
+ const hashBuffer = await crypto.subtle.digest(
51
+ 'SHA-256',
52
+ encoder.encode(data),
53
+ );
54
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
55
+
56
+ return hashArray
57
+ .map((b) => b.toString(16).padStart(2, '0'))
58
+ .join('')
59
+ .slice(0, 16);
60
+ }
61
+
62
+ /**
63
+ * Build an asset manifest from the brand page model.
64
+ *
65
+ * Collects unique visual assets (logos, background images, section images)
66
+ * with their resolved data (base64 or URL) and a content hash key.
67
+ * Each asset appears exactly once — deduped by data content.
68
+ * The pipeline uses the key to cache analysis and cross-reference via
69
+ * asset keys embedded in the minified metadata (logoAssetKey, backgroundAssetKey).
70
+ */
71
+ export async function buildAssetManifest(
72
+ model: BrandPageModel,
73
+ ): Promise<AssetEntry[]> {
74
+ const assets: AssetEntry[] = [];
75
+ const hashPromises: Promise<void>[] = [];
76
+ const seenData = new Set<string>();
77
+
78
+ const addEntry = (type: AssetEntry['type'], data: string) => {
79
+ if (seenData.has(data)) return;
80
+
81
+ seenData.add(data);
82
+
83
+ const entry: AssetEntry = { key: '', type, data };
84
+
85
+ assets.push(entry);
86
+ hashPromises.push(
87
+ hashData(data).then((key) => {
88
+ entry.key = key;
89
+ }),
90
+ );
91
+ };
92
+
93
+ // --- Logos from header/footer (4 viewports) ---
94
+ const logoSections = [
95
+ model.pageHeaderDesktop,
96
+ model.pageHeaderMobile,
97
+ model.pageFooterDesktop,
98
+ model.pageFooterMobile,
99
+ ];
100
+
101
+ for (const section of logoSections) {
102
+ if (!section?.isLogoVisible) continue;
103
+
104
+ const data = resolveLogoData(
105
+ (section as any).logoImage,
106
+ section.logoImageBase64Url,
107
+ );
108
+
109
+ if (data) addEntry('logo', data);
110
+ }
111
+
112
+ // --- Global background image ---
113
+ const bgUrl = model.styles?.backgroundStyles?.backgroundImageUrl;
114
+
115
+ if (bgUrl) addEntry('image', bgUrl);
116
+
117
+ // --- Section content images ---
118
+ for (const page of model.pages || []) {
119
+ for (const content of page.contents || []) {
120
+ const c = content as any;
121
+
122
+ // Top-level image fields (banner, about, image, profile)
123
+ if (c.imageUrl) addEntry('image', c.imageUrl);
124
+
125
+ if (c.avatarImageUrl) addEntry('image', c.avatarImageUrl);
126
+
127
+ // items[] — images-section, shapes-section, testimonial-section
128
+ if (Array.isArray(c.items)) {
129
+ for (const item of c.items) {
130
+ if (item.imageUrl) addEntry('image', item.imageUrl);
131
+ }
132
+ }
133
+
134
+ // images[] — image-gallery
135
+ if (Array.isArray(c.images)) {
136
+ for (const img of c.images) {
137
+ if (img.imageUrl) addEntry('image', img.imageUrl);
138
+ }
139
+ }
140
+
141
+ // links[] — social-links
142
+ if (Array.isArray(c.links)) {
143
+ for (const link of c.links) {
144
+ if (link.imageUrl) addEntry('image', link.imageUrl);
145
+ }
146
+ }
147
+ }
148
+ }
149
+
150
+ await Promise.all(hashPromises);
151
+
152
+ return assets;
153
+ }