@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
@@ -1,5 +1,7 @@
1
1
  import { BRAND_PAGE_TYPES, } from '../brand-page/models';
2
- const stripHtmlTags = (html) => html.replace(/<[^>]*>/g, '').trim();
2
+ import { hasRTEContent } from '../brand-page-maker/utils';
3
+ import { useExternalRichTextEditor } from '../brand-page-maker/composables/rich-text-editor/useRichTextEditor';
4
+ import { resolveLogoData } from './build-asset-manifest';
3
5
  const BUTTON_TYPES = [
4
6
  'general-link',
5
7
  'website',
@@ -14,11 +16,18 @@ const BUTTON_TYPES = [
14
16
  'twitch',
15
17
  'tiktok',
16
18
  ];
17
- const stripOptional = (value) => {
18
- if (typeof value === 'string' && value) {
19
- return stripHtmlTags(value);
19
+ const convertText = (value, editor) => {
20
+ if (typeof value !== 'string' || !value)
21
+ return undefined;
22
+ if (hasRTEContent(value)) {
23
+ editor.commands.setContent(value);
24
+ return editor.getJSON();
20
25
  }
21
- return undefined;
26
+ return value;
27
+ };
28
+ const st = (key, value, editor) => {
29
+ const result = convertText(value, editor);
30
+ return result !== undefined ? { [key]: result } : null;
22
31
  };
23
32
  const includeStyle = (value) => {
24
33
  if (value && typeof value === 'object') {
@@ -32,15 +41,68 @@ const includeString = (value) => {
32
41
  }
33
42
  return undefined;
34
43
  };
35
- const minifyContent = (content) => {
44
+ /**
45
+ * Include cardStyle for sections that render a card overlay
46
+ * (banner, contact-form, testimonial, images, shapes). Only emits
47
+ * sub-fields that are actually set so the minified JSON stays lean.
48
+ */
49
+ const includeCardStyle = (value) => {
50
+ if (!value || typeof value !== 'object')
51
+ return null;
52
+ const style = value;
53
+ const result = {};
54
+ if (typeof style.backgroundColor === 'string' && style.backgroundColor) {
55
+ result.backgroundColor = style.backgroundColor;
56
+ }
57
+ if (typeof style.borderRadius === 'string' && style.borderRadius) {
58
+ result.borderRadius = style.borderRadius;
59
+ }
60
+ if (typeof style.borderColor === 'string' && style.borderColor) {
61
+ result.borderColor = style.borderColor;
62
+ }
63
+ return Object.keys(result).length ? { cardStyle: result } : null;
64
+ };
65
+ /**
66
+ * Include `backgroundStyle.backgroundColor` for sections that paint a
67
+ * background. The minifier previously dropped this field, leaving the
68
+ * AI Color Agent with no per-section bg signal even when the raw
69
+ * metadata had one. Mirrors `includeCardStyle`: emits nothing when the
70
+ * value is missing or empty (the "transparent" sentinel).
71
+ */
72
+ const includeBackgroundStyle = (value) => {
73
+ if (!value || typeof value !== 'object')
74
+ return null;
75
+ const style = value;
76
+ const bg = style.backgroundColor;
77
+ if (typeof bg !== 'string' || !bg)
78
+ return null;
79
+ return { backgroundStyle: { backgroundColor: bg } };
80
+ };
81
+ /**
82
+ * Look up an asset key from the manifest by matching the data content.
83
+ */
84
+ const findAssetKey = (assets, data) => {
85
+ if (!data || !assets)
86
+ return undefined;
87
+ return assets.find((a) => a.data === data)?.key;
88
+ };
89
+ const minifyContent = (content, editor, assets) => {
36
90
  const base = { id: content.id, type: content.type };
37
91
  const c = content;
92
+ // Helper: include imageUrl and its asset key if available
93
+ const includeImageWithKey = (url, urlField = 'imageUrl', keyField = 'imageAssetKey') => {
94
+ if (typeof url !== 'string' || !url)
95
+ return null;
96
+ const assetKey = findAssetKey(assets, url);
97
+ return {
98
+ [urlField]: url,
99
+ ...(assetKey && { [keyField]: assetKey }),
100
+ };
101
+ };
38
102
  if (BUTTON_TYPES.includes(content.type)) {
39
103
  return {
40
104
  ...base,
41
- ...(stripOptional(c.title) !== undefined && {
42
- title: stripOptional(c.title),
43
- }),
105
+ ...st('title', c.title, editor),
44
106
  ...(includeString(c.url) && { url: c.url }),
45
107
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
46
108
  };
@@ -49,17 +111,17 @@ const minifyContent = (content) => {
49
111
  case 'banner-section':
50
112
  return {
51
113
  ...base,
52
- ...(includeString(c.imageUrl) && { imageUrl: c.imageUrl }),
53
- ...(stripOptional(c.title) !== undefined && {
54
- title: stripOptional(c.title),
55
- }),
56
- ...(stripOptional(c.description) !== undefined && {
57
- description: stripOptional(c.description),
58
- }),
59
- ...(stripOptional(c.buttonText) !== undefined && {
60
- buttonText: stripOptional(c.buttonText),
61
- }),
114
+ ...includeImageWithKey(c.imageUrl),
115
+ ...st('title', c.title, editor),
116
+ ...st('description', c.description, editor),
117
+ ...st('buttonText', c.buttonText, editor),
62
118
  ...(includeString(c.url) && { url: c.url }),
119
+ ...(includeString(c.email) && { email: c.email }),
120
+ ...(includeString(c.tel) && { tel: c.tel }),
121
+ ...(includeString(c.buttonLinkType) && {
122
+ buttonLinkType: c.buttonLinkType,
123
+ }),
124
+ ...(includeString(c.buttonPageId) && { buttonPageId: c.buttonPageId }),
63
125
  ...(includeString(c.displayStyle) && { displayStyle: c.displayStyle }),
64
126
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
65
127
  ...(includeStyle(c.descriptionStyle) && {
@@ -68,43 +130,34 @@ const minifyContent = (content) => {
68
130
  ...(includeStyle(c.buttonTextStyle) && {
69
131
  buttonTextStyle: c.buttonTextStyle,
70
132
  }),
133
+ ...includeCardStyle(c.cardStyle),
134
+ ...includeBackgroundStyle(c.backgroundStyle),
71
135
  };
72
136
  case 'about-section':
73
137
  return {
74
138
  ...base,
75
- ...(includeString(c.imageUrl) && { imageUrl: c.imageUrl }),
76
- ...(stripOptional(c.title) !== undefined && {
77
- title: stripOptional(c.title),
78
- }),
79
- ...(stripOptional(c.paragraph) !== undefined && {
80
- paragraph: stripOptional(c.paragraph),
81
- }),
139
+ ...includeImageWithKey(c.imageUrl),
140
+ ...st('title', c.title, editor),
141
+ ...st('paragraph', c.paragraph, editor),
82
142
  ...(includeString(c.displayStyle) && { displayStyle: c.displayStyle }),
83
143
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
84
144
  ...(includeStyle(c.paragraphStyle) && {
85
145
  paragraphStyle: c.paragraphStyle,
86
146
  }),
147
+ ...includeBackgroundStyle(c.backgroundStyle),
87
148
  };
88
149
  case 'testimonial-section':
89
150
  return {
90
151
  ...base,
91
- ...(stripOptional(c.title) !== undefined && {
92
- title: stripOptional(c.title),
93
- }),
152
+ ...st('title', c.title, editor),
94
153
  ...(includeString(c.displayStyle) && { displayStyle: c.displayStyle }),
95
154
  ...(Array.isArray(c.items) && {
96
155
  items: c.items.map((item, index) => ({
97
156
  position: index + 1,
98
- ...(stripOptional(item.name) !== undefined && {
99
- name: stripOptional(item.name),
100
- }),
101
- ...(stripOptional(item.position) !== undefined && {
102
- jobTitle: stripOptional(item.position),
103
- }),
104
- ...(stripOptional(item.testimonials) !== undefined && {
105
- testimonials: stripOptional(item.testimonials),
106
- }),
107
- ...(includeString(item.imageUrl) && { imageUrl: item.imageUrl }),
157
+ ...st('name', item.name, editor),
158
+ ...st('jobTitle', item.position, editor),
159
+ ...st('testimonials', item.testimonials, editor),
160
+ ...includeImageWithKey(item.imageUrl),
108
161
  })),
109
162
  }),
110
163
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
@@ -115,27 +168,24 @@ const minifyContent = (content) => {
115
168
  ...(includeStyle(c.positionStyle) && {
116
169
  positionStyle: c.positionStyle,
117
170
  }),
171
+ ...includeCardStyle(c.cardStyle),
172
+ ...includeBackgroundStyle(c.backgroundStyle),
118
173
  };
119
174
  case 'images-section':
120
175
  case 'shapes-section':
121
176
  return {
122
177
  ...base,
123
- ...(stripOptional(c.title) !== undefined && {
124
- title: stripOptional(c.title),
125
- }),
126
- ...(stripOptional(c.description) !== undefined && {
127
- description: stripOptional(c.description),
128
- }),
178
+ ...st('title', c.title, editor),
179
+ ...st('description', c.description, editor),
129
180
  ...(includeString(c.displayStyle) && { displayStyle: c.displayStyle }),
130
181
  ...(Array.isArray(c.items) && {
131
182
  items: c.items.map((item, index) => ({
132
183
  position: index + 1,
133
- ...(includeString(item.imageUrl) && { imageUrl: item.imageUrl }),
134
- ...(stripOptional(item.title) !== undefined && {
135
- title: stripOptional(item.title),
136
- }),
137
- ...(stripOptional(item.paragraph) !== undefined && {
138
- paragraph: stripOptional(item.paragraph),
184
+ ...includeImageWithKey(item.imageUrl),
185
+ ...st('title', item.title, editor),
186
+ ...st('paragraph', item.paragraph, editor),
187
+ ...(includeString(item.buttonText) && {
188
+ buttonText: item.buttonText,
139
189
  }),
140
190
  })),
141
191
  }),
@@ -147,60 +197,49 @@ const minifyContent = (content) => {
147
197
  ...(includeStyle(c.paragraphStyle) && {
148
198
  paragraphStyle: c.paragraphStyle,
149
199
  }),
200
+ ...(includeStyle(c.buttonTextStyle) && {
201
+ buttonTextStyle: c.buttonTextStyle,
202
+ }),
203
+ ...includeCardStyle(c.cardStyle),
204
+ ...includeBackgroundStyle(c.backgroundStyle),
150
205
  };
151
206
  case 'text':
152
207
  return {
153
208
  ...base,
154
- ...(stripOptional(c.text) !== undefined && {
155
- text: stripOptional(c.text),
156
- }),
209
+ ...st('text', c.text, editor),
157
210
  ...(Array.isArray(c.textItems) && {
158
211
  textItems: c.textItems.map((item, index) => ({
159
212
  position: index + 1,
160
- ...(stripOptional(item.text) !== undefined && {
161
- text: stripOptional(item.text),
162
- }),
213
+ ...st('text', item.text, editor),
163
214
  ...(includeStyle(item.textStyle) && { textStyle: item.textStyle }),
164
215
  })),
165
216
  }),
166
217
  ...(includeStyle(c.textStyle) && { textStyle: c.textStyle }),
218
+ ...includeBackgroundStyle(c.backgroundStyle),
167
219
  };
168
220
  case 'profile':
169
221
  return {
170
222
  ...base,
171
- ...(includeString(c.avatarImageUrl) && {
172
- avatarImageUrl: c.avatarImageUrl,
173
- }),
174
- ...(stripOptional(c.name) !== undefined && {
175
- name: stripOptional(c.name),
176
- }),
177
- ...(stripOptional(c.title) !== undefined && {
178
- title: stripOptional(c.title),
179
- }),
180
- ...(stripOptional(c.description) !== undefined && {
181
- description: stripOptional(c.description),
182
- }),
223
+ ...includeImageWithKey(c.avatarImageUrl, 'avatarImageUrl', 'avatarAssetKey'),
224
+ ...st('name', c.name, editor),
225
+ ...st('title', c.title, editor),
226
+ ...st('description', c.description, editor),
183
227
  ...(includeStyle(c.nameStyle) && { nameStyle: c.nameStyle }),
184
228
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
185
229
  ...(includeStyle(c.descriptionStyle) && {
186
230
  descriptionStyle: c.descriptionStyle,
187
231
  }),
232
+ ...includeBackgroundStyle(c.backgroundStyle),
188
233
  };
189
234
  case 'contact-form':
190
235
  return {
191
236
  ...base,
192
- ...(stripOptional(c.title) !== undefined && {
193
- title: stripOptional(c.title),
194
- }),
195
- ...(stripOptional(c.description) !== undefined && {
196
- description: stripOptional(c.description),
197
- }),
198
- ...(stripOptional(c.buttonText) !== undefined && {
199
- buttonText: stripOptional(c.buttonText),
200
- }),
201
- ...(stripOptional(c.successMessage) !== undefined && {
202
- successMessage: stripOptional(c.successMessage),
203
- }),
237
+ ...st('title', c.title, editor),
238
+ ...st('description', c.description, editor),
239
+ ...st('buttonText', c.buttonText, editor),
240
+ ...st('successMessage', c.successMessage, editor),
241
+ ...(includeString(c.displayStyle) && { displayStyle: c.displayStyle }),
242
+ ...(includeString(c.layoutStyle) && { layoutStyle: c.layoutStyle }),
204
243
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
205
244
  ...(includeStyle(c.descriptionStyle) && {
206
245
  descriptionStyle: c.descriptionStyle,
@@ -208,34 +247,33 @@ const minifyContent = (content) => {
208
247
  ...(includeStyle(c.buttonTextStyle) && {
209
248
  buttonTextStyle: c.buttonTextStyle,
210
249
  }),
250
+ ...includeCardStyle(c.cardStyle),
251
+ ...includeBackgroundStyle(c.backgroundStyle),
211
252
  };
212
253
  case 'mailing-list':
213
254
  return {
214
255
  ...base,
215
- ...(stripOptional(c.title) !== undefined && {
216
- title: stripOptional(c.title),
217
- }),
218
- ...(stripOptional(c.buttonText) !== undefined && {
219
- buttonText: stripOptional(c.buttonText),
220
- }),
256
+ ...st('title', c.title, editor),
257
+ ...st('buttonText', c.buttonText, editor),
221
258
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
222
259
  ...(includeStyle(c.buttonTextStyle) && {
223
260
  buttonTextStyle: c.buttonTextStyle,
224
261
  }),
262
+ ...includeBackgroundStyle(c.backgroundStyle),
225
263
  };
226
264
  case 'booking-section':
227
265
  return {
228
266
  ...base,
229
- ...(stripOptional(c.title) !== undefined && {
230
- title: stripOptional(c.title),
231
- }),
232
- ...(stripOptional(c.description) !== undefined && {
233
- description: stripOptional(c.description),
234
- }),
235
- ...(stripOptional(c.buttonText) !== undefined && {
236
- buttonText: stripOptional(c.buttonText),
237
- }),
267
+ ...st('title', c.title, editor),
268
+ ...st('description', c.description, editor),
269
+ ...st('buttonText', c.buttonText, editor),
238
270
  ...(includeString(c.url) && { url: c.url }),
271
+ ...(includeString(c.email) && { email: c.email }),
272
+ ...(includeString(c.tel) && { tel: c.tel }),
273
+ ...(includeString(c.buttonLinkType) && {
274
+ buttonLinkType: c.buttonLinkType,
275
+ }),
276
+ ...(includeString(c.buttonPageId) && { buttonPageId: c.buttonPageId }),
239
277
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
240
278
  ...(includeStyle(c.descriptionStyle) && {
241
279
  descriptionStyle: c.descriptionStyle,
@@ -243,51 +281,47 @@ const minifyContent = (content) => {
243
281
  ...(includeStyle(c.buttonTextStyle) && {
244
282
  buttonTextStyle: c.buttonTextStyle,
245
283
  }),
284
+ ...includeBackgroundStyle(c.backgroundStyle),
246
285
  };
247
286
  case 'social-links':
248
287
  return {
249
288
  ...base,
250
- ...(stripOptional(c.title) !== undefined && {
251
- title: stripOptional(c.title),
252
- }),
289
+ ...st('title', c.title, editor),
253
290
  ...(Array.isArray(c.links) && {
254
291
  links: c.links.map((link, index) => ({
255
292
  position: index + 1,
256
293
  ...(includeString(link.url) && { url: link.url }),
257
- ...(includeString(link.imageUrl) && { imageUrl: link.imageUrl }),
294
+ ...includeImageWithKey(link.imageUrl),
258
295
  })),
259
296
  }),
260
297
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
298
+ ...includeBackgroundStyle(c.backgroundStyle),
261
299
  };
262
300
  case 'divider-section':
263
301
  return {
264
302
  ...base,
265
303
  ...(c.paddingStyle !== undefined && { paddingStyle: c.paddingStyle }),
266
304
  ...(includeString(c.dividerStyle) && { dividerStyle: c.dividerStyle }),
305
+ ...includeBackgroundStyle(c.backgroundStyle),
267
306
  };
268
307
  case 'shop-section':
269
308
  return {
270
309
  ...base,
271
- ...(stripOptional(c.title) !== undefined && {
272
- title: stripOptional(c.title),
273
- }),
274
- ...(stripOptional(c.description) !== undefined && {
275
- description: stripOptional(c.description),
276
- }),
310
+ ...st('title', c.title, editor),
311
+ ...st('description', c.description, editor),
277
312
  ...(includeString(c.displayStyle) && { displayStyle: c.displayStyle }),
278
313
  ...(Array.isArray(c.items) && { items: c.items }),
279
314
  ...(includeStyle(c.titleStyle) && { titleStyle: c.titleStyle }),
280
315
  ...(includeStyle(c.descriptionStyle) && {
281
316
  descriptionStyle: c.descriptionStyle,
282
317
  }),
318
+ ...includeBackgroundStyle(c.backgroundStyle),
283
319
  };
284
320
  case 'image':
285
321
  return {
286
322
  ...base,
287
- ...(includeString(c.imageUrl) && { imageUrl: c.imageUrl }),
288
- ...(stripOptional(c.imageTitle) !== undefined && {
289
- imageTitle: stripOptional(c.imageTitle),
290
- }),
323
+ ...includeImageWithKey(c.imageUrl),
324
+ ...st('imageTitle', c.imageTitle, editor),
291
325
  };
292
326
  case 'image-gallery':
293
327
  return {
@@ -295,10 +329,8 @@ const minifyContent = (content) => {
295
329
  ...(Array.isArray(c.images) && {
296
330
  images: c.images.map((img, index) => ({
297
331
  position: index + 1,
298
- ...(includeString(img.imageUrl) && { imageUrl: img.imageUrl }),
299
- ...(stripOptional(img.imageTitle) !== undefined && {
300
- imageTitle: stripOptional(img.imageTitle),
301
- }),
332
+ ...includeImageWithKey(img.imageUrl),
333
+ ...st('imageTitle', img.imageTitle, editor),
302
334
  })),
303
335
  }),
304
336
  };
@@ -319,28 +351,83 @@ const minifyContent = (content) => {
319
351
  case 'support-me':
320
352
  return {
321
353
  ...base,
322
- ...(stripOptional(c.title) !== undefined && {
323
- title: stripOptional(c.title),
324
- }),
325
- ...(stripOptional(c.description) !== undefined && {
326
- description: stripOptional(c.description),
327
- }),
354
+ ...st('title', c.title, editor),
355
+ ...st('description', c.description, editor),
328
356
  };
329
357
  default:
330
358
  return base;
331
359
  }
332
360
  };
333
- const minifyPage = (page, nav) => ({
361
+ const minifyFooter = (footer, logoAssetKey) => {
362
+ if (!footer)
363
+ return undefined;
364
+ return {
365
+ displayStyle: footer.displayStyle || undefined,
366
+ copyrightText: footer.copyrightText ? footer.copyrightText : undefined,
367
+ isLogoVisible: footer.isLogoVisible,
368
+ logoImageHeight: footer.logoImageHeight || undefined,
369
+ logoImageWidth: footer.logoImageWidth || undefined,
370
+ ...(logoAssetKey && { logoAssetKey }),
371
+ socialLinks: footer.socialLinks?.length
372
+ ? footer.socialLinks.map((l) => ({
373
+ imageUrl: l.imageUrl || '',
374
+ url: l.url || '',
375
+ }))
376
+ : undefined,
377
+ };
378
+ };
379
+ const minifyHeader = (header, logoAssetKey) => {
380
+ if (!header)
381
+ return undefined;
382
+ const nav = header.navigation;
383
+ return {
384
+ displayStyle: header.displayStyle || undefined,
385
+ isLogoVisible: header.isLogoVisible,
386
+ logoImageHeight: header.logoImageHeight || undefined,
387
+ logoImageWidth: header.logoImageWidth || undefined,
388
+ ...(logoAssetKey && { logoAssetKey }),
389
+ backgroundStyle: header.backgroundStyle?.backgroundColor
390
+ ? { backgroundColor: header.backgroundStyle.backgroundColor }
391
+ : undefined,
392
+ navigation: nav
393
+ ? {
394
+ displayType: nav.displayType || undefined,
395
+ defaultButtonStyle: nav.defaultButtonStyle
396
+ ? {
397
+ color: nav.defaultButtonStyle.color,
398
+ fontFamily: nav.defaultButtonStyle.fontFamily,
399
+ }
400
+ : undefined,
401
+ selectedButtonStyle: nav.selectedButtonStyle || undefined,
402
+ hamburgerMenuStyle: nav.hamburgerMenuStyle
403
+ ? { iconStyle: nav.hamburgerMenuStyle.iconStyle || undefined }
404
+ : undefined,
405
+ }
406
+ : undefined,
407
+ };
408
+ };
409
+ const minifyPage = (page, nav, editor, assets) => ({
334
410
  id: page.id,
335
411
  title: page.title,
336
412
  slug: nav.routes.find((r) => r.pageId === page.id)?.pageSlug ?? '',
337
413
  ...(page.isHidden && { isHidden: page.isHidden }),
338
- contents: page.contents.map(minifyContent),
339
- });
340
- export const minifyBrandPageMetadata = (model) => ({
341
- brandPageType: model.brandPageType || BRAND_PAGE_TYPES.default,
342
- v: model.v,
343
- styles: model.styles,
344
- pages: model.pages.map((p) => minifyPage(p, model.nav)),
345
- nav: model.nav,
414
+ contents: page.contents.map((content) => minifyContent(content, editor, assets)),
346
415
  });
416
+ export const minifyBrandPageMetadata = (model, assets) => {
417
+ const { externalEditor } = useExternalRichTextEditor();
418
+ const result = {
419
+ brandPageType: model.brandPageType || BRAND_PAGE_TYPES.default,
420
+ v: model.v,
421
+ styles: model.styles,
422
+ pages: model.pages.map((p) => minifyPage(p, model.nav, externalEditor, assets)),
423
+ nav: model.nav,
424
+ footer: {
425
+ desktop: minifyFooter(model.pageFooterDesktop, findAssetKey(assets, resolveLogoData(model.pageFooterDesktop?.logoImage, model.pageFooterDesktop?.logoImageBase64Url))),
426
+ mobile: minifyFooter(model.pageFooterMobile, findAssetKey(assets, resolveLogoData(model.pageFooterMobile?.logoImage, model.pageFooterMobile?.logoImageBase64Url))),
427
+ },
428
+ pageHeaderDesktop: minifyHeader(model.pageHeaderDesktop, findAssetKey(assets, resolveLogoData(model.pageHeaderDesktop?.logoImage, model.pageHeaderDesktop?.logoImageBase64Url))),
429
+ pageHeaderMobile: minifyHeader(model.pageHeaderMobile, findAssetKey(assets, resolveLogoData(model.pageHeaderMobile?.logoImage, model.pageHeaderMobile?.logoImageBase64Url))),
430
+ };
431
+ externalEditor.destroy();
432
+ return result;
433
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "5.17.28",
4
+ "version": "5.18.0",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <section data-component="banner-section">
3
3
  <div
4
- class="tw-relative"
4
+ class="tw-relative tw-overflow-hidden"
5
5
  :class="{
6
6
  'c_banner--with-image-overlay tw-flex tw-flex-col tw-justify-center':
7
7
  viewModel.isBigImageType,
@@ -286,18 +286,20 @@
286
286
  {{ value.error }}
287
287
  </p>
288
288
  </div>
289
- <button
290
- v-if="isSubmitButtonVisible"
291
- class="tw-block tw-border-0 tw-py-2 tw-select-none tw-text-base tw-text-center tw-w-fit hover:tw-cursor-pointer tw-px-8 tw-py-3 c-button-full-width"
292
- :style="submitButtonStyle"
293
- :class="{ 'tw-w-full tw-col-span-2': isMobileDevice }"
294
- >
295
- <TextWrapper
296
- :text-style="submitButtonTextStyle"
297
- :text="viewModel.buttonText"
298
- class="tw-text-center tw-text-base"
299
- />
300
- </button>
289
+ <div class="tw-flex tw-w-full tw-justify-center tw-col-span-2">
290
+ <button
291
+ v-if="isSubmitButtonVisible"
292
+ class="tw-block tw-border-0 tw-py-2 tw-select-none tw-text-base tw-text-center tw-w-fit hover:tw-cursor-pointer tw-px-8 tw-py-3 c-button-full"
293
+ :style="submitButtonStyle"
294
+ :class="{ 'tw-w-full': isMobileDevice }"
295
+ >
296
+ <TextWrapper
297
+ :text-style="submitButtonTextStyle"
298
+ :text="viewModel.buttonText"
299
+ class="tw-text-center tw-text-base"
300
+ />
301
+ </button>
302
+ </div>
301
303
  </div>
302
304
  <p v-if="hasSubmitError" class="tw-text-center tw-mt-2 form-error">
303
305
  {{ submitError }}
@@ -414,18 +416,22 @@
414
416
  {{ value.error }}
415
417
  </p>
416
418
  </div>
417
- <button
418
- v-if="isSubmitButtonVisible"
419
- class="tw-block tw-border-0 tw-py-2 tw-select-none tw-text-base tw-text-center tw-w-fit hover:tw-cursor-pointer tw-px-8 tw-py-3 c-button-full-width"
420
- :style="submitButtonStyle"
421
- :class="{ 'tw-w-full tw-col-span-2': isMobileDevice }"
419
+ <div
420
+ class="tw-flex tw-w-full tw-justify-center tw-col-span-2"
422
421
  >
423
- <TextWrapper
424
- :text-style="submitButtonTextStyle"
425
- :text="viewModel.buttonText"
426
- class="tw-text-center tw-text-base"
427
- />
428
- </button>
422
+ <button
423
+ v-if="isSubmitButtonVisible"
424
+ class="tw-block tw-border-0 tw-py-2 tw-select-none tw-text-base tw-text-center tw-w-fit hover:tw-cursor-pointer tw-px-8 tw-py-3 c-button-full"
425
+ :style="submitButtonStyle"
426
+ :class="{ 'tw-w-full': isMobileDevice }"
427
+ >
428
+ <TextWrapper
429
+ :text-style="submitButtonTextStyle"
430
+ :text="viewModel.buttonText"
431
+ class="tw-text-center tw-text-base"
432
+ />
433
+ </button>
434
+ </div>
429
435
  </div>
430
436
  <div v-else class="tw-w-full tw-flex tw-justify-center">
431
437
  <Loader />
@@ -498,9 +504,6 @@ export default {
498
504
  }
499
505
 
500
506
  @media (max-width: 767px) {
501
- .c-button-full-width {
502
- @apply tw-w-full tw-col-span-2;
503
- }
504
507
  .c-button-full {
505
508
  @apply tw-w-full;
506
509
  }
@@ -115,14 +115,18 @@ export default defineComponent({
115
115
  deep: true,
116
116
 
117
117
  handler(newImages) {
118
- this.carouselImages = cloneDeep(newImages);
118
+ this.carouselImages = cloneDeep(newImages).map(
119
+ ({ width, height, ...rest }) => rest,
120
+ );
119
121
  },
120
122
  },
121
123
  },
122
124
  created() {
123
125
  // FIXME - types for this were added on 6/6/24 and usage of cloneDeep here fails type check
124
126
  // @ts-ignore
125
- this.carouselImages = cloneDeep(this.images);
127
+ this.carouselImages = cloneDeep(this.images).map(
128
+ ({ width, height, ...rest }) => rest,
129
+ );
126
130
  },
127
131
  methods: {
128
132
  checkImageModalImageComplete() {
@@ -62,11 +62,7 @@
62
62
  isAlternateRow || shouldHorizontalAlign,
63
63
  'c_text-media--shape': isCardCenteredWithShapes,
64
64
  }"
65
- :style="
66
- isCardCenteredAlign && item.imageUrl
67
- ? (viewModel.cardStyle as any)
68
- : {}
69
- "
65
+ :style="isCardCenteredAlign ? (viewModel.cardStyle as any) : {}"
70
66
  >
71
67
  <div
72
68
  class="tw-flex tw-items-center tw-justify-center"