@designcrowd/library.brand-page 6.2.11 → 6.2.12

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 (576) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DDcraD5S.js → CreatedOnBrandCrowd-de-de-BtVKllNQ.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DtOeaisf.js → CreatedOnBrandCrowd-en-us-CX5V0v8u.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-BZpmJPew.js → CreatedOnBrandCrowd-es-es-CbA02PCL.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CqRwC4e7.js → CreatedOnBrandCrowd-fr-ca-BQAKruBF.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CqRwC4e7.js → CreatedOnBrandCrowd-fr-fr-BQAKruBF.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-DId9Dfjh.js → CreatedOnBrandCrowd-pt-br-Yk_yzB3s.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-DId9Dfjh.js → CreatedOnBrandCrowd-pt-pt-Yk_yzB3s.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-BTDfmOcm.js → CreatedOnDcom-de-de-DJZQbPSD.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-CeAu9Ayx.js → CreatedOnDcom-en-us-BJvNAa4l.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-WCv0K41H.js → CreatedOnDcom-es-es-CUwB1FRY.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-BlfevQDY.js → CreatedOnDcom-fr-ca-CK54U4oh.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-Cvt7MHPZ.js → CreatedOnDcom-fr-fr-DuUNBGrM.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-DipZuylv.js → CreatedOnDcom-pt-br-BfODpFNV.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-BCw4lcKN.js → CreatedOnDcom-pt-pt-Cf6u2GCg.js} +1 -1
  15. package/lib/src/brand-page/__fixtures__/production-text-style-resolver.fixture.d.ts +16 -0
  16. package/lib/src/brand-page/__fixtures__/production-text-style-resolver.fixture.js +35 -0
  17. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +3 -0
  18. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +19 -13
  19. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +3 -1
  20. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +17 -2
  21. package/lib/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.mixin.d.ts +11 -3
  22. package/lib/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.mixin.js +35 -1
  23. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.d.ts +8 -2
  24. package/lib/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.js +27 -3
  25. package/lib/src/brand-page/components/page/Page.mixin.d.ts +5 -2
  26. package/lib/src/brand-page/components/page/Page.mixin.js +33 -27
  27. package/lib/src/brand-page/components/page-footer/PageFooter.mixin.d.ts +7 -2
  28. package/lib/src/brand-page/components/page-footer/PageFooter.mixin.js +21 -1
  29. package/lib/src/brand-page/components/payment/Payment.mixin.d.ts +5 -2
  30. package/lib/src/brand-page/components/payment/Payment.mixin.js +22 -2
  31. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +6 -2
  32. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +32 -1
  33. package/lib/src/brand-page/components/social-links/SocialLinks.stories.js +0 -3
  34. package/lib/src/brand-page/components/testimonial-section/__fixtures__/data.js +0 -3
  35. package/lib/src/brand-page/components/text/Text.stories.js +0 -17
  36. package/lib/src/brand-page/constants/font.constants.d.ts +62 -0
  37. package/lib/src/brand-page/constants/font.constants.js +35 -0
  38. package/lib/src/brand-page/models/index.d.ts +23 -24
  39. package/lib/src/brand-page/models/index.js +20 -7
  40. package/lib/src/brand-page/models/navigation-styles.model.d.ts +1 -1
  41. package/lib/src/brand-page/models/navigation-styles.model.js +17 -8
  42. package/lib/src/brand-page/models/payment.model.d.ts +11 -6
  43. package/lib/src/brand-page/models/styles.model.d.ts +53 -7
  44. package/lib/src/brand-page/models/styles.model.js +115 -27
  45. package/lib/src/brand-page/utils/color-palette.util.d.ts +43 -23
  46. package/lib/src/brand-page/utils/color-palette.util.js +65 -27
  47. package/lib/src/brand-page/utils/color.util.d.ts +13 -9
  48. package/lib/src/brand-page/utils/color.util.js +56 -15
  49. package/lib/src/brand-page/utils/container-text-color.util.d.ts +46 -13
  50. package/lib/src/brand-page/utils/container-text-color.util.js +321 -41
  51. package/lib/src/brand-page/utils/index.d.ts +1 -0
  52. package/lib/src/brand-page/utils/index.js +1 -0
  53. package/lib/src/brand-page/utils/migration/migration-20.js +6 -2
  54. package/lib/src/brand-page/utils/migration/migration-21.js +34 -6
  55. package/lib/src/brand-page/utils/migration/migration-22.d.ts +99 -0
  56. package/lib/src/brand-page/utils/migration/migration-22.js +909 -0
  57. package/lib/src/brand-page/utils/migration.util.js +17 -0
  58. package/lib/src/brand-page/utils/model.util.d.ts +4 -0
  59. package/lib/src/brand-page/utils/model.util.js +4 -0
  60. package/lib/src/brand-page/utils/personalisation.util.js +9 -1
  61. package/lib/src/brand-page/utils/rte-role-lift.util.d.ts +72 -0
  62. package/lib/src/brand-page/utils/rte-role-lift.util.js +275 -0
  63. package/lib/src/brand-page/utils/style.util.d.ts +5 -1
  64. package/lib/src/brand-page/utils/style.util.js +34 -11
  65. package/lib/src/brand-page/utils/text-role-css.util.d.ts +19 -0
  66. package/lib/src/brand-page/utils/text-role-css.util.js +186 -0
  67. package/lib/src/brand-page/utils/text-role-reconnect.util.d.ts +90 -0
  68. package/lib/src/brand-page/utils/text-role-reconnect.util.js +434 -0
  69. package/lib/src/brand-page/utils/text-style.util.d.ts +53 -23
  70. package/lib/src/brand-page/utils/text-style.util.js +122 -22
  71. package/lib/src/brand-page/utils/view-model.util.d.ts +9 -1
  72. package/lib/src/brand-page/utils/view-model.util.js +124 -111
  73. package/lib/src/brand-page/view-models.d.ts +1 -0
  74. package/lib/src/brand-page-maker/components/action-bar/ActionBar.mixin.d.ts +4 -1
  75. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +13 -2
  76. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.js +4 -4
  77. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMakerTemplateSettings.mixin.d.ts +4 -1
  78. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.js +0 -10
  79. package/lib/src/brand-page-maker/components/brand-page-maker/__fixtures__/content-settings-items.fixture.js +0 -1
  80. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +23 -138
  81. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.js +0 -28
  82. package/lib/src/brand-page-maker/components/brandpage-settings/ReplaceImageSettingsForBrandPageSettings.mixin.d.ts +4 -1
  83. package/lib/src/brand-page-maker/components/navigation/Navigation.mixin.d.ts +1 -1
  84. package/lib/src/brand-page-maker/components/seo-settings/SeoPageSettings.mixin.d.ts +5 -2
  85. package/lib/src/brand-page-maker/components/seo-settings/UrlSettings.mixin.d.ts +4 -1
  86. package/lib/src/brand-page-maker/components/social-share/SocialShare.mixin.d.ts +4 -1
  87. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.d.ts +4 -1
  88. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +1 -0
  89. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.js +1 -0
  90. package/lib/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.js +1 -0
  91. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.d.ts +16 -0
  92. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.js +61 -0
  93. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RteClipboard.d.ts +11 -0
  94. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/RteClipboard.js +236 -0
  95. package/lib/src/brand-page-maker/composables/rich-text-editor/font.d.ts +2 -1
  96. package/lib/src/brand-page-maker/composables/rich-text-editor/font.js +25 -6
  97. package/lib/src/brand-page-maker/composables/rich-text-editor/formatting.d.ts +17 -4
  98. package/lib/src/brand-page-maker/composables/rich-text-editor/formatting.js +204 -17
  99. package/lib/src/brand-page-maker/composables/rich-text-editor/hyperlink.d.ts +1 -1
  100. package/lib/src/brand-page-maker/composables/rich-text-editor/hyperlink.js +29 -31
  101. package/lib/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.d.ts +20 -0
  102. package/lib/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.js +60 -0
  103. package/lib/src/brand-page-maker/composables/rich-text-editor/spacing.d.ts +2 -1
  104. package/lib/src/brand-page-maker/composables/rich-text-editor/spacing.js +22 -6
  105. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +10 -4
  106. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +319 -275
  107. package/lib/src/brand-page-maker/constants/config-settings-constant.js +1 -5
  108. package/lib/src/brand-page-maker/convertors/text-css-style-options.convertor.js +6 -2
  109. package/lib/src/brand-page-maker/convertors/text-size-value.convertor.d.ts +1 -1
  110. package/lib/src/brand-page-maker/convertors/text-size-value.convertor.js +3 -1
  111. package/lib/src/brand-page-maker/default-getters/payment-text-and-border-color.default-getter.js +7 -14
  112. package/lib/src/brand-page-maker/default-getters/text-color.default-getter.js +6 -13
  113. package/lib/src/brand-page-maker/models/content-settings.d.ts +8 -0
  114. package/lib/src/brand-page-maker/models/content-settings.js +112 -81
  115. package/lib/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.d.ts +2 -2
  116. package/lib/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.js +5 -2
  117. package/lib/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.js +4 -3
  118. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +1257 -117
  119. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.d.ts +6 -1
  120. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +17 -9
  121. package/lib/src/brand-page-maker/stores/history/history-store.d.ts +59 -5
  122. package/lib/src/brand-page-maker/stores/history/history-store.js +22 -2
  123. package/lib/src/brand-page-maker/utils/apply-color-strategy.js +26 -8
  124. package/lib/src/brand-page-maker/utils/index.d.ts +2 -1
  125. package/lib/src/brand-page-maker/utils/index.js +2 -1
  126. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +117 -15
  127. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +435 -281
  128. package/lib/src/brand-page-maker/utils/rte-authoring.util.d.ts +4 -0
  129. package/lib/src/brand-page-maker/utils/rte-authoring.util.js +101 -0
  130. package/lib/src/brand-page-maker/utils/rte-clipboard.util.d.ts +126 -0
  131. package/lib/src/brand-page-maker/utils/rte-clipboard.util.js +307 -0
  132. package/lib/src/brand-page-maker/utils/rte-sanitize.util.js +13 -3
  133. package/lib/src/{bundled-translations-zfiA5Tsw.js → bundled-translations-yGrvPE5i.js} +17 -17
  134. package/lib/src/{bundled-translations.de-DE-ChsdSyAP.js → bundled-translations.de-DE-L4Znf8Hs.js} +17 -17
  135. package/lib/src/{bundled-translations.es-ES-DflsWQK0.js → bundled-translations.es-ES-D6iticrK.js} +15 -15
  136. package/lib/src/{bundled-translations.fr-CA-fpDRuZ52.js → bundled-translations.fr-CA-BgAVE-9k.js} +25 -25
  137. package/lib/src/{bundled-translations.fr-FR-Bub73Zt-.js → bundled-translations.fr-FR-B8GbyqxQ.js} +17 -17
  138. package/lib/src/{bundled-translations.pt-BR-BlnWE9TB.js → bundled-translations.pt-BR-DjPU3Db7.js} +25 -25
  139. package/lib/src/{bundled-translations.pt-PT-DmzXlnaS.js → bundled-translations.pt-PT-BaepaDpr.js} +23 -23
  140. package/lib/src/bundles/bundled-translations.de-DE.json +21 -2
  141. package/lib/src/bundles/bundled-translations.es-ES.json +21 -2
  142. package/lib/src/bundles/bundled-translations.fr-CA.json +21 -2
  143. package/lib/src/bundles/bundled-translations.fr-FR.json +21 -2
  144. package/lib/src/bundles/bundled-translations.json +21 -2
  145. package/lib/src/bundles/bundled-translations.pt-BR.json +21 -2
  146. package/lib/src/bundles/bundled-translations.pt-PT.json +21 -2
  147. package/lib/src/clients/ai-assistant-client.d.ts +1 -0
  148. package/lib/src/composables/useTranslate.d.ts +1 -1
  149. package/lib/src/composables/useTranslate.js +1 -1
  150. package/lib/src/css/library.brand-page-brandCrowd.min.css +303 -207
  151. package/lib/src/css/library.brand-page-brandPage.min.css +303 -207
  152. package/lib/src/css/library.brand-page-designCom.min.css +303 -207
  153. package/lib/src/css/library.brand-page-preview.min.css +303 -207
  154. package/lib/src/index.d.ts +2 -1
  155. package/lib/src/index.mjs +195 -191
  156. package/lib/src/{lib-1AqtEmvQ.js → lib-kGRlD3_P.js} +36855 -33893
  157. package/lib/src/lib.js +2 -1
  158. package/lib/src/metadata-builder/builders/footer-builder.js +4 -5
  159. package/lib/src/metadata-builder/builders/global-role-propagation.d.ts +58 -0
  160. package/lib/src/metadata-builder/builders/global-role-propagation.js +246 -0
  161. package/lib/src/metadata-builder/builders/global-styles-builder.d.ts +1 -0
  162. package/lib/src/metadata-builder/builders/global-styles-builder.js +116 -45
  163. package/lib/src/metadata-builder/builders/header-builder.js +13 -4
  164. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +3 -3
  165. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +3 -3
  166. package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.js +3 -3
  167. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +4 -4
  168. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +3 -3
  169. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +2 -2
  170. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +2 -2
  171. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +4 -4
  172. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +3 -3
  173. package/lib/src/metadata-builder/builders/section-builders/social-links-builder.js +8 -2
  174. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +2 -2
  175. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +60 -29
  176. package/lib/src/metadata-builder/builders/section-field-maps.js +1 -0
  177. package/lib/src/metadata-builder/builders/section-field-utils.d.ts +48 -19
  178. package/lib/src/metadata-builder/builders/section-field-utils.js +128 -52
  179. package/lib/src/metadata-builder/builders/section-rules/global-styles.rules.d.ts +4 -2
  180. package/lib/src/metadata-builder/builders/section-rules/global-styles.rules.js +28 -12
  181. package/lib/src/metadata-builder/builders/section-rules/social-links.rules.js +5 -1
  182. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +1 -1
  183. package/lib/src/metadata-builder/helpers/rte.helpers.js +97 -40
  184. package/lib/src/metadata-builder/metadata-executor.js +23 -1
  185. package/lib/src/metadata-builder/models.d.ts +2 -0
  186. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +18 -19
  187. package/lib/src/metadata-builder/parsers/section-tool-arguments.d.ts +18 -1
  188. package/lib/src/metadata-builder/sanitizers/rte-schema-check.js +1 -1
  189. package/lib/src/metadata-builder/sanitizers/sanitizer-rules.d.ts +0 -1
  190. package/lib/src/metadata-builder/sanitizers/sanitizer-rules.js +5 -8
  191. package/lib/src/metadata-builder/sanitizers/section-args-validator.d.ts +7 -16
  192. package/lib/src/metadata-builder/sanitizers/section-args-validator.js +95 -22
  193. package/lib/src/shared/color-palette/section-color-matches.js +9 -25
  194. package/lib/src/shared/color-strategies/color-strategies.d.ts +15 -0
  195. package/lib/src/shared/color-strategies/color-strategies.js +31 -0
  196. package/lib/src/shared/color-strategies/rte-color.d.ts +8 -0
  197. package/lib/src/shared/color-strategies/rte-color.js +16 -0
  198. package/lib/src/shared/color-strategies/rte-field-pairs.d.ts +23 -0
  199. package/lib/src/shared/color-strategies/rte-field-pairs.js +28 -0
  200. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +9 -135
  201. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.js +1 -27
  202. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +12 -2
  203. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +7 -0
  204. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +75 -6
  205. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +18 -7
  206. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +6 -1
  207. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +0 -7
  208. package/lib/src/shared/content-settings/components/payment-config-field/PaymentConfigField.mixin.d.ts +1 -0
  209. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +8 -4
  210. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +1255 -26
  211. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.js +203 -59
  212. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +6 -0
  213. package/lib/src/shared/content-settings/store/content-settings-store.js +105 -8
  214. package/lib/src/shared/logo-settings/components/LogoSettings.mixin.d.ts +5 -1
  215. package/lib/src/shared/navigation-style-settings/store/index.d.ts +7 -3
  216. package/lib/src/shared/navigation-style-settings/store/index.js +40 -15
  217. package/lib/src/shared/page-settings/components/delete-page-modal/DeletePageModal.mixin.d.ts +1 -1
  218. package/lib/src/shared/page-settings/components/new-page-modal/NewPageModal.mixin.d.ts +1 -0
  219. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +17 -5
  220. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +70 -13
  221. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +10 -2
  222. package/lib/src/shared/page-settings/store/page-settings-store.d.ts +2 -1
  223. package/lib/src/shared/page-settings/store/page-settings-store.js +17 -0
  224. package/lib/src/shared/publish-brand-page-with-state/PublishBrandPageModalWithState.mixin.d.ts +4 -1
  225. package/lib/src/shared/rte-extensions/AutoLink.d.ts +17 -0
  226. package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/AutoLink.js +67 -51
  227. package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/MaxLength.js +4 -1
  228. package/lib/src/shared/rte-extensions/TextEffects.d.ts +28 -0
  229. package/lib/src/shared/rte-extensions/TextEffects.js +96 -0
  230. package/lib/src/shared/rte-extensions/ViewDomParser.d.ts +2 -0
  231. package/lib/src/shared/rte-extensions/ViewDomParser.js +21 -0
  232. package/lib/src/shared/rte-extensions.util.d.ts +25 -0
  233. package/lib/src/{brand-page-maker/composables/rich-text-editor/getRteExtensions.js → shared/rte-extensions.util.js} +62 -7
  234. package/lib/src/shared/rte-link.util.d.ts +1 -0
  235. package/lib/src/shared/rte-link.util.js +1 -0
  236. package/lib/src/shared/rte-render.util.d.ts +112 -0
  237. package/lib/src/shared/rte-render.util.js +255 -0
  238. package/lib/src/shared/rte-shape.util.d.ts +6 -0
  239. package/lib/src/shared/rte-shape.util.js +18 -0
  240. package/lib/src/shared/side-bar/components/SideBar.mixin.d.ts +2 -1
  241. package/lib/src/shared/side-bar/components/SideBarTabButton.mixin.d.ts +1 -0
  242. package/lib/src/shared/side-bar/store/side-bar-store.d.ts +2 -0
  243. package/lib/src/shared/side-bar/store/side-bar-store.js +9 -0
  244. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +155 -15
  245. package/lib/src/shared/style-settings/components/StyleSettings.mixin.js +7 -1
  246. package/lib/src/shared/style-settings/store/style-settings-store.d.ts +1 -9
  247. package/lib/src/shared/style-settings/store/style-settings-store.js +3 -33
  248. package/lib/src/shared/style-settings/text-style-size-order.d.ts +2 -0
  249. package/lib/src/shared/style-settings/text-style-size-order.js +13 -0
  250. package/lib/src/shared/text-role-typography.util.d.ts +64 -0
  251. package/lib/src/shared/text-role-typography.util.js +183 -0
  252. package/lib/src/utils/minify-brand-page-metadata.d.ts +16 -1
  253. package/lib/src/utils/minify-brand-page-metadata.js +31 -9
  254. package/package.json +1 -1
  255. package/src/brand-page/__fixtures__/migration-22-v21/edited-brandsite-sections.v21.json +982 -0
  256. package/src/brand-page/__fixtures__/migration-22-v21/new-brandcontact-every-section.v21.json +1231 -0
  257. package/src/brand-page/__fixtures__/migration-22-v21/new-brandpage-every-section.v21.json +1231 -0
  258. package/src/brand-page/__fixtures__/migration-22-v21/new-brandsite-every-section.v21.json +1243 -0
  259. package/src/brand-page/__fixtures__/migration-22-v21/real-brandcontact.v21.json +755 -0
  260. package/src/brand-page/__fixtures__/migration-22-v21/real-brandpage-general-link.v21.json +527 -0
  261. package/src/brand-page/__fixtures__/migration-22-v21/real-brandpage-links.v21.json +755 -0
  262. package/src/brand-page/__fixtures__/migration-22-v21/real-brandpage-social-links.v21.json +514 -0
  263. package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-about.v21.json +459 -0
  264. package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-footer.v21.json +469 -0
  265. package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-header-banner.v21.json +481 -0
  266. package/src/brand-page/__fixtures__/migration-22-v21/real-brandsite-sections.v21.json +800 -0
  267. package/src/brand-page/__fixtures__/production-text-style-resolver.fixture.ts +52 -0
  268. package/src/brand-page/components/about-section/AboutSection.vue.test.ts +0 -10
  269. package/src/brand-page/components/contact-form/ContactForm.mixin.test.ts +127 -0
  270. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +31 -14
  271. package/src/brand-page/components/contact-form/ContactForm.vue +26 -12
  272. package/src/brand-page/components/contact-form/ContactForm.vue.test.ts +60 -0
  273. package/src/brand-page/components/mailing-list/MailingList.mixin.test.ts +92 -0
  274. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +28 -3
  275. package/src/brand-page/components/mailing-list/MailingList.vue +9 -4
  276. package/src/brand-page/components/mailing-list/MailingList.vue.test.ts +63 -0
  277. package/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.mixin.ts +51 -1
  278. package/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.test.ts +114 -0
  279. package/src/brand-page/components/navigation/button-carousel/ButtonCarouselNavigation.vue +8 -2
  280. package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.test.ts +182 -0
  281. package/src/brand-page/components/navigation/navigation-carousel/NavigationCarousel.vue +59 -12
  282. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.mixin.ts +40 -3
  283. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue +15 -7
  284. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue.test.ts +133 -3
  285. package/src/brand-page/components/page/Page.mixin.ts +41 -34
  286. package/src/brand-page/components/page/Page.vue +17 -6
  287. package/src/brand-page/components/page/Page.vue.test.ts +91 -1
  288. package/src/brand-page/components/page-footer/PageFooter.mixin.ts +32 -2
  289. package/src/brand-page/components/page-footer/PageFooter.test.ts +79 -0
  290. package/src/brand-page/components/page-footer/PageFooter.vue +12 -4
  291. package/src/brand-page/components/payment/Payment.mixin.ts +34 -2
  292. package/src/brand-page/components/payment/Payment.test.ts +188 -0
  293. package/src/brand-page/components/payment/Payment.vue +12 -5
  294. package/src/brand-page/components/payment/RequestPaymentStripe.vue +1 -0
  295. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +49 -2
  296. package/src/brand-page/components/payment/support-me/SupportMe.test.ts +100 -0
  297. package/src/brand-page/components/payment/support-me/SupportMe.vue +7 -1
  298. package/src/brand-page/components/payment/support-me/SupportMe.vue.test.ts +66 -0
  299. package/src/brand-page/components/save-contact/SaveContactWidget.test.ts +100 -0
  300. package/src/brand-page/components/save-contact/SaveContactWidget.vue +6 -3
  301. package/src/brand-page/components/shop/PaymentModal.vue +2 -6
  302. package/src/brand-page/components/shop/PaymentShippingAddress.vue +6 -0
  303. package/src/brand-page/components/shop/Shop.vue +15 -2
  304. package/src/brand-page/components/shop/Shop.vue.test.ts +74 -2
  305. package/src/brand-page/components/social-links/SocialLinks.stories.ts +0 -3
  306. package/src/brand-page/components/social-links/SocialLinks.vue.test.ts +0 -3
  307. package/src/brand-page/components/testimonial-section/__fixtures__/data.ts +0 -3
  308. package/src/brand-page/components/text/Text.stories.ts +0 -17
  309. package/src/brand-page/components/text-wrapper/TextWrapper.parity.test.ts +136 -0
  310. package/src/brand-page/components/text-wrapper/TextWrapper.test.ts +358 -0
  311. package/src/brand-page/components/text-wrapper/TextWrapper.vue +82 -22
  312. package/src/brand-page/constants/font.constants.ts +37 -0
  313. package/src/brand-page/models/footer-icon-color.test.ts +22 -0
  314. package/src/brand-page/models/index.ts +50 -28
  315. package/src/brand-page/models/navigation-styles.model.test.ts +77 -1
  316. package/src/brand-page/models/navigation-styles.model.ts +26 -9
  317. package/src/brand-page/models/payment.model.ts +15 -6
  318. package/src/brand-page/models/styles.model.test.ts +104 -0
  319. package/src/brand-page/models/styles.model.ts +181 -47
  320. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +619 -115
  321. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +150 -9
  322. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +300 -18
  323. package/src/brand-page/utils/color-palette.util.test.ts +126 -1
  324. package/src/brand-page/utils/color-palette.util.ts +92 -26
  325. package/src/brand-page/utils/color.util.test.ts +62 -29
  326. package/src/brand-page/utils/color.util.ts +77 -14
  327. package/src/brand-page/utils/container-text-color.util.test.ts +672 -26
  328. package/src/brand-page/utils/container-text-color.util.ts +472 -46
  329. package/src/brand-page/utils/index.ts +1 -0
  330. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/edited-brandsite-sections.v22.json +1191 -0
  331. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandcontact-every-section.v22.json +2026 -0
  332. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandpage-every-section.v22.json +2017 -0
  333. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/new-brandsite-every-section.v22.json +2031 -0
  334. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandcontact.v22.json +1145 -0
  335. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-general-link.v22.json +645 -0
  336. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-links.v22.json +1136 -0
  337. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandpage-social-links.v22.json +662 -0
  338. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-about.v22.json +638 -0
  339. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-footer.v22.json +610 -0
  340. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-header-banner.v22.json +660 -0
  341. package/src/brand-page/utils/migration/__snapshots__/migration-22-output/real-brandsite-sections.v22.json +1132 -0
  342. package/src/brand-page/utils/migration/migration-01.ts +293 -237
  343. package/src/brand-page/utils/migration/migration-02.ts +8 -1
  344. package/src/brand-page/utils/migration/migration-20.ts +6 -3
  345. package/src/brand-page/utils/migration/migration-20_5.test.ts +5 -2
  346. package/src/brand-page/utils/migration/migration-21.test.ts +34 -0
  347. package/src/brand-page/utils/migration/migration-21.ts +46 -10
  348. package/src/brand-page/utils/migration/migration-22.fixed-input.test.ts +43 -0
  349. package/src/brand-page/utils/migration/migration-22.test.ts +4103 -0
  350. package/src/brand-page/utils/migration/migration-22.text-font-family.test.ts +72 -0
  351. package/src/brand-page/utils/migration/migration-22.ts +1336 -0
  352. package/src/brand-page/utils/migration.util.test.ts +146 -32
  353. package/src/brand-page/utils/migration.util.ts +18 -0
  354. package/src/brand-page/utils/model.util.ts +4 -0
  355. package/src/brand-page/utils/personalisation.util.test.ts +148 -3
  356. package/src/brand-page/utils/personalisation.util.ts +9 -1
  357. package/src/brand-page/utils/rte-role-lift.util.ts +409 -0
  358. package/src/brand-page/utils/style.util.test.ts +35 -2
  359. package/src/brand-page/utils/style.util.ts +45 -11
  360. package/src/brand-page/utils/text-role-css.util.test.ts +525 -0
  361. package/src/brand-page/utils/text-role-css.util.ts +321 -0
  362. package/src/brand-page/utils/text-role-reconnect.util.test.ts +604 -0
  363. package/src/brand-page/utils/text-role-reconnect.util.ts +727 -0
  364. package/src/brand-page/utils/text-style.util.test.ts +305 -0
  365. package/src/brand-page/utils/text-style.util.ts +198 -24
  366. package/src/brand-page/utils/view-model.page-data.test.ts +232 -0
  367. package/src/brand-page/utils/view-model.util.test.ts +954 -133
  368. package/src/brand-page/utils/view-model.util.ts +187 -139
  369. package/src/brand-page/view-models.ts +4 -0
  370. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.blank-site.test.ts +57 -0
  371. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.ts +9 -5
  372. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/brand-page-examples.ts +0 -10
  373. package/src/brand-page-maker/components/brand-page-maker/__fixtures__/content-settings-items.fixture.ts +0 -1
  374. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.ts +0 -44
  375. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +253 -200
  376. package/src/brand-page-maker/components/shop/AddOrEditProductContainer.vue +1 -0
  377. package/src/brand-page-maker/components/template-preview/TemplatePreview.vue +1 -0
  378. package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +2 -0
  379. package/src/brand-page-maker/composables/ai-chat/useAiWebsiteBuilderChat.ts +1 -0
  380. package/src/brand-page-maker/composables/rich-text-editor/block-typography.test.ts +519 -0
  381. package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.test.ts +1 -1
  382. package/src/brand-page-maker/composables/rich-text-editor/extensions/MaxLength.test.ts +26 -1
  383. package/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.test.ts +110 -0
  384. package/src/brand-page-maker/composables/rich-text-editor/extensions/RoleTypographyFill.ts +99 -0
  385. package/src/brand-page-maker/composables/rich-text-editor/extensions/RteClipboard.ts +397 -0
  386. package/src/brand-page-maker/composables/rich-text-editor/extensions/ViewDomParser.test.ts +139 -0
  387. package/src/brand-page-maker/composables/rich-text-editor/font.ts +36 -5
  388. package/src/brand-page-maker/composables/rich-text-editor/formatting.test.ts +375 -1
  389. package/src/brand-page-maker/composables/rich-text-editor/formatting.ts +301 -17
  390. package/src/brand-page-maker/composables/rich-text-editor/hyperlink.test.ts +82 -1
  391. package/src/brand-page-maker/composables/rich-text-editor/hyperlink.ts +28 -34
  392. package/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.test.ts +80 -0
  393. package/src/brand-page-maker/composables/rich-text-editor/keepMarksOnEmpty.ts +75 -0
  394. package/src/brand-page-maker/composables/rich-text-editor/spacing.ts +31 -6
  395. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.test.ts +2485 -0
  396. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +435 -337
  397. package/src/brand-page-maker/constants/config-settings-constant.ts +0 -6
  398. package/src/brand-page-maker/convertors/text-css-style-options.convertor.test.ts +43 -0
  399. package/src/brand-page-maker/convertors/text-css-style-options.convertor.ts +6 -2
  400. package/src/brand-page-maker/convertors/text-size-value.convertor.test.ts +24 -0
  401. package/src/brand-page-maker/convertors/text-size-value.convertor.ts +17 -13
  402. package/src/brand-page-maker/default-getters/payment-text-and-border-color.default-getter.ts +7 -22
  403. package/src/brand-page-maker/default-getters/text-color.default-getter.ts +5 -21
  404. package/src/brand-page-maker/models/content-settings.test.ts +708 -0
  405. package/src/brand-page-maker/models/content-settings.ts +133 -82
  406. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.test.ts +63 -1
  407. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store-utils.ts +16 -3
  408. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.test.ts +34 -0
  409. package/src/brand-page-maker/stores/admin-logo-settings/admin-logo-settings-store.ts +4 -2
  410. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +185 -1
  411. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +22 -34
  412. package/src/brand-page-maker/stores/history/history-store.ts +35 -2
  413. package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +528 -0
  414. package/src/brand-page-maker/utils/__snapshots__/rte-render-parity.test.ts.snap +12 -0
  415. package/src/brand-page-maker/utils/apply-color-strategy.golden.test.ts +2 -0
  416. package/src/brand-page-maker/utils/apply-color-strategy.test.ts +181 -3
  417. package/src/brand-page-maker/utils/apply-color-strategy.ts +36 -4
  418. package/src/brand-page-maker/utils/index.ts +2 -1
  419. package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +447 -410
  420. package/src/brand-page-maker/utils/rich-text-editor.util.ts +610 -506
  421. package/src/brand-page-maker/utils/rte-authoring.util.test.ts +244 -0
  422. package/src/brand-page-maker/utils/rte-authoring.util.ts +175 -0
  423. package/src/brand-page-maker/utils/rte-clipboard.util.test.ts +558 -0
  424. package/src/brand-page-maker/utils/rte-clipboard.util.ts +473 -0
  425. package/src/brand-page-maker/utils/rte-features.test.ts +99 -3
  426. package/src/brand-page-maker/utils/rte-render-parity.test.ts +1 -1
  427. package/src/brand-page-maker/utils/rte-render.util.test.ts +230 -0
  428. package/src/brand-page-maker/utils/rte-sanitize-json.test.ts +1 -1
  429. package/src/brand-page-maker/utils/rte-sanitize.util.ts +14 -3
  430. package/src/brand-page-maker/utils/rte-schema-version.test.ts +102 -0
  431. package/src/bundles/bundled-translations.de-DE.json +21 -2
  432. package/src/bundles/bundled-translations.es-ES.json +21 -2
  433. package/src/bundles/bundled-translations.fr-CA.json +21 -2
  434. package/src/bundles/bundled-translations.fr-FR.json +21 -2
  435. package/src/bundles/bundled-translations.json +21 -2
  436. package/src/bundles/bundled-translations.pt-BR.json +21 -2
  437. package/src/bundles/bundled-translations.pt-PT.json +21 -2
  438. package/src/clients/ai-assistant-client.ts +1 -0
  439. package/src/composables/useTranslate.ts +2 -1
  440. package/src/lib.ts +2 -2
  441. package/src/metadata-builder/builders/footer-builder.test.ts +70 -45
  442. package/src/metadata-builder/builders/footer-builder.ts +4 -8
  443. package/src/metadata-builder/builders/global-role-propagation.test.ts +907 -0
  444. package/src/metadata-builder/builders/global-role-propagation.ts +430 -0
  445. package/src/metadata-builder/builders/global-styles-builder.test.ts +1020 -0
  446. package/src/metadata-builder/builders/global-styles-builder.ts +194 -48
  447. package/src/metadata-builder/builders/header-builder.test.ts +112 -40
  448. package/src/metadata-builder/builders/header-builder.ts +18 -8
  449. package/src/metadata-builder/builders/section-builders/about-section-builder.ts +5 -3
  450. package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +5 -3
  451. package/src/metadata-builder/builders/section-builders/booking-section-builder.ts +5 -3
  452. package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +7 -4
  453. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +5 -3
  454. package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +3 -2
  455. package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +3 -2
  456. package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +7 -7
  457. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +5 -3
  458. package/src/metadata-builder/builders/section-builders/social-links-builder.test.ts +2 -2
  459. package/src/metadata-builder/builders/section-builders/social-links-builder.ts +21 -10
  460. package/src/metadata-builder/builders/section-builders/support-me-builder.test.ts +10 -0
  461. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +3 -2
  462. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +111 -61
  463. package/src/metadata-builder/builders/section-field-maps.ts +1 -0
  464. package/src/metadata-builder/builders/section-field-utils.test.ts +545 -2
  465. package/src/metadata-builder/builders/section-field-utils.ts +202 -69
  466. package/src/metadata-builder/builders/section-rules/global-styles.rules.ts +38 -13
  467. package/src/metadata-builder/builders/section-rules/social-links.rules.ts +5 -0
  468. package/src/metadata-builder/helpers/rte.helpers.test.ts +101 -0
  469. package/src/metadata-builder/helpers/rte.helpers.ts +129 -43
  470. package/src/metadata-builder/metadata-executor.test.ts +167 -0
  471. package/src/metadata-builder/metadata-executor.ts +34 -1
  472. package/src/metadata-builder/models.ts +2 -0
  473. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +23 -7
  474. package/src/metadata-builder/parsers/section-tool-arguments.ts +21 -1
  475. package/src/metadata-builder/sanitizers/__tests__/section-args-validator.test.ts +215 -0
  476. package/src/metadata-builder/sanitizers/rte-schema-check.ts +1 -1
  477. package/src/metadata-builder/sanitizers/sanitizer-rules.ts +4 -8
  478. package/src/metadata-builder/sanitizers/section-args-validator.ts +136 -53
  479. package/src/shared/color-palette/section-color-matches.test.ts +15 -11
  480. package/src/shared/color-palette/section-color-matches.ts +9 -28
  481. package/src/shared/color-strategies/color-strategies.ts +35 -0
  482. package/src/shared/color-strategies/rte-color.test.ts +1 -1
  483. package/src/shared/color-strategies/rte-color.ts +19 -0
  484. package/src/shared/color-strategies/rte-field-pairs.test.ts +26 -5
  485. package/src/shared/color-strategies/rte-field-pairs.ts +33 -0
  486. package/src/shared/content-settings/components/color-matches-panel/ColorMatchesPanel.test.ts +43 -66
  487. package/src/shared/content-settings/components/color-matches-panel/ColorMatchesPanel.vue +7 -1
  488. package/src/shared/content-settings/components/content-settings/ContentSettings.mixin.ts +1 -48
  489. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +33 -7
  490. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.test.ts +128 -1
  491. package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.vue +1 -0
  492. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +0 -6
  493. package/src/shared/content-settings/components/logo-selection-field/LogoSelection.vue +3 -0
  494. package/src/shared/content-settings/components/logo-size-field/LogoSizeSlider.vue +3 -0
  495. package/src/shared/content-settings/components/logo-size-field/LogoSizeSliderField.vue +1 -0
  496. package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.vue +1 -0
  497. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.test.ts +56 -3
  498. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +11 -4
  499. package/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.test.ts +335 -25
  500. package/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.ts +248 -70
  501. package/src/shared/content-settings/components/text-style-field/TextStyleField.vue +113 -25
  502. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.de-DE.json +17 -10
  503. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.es-ES.json +17 -10
  504. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.fr-CA.json +17 -10
  505. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.fr-FR.json +17 -10
  506. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.json +8 -1
  507. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.pt-BR.json +17 -10
  508. package/src/shared/content-settings/components/text-style-field/i18n/text-style-field.pt-PT.json +17 -10
  509. package/src/shared/content-settings/components/text-style-role-dropdown/TextStyleRoleDropdown.test.ts +141 -0
  510. package/src/shared/content-settings/components/text-style-role-dropdown/TextStyleRoleDropdown.vue +136 -0
  511. package/src/shared/content-settings/store/content-settings-store.test.ts +491 -6
  512. package/src/shared/content-settings/store/content-settings-store.ts +159 -17
  513. package/src/shared/logo-settings/components/EditLogoSettings.vue +1 -0
  514. package/src/shared/logo-settings/components/LogoVariations.vue +1 -0
  515. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +1 -0
  516. package/src/shared/navigation-style-settings/store/index.test.ts +295 -0
  517. package/src/shared/navigation-style-settings/store/index.ts +65 -15
  518. package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.vue +2 -0
  519. package/src/shared/page-settings/components/page-settings/PageElement.vue +1 -0
  520. package/src/shared/page-settings/components/page-settings-section-styles/HeaderButtonSettings.test.ts +44 -4
  521. package/src/shared/page-settings/components/page-settings-section-styles/HeaderButtonSettings.vue +13 -4
  522. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.navigation.test.ts +89 -0
  523. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.text-style.test.ts +91 -0
  524. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +14 -2
  525. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.vue +2 -0
  526. package/src/shared/page-settings/store/page-settings-store.text-style.test.ts +84 -0
  527. package/src/shared/page-settings/store/page-settings-store.ts +30 -1
  528. package/src/shared/rte-extensions/AutoLink.test.ts +98 -0
  529. package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/AutoLink.ts +87 -58
  530. package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/MaxLength.ts +4 -1
  531. package/src/shared/rte-extensions/TextEffects.ts +151 -0
  532. package/src/shared/rte-extensions/ViewDomParser.ts +27 -0
  533. package/src/{brand-page-maker/composables/rich-text-editor/getRteExtensions.ts → shared/rte-extensions.util.ts} +66 -9
  534. package/src/shared/rte-link.util.ts +2 -0
  535. package/src/shared/rte-render.util.ts +385 -0
  536. package/src/shared/rte-shape.util.ts +29 -0
  537. package/src/shared/side-bar/store/side-bar-store.test.ts +27 -1
  538. package/src/shared/side-bar/store/side-bar-store.ts +11 -0
  539. package/src/shared/style-settings/components/StyleSettings.mixin.ts +7 -3
  540. package/src/shared/style-settings/components/StyleSettings.test.ts +116 -0
  541. package/src/shared/style-settings/components/StyleSettings.vue +75 -25
  542. package/src/shared/style-settings/components/i18n/style-settings.de-DE.json +32 -20
  543. package/src/shared/style-settings/components/i18n/style-settings.es-ES.json +32 -20
  544. package/src/shared/style-settings/components/i18n/style-settings.fr-CA.json +32 -20
  545. package/src/shared/style-settings/components/i18n/style-settings.fr-FR.json +32 -20
  546. package/src/shared/style-settings/components/i18n/style-settings.json +13 -3
  547. package/src/shared/style-settings/components/i18n/style-settings.pt-BR.json +32 -20
  548. package/src/shared/style-settings/components/i18n/style-settings.pt-PT.json +32 -20
  549. package/src/shared/style-settings/components/text-style-options-settings-with-state/TextStyleOptionsSettingsWithState.vue +14 -34
  550. package/src/shared/style-settings/store/style-settings-store.ts +3 -49
  551. package/src/shared/style-settings/text-style-size-order.test.ts +76 -0
  552. package/src/shared/style-settings/text-style-size-order.ts +28 -0
  553. package/src/shared/template-settings/components/TemplatesSettings.vue +4 -0
  554. package/src/shared/text-role-typography.util.ts +277 -0
  555. package/src/utils/minify-brand-page-metadata.test.ts +102 -7
  556. package/src/utils/minify-brand-page-metadata.ts +62 -8
  557. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/AutoLink.d.ts +0 -2
  558. package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.d.ts +0 -28
  559. package/lib/src/brand-page-maker/utils/rte-render.util.d.ts +0 -63
  560. package/lib/src/brand-page-maker/utils/rte-render.util.js +0 -106
  561. package/lib/src/brand-page-maker/utils/rte-shape.d.ts +0 -18
  562. package/lib/src/brand-page-maker/utils/rte-shape.js +0 -21
  563. package/lib/src/metadata-builder/builders/global-font-propagation.d.ts +0 -41
  564. package/lib/src/metadata-builder/builders/global-font-propagation.js +0 -146
  565. package/src/brand-page-maker/utils/rte-render.util.ts +0 -179
  566. package/src/brand-page-maker/utils/rte-shape.ts +0 -29
  567. package/src/metadata-builder/builders/global-font-propagation.test.ts +0 -401
  568. package/src/metadata-builder/builders/global-font-propagation.ts +0 -238
  569. package/src/shared/style-settings/components/StyleSettingsSection.vue +0 -8
  570. /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/FontFamily.d.ts +0 -0
  571. /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/FontFamily.js +0 -0
  572. /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/LetterSpacing.d.ts +0 -0
  573. /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/LetterSpacing.js +0 -0
  574. /package/lib/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/MaxLength.d.ts +0 -0
  575. /package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/FontFamily.ts +0 -0
  576. /package/src/{brand-page-maker/composables/rich-text-editor/extensions → shared/rte-extensions}/LetterSpacing.ts +0 -0
@@ -15,8 +15,6 @@ import {
15
15
  SUPPORT_ME_CUSTOM_PRODUCT_NAME,
16
16
  DEFAULT_LOGO_HEIGHT,
17
17
  DEFAULT_LOGO_WIDTH,
18
- FONT_SIZE_BODY,
19
- LINE_HEIGHT_BODY,
20
18
  TEXT_STYLE_TYPES,
21
19
  TEXT_COLUMNS,
22
20
  DEFAULT_LOGO_BACKGROUND_COLOR_RGB,
@@ -53,6 +51,8 @@ import type {
53
51
  SupportMeContent,
54
52
  ShopContent,
55
53
  BookingSectionContent,
54
+ TextStyleDeclaration,
55
+ TextStyleType,
56
56
  } from '@brand-page';
57
57
  import * as uuid from 'uuid';
58
58
  import type { CreateInitialContentFunction } from './content-settings-configs';
@@ -62,6 +62,8 @@ import {
62
62
  } from '@brand-page/utils';
63
63
  import type { CreateInitialContentOptions } from '@shared/content-settings/models';
64
64
  import { contentSettingsTr } from '@src/composables/useTranslate';
65
+ import { rteDoc } from '@shared/rte-render.util';
66
+ import { omitTypography } from '@shared/text-role-typography.util';
65
67
 
66
68
  export const createInitialButtonContent =
67
69
  (type: ContentType, iconUrl: string, options?: CreateInitialContentOptions) =>
@@ -118,7 +120,7 @@ export const createInitialButtonContent =
118
120
  title,
119
121
  titleStyle: {
120
122
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
121
- textStyleType: TEXT_STYLE_TYPES.buttons,
123
+ textStyleType: TEXT_STYLE_TYPES.button,
122
124
  textAlign: 'center',
123
125
  },
124
126
  url: '',
@@ -149,7 +151,7 @@ export const createInitialGeneralLinkContent =
149
151
  page: '',
150
152
  titleStyle: {
151
153
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
152
- textStyleType: TEXT_STYLE_TYPES.buttons,
154
+ textStyleType: TEXT_STYLE_TYPES.button,
153
155
  textAlign: 'center',
154
156
  },
155
157
  fieldRole: 'button',
@@ -199,27 +201,27 @@ export const createInitialProfileContent = (
199
201
  ): ProfileContent => {
200
202
  return {
201
203
  id: uuid.v4(),
202
- description: contentSettingsTr(`defaultDescription`),
204
+ description: rteDoc(contentSettingsTr(`defaultDescription`)),
203
205
  avatarImageUrl: '',
204
- name: contentSettingsTr(`nameTitle`),
205
- title: contentSettingsTr(`titleTitle`),
206
+ name: rteDoc(contentSettingsTr(`nameTitle`)),
207
+ title: rteDoc(contentSettingsTr(`titleTitle`)),
206
208
  type: 'profile',
207
209
  backgroundColor: {},
208
210
  colorReplacements: [],
209
211
  mediaType: 'image',
210
212
  titleStyle: {
211
213
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
212
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
214
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
213
215
  textAlign: 'center',
214
216
  },
215
217
  descriptionStyle: {
216
218
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
217
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
219
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
218
220
  textAlign: 'center',
219
221
  },
220
222
  nameStyle: {
221
223
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
222
- textStyleType: TEXT_STYLE_TYPES.headings,
224
+ textStyleType: TEXT_STYLE_TYPES.heading5,
223
225
  textAlign: 'center',
224
226
  },
225
227
  };
@@ -231,19 +233,18 @@ export const createInitialTextContent = (
231
233
  return {
232
234
  iconUrl: '',
233
235
  id: uuid.v4(),
234
- text: contentSettingsTr(`defaultTextValue`),
236
+ text: rteDoc(contentSettingsTr(`defaultTextValue`)),
235
237
  textItems:
236
238
  options?.brandPageType === 'brandSite'
237
239
  ? [
238
240
  {
239
241
  id: uuid.v4(),
240
- text: contentSettingsTr(`defaultTextValue`),
242
+ text: rteDoc(contentSettingsTr(`defaultTextValue`)),
241
243
  textStyle: {
242
244
  applyAutoScale:
243
245
  options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
244
- fontSize: FONT_SIZE_BODY,
245
246
  textAlign: 'left',
246
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
247
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
247
248
  },
248
249
  },
249
250
  ]
@@ -253,13 +254,9 @@ export const createInitialTextContent = (
253
254
  topPadding: options?.brandPageType === BRAND_PAGE_TYPES.brandSite ? 12 : 0,
254
255
  bottomPadding:
255
256
  options?.brandPageType === BRAND_PAGE_TYPES.brandSite ? 12 : 0,
256
- textSize: {
257
- fontSize: FONT_SIZE_BODY,
258
- lineHeight: LINE_HEIGHT_BODY,
259
- },
260
257
  textStyle: {
261
258
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
262
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
259
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
263
260
  textAlign: 'center',
264
261
  },
265
262
  columnStyle: TEXT_COLUMNS[1],
@@ -309,17 +306,17 @@ export const createInitialMailingListContent = (
309
306
  type: 'mailing-list',
310
307
  topPadding: 0,
311
308
  bottomPadding: 0,
312
- title: contentSettingsTr(`mailingListTitle`),
309
+ title: rteDoc(contentSettingsTr(`mailingListTitle`)),
313
310
  buttonText: contentSettingsTr(`subscribePlaceholder`),
314
311
  acceptedFields: 'emailOnly',
315
312
  titleStyle: {
316
313
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
317
- textStyleType: TEXT_STYLE_TYPES.headings,
314
+ textStyleType: TEXT_STYLE_TYPES.heading5,
318
315
  textAlign: 'center',
319
316
  },
320
317
  buttonTextStyle: {
321
318
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
322
- textStyleType: TEXT_STYLE_TYPES.buttons,
319
+ textStyleType: TEXT_STYLE_TYPES.button,
323
320
  textAlign: 'center',
324
321
  },
325
322
  // Card surface defaults to the neutral-light role — a light panel any global text
@@ -334,7 +331,7 @@ export const createInitialRequestPaymentContent = (
334
331
  ): RequestPaymentContent => {
335
332
  return {
336
333
  id: uuid.v4(),
337
- description: '',
334
+ description: rteDoc(''),
338
335
  displayStyle: DISPLAY_STYLE_PREVIEW,
339
336
  requestPaymentConfig: {
340
337
  paymentOptions: [],
@@ -344,7 +341,7 @@ export const createInitialRequestPaymentContent = (
344
341
  paymentOptionImageType: PAYMENT_OPTION_IMAGE_TYPES.auto,
345
342
  },
346
343
  successMessage: '',
347
- title: contentSettingsTr(`buyNowTitle`),
344
+ title: rteDoc(contentSettingsTr(`buyNowTitle`)),
348
345
  type: 'request-payment',
349
346
  topPadding: 0,
350
347
  bottomPadding: 0,
@@ -353,22 +350,25 @@ export const createInitialRequestPaymentContent = (
353
350
  selectedBorderColor: {},
354
351
  titleStyle: {
355
352
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
356
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
353
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
357
354
  textAlign: 'center',
358
355
  },
359
356
  descriptionStyle: {
360
357
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
361
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
358
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
362
359
  textAlign: 'center',
363
360
  },
361
+ successMessageStyle: {
362
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
363
+ },
364
364
  itemTextStyle: {
365
365
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
366
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
366
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
367
367
  textAlign: 'left',
368
368
  },
369
369
  buttonTextStyle: {
370
370
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
371
- textStyleType: TEXT_STYLE_TYPES.buttons,
371
+ textStyleType: TEXT_STYLE_TYPES.button,
372
372
  textAlign: 'center',
373
373
  },
374
374
  // Card surface defaults to the neutral-light role — a light panel any global text
@@ -383,35 +383,38 @@ export const createInitialShopContent = (
383
383
  ): ShopContent => {
384
384
  return {
385
385
  id: uuid.v4(),
386
- description: '',
386
+ description: rteDoc(''),
387
387
  topPadding: 16,
388
388
  bottomPadding: 16,
389
389
  products: [],
390
390
  displayStyle: PAYMENT_OPTION_DISPLAY_TYPES.thumbnail,
391
391
  aspectRatio: PAYMENT_OPTION_IMAGE_TYPES.auto,
392
- title: contentSettingsTr(`shopTitle`),
392
+ title: rteDoc(contentSettingsTr(`shopTitle`)),
393
393
  type: 'shop-section',
394
394
  fillColor: {},
395
395
  successMessage: '',
396
396
  defaultBorderColor: {},
397
397
  titleStyle: {
398
398
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
399
- textStyleType: TEXT_STYLE_TYPES.titles,
399
+ textStyleType: TEXT_STYLE_TYPES.heading4,
400
400
  textAlign: 'center',
401
401
  },
402
402
  descriptionStyle: {
403
403
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
404
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
404
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
405
405
  textAlign: 'center',
406
406
  },
407
+ successMessageStyle: {
408
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
409
+ },
407
410
  itemTextStyle: {
408
411
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
409
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
412
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
410
413
  textAlign: 'left',
411
414
  },
412
415
  buttonTextStyle: {
413
416
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
414
- textStyleType: TEXT_STYLE_TYPES.buttons,
417
+ textStyleType: TEXT_STYLE_TYPES.button,
415
418
  textAlign: 'center',
416
419
  },
417
420
  backgroundStyle: {},
@@ -441,35 +444,38 @@ export const createInitialSupportMeContent = (
441
444
  isCustomerMessageEnabled: true,
442
445
  },
443
446
  displayStyle: DISPLAY_STYLE_PREVIEW,
444
- title: contentSettingsTr(`supportMeTitle`),
447
+ title: rteDoc(contentSettingsTr(`supportMeTitle`)),
445
448
  successMessage: contentSettingsTr(`successSupportPlaceholder`),
446
- description: contentSettingsTr(`makeADonationDescription`),
449
+ description: rteDoc(contentSettingsTr(`makeADonationDescription`)),
447
450
  type: 'support-me',
448
451
  topPadding: 0,
449
452
  bottomPadding: 0,
450
453
  titleStyle: {
451
454
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
452
- textStyleType: TEXT_STYLE_TYPES.headings,
455
+ textStyleType: TEXT_STYLE_TYPES.heading5,
453
456
  textAlign: 'center',
454
457
  },
455
458
  headingStyle: {
456
459
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
457
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
460
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
458
461
  textAlign: 'center',
459
462
  },
460
463
  descriptionStyle: {
461
464
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
462
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
465
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
463
466
  textAlign: 'center',
464
467
  },
468
+ successMessageStyle: {
469
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
470
+ },
465
471
  itemTextStyle: {
466
472
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
467
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
473
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
468
474
  textAlign: 'center',
469
475
  },
470
476
  buttonTextStyle: {
471
477
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
472
- textStyleType: TEXT_STYLE_TYPES.buttons,
478
+ textStyleType: TEXT_STYLE_TYPES.button,
473
479
  textAlign: 'center',
474
480
  },
475
481
  // Card surface defaults to the neutral-light role — a light panel any global text
@@ -497,8 +503,8 @@ export const createInitialContactFormContent: CreateInitialContentFunction<
497
503
 
498
504
  return {
499
505
  id: uuid.v4(),
500
- title: contentSettingsTr(`contactUsTitle`),
501
- description: '',
506
+ title: rteDoc(contentSettingsTr(`contactUsTitle`)),
507
+ description: rteDoc(''),
502
508
  buttonText: contentSettingsTr(`sendPlaceholder`),
503
509
  displayStyle: DISPLAY_STYLE_PREVIEW,
504
510
  layoutStyle,
@@ -563,7 +569,7 @@ export const createInitialContactFormContent: CreateInitialContentFunction<
563
569
  type: 'text',
564
570
  },
565
571
  ],
566
- successMessage: contentSettingsTr(`formSuccessMessage`),
572
+ successMessage: rteDoc(contentSettingsTr(`formSuccessMessage`)),
567
573
  responseEmail: options?.userState.emailAddress || '',
568
574
  type: 'contact-form',
569
575
  // brand-site: card layouts default to the logo bg. brand-page/brand-contact:
@@ -576,20 +582,20 @@ export const createInitialContactFormContent: CreateInitialContentFunction<
576
582
  backgroundStyle: {},
577
583
  titleStyle: {
578
584
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
579
- textStyleType: TEXT_STYLE_TYPES.titles,
585
+ textStyleType: TEXT_STYLE_TYPES.heading4,
580
586
  textAlign: 'center',
581
587
  },
582
588
  descriptionStyle: {
583
589
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
584
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
590
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
585
591
  textAlign: 'center',
586
592
  },
587
593
  successMessageStyle: {
588
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
594
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
589
595
  },
590
596
  buttonTextStyle: {
591
597
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
592
- textStyleType: TEXT_STYLE_TYPES.buttons,
598
+ textStyleType: TEXT_STYLE_TYPES.button,
593
599
  textAlign: 'center',
594
600
  },
595
601
  };
@@ -603,8 +609,12 @@ export const createInitialBannerSectionContent: CreateInitialContentFunction<
603
609
  topPadding: 32,
604
610
  bottomPadding: 32,
605
611
  imageUrl: '',
606
- title: contentSettingsTr(`thisIsABannerTitle`),
607
- description: '',
612
+ // BP-5969: RTE fields are authored as Tiptap docs at their SOURCE (the factory), not plain
613
+ // strings that a later step converts. Colour + role typography are baked into the doc by the
614
+ // init step (applyTextContrast + authorContentRteFields); textAlign is stamped there from the
615
+ // style, so it isn't duplicated here. Empty description is still a doc (empty paragraph).
616
+ title: rteDoc(contentSettingsTr(`thisIsABannerTitle`)),
617
+ description: rteDoc(''),
608
618
  buttonText: contentSettingsTr(`getStartedButtonText`),
609
619
  url: '',
610
620
  colorReplacements: [],
@@ -612,12 +622,12 @@ export const createInitialBannerSectionContent: CreateInitialContentFunction<
612
622
  displayStyle: 'centered',
613
623
  descriptionStyle: {
614
624
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
615
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
625
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
616
626
  textAlign: 'center',
617
627
  },
618
628
  titleStyle: {
619
629
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
620
- textStyleType: TEXT_STYLE_TYPES.titles,
630
+ textStyleType: TEXT_STYLE_TYPES.heading4,
621
631
  textAlign: 'center',
622
632
  },
623
633
  cardStyle: {
@@ -628,7 +638,7 @@ export const createInitialBannerSectionContent: CreateInitialContentFunction<
628
638
  buttonLinkType: BUTTON_LINK_TYPE.url,
629
639
  buttonTextStyle: {
630
640
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
631
- textStyleType: TEXT_STYLE_TYPES.buttons,
641
+ textStyleType: TEXT_STYLE_TYPES.button,
632
642
  textAlign: 'center',
633
643
  },
634
644
  overlayColor: {
@@ -643,8 +653,8 @@ export const createInitialBookingSectionContent: CreateInitialContentFunction<
643
653
  > = (options?: CreateInitialContentOptions) => {
644
654
  return {
645
655
  id: uuid.v4(),
646
- title: contentSettingsTr(`defaultBookingTitle`),
647
- description: contentSettingsTr(`defaultBookingDescription`),
656
+ title: rteDoc(contentSettingsTr(`defaultBookingTitle`)),
657
+ description: rteDoc(contentSettingsTr(`defaultBookingDescription`)),
648
658
  buttonText: contentSettingsTr(`bookNowLabel`),
649
659
  url: '',
650
660
  type: 'booking-section',
@@ -652,12 +662,12 @@ export const createInitialBookingSectionContent: CreateInitialContentFunction<
652
662
  bottomPadding: 32,
653
663
  descriptionStyle: {
654
664
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
655
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
665
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
656
666
  textAlign: 'center',
657
667
  },
658
668
  titleStyle: {
659
669
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
660
- textStyleType: TEXT_STYLE_TYPES.titles,
670
+ textStyleType: TEXT_STYLE_TYPES.heading4,
661
671
  textAlign: 'center',
662
672
  },
663
673
  backgroundStyle: {},
@@ -665,7 +675,7 @@ export const createInitialBookingSectionContent: CreateInitialContentFunction<
665
675
  buttonLinkType: BUTTON_LINK_TYPE.url,
666
676
  buttonTextStyle: {
667
677
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
668
- textStyleType: TEXT_STYLE_TYPES.buttons,
678
+ textStyleType: TEXT_STYLE_TYPES.button,
669
679
  textAlign: 'center',
670
680
  },
671
681
  };
@@ -676,8 +686,8 @@ export const createInitialImagesSectionContent: CreateInitialContentFunction<
676
686
  > = (options?: CreateInitialContentOptions) => {
677
687
  return {
678
688
  id: uuid.v4(),
679
- title: contentSettingsTr(`imagesTitle`),
680
- description: '',
689
+ title: rteDoc(contentSettingsTr(`imagesTitle`)),
690
+ description: rteDoc(''),
681
691
  type: 'images-section',
682
692
  topPadding: 32,
683
693
  bottomPadding: 32,
@@ -702,27 +712,27 @@ export const createInitialImagesSectionContent: CreateInitialContentFunction<
702
712
  cardStyle: {},
703
713
  titleStyle: {
704
714
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
705
- textStyleType: TEXT_STYLE_TYPES.titles,
715
+ textStyleType: TEXT_STYLE_TYPES.heading4,
706
716
  textAlign: 'center',
707
717
  },
708
718
  descriptionStyle: {
709
719
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
710
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
720
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
711
721
  textAlign: 'center',
712
722
  },
713
723
  headingStyle: {
714
724
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
715
- textStyleType: TEXT_STYLE_TYPES.headings,
725
+ textStyleType: TEXT_STYLE_TYPES.heading5,
716
726
  textAlign: 'center',
717
727
  },
718
728
  paragraphStyle: {
719
729
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
720
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
730
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
721
731
  textAlign: 'center',
722
732
  },
723
733
  buttonTextStyle: {
724
734
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
725
- textStyleType: TEXT_STYLE_TYPES.buttons,
735
+ textStyleType: TEXT_STYLE_TYPES.button,
726
736
  textAlign: 'center',
727
737
  },
728
738
  };
@@ -733,7 +743,7 @@ export const createInitialTestimonialSectionContent: CreateInitialContentFunctio
733
743
  > = (options?: CreateInitialContentOptions) => {
734
744
  return {
735
745
  id: uuid.v4(),
736
- title: contentSettingsTr(`testimonialsTitle`),
746
+ title: rteDoc(contentSettingsTr(`testimonialsTitle`)),
737
747
  type: 'testimonial-section',
738
748
  displayStyle: 'centered',
739
749
  topPadding: TESTIMONIAL_DEFAULT_PADDING,
@@ -741,22 +751,22 @@ export const createInitialTestimonialSectionContent: CreateInitialContentFunctio
741
751
  items: [],
742
752
  titleStyle: {
743
753
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
744
- textStyleType: TEXT_STYLE_TYPES.titles,
754
+ textStyleType: TEXT_STYLE_TYPES.heading4,
745
755
  textAlign: 'center',
746
756
  },
747
757
  testimonialStyle: {
748
758
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
749
- textStyleType: TEXT_STYLE_TYPES.headings,
759
+ textStyleType: TEXT_STYLE_TYPES.heading5,
750
760
  textAlign: 'center',
751
761
  },
752
762
  nameStyle: {
753
763
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
754
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
764
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
755
765
  textAlign: 'center',
756
766
  },
757
767
  positionStyle: {
758
768
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
759
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
769
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
760
770
  textAlign: 'center',
761
771
  },
762
772
  backgroundStyle: {},
@@ -770,19 +780,19 @@ export const createInitialAboutSectionContent: CreateInitialContentFunction<
770
780
  return {
771
781
  id: uuid.v4(),
772
782
  imageUrl: '',
773
- title: contentSettingsTr(`aboutSectionTitle`),
783
+ title: rteDoc(contentSettingsTr(`aboutSectionTitle`)),
774
784
  type: 'about-section',
775
785
  displayStyle: 'centered',
776
- paragraph: '',
786
+ paragraph: rteDoc(''),
777
787
  colorReplacements: [],
778
788
  titleStyle: {
779
789
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
780
- textStyleType: TEXT_STYLE_TYPES.titles,
790
+ textStyleType: TEXT_STYLE_TYPES.heading4,
781
791
  textAlign: 'center',
782
792
  },
783
793
  paragraphStyle: {
784
794
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
785
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
795
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
786
796
  textAlign: 'center',
787
797
  },
788
798
  backgroundStyle: {},
@@ -819,6 +829,47 @@ export const createDefaultLogoTheme = (): LogoTheme => {
819
829
  };
820
830
  };
821
831
 
832
+ /**
833
+ * Runs after migration on a blank site, so its header and footer text starts on its role with no
834
+ * typography of its own. The blank model has no version, so every migration runs on it and keeps the
835
+ * retired look as that text's own values; the model defaults can't change because released
836
+ * migrations read them. The Save Contact label (brand.contact only) joins the same pass: migration-22
837
+ * seeds it with typography of its own too.
838
+ */
839
+ export const applyBlankSiteTextRoles = (model: BrandPageModel): void => {
840
+ const onRole = <T extends TextStyleDeclaration>(
841
+ style: T,
842
+ textStyleType: TextStyleType,
843
+ ): T => ({ ...omitTypography(style), textStyleType }) as T;
844
+
845
+ for (const footer of [model.pageFooterDesktop, model.pageFooterMobile]) {
846
+ footer.copyrightStyle = onRole(
847
+ footer.copyrightStyle,
848
+ TEXT_STYLE_TYPES.paragraph2,
849
+ );
850
+ }
851
+
852
+ for (const header of [model.pageHeaderDesktop, model.pageHeaderMobile]) {
853
+ const { navigation } = header;
854
+
855
+ navigation.defaultButtonStyle = onRole(
856
+ navigation.defaultButtonStyle,
857
+ TEXT_STYLE_TYPES.paragraph1,
858
+ );
859
+ navigation.hamburgerMenuStyle.defaultButtonStyle = onRole(
860
+ navigation.hamburgerMenuStyle.defaultButtonStyle,
861
+ TEXT_STYLE_TYPES.button,
862
+ );
863
+ }
864
+
865
+ if (model.saveContactSettings?.buttonTextStyle) {
866
+ model.saveContactSettings.buttonTextStyle = onRole(
867
+ model.saveContactSettings.buttonTextStyle,
868
+ TEXT_STYLE_TYPES.button,
869
+ );
870
+ }
871
+ };
872
+
822
873
  export const createInitialBrandPage = (
823
874
  brandPageType: BrandPageType,
824
875
  ): BrandPageModel => {
@@ -852,7 +903,7 @@ export const createInitialSocialLinksContent = (
852
903
  type: 'social-links',
853
904
  topPadding: 32,
854
905
  bottomPadding: 32,
855
- title: contentSettingsTr(`followUsOnTitle`),
906
+ title: rteDoc(contentSettingsTr(`followUsOnTitle`)),
856
907
  links: [
857
908
  {
858
909
  id: uuid.v4(),
@@ -894,7 +945,7 @@ export const createInitialSocialLinksContent = (
894
945
  backgroundStyles: {},
895
946
  titleStyle: {
896
947
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
897
- textStyleType: TEXT_STYLE_TYPES.titles,
948
+ textStyleType: TEXT_STYLE_TYPES.heading4,
898
949
  textAlign: 'center',
899
950
  },
900
951
  };
@@ -905,8 +956,8 @@ export const createInitialShapesSectionContent: CreateInitialContentFunction<
905
956
  > = (options?: CreateInitialContentOptions) => {
906
957
  return {
907
958
  id: uuid.v4(),
908
- title: contentSettingsTr(`shapesTitle`),
909
- description: '',
959
+ title: rteDoc(contentSettingsTr(`shapesTitle`)),
960
+ description: rteDoc(''),
910
961
  type: 'shapes-section',
911
962
  topPadding: 32,
912
963
  bottomPadding: 32,
@@ -931,22 +982,22 @@ export const createInitialShapesSectionContent: CreateInitialContentFunction<
931
982
  size: '4rem',
932
983
  titleStyle: {
933
984
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
934
- textStyleType: TEXT_STYLE_TYPES.titles,
985
+ textStyleType: TEXT_STYLE_TYPES.heading4,
935
986
  textAlign: 'center',
936
987
  },
937
988
  descriptionStyle: {
938
989
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
939
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
990
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
940
991
  textAlign: 'center',
941
992
  },
942
993
  headingStyle: {
943
994
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
944
- textStyleType: TEXT_STYLE_TYPES.headings,
995
+ textStyleType: TEXT_STYLE_TYPES.heading5,
945
996
  textAlign: 'center',
946
997
  },
947
998
  paragraphStyle: {
948
999
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
949
- textStyleType: TEXT_STYLE_TYPES.paragraphs,
1000
+ textStyleType: TEXT_STYLE_TYPES.paragraph2,
950
1001
  textAlign: 'center',
951
1002
  },
952
1003
  };
@@ -1,8 +1,9 @@
1
1
  import { describe, expect, test } from 'vitest';
2
2
  import { mapAdminPreviewLogoTemplateModelToAdminLogoTemplateTemplate } from './admin-logo-settings-store-utils';
3
3
  import type { AdminPreviewLogoTemplateModel } from './admin-logo-settings-store';
4
- import { BRAND_PAGE_TYPES } from '@brand-page';
4
+ import { BRAND_PAGE_TYPES, TextStyles } from '@brand-page';
5
5
  import type { ColorItem } from '@brand-page';
6
+ import { CANONICAL_TEXT_STYLE_TYPES } from '@brand-page/models/styles.model';
6
7
 
7
8
  // rgba(0,0,0,1) → #000000 · rgba(241,176,74,1) → #f1b04a (canonicalSolidHex)
8
9
  const previewModel = (
@@ -33,13 +34,27 @@ const paletteFixture = (): ColorItem[] => [
33
34
  const mapWith = (
34
35
  colors: ColorItem[],
35
36
  templateModel: AdminPreviewLogoTemplateModel = previewModel(),
37
+ textStyles: TextStyles = new TextStyles(),
36
38
  ) =>
37
39
  mapAdminPreviewLogoTemplateModelToAdminLogoTemplateTemplate(
38
40
  [],
39
41
  BRAND_PAGE_TYPES.default,
40
42
  colors,
43
+ textStyles,
41
44
  )(templateModel);
42
45
 
46
+ const ROLE = CANONICAL_TEXT_STYLE_TYPES[0];
47
+
48
+ const workingTextStyles = (): TextStyles => {
49
+ const textStyles = new TextStyles();
50
+
51
+ textStyles.textStyleOptions[ROLE].style.fontSize = '99px';
52
+ textStyles.textStyleOptions[ROLE].style.fontFamily = 'Pacifico';
53
+ textStyles.textStyleOptions[ROLE].isModified = true;
54
+
55
+ return textStyles;
56
+ };
57
+
43
58
  const rolesById = (colors: ColorItem[] = []): Record<string, string> =>
44
59
  Object.fromEntries(colors.map((c) => [c.id, c.value ?? '']));
45
60
 
@@ -112,4 +127,51 @@ describe('mapAdminPreviewLogoTemplateModelToAdminLogoTemplateTemplate', () => {
112
127
  expect(custom).toBeDefined();
113
128
  expect(working).not.toContain(custom);
114
129
  });
130
+
131
+ // The card's scoped role block outranks the canvas's global one, so a card built on default
132
+ // roles paints default typography whatever the Style tab says.
133
+ test('carries the working text style roles, so a card paints the canvas typography', () => {
134
+ const { brandPageModel } = mapWith(
135
+ paletteFixture(),
136
+ previewModel(),
137
+ workingTextStyles(),
138
+ );
139
+ const role = brandPageModel.styles?.textStyles.textStyleOptions[ROLE];
140
+
141
+ expect(role?.style.fontSize).toBe('99px');
142
+ expect(role?.style.fontFamily).toBe('Pacifico');
143
+ expect(role?.isModified).toBe(true);
144
+ });
145
+
146
+ test('every template over the same working roles agrees on them', () => {
147
+ const textStyles = workingTextStyles();
148
+ const first = mapWith(paletteFixture(), previewModel(), textStyles);
149
+ const second = mapWith(
150
+ paletteFixture(),
151
+ previewModel({ logoTemplateToken: 'logo-template-2' }),
152
+ textStyles,
153
+ );
154
+
155
+ expect(
156
+ first.brandPageModel.styles?.textStyles.textStyleOptions[ROLE].style,
157
+ ).toEqual(
158
+ second.brandPageModel.styles?.textStyles.textStyleOptions[ROLE].style,
159
+ );
160
+ });
161
+
162
+ test('the card model does not share role style objects with the working roles', () => {
163
+ const working = workingTextStyles();
164
+ const { brandPageModel } = mapWith(
165
+ paletteFixture(),
166
+ previewModel(),
167
+ working,
168
+ );
169
+ const cardRole = brandPageModel.styles!.textStyles.textStyleOptions[ROLE];
170
+
171
+ expect(cardRole.style).not.toBe(working.textStyleOptions[ROLE].style);
172
+
173
+ cardRole.style.fontSize = '1px';
174
+
175
+ expect(working.textStyleOptions[ROLE].style.fontSize).toBe('99px');
176
+ });
115
177
  });