@designcrowd/library.brand-page 6.1.1 → 6.1.2-color-v2-2

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 (361) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-B5B5ThJ6.js → CreatedOnBrandCrowd-de-de-dmDPJ3B5.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-a48CaORy.js → CreatedOnBrandCrowd-en-us-enXUVsBp.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-xpuZ317-.js → CreatedOnBrandCrowd-es-es-C3MEil9A.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-V-iUMArW.js → CreatedOnBrandCrowd-fr-ca-BZTF6RtW.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-V-iUMArW.js → CreatedOnBrandCrowd-fr-fr-BZTF6RtW.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-DZ0NKSAy.js → CreatedOnBrandCrowd-pt-br-0mwjA9fv.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-DZ0NKSAy.js → CreatedOnBrandCrowd-pt-pt-0mwjA9fv.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-_950cgGp.js → CreatedOnDcom-de-de-Bk2_qT2O.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DogKzH-g.js → CreatedOnDcom-en-us-Ddfk_ipz.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-CmGM3IPX.js → CreatedOnDcom-es-es-5bvFd1op.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-BonEDkWZ.js → CreatedOnDcom-fr-ca-BwLVAwM8.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DQHtKrd_.js → CreatedOnDcom-fr-fr-BVT4iQTJ.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-CtYJSBjs.js → CreatedOnDcom-pt-br-BX-jIWSe.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DoO9r4lA.js → CreatedOnDcom-pt-pt-VvU6cH6q.js} +1 -1
  15. package/lib/src/brand-page/components/background-shape/BackgroundShape.mixin.d.ts +1 -0
  16. package/lib/src/brand-page/components/background-shape/BackgroundShape.mixin.js +18 -3
  17. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +2 -1
  18. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +8 -3
  19. package/lib/src/brand-page/components/media/Shape.mixin.d.ts +1 -0
  20. package/lib/src/brand-page/components/media/Shape.mixin.js +20 -2
  21. package/lib/src/brand-page/components/page/Page.mixin.d.ts +2 -0
  22. package/lib/src/brand-page/components/page/Page.mixin.js +21 -2
  23. package/lib/src/brand-page/models/index.d.ts +47 -26
  24. package/lib/src/brand-page/models/index.js +4 -0
  25. package/lib/src/brand-page/utils/color-palette.util.d.ts +179 -0
  26. package/lib/src/brand-page/utils/color-palette.util.js +372 -0
  27. package/lib/src/brand-page/utils/color.util.js +18 -0
  28. package/lib/src/brand-page/utils/index.d.ts +2 -0
  29. package/lib/src/brand-page/utils/index.js +2 -0
  30. package/lib/src/brand-page/utils/migration/migration-13.js +2 -2
  31. package/lib/src/brand-page/utils/migration/migration-20.d.ts +2 -0
  32. package/lib/src/brand-page/utils/migration/migration-20.js +85 -0
  33. package/lib/src/brand-page/utils/migration/migration-21.d.ts +2 -0
  34. package/lib/src/brand-page/utils/migration/migration-21.js +332 -0
  35. package/lib/src/brand-page/utils/migration/migration-22.d.ts +2 -0
  36. package/lib/src/brand-page/utils/migration/migration-22.js +177 -0
  37. package/lib/src/brand-page/utils/migration.util.d.ts +2 -1
  38. package/lib/src/brand-page/utils/migration.util.js +39 -0
  39. package/lib/src/brand-page/utils/style.util.d.ts +14 -1
  40. package/lib/src/brand-page/utils/style.util.js +48 -7
  41. package/lib/src/brand-page/utils/text-style.util.d.ts +41 -0
  42. package/lib/src/brand-page/utils/text-style.util.js +37 -0
  43. package/lib/src/brand-page/utils/text.util.d.ts +13 -1
  44. package/lib/src/brand-page/utils/text.util.js +64 -0
  45. package/lib/src/brand-page/utils/vcard.util.js +4 -4
  46. package/lib/src/brand-page/utils/view-model.util.d.ts +1 -0
  47. package/lib/src/brand-page/utils/view-model.util.js +90 -42
  48. package/lib/src/brand-page/view-models.d.ts +4 -3
  49. package/lib/src/brand-page-maker/__fixtures__/complex-rte.fixture.d.ts +22 -0
  50. package/lib/src/brand-page-maker/__fixtures__/complex-rte.fixture.js +22 -0
  51. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +2 -0
  52. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.js +18 -14
  53. package/lib/src/brand-page-maker/components/color-picker/components/GradientColorSlider.mixin.d.ts +1 -1
  54. package/lib/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.js +17 -14
  55. package/lib/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.d.ts +0 -1
  56. package/lib/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.d.ts +2 -9
  57. package/lib/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.js +6 -10
  58. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.d.ts +14 -0
  59. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.js +39 -0
  60. package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.d.ts +28 -0
  61. package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.js +117 -0
  62. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.d.ts +1 -1
  63. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +44 -108
  64. package/lib/src/brand-page-maker/constants/sidebar-constant.d.ts +1 -0
  65. package/lib/src/brand-page-maker/constants/sidebar-constant.js +12 -0
  66. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +30 -0
  67. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +43 -35
  68. package/lib/src/brand-page-maker/utils/apply-color-strategy.d.ts +61 -0
  69. package/lib/src/brand-page-maker/utils/apply-color-strategy.js +136 -0
  70. package/lib/src/brand-page-maker/utils/index.d.ts +2 -1
  71. package/lib/src/brand-page-maker/utils/index.js +2 -13
  72. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +68 -5
  73. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +112 -57
  74. package/lib/src/brand-page-maker/utils/rte-field-pairs.d.ts +24 -0
  75. package/lib/src/brand-page-maker/utils/rte-field-pairs.js +84 -0
  76. package/lib/src/brand-page-maker/utils/rte-render.util.d.ts +63 -0
  77. package/lib/src/brand-page-maker/utils/rte-render.util.js +106 -0
  78. package/lib/src/brand-page-maker/utils/rte-sanitize.util.d.ts +18 -0
  79. package/lib/src/brand-page-maker/utils/rte-sanitize.util.js +168 -0
  80. package/lib/src/brand-page-maker/validators/field.validator.js +10 -2
  81. package/lib/src/bundled-translations-Cdaimg3K.js +177 -0
  82. package/lib/src/bundled-translations.de-DE--RgmAzqM.js +177 -0
  83. package/lib/src/bundled-translations.es-ES-CdwBqPR4.js +177 -0
  84. package/lib/src/bundled-translations.fr-CA-TlHb3mW5.js +177 -0
  85. package/lib/src/bundled-translations.fr-FR-CUgtJXTn.js +177 -0
  86. package/lib/src/bundled-translations.pt-BR-BFtnOkWA.js +177 -0
  87. package/lib/src/bundled-translations.pt-PT-D-csapLA.js +177 -0
  88. package/lib/src/bundles/bundled-translations.de-DE.json +3 -4
  89. package/lib/src/bundles/bundled-translations.es-ES.json +3 -4
  90. package/lib/src/bundles/bundled-translations.fr-CA.json +3 -4
  91. package/lib/src/bundles/bundled-translations.fr-FR.json +3 -4
  92. package/lib/src/bundles/bundled-translations.json +10 -5
  93. package/lib/src/bundles/bundled-translations.pt-BR.json +3 -4
  94. package/lib/src/bundles/bundled-translations.pt-PT.json +3 -4
  95. package/lib/src/css/library.brand-page-brandCrowd.min.css +150 -89
  96. package/lib/src/css/library.brand-page-brandPage.min.css +150 -89
  97. package/lib/src/css/library.brand-page-designCom.min.css +150 -89
  98. package/lib/src/css/library.brand-page-preview.min.css +150 -89
  99. package/lib/src/index.d.ts +1 -0
  100. package/lib/src/index.mjs +145 -140
  101. package/lib/src/{lib-DtalJKI3.js → lib-D3mtUOE0.js} +59486 -55061
  102. package/lib/src/lib.js +2 -0
  103. package/lib/src/metadata-builder/ai-metadata-executor.d.ts +0 -1
  104. package/lib/src/metadata-builder/ai-metadata-executor.js +0 -19
  105. package/lib/src/metadata-builder/builders/section-builders/about-section-builder.js +2 -3
  106. package/lib/src/metadata-builder/builders/section-builders/banner-section-builder.js +2 -3
  107. package/lib/src/metadata-builder/builders/section-builders/booking-section-builder.js +2 -3
  108. package/lib/src/metadata-builder/builders/section-builders/contact-form-builder.js +3 -4
  109. package/lib/src/metadata-builder/builders/section-builders/images-section-builder.js +2 -3
  110. package/lib/src/metadata-builder/builders/section-builders/mailing-list-builder.js +1 -2
  111. package/lib/src/metadata-builder/builders/section-builders/mailing-list-section-builder.js +1 -2
  112. package/lib/src/metadata-builder/builders/section-builders/profile-section-builder.js +3 -4
  113. package/lib/src/metadata-builder/builders/section-builders/shapes-section-builder.js +2 -3
  114. package/lib/src/metadata-builder/builders/section-builders/testimonial-section-builder.js +1 -2
  115. package/lib/src/metadata-builder/builders/section-builders/text-section-builder.js +15 -11
  116. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +11 -13
  117. package/lib/src/metadata-builder/helpers/rte.helpers.js +14 -73
  118. package/lib/src/metadata-builder/metadata-executor.js +0 -4
  119. package/lib/src/metadata-builder/models.d.ts +0 -2
  120. package/lib/src/metadata-builder/models.js +0 -2
  121. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.d.ts +0 -19
  122. package/lib/src/metadata-builder/parsers/ai-toolcall-parser.js +0 -4
  123. package/lib/src/metadata-builder/sanitizers/rte-schema-check.d.ts +7 -8
  124. package/lib/src/metadata-builder/sanitizers/rte-schema-check.js +21 -52
  125. package/lib/src/shared/background-settings/composables/useSingleBackgroundShape.js +5 -7
  126. package/lib/src/shared/background-settings/shape-color.util.d.ts +16 -0
  127. package/lib/src/shared/background-settings/shape-color.util.js +26 -0
  128. package/lib/src/shared/color-palette/color-match-state.d.ts +57 -0
  129. package/lib/src/shared/color-palette/color-match-state.js +48 -0
  130. package/lib/src/shared/color-palette/store/color-palette-store.d.ts +92 -0
  131. package/lib/src/shared/color-palette/store/color-palette-store.js +171 -0
  132. package/lib/src/shared/color-palette/store/index.d.ts +1 -0
  133. package/lib/src/shared/color-palette/store/index.js +1 -0
  134. package/lib/src/shared/color-picker/components/ColorPicker.mixin.d.ts +30 -1
  135. package/lib/src/shared/color-picker/components/ColorPicker.mixin.js +76 -6
  136. package/lib/src/shared/color-picker/models.d.ts +2 -0
  137. package/lib/src/shared/color-strategies/color-strategies.d.ts +143 -0
  138. package/lib/src/shared/color-strategies/color-strategies.js +276 -0
  139. package/lib/src/shared/color-strategies/models.d.ts +149 -0
  140. package/lib/src/shared/color-strategies/models.js +5 -0
  141. package/lib/src/shared/color-strategies/page-anchors.d.ts +38 -0
  142. package/lib/src/shared/color-strategies/page-anchors.js +24 -0
  143. package/lib/src/shared/color-strategies/rte-color.d.ts +16 -0
  144. package/lib/src/shared/color-strategies/rte-color.js +96 -0
  145. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.d.ts +1 -1
  146. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.js +35 -10
  147. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +3 -0
  148. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.js +32 -0
  149. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +12 -3
  150. package/lib/src/shared/content-settings/components/email-field/EmailField.mixin.d.ts +1 -1
  151. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +3 -0
  152. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.js +38 -0
  153. package/lib/src/shared/content-settings/components/tel-field/TelField.mixin.d.ts +1 -1
  154. package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.d.ts +3 -2
  155. package/lib/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.js +10 -3
  156. package/lib/src/shared/content-settings/components/text-field/TextField.mixin.d.ts +1 -1
  157. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.d.ts +2 -1
  158. package/lib/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.js +4 -1
  159. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.d.ts +9 -0
  160. package/lib/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.js +27 -0
  161. package/lib/src/shared/content-settings/components/textarea-field/TextareaField.mixin.d.ts +1 -1
  162. package/lib/src/shared/content-settings/components/url-field/UrlField.mixin.d.ts +1 -1
  163. package/lib/src/shared/content-settings/components/youtube-video-field/YoutubeVideoField.mixin.d.ts +1 -1
  164. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.d.ts +0 -5
  165. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +3 -50
  166. package/lib/src/shared/style-settings/components/StyleSettings.mixin.d.ts +44 -53
  167. package/lib/src/shared/style-settings/components/StyleSettings.mixin.js +11 -56
  168. package/lib/src/shared/style-settings/models.d.ts +0 -1
  169. package/lib/src/utils/minify-brand-page-metadata.js +4 -1
  170. package/package.json +17 -15
  171. package/src/brand-page/components/background-shape/BackgroundShape.mixin.ts +23 -3
  172. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +10 -5
  173. package/src/brand-page/components/media/Shape.mixin.ts +25 -2
  174. package/src/brand-page/components/page/Page.mixin.ts +28 -2
  175. package/src/brand-page/components/page/Page.vue +6 -0
  176. package/src/brand-page/components/text-wrapper/TextWrapper.vue +17 -6
  177. package/src/brand-page/models/index.ts +53 -26
  178. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +108 -27
  179. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +1 -0
  180. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +2 -0
  181. package/src/brand-page/utils/color-palette.util.test.ts +554 -0
  182. package/src/brand-page/utils/color-palette.util.ts +520 -0
  183. package/src/brand-page/utils/color.util.test.ts +35 -0
  184. package/src/brand-page/utils/color.util.ts +24 -0
  185. package/src/brand-page/utils/index.ts +2 -0
  186. package/src/brand-page/utils/migration/migration-13.ts +2 -2
  187. package/src/brand-page/utils/migration/migration-20.server.test.ts +125 -0
  188. package/src/brand-page/utils/migration/migration-20.test.ts +93 -0
  189. package/src/brand-page/utils/migration/migration-20.ts +112 -0
  190. package/src/brand-page/utils/migration/migration-21.test.ts +762 -0
  191. package/src/brand-page/utils/migration/migration-21.ts +437 -0
  192. package/src/brand-page/utils/migration/migration-22.test.ts +367 -0
  193. package/src/brand-page/utils/migration/migration-22.ts +245 -0
  194. package/src/brand-page/utils/migration.util.ts +50 -1
  195. package/src/brand-page/utils/style.util.test.ts +105 -0
  196. package/src/brand-page/utils/style.util.ts +62 -9
  197. package/src/brand-page/utils/text-style.util.ts +45 -0
  198. package/src/brand-page/utils/text.util.test.ts +106 -0
  199. package/src/brand-page/utils/text.util.ts +83 -4
  200. package/src/brand-page/utils/vcard.util.ts +6 -4
  201. package/src/brand-page/utils/view-model.pageid-rte.test.ts +104 -0
  202. package/src/brand-page/utils/view-model.util.test.ts +186 -3
  203. package/src/brand-page/utils/view-model.util.ts +116 -48
  204. package/src/brand-page/view-models.ts +5 -2
  205. package/src/brand-page-maker/__fixtures__/complex-rte.fixture.ts +23 -0
  206. package/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.vue +2 -5
  207. package/src/brand-page-maker/components/admin-settings/AdminSettings.vue +54 -0
  208. package/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.vue +2 -0
  209. package/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.ts +21 -15
  210. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +75 -6
  211. package/src/brand-page-maker/components/color-palette/BpColorPicker.vue +91 -20
  212. package/src/brand-page-maker/components/color-palette/i18n/color-palette.de-DE.json +2 -1
  213. package/src/brand-page-maker/components/color-palette/i18n/color-palette.es-ES.json +2 -1
  214. package/src/brand-page-maker/components/color-palette/i18n/color-palette.fr-CA.json +2 -1
  215. package/src/brand-page-maker/components/color-palette/i18n/color-palette.fr-FR.json +2 -1
  216. package/src/brand-page-maker/components/color-palette/i18n/color-palette.json +2 -1
  217. package/src/brand-page-maker/components/color-palette/i18n/color-palette.pt-BR.json +2 -1
  218. package/src/brand-page-maker/components/color-palette/i18n/color-palette.pt-PT.json +2 -1
  219. package/src/brand-page-maker/components/rich-text-editor/RichTextEditor.vue +9 -25
  220. package/src/brand-page-maker/components/template-preview/TemplatePreview.mixin.ts +17 -14
  221. package/src/brand-page-maker/composables/ai-chat/useAiMetadataBuilder.ts +0 -1
  222. package/src/brand-page-maker/composables/rich-text-editor/bubbleMenu.ts +6 -10
  223. package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.test.ts +52 -0
  224. package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.ts +42 -0
  225. package/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.ts +162 -0
  226. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +52 -116
  227. package/src/brand-page-maker/constants/sidebar-constant.ts +12 -0
  228. package/src/brand-page-maker/stores/brandpage-maker/__snapshots__/brandpage-maker-store.test.ts.snap +3 -3
  229. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +80 -9
  230. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +47 -62
  231. package/src/brand-page-maker/utils/__snapshots__/apply-color-strategy.golden.test.ts.snap +26599 -0
  232. package/src/brand-page-maker/utils/__snapshots__/rte-render-parity.test.ts.snap +202 -0
  233. package/src/brand-page-maker/utils/apply-color-strategy.golden.test.ts +164 -0
  234. package/src/brand-page-maker/utils/apply-color-strategy.test.ts +1185 -0
  235. package/src/brand-page-maker/utils/apply-color-strategy.ts +240 -0
  236. package/src/brand-page-maker/utils/index.ts +2 -18
  237. package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +170 -3
  238. package/src/brand-page-maker/utils/rich-text-editor.util.ts +142 -67
  239. package/src/brand-page-maker/utils/rte-features.test.ts +415 -0
  240. package/src/brand-page-maker/utils/rte-field-pairs.test.ts +50 -0
  241. package/src/brand-page-maker/utils/rte-field-pairs.ts +98 -0
  242. package/src/brand-page-maker/utils/rte-render-parity.test.ts +167 -0
  243. package/src/brand-page-maker/utils/rte-render.util.ts +179 -0
  244. package/src/brand-page-maker/utils/rte-sanitize-json.test.ts +225 -0
  245. package/src/brand-page-maker/utils/rte-sanitize.util.ts +209 -0
  246. package/src/brand-page-maker/validators/field.validator.test.ts +55 -0
  247. package/src/brand-page-maker/validators/field.validator.ts +10 -2
  248. package/src/bundles/bundled-translations.de-DE.json +3 -4
  249. package/src/bundles/bundled-translations.es-ES.json +3 -4
  250. package/src/bundles/bundled-translations.fr-CA.json +3 -4
  251. package/src/bundles/bundled-translations.fr-FR.json +3 -4
  252. package/src/bundles/bundled-translations.json +10 -5
  253. package/src/bundles/bundled-translations.pt-BR.json +3 -4
  254. package/src/bundles/bundled-translations.pt-PT.json +3 -4
  255. package/src/lib.ts +9 -0
  256. package/src/metadata-builder/ai-metadata-executor.ts +0 -26
  257. package/src/metadata-builder/builders/section-builders/about-section-builder.ts +2 -3
  258. package/src/metadata-builder/builders/section-builders/banner-section-builder.ts +2 -3
  259. package/src/metadata-builder/builders/section-builders/booking-section-builder.ts +2 -5
  260. package/src/metadata-builder/builders/section-builders/contact-form-builder.ts +3 -4
  261. package/src/metadata-builder/builders/section-builders/images-section-builder.ts +2 -3
  262. package/src/metadata-builder/builders/section-builders/mailing-list-builder.ts +1 -2
  263. package/src/metadata-builder/builders/section-builders/mailing-list-section-builder.ts +1 -2
  264. package/src/metadata-builder/builders/section-builders/profile-section-builder.ts +3 -6
  265. package/src/metadata-builder/builders/section-builders/shapes-section-builder.ts +2 -3
  266. package/src/metadata-builder/builders/section-builders/testimonial-section-builder.ts +1 -2
  267. package/src/metadata-builder/builders/section-builders/text-section-builder.ts +19 -13
  268. package/src/metadata-builder/helpers/rte.helpers.ts +15 -101
  269. package/src/metadata-builder/metadata-executor.ts +0 -5
  270. package/src/metadata-builder/models.ts +0 -3
  271. package/src/metadata-builder/parsers/ai-toolcall-parser.ts +0 -27
  272. package/src/metadata-builder/sanitizers/rte-schema-check.ts +24 -53
  273. package/src/shared/background-settings/components/BackgroundSettings.vue +0 -1
  274. package/src/shared/background-settings/components/MultiBackgroundShapes.vue +4 -10
  275. package/src/shared/background-settings/components/SingleBackgroundShape.vue +0 -2
  276. package/src/shared/background-settings/components/background-color/BackgroundColorSettings.vue +5 -26
  277. package/src/shared/background-settings/composables/useSingleBackgroundShape.ts +5 -8
  278. package/src/shared/background-settings/shape-color.util.test.ts +35 -0
  279. package/src/shared/background-settings/shape-color.util.ts +28 -0
  280. package/src/shared/color-palette/color-match-state.test.ts +153 -0
  281. package/src/shared/color-palette/color-match-state.ts +109 -0
  282. package/src/shared/color-palette/store/color-palette-store.test.ts +325 -0
  283. package/src/shared/color-palette/store/color-palette-store.ts +251 -0
  284. package/src/shared/color-palette/store/index.ts +1 -0
  285. package/src/shared/color-picker/components/ColorPicker.mixin.ts +81 -7
  286. package/src/shared/color-picker/models.ts +7 -0
  287. package/src/shared/color-strategies/color-strategies.test.ts +548 -0
  288. package/src/shared/color-strategies/color-strategies.ts +359 -0
  289. package/src/shared/color-strategies/models.ts +173 -0
  290. package/src/shared/color-strategies/page-anchors.ts +45 -0
  291. package/src/shared/color-strategies/rte-color.test.ts +209 -0
  292. package/src/shared/color-strategies/rte-color.ts +116 -0
  293. package/src/shared/content-settings/components/GenericTextInput.mixin.ts +42 -11
  294. package/src/shared/content-settings/components/color-field/ColorField.test.ts +209 -0
  295. package/src/shared/content-settings/components/color-field/ColorField.vue +181 -122
  296. package/src/shared/content-settings/components/color-field/i18n/color-field.json +4 -1
  297. package/src/shared/content-settings/components/color-match-indicator/ColorMatchIndicator.test.ts +109 -0
  298. package/src/shared/content-settings/components/color-match-indicator/ColorMatchIndicator.vue +146 -0
  299. package/src/shared/content-settings/components/color-replacements-field/ColorReplacementsField.test.ts +112 -0
  300. package/src/shared/content-settings/components/color-replacements-field/ColorReplacementsField.vue +8 -87
  301. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.de-DE.json +1 -3
  302. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.es-ES.json +1 -3
  303. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.fr-CA.json +1 -3
  304. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.fr-FR.json +1 -3
  305. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.json +1 -3
  306. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.pt-BR.json +1 -3
  307. package/src/shared/content-settings/components/color-replacements-field/i18n/color-replacement-field.pt-PT.json +1 -3
  308. package/src/shared/content-settings/components/color-strategy-panel/ColorStrategyPanel.test.ts +131 -0
  309. package/src/shared/content-settings/components/color-strategy-panel/ColorStrategyPanel.vue +98 -0
  310. package/src/shared/content-settings/components/color-strategy-panel/color-strategy-gate.test.ts +113 -0
  311. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.ts +45 -0
  312. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +15 -0
  313. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +16 -3
  314. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.vue +0 -1
  315. package/src/shared/content-settings/components/draggable-item-list/DraggableItemList.vue +0 -1
  316. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.ts +53 -0
  317. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +10 -0
  318. package/src/shared/content-settings/components/shape-field/ShapeField.vue +100 -101
  319. package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.mixin.ts +13 -4
  320. package/src/shared/content-settings/components/testimonial-items-field/TestimonialItemsField.vue +227 -226
  321. package/src/shared/content-settings/components/text-image-field/TextImageField.vue +6 -4
  322. package/src/shared/content-settings/components/text-items-field/TextItemsField.mixin.ts +6 -1
  323. package/src/shared/content-settings/components/text-items-field/TextItemsField.vue +1 -1
  324. package/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.test.ts +96 -0
  325. package/src/shared/content-settings/components/text-style-field/TextStyleField.mixin.ts +29 -0
  326. package/src/shared/content-settings/components/text-style-field/TextStyleField.vue +9 -15
  327. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +3 -64
  328. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +18 -66
  329. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.vue +0 -4
  330. package/src/shared/side-bar/components/SideBar.tabs.test.ts +64 -0
  331. package/src/shared/style-settings/components/StyleSettings.mixin.ts +14 -67
  332. package/src/shared/style-settings/components/StyleSettings.vue +32 -213
  333. package/src/shared/style-settings/components/color-palette-settings-with-state/ColorPaletteSettingsWithState.vue +85 -0
  334. package/src/shared/style-settings/components/i18n/style-settings.json +3 -0
  335. package/src/shared/style-settings/components/style-option-color-field-with-state/StyleOptionColorFieldWithState.test.ts +105 -0
  336. package/src/shared/style-settings/components/style-option-color-field-with-state/StyleOptionColorFieldWithState.vue +80 -0
  337. package/src/shared/style-settings/models.ts +0 -1
  338. package/src/utils/minify-brand-page-metadata.ts +4 -1
  339. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontSize.d.ts +0 -20
  340. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontSize.js +0 -44
  341. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/LineHeight.d.ts +0 -27
  342. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/LineHeight.js +0 -44
  343. package/lib/src/bundled-translations-2HkRBbBD.js +0 -177
  344. package/lib/src/bundled-translations.de-DE-CL9ZEhU2.js +0 -177
  345. package/lib/src/bundled-translations.es-ES-uj7Sliu0.js +0 -177
  346. package/lib/src/bundled-translations.fr-CA-BMnBtr_w.js +0 -177
  347. package/lib/src/bundled-translations.fr-FR-9PEZedzq.js +0 -177
  348. package/lib/src/bundled-translations.pt-BR-B3oNDkoe.js +0 -177
  349. package/lib/src/bundled-translations.pt-PT-DM7Vsf-h.js +0 -177
  350. package/lib/src/metadata-builder/builders/update-content-text-builder.d.ts +0 -17
  351. package/lib/src/metadata-builder/builders/update-content-text-builder.js +0 -103
  352. package/lib/src/metadata-builder/builders/update-content-text-style-builder.d.ts +0 -16
  353. package/lib/src/metadata-builder/builders/update-content-text-style-builder.js +0 -216
  354. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.d.ts +0 -286
  355. package/lib/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.js +0 -60
  356. package/src/brand-page-maker/composables/rich-text-editor/extensions/FontSize.ts +0 -73
  357. package/src/brand-page-maker/composables/rich-text-editor/extensions/LineHeight.ts +0 -85
  358. package/src/metadata-builder/builders/update-content-text-builder.ts +0 -148
  359. package/src/metadata-builder/builders/update-content-text-style-builder.ts +0 -352
  360. package/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.mixin.ts +0 -66
  361. package/src/shared/background-settings/components/background-shapes/BackgroundShapeSettings.vue +0 -28
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "275",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "251",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "250",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "237",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-DtalJKI3.js";
2
+ import { _ as t } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, h = {
4
4
  width: "263",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DtalJKI3.js";
2
+ import { _ as e } from "./lib-D3mtUOE0.js";
3
3
  const M = {}, Z = {
4
4
  width: "242",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DtalJKI3.js";
2
+ import { _ as e } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, M = {
4
4
  width: "231",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DtalJKI3.js";
2
+ import { _ as e } from "./lib-D3mtUOE0.js";
3
3
  const M = {}, Z = {
4
4
  width: "230",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DtalJKI3.js";
2
+ import { _ as e } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as e } from "./lib-DtalJKI3.js";
2
+ import { _ as e } from "./lib-D3mtUOE0.js";
3
3
  const i = {}, l = {
4
4
  width: "216",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-DtalJKI3.js";
2
+ import { _ as M } from "./lib-D3mtUOE0.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -1,5 +1,5 @@
1
1
  import { openBlock as H, createElementBlock as V, createStaticVNode as t } from "vue";
2
- import { _ as M } from "./lib-DtalJKI3.js";
2
+ import { _ as M } from "./lib-D3mtUOE0.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -16,6 +16,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
16
16
  backgroundShapesStyle(): BrandPageCssStyle;
17
17
  isFullBackground(): boolean;
18
18
  objectUrl(): string;
19
+ resolvedShapeColor(): string;
19
20
  }, {
20
21
  isValidSvgUrl(url: string): boolean;
21
22
  applySvgAttributes(svgData: string): string;
@@ -2,6 +2,7 @@ import { defineComponent } from 'vue';
2
2
  import ComponentCommonMixin from '../mixins/component-common.mixin';
3
3
  import axios from 'axios';
4
4
  import { applyColorToSvgString } from '@brand-page/utils/svg-color.util';
5
+ import { resolveColorReference, } from '@brand-page/utils/color-palette.util';
5
6
  import { isURL } from '../../../utils/validator.util';
6
7
  import { PROXY_SHAPE_URL_REGEX } from '@brand-page/constants';
7
8
  import { getRegexToMatchAttributeInSvgTag } from '@brand-page/utils/svg.util';
@@ -17,6 +18,11 @@ export default defineComponent({
17
18
  required: true,
18
19
  },
19
20
  },
21
+ inject: {
22
+ // BP-5886: getter for the page palette (provided by <Page>) to resolve
23
+ // `var(--id)` fills.
24
+ getPaletteColors: { default: undefined },
25
+ },
20
26
  data() {
21
27
  return {
22
28
  svgData: '',
@@ -48,9 +54,18 @@ export default defineComponent({
48
54
  }
49
55
  return this.viewModel.name;
50
56
  },
57
+ // BP-5886: the shape's colour with any palette `var(--id)` resolved to its
58
+ // concrete value — `var()` can't resolve inside the <img>-embedded SVG.
59
+ resolvedShapeColor() {
60
+ const getColors = this.getPaletteColors;
61
+ const colors = getColors?.() ?? [];
62
+ return resolveColorReference(this.viewModel?.style?.color, colors);
63
+ },
51
64
  },
52
65
  watch: {
53
- 'viewModel.style.color': {
66
+ // BP-5886: re-render when the resolved colour changes — covers both a direct
67
+ // colour edit and an edit to a referenced palette role.
68
+ resolvedShapeColor: {
54
69
  handler() {
55
70
  this.render();
56
71
  },
@@ -146,8 +161,8 @@ export default defineComponent({
146
161
  else {
147
162
  this.originalSvgData = this.viewModel.name;
148
163
  }
149
- if (this.viewModel.style.color) {
150
- this.svgData = applyColorToSvgString(this.originalSvgData, this.viewModel.style.color);
164
+ if (this.resolvedShapeColor) {
165
+ this.svgData = applyColorToSvgString(this.originalSvgData, this.resolvedShapeColor);
151
166
  }
152
167
  else {
153
168
  this.svgData = this.originalSvgData;
@@ -1,6 +1,7 @@
1
1
  import type { PropType } from 'vue';
2
2
  import type { ContactFormViewModel } from '@brand-page/view-models';
3
3
  import type { BrandPageContext, FormField, FormFieldType } from '@brand-page/models';
4
+ import { type RichTextValue } from '@brand-page-maker/utils';
4
5
  export interface FieldValue {
5
6
  value: string;
6
7
  error?: string;
@@ -62,7 +63,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
62
63
  hasFormError(): boolean;
63
64
  hasSubmitError(): boolean;
64
65
  isSubmitButtonVisible(): boolean;
65
- title(): string;
66
+ title(): RichTextValue;
66
67
  renderText(): string;
67
68
  renderSuccessText(): string;
68
69
  successMessageColorStyle(): BrandPageCssStyle;
@@ -120,9 +120,14 @@ export default defineComponent({
120
120
  isEmail(this.viewModel.responseEmail));
121
121
  },
122
122
  title() {
123
- return this.viewModel.title && this.viewModel.title.trim() !== ''
124
- ? this.viewModel.title
125
- : 'Contact Us';
123
+ // Render exactly what's in the data — no render-time default. The block
124
+ // factory seeds a localised title (contentSettingsTr('contactUsTitle')) on
125
+ // creation and it flows through the translation pipeline, so a hardcoded
126
+ // 'Contact Us' fallback here would (a) override a user who deliberately
127
+ // cleared the title and (b) paint untranslated English on non-English
128
+ // sites. This is also the one section that had such a fallback — every
129
+ // other section renders its data title directly (BP-5787).
130
+ return this.viewModel.title;
126
131
  },
127
132
  renderText() {
128
133
  if (!this.viewModel.description) {
@@ -30,6 +30,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
30
30
  originalSvgData: string;
31
31
  }, {
32
32
  useObjectElement(): boolean;
33
+ resolvedColorReplacements(): ColorReplacement[];
33
34
  objectStyle(): {
34
35
  width?: undefined;
35
36
  height?: undefined;
@@ -2,6 +2,7 @@ import { defineComponent } from 'vue';
2
2
  import ComponentCommonMixin from '../mixins/component-common.mixin';
3
3
  import axios from 'axios';
4
4
  import { applyColorReplacementsToSvgString } from '@brand-page/utils/svg-color.util';
5
+ import { resolveColorReference, } from '@brand-page/utils/color-palette.util';
5
6
  import { PROXY_SHAPE_URL_REGEX } from '@brand-page/constants';
6
7
  import { getRegexToMatchAttributeInSvgTag } from '@brand-page/utils/svg.util';
7
8
  export default defineComponent({
@@ -31,6 +32,11 @@ export default defineComponent({
31
32
  default: undefined,
32
33
  },
33
34
  },
35
+ inject: {
36
+ // BP-5886: getter for the page palette (provided by <Page>) — used to resolve
37
+ // `var(--id)` fills to concrete colours before the SVG is built.
38
+ getPaletteColors: { default: undefined },
39
+ },
34
40
  data() {
35
41
  return { svgData: '', svgDataObjectUrl: '', originalSvgData: '' };
36
42
  },
@@ -38,6 +44,16 @@ export default defineComponent({
38
44
  useObjectElement() {
39
45
  return !!this.imageUrl.match(PROXY_SHAPE_URL_REGEX);
40
46
  },
47
+ // BP-5886: colour replacements with any palette `var(--id)` resolved to its
48
+ // concrete value — `var()` can't resolve inside the <img>-embedded SVG.
49
+ resolvedColorReplacements() {
50
+ const getColors = this.getPaletteColors;
51
+ const colors = getColors?.() ?? [];
52
+ return (this.colorReplacements ?? []).map((c) => ({
53
+ ...c,
54
+ replacementColor: resolveColorReference(c.replacementColor, colors),
55
+ }));
56
+ },
41
57
  objectStyle() {
42
58
  if (!this.size) {
43
59
  return {};
@@ -60,7 +76,9 @@ export default defineComponent({
60
76
  },
61
77
  },
62
78
  watch: {
63
- colorReplacements: {
79
+ // BP-5886: watch the RESOLVED replacements so the shape re-renders both when
80
+ // its own colours change and when a referenced palette colour is edited.
81
+ resolvedColorReplacements: {
64
82
  handler(newVal, oldVal) {
65
83
  if (newVal &&
66
84
  oldVal &&
@@ -136,7 +154,7 @@ export default defineComponent({
136
154
  if (!this.originalSvgData) {
137
155
  return;
138
156
  }
139
- this.svgData = applyColorReplacementsToSvgString(this.originalSvgData, this.colorReplacements);
157
+ this.svgData = applyColorReplacementsToSvgString(this.originalSvgData, this.resolvedColorReplacements);
140
158
  this.svgData = this.applySvgAttributes(this.svgData);
141
159
  const blob = new Blob([this.svgData], { type: 'image/svg+xml' });
142
160
  const oldSvgDataObjectUrl = this.svgDataObjectUrl;
@@ -52,6 +52,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
52
52
  styles: {};
53
53
  }, {
54
54
  brandPageToken(): string | null;
55
+ shouldEmitPaletteRoot(): boolean;
56
+ paletteRootStyleHtml(): string;
55
57
  contents(): ContentViewModel[];
56
58
  backgroundShapes(): BackgroundShape[];
57
59
  rootElementStyles(): BrandPageCssStyle;
@@ -1,6 +1,6 @@
1
- import { defineComponent } from 'vue';
1
+ import { defineComponent, provide } from 'vue';
2
2
  import { DEFAULT_FONT_FAMILY_KEY, FALLBACK_FONT_FAMILIES, FONT_FAMILY_CONFIGS, } from '../../constants';
3
- import { getSlugFromContext, getPageHeadingText } from '@brand-page/utils';
3
+ import { getSlugFromContext, getPageHeadingText, buildPaletteRootCss, } from '@brand-page/utils';
4
4
  import { findNavItemByRelativePath } from '@brand-page/utils/route.util';
5
5
  import { BRAND_PAGE_TYPES } from '@brand-page/models';
6
6
  import { hasProfileContent as checkHasProfileContent } from '@brand-page/utils/vcard.util';
@@ -59,6 +59,14 @@ export default defineComponent({
59
59
  'save-contact-widget-click',
60
60
  ],
61
61
  setup(props) {
62
+ // BP-5886: shapes render as <img>-embedded SVG, an isolated document the
63
+ // `:root` palette block can't reach, so a `var(--id)` fill won't resolve.
64
+ // Provide the palette as a getter so the shape mixins can resolve their refs
65
+ // to concrete colours before building the SVG. A getter (not a provided ref)
66
+ // sidesteps Options-API inject ref-unwrapping ambiguity and stays reactive:
67
+ // calling it inside a shape's computed tracks `viewModel.styles.colors`, so
68
+ // shapes recolour when a referenced palette colour is edited.
69
+ provide('getPaletteColors', () => props.viewModel?.styles?.colors ?? []);
62
70
  return {
63
71
  fluidText: JSON.stringify({
64
72
  default: props.context.brandPageType === BRAND_PAGE_TYPES.brandSite
@@ -77,6 +85,17 @@ export default defineComponent({
77
85
  brandPageToken() {
78
86
  return this.viewModel?.brandPageToken || null;
79
87
  },
88
+ // BP-5886 — global colour palette emitted as a single `:root` block.
89
+ // Only the published single-document surfaces emit the global block:
90
+ // template-grid cards get scoped vars (TemplatePreview) and the maker main
91
+ // preview emits from BrandPageMakerPage, so guard those out to avoid a
92
+ // duplicate / colliding `:root`.
93
+ shouldEmitPaletteRoot() {
94
+ return !this.context?.isTemplate && !this.context?.isPreview;
95
+ },
96
+ paletteRootStyleHtml() {
97
+ return buildPaletteRootCss(this.viewModel?.styles?.colors ?? []);
98
+ },
80
99
  contents() {
81
100
  return this.pageViewModel?.contents || [];
82
101
  },
@@ -7,6 +7,14 @@ import { TextStyles } from './styles.model';
7
7
  import { LogoStyles } from './logo.model';
8
8
  import type { LogoImageModel, LogoTemplateImageModel } from './logo.model';
9
9
  import type { BrandPagePaymentConfig } from './payment.model';
10
+ import type { JSONContent } from '@tiptap/vue-3';
11
+ /**
12
+ * BP-5787 — a rich-text field is either a legacy inline-HTML string or a
13
+ * Tiptap JSON document. Typing RTE content fields as RichTextValue (instead of
14
+ * `string`) forces every consumer to handle both forms — surfacing at compile
15
+ * time any code that assumes a plain string (e.g. `.replace`, `.length`).
16
+ */
17
+ export type RichTextValue = string | JSONContent;
10
18
  export * from './brand-page-context.model';
11
19
  export * from './payment.model';
12
20
  export * from './content.model';
@@ -53,6 +61,7 @@ export declare class PageStyles {
53
61
  logoStyles: LogoStyles;
54
62
  textStyles: TextStyles;
55
63
  galleryStyles: GalleryStyles;
64
+ colors: ColorItem[];
56
65
  constructor(option?: Partial<Omit<PageStyles, 'logoStyles' | 'buttonStyles' | 'backgroundStyles' | 'textStyles'>> & {
57
66
  logoStyles?: Partial<LogoStyles>;
58
67
  buttonStyles?: Partial<ButtonStyles>;
@@ -148,7 +157,7 @@ export interface TextContent extends Content {
148
157
  /**
149
158
  * For BrandPage/BrandContact only
150
159
  */
151
- text: string;
160
+ text: RichTextValue;
152
161
  /**
153
162
  * For BrandSite
154
163
  */
@@ -171,9 +180,9 @@ export interface TextContent extends Content {
171
180
  }
172
181
  export interface ProfileContent extends Content {
173
182
  avatarImageUrl: string;
174
- name: string;
175
- title: string;
176
- description: string;
183
+ name: RichTextValue;
184
+ title: RichTextValue;
185
+ description: RichTextValue;
177
186
  backgroundColor: BrandPageCssStyle;
178
187
  colorReplacements: ColorReplacement[];
179
188
  mediaType?: string;
@@ -191,7 +200,7 @@ export interface MapContent extends Content {
191
200
  }
192
201
  export interface MailingListContent extends Content {
193
202
  acceptedFields?: 'emailOnly' | 'nameAndEmail';
194
- title: string;
203
+ title: RichTextValue;
195
204
  buttonText: string;
196
205
  titleStyle: TextStyleDeclaration;
197
206
  buttonTextStyle: TextStyleDeclaration;
@@ -243,10 +252,10 @@ export interface FormField {
243
252
  export interface ContactFormContent extends Content {
244
253
  type: 'contact-form';
245
254
  displayStyle: string;
246
- title: string;
247
- description: string;
255
+ title: RichTextValue;
256
+ description: RichTextValue;
248
257
  buttonText: string;
249
- successMessage: string;
258
+ successMessage: RichTextValue;
250
259
  fields: FormField[];
251
260
  responseEmail: string;
252
261
  imageUrl?: string;
@@ -265,8 +274,8 @@ export interface ContactFormContent extends Content {
265
274
  export interface BannerSectionContent extends Content {
266
275
  type: 'banner-section';
267
276
  imageUrl: string;
268
- title: string;
269
- description: string;
277
+ title: RichTextValue;
278
+ description: RichTextValue;
270
279
  buttonText: string | false;
271
280
  url: string;
272
281
  email?: string;
@@ -293,8 +302,8 @@ export declare const MEDIA_TYPES: {
293
302
  };
294
303
  export type MediaType = keyof typeof MEDIA_TYPES;
295
304
  export interface TextMediaItem extends ImageItem {
296
- title: string;
297
- paragraph: string;
305
+ title: RichTextValue;
306
+ paragraph: RichTextValue;
298
307
  itemsId: number;
299
308
  buttonText?: string | false;
300
309
  buttonPageId?: string;
@@ -313,8 +322,8 @@ export interface TextShapeItem extends TextMediaItem {
313
322
  export interface ShapeItem extends ImageItem {
314
323
  colorReplacements: ColorReplacement[];
315
324
  mediaType: MediaType;
316
- title?: string;
317
- paragraph?: string;
325
+ title?: RichTextValue;
326
+ paragraph?: RichTextValue;
318
327
  titleOverride?: string;
319
328
  paragraphOverride?: string;
320
329
  }
@@ -322,9 +331,9 @@ export interface TestimonialItems {
322
331
  /** Stable per-item identifier. See ImageItem.id. */
323
332
  id: string;
324
333
  imageUrl: string;
325
- name: string;
326
- position: string;
327
- testimonials: string;
334
+ name: RichTextValue;
335
+ position: RichTextValue;
336
+ testimonials: RichTextValue;
328
337
  colorReplacements: ColorReplacement[];
329
338
  mediaType: string;
330
339
  size?: string;
@@ -337,7 +346,7 @@ export interface TestimonialItems {
337
346
  export interface TextItem {
338
347
  /** Stable per-item identifier. See ImageItem.id. */
339
348
  id: string;
340
- text: string;
349
+ text: RichTextValue;
341
350
  textStyle: TextStyleDeclaration;
342
351
  textOverride?: string;
343
352
  }
@@ -354,8 +363,8 @@ export interface ImagesSectionContent extends Content, MediaSection {
354
363
  enablePopup: boolean;
355
364
  }
356
365
  export interface MediaSection extends Content {
357
- title: string;
358
- description: string;
366
+ title: RichTextValue;
367
+ description: RichTextValue;
359
368
  displayStyle: ImagesSectionContentDisplayStyle;
360
369
  items: TextShapeItem[] | TextMediaItem[];
361
370
  titleStyle: TextStyleDeclaration;
@@ -370,9 +379,21 @@ export interface ColorReplacement {
370
379
  originalColor: string;
371
380
  replacementColor: string;
372
381
  }
382
+ /**
383
+ * A single entry in the global colour palette (BP-5886).
384
+ * `id` is the CSS-variable name emitted at :root (`--<id>`); elements reference
385
+ * the colour via `var(--<id>)`. `value` is a concrete literal (rgb/#hex or a
386
+ * gradient string). `palette` = the 4 static brand roles (`palette-0`…`palette-3`);
387
+ * `custom` = one-off colours chosen on elements (`palette-custom-<uuid>`).
388
+ */
389
+ export interface ColorItem {
390
+ id: string;
391
+ value: string;
392
+ type: 'palette' | 'custom';
393
+ }
373
394
  export interface TestimonialSectionContent extends Content {
374
395
  type: 'testimonial-section';
375
- title: string;
396
+ title: RichTextValue;
376
397
  displayStyle: string;
377
398
  items: TestimonialItems[];
378
399
  titleStyle: TextStyleDeclaration;
@@ -386,8 +407,8 @@ export interface TestimonialSectionContent extends Content {
386
407
  export interface AboutSectionContent extends Content {
387
408
  type: 'about-section';
388
409
  imageUrl: string;
389
- title: string;
390
- paragraph: string;
410
+ title: RichTextValue;
411
+ paragraph: RichTextValue;
391
412
  displayStyle: string;
392
413
  titleStyle: TextStyleDeclaration;
393
414
  paragraphStyle: TextStyleDeclaration;
@@ -411,7 +432,7 @@ export declare const SOCIAL_LINKS_ICON_DISPLAY_STYLES: {
411
432
  export type SocialLinksIconDisplayStyle = keyof typeof SOCIAL_LINKS_ICON_DISPLAY_STYLES;
412
433
  export interface SocialLinksContent extends Content {
413
434
  type: 'social-links';
414
- title: string;
435
+ title: RichTextValue;
415
436
  links: LinksItem[];
416
437
  iconDisplayStyle: SocialLinksIconDisplayStyle;
417
438
  iconFillStyles: BrandPageCssStyle;
@@ -434,8 +455,8 @@ export interface DividerSectionContent extends Content {
434
455
  }
435
456
  export interface BookingSectionContent extends Content {
436
457
  type: 'booking-section';
437
- title: string;
438
- description: string;
458
+ title: RichTextValue;
459
+ description: RichTextValue;
439
460
  buttonText: string;
440
461
  url: string;
441
462
  email?: string;
@@ -85,6 +85,9 @@ export class PageStyles {
85
85
  logoStyles;
86
86
  textStyles;
87
87
  galleryStyles;
88
+ // BP-5886 global colour palette. Non-nullable (default []) per the model
89
+ // reactivity rule; old persisted `styles` that omit it hydrate to [].
90
+ colors;
88
91
  constructor(option = {}) {
89
92
  this.backgroundStyles = new BackgroundStyles(option.backgroundStyles || {
90
93
  backgroundImageUrl: '',
@@ -109,6 +112,7 @@ export class PageStyles {
109
112
  ? new TextStyles(option.textStyles)
110
113
  : TextStyles.GetDefaultTextStyle();
111
114
  this.galleryStyles = new GalleryStyles(option.galleryStyles);
115
+ this.colors = option.colors ? option.colors.map((c) => ({ ...c })) : [];
112
116
  }
113
117
  }
114
118
  export const ASPECT_RATIOS = {