@designcrowd/library.brand-page 6.0.19-ast-btns-6 → 6.0.20

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 (176) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-Dqv1385w.js → CreatedOnBrandCrowd-de-de-C52IyXZu.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-DuA7uGNz.js → CreatedOnBrandCrowd-en-us-DhTy_dEV.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CaSTc5HM.js → CreatedOnBrandCrowd-es-es-BJelIAQ4.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-C9VKny9y.js → CreatedOnBrandCrowd-fr-ca-DwJohy0T.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-C9VKny9y.js → CreatedOnBrandCrowd-fr-fr-DwJohy0T.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-ft2V8-xm.js → CreatedOnBrandCrowd-pt-br-CMzKbxdG.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-ft2V8-xm.js → CreatedOnBrandCrowd-pt-pt-CMzKbxdG.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-BdZxdxoi.js → CreatedOnDcom-de-de-DAy1GHrw.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-Dl0XbKU2.js → CreatedOnDcom-en-us-CgBDAkJN.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-WciMRblK.js → CreatedOnDcom-es-es-Ds9d5rem.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-CvjUqr4M.js → CreatedOnDcom-fr-ca-CZL0BQ-u.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-CMALFpBz.js → CreatedOnDcom-fr-fr-BVYh5Wvo.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-C0MjZ-_y.js → CreatedOnDcom-pt-br-1hsWNXfq.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-DV9I0m0I.js → CreatedOnDcom-pt-pt-DvM0N-3M.js} +1 -1
  15. package/lib/src/brand-page/components/collapsible/Collapsible.mixin.d.ts +0 -11
  16. package/lib/src/brand-page/components/collapsible/Collapsible.mixin.js +1 -13
  17. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +0 -1
  18. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +5 -17
  19. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +0 -5
  20. package/lib/src/brand-page/components/media/Media.mixin.d.ts +10 -1
  21. package/lib/src/brand-page/components/media/Media.mixin.js +13 -0
  22. package/lib/src/brand-page/components/page/Page.mixin.d.ts +5 -0
  23. package/lib/src/brand-page/components/page/Page.mixin.js +8 -1
  24. package/lib/src/brand-page/components/payment/Payment.mixin.js +0 -5
  25. package/lib/src/brand-page/models/index.d.ts +26 -35
  26. package/lib/src/brand-page/models/payment.model.d.ts +0 -2
  27. package/lib/src/brand-page/utils/button.util.d.ts +0 -5
  28. package/lib/src/brand-page/utils/button.util.js +0 -13
  29. package/lib/src/brand-page/utils/index.d.ts +1 -0
  30. package/lib/src/brand-page/utils/index.js +1 -0
  31. package/lib/src/brand-page/utils/migration.util.js +0 -30
  32. package/lib/src/brand-page/utils/page-heading.util.d.ts +13 -0
  33. package/lib/src/brand-page/utils/page-heading.util.js +24 -0
  34. package/lib/src/brand-page/utils/text.util.d.ts +1 -1
  35. package/lib/src/brand-page/utils/text.util.js +0 -32
  36. package/lib/src/brand-page/utils/vcard.util.js +4 -4
  37. package/lib/src/brand-page/utils/view-model.util.d.ts +0 -1
  38. package/lib/src/brand-page/utils/view-model.util.js +20 -69
  39. package/lib/src/brand-page/view-models.d.ts +3 -3
  40. package/lib/src/brand-page-maker/assessors/contact-form-visibility.assessor.d.ts +0 -1
  41. package/lib/src/brand-page-maker/assessors/contact-form-visibility.assessor.js +0 -6
  42. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +1 -0
  43. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +100 -21
  44. package/lib/src/brand-page-maker/constants/config-settings-constant.js +3 -40
  45. package/lib/src/brand-page-maker/default-getters/index.d.ts +0 -1
  46. package/lib/src/brand-page-maker/default-getters/index.js +0 -1
  47. package/lib/src/brand-page-maker/models/button-styles-config.js +3 -15
  48. package/lib/src/brand-page-maker/models/content-settings-configs.d.ts +1 -2
  49. package/lib/src/brand-page-maker/models/content-settings.js +3 -15
  50. package/lib/src/brand-page-maker/utils/index.d.ts +0 -2
  51. package/lib/src/brand-page-maker/utils/index.js +0 -2
  52. package/lib/src/brand-page-maker/utils/rich-text-editor.util.d.ts +5 -19
  53. package/lib/src/brand-page-maker/utils/rich-text-editor.util.js +5 -35
  54. package/lib/src/brand-page-maker/validators/field.validator.js +2 -10
  55. package/lib/src/css/library.brand-page-brandCrowd.min.css +189 -217
  56. package/lib/src/css/library.brand-page-brandPage.min.css +189 -217
  57. package/lib/src/css/library.brand-page-designCom.min.css +189 -217
  58. package/lib/src/css/library.brand-page-preview.min.css +189 -217
  59. package/lib/src/index.d.ts +0 -1
  60. package/lib/src/index.mjs +138 -143
  61. package/lib/src/{lib-CYYPMTsG.js → lib-CK2FPBv5.js} +56342 -56936
  62. package/lib/src/lib.js +0 -2
  63. package/lib/src/metadata-builder/builders/update-content-text-builder.js +15 -20
  64. package/lib/src/metadata-builder/builders/update-content-text-style-builder.js +3 -8
  65. package/lib/src/metadata-builder/helpers/rte.helpers.d.ts +2 -2
  66. package/lib/src/metadata-builder/helpers/rte.helpers.js +3 -6
  67. package/lib/src/shared/content-settings/components/GenericTextInput.mixin.js +1 -14
  68. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.js +3 -17
  69. package/lib/src/shared/content-settings/models.d.ts +0 -1
  70. package/lib/src/shared/content-settings/store/content-settings-store.js +0 -3
  71. package/lib/src/utils/minify-brand-page-metadata.js +1 -4
  72. package/package.json +2 -2
  73. package/src/brand-page/components/about-section/AboutSection.vue +1 -1
  74. package/src/brand-page/components/about-section/AboutSection.vue.test.ts +11 -0
  75. package/src/brand-page/components/banner-section/BannerSection.vue +5 -5
  76. package/src/brand-page/components/booking-section/BookingSection.vue +1 -1
  77. package/src/brand-page/components/button/ButtonStyleWrapper.vue +44 -112
  78. package/src/brand-page/components/collapsible/Collapsible.mixin.ts +1 -14
  79. package/src/brand-page/components/contact-form/ContactForm.mixin.test.ts +0 -18
  80. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +5 -20
  81. package/src/brand-page/components/contact-form/ContactForm.vue +39 -100
  82. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +0 -6
  83. package/src/brand-page/components/mailing-list/MailingList.vue +11 -19
  84. package/src/brand-page/components/media/Media.mixin.ts +13 -0
  85. package/src/brand-page/components/media/Media.test.ts +65 -0
  86. package/src/brand-page/components/media/Media.vue +1 -1
  87. package/src/brand-page/components/page/Page.mixin.ts +8 -1
  88. package/src/brand-page/components/page/Page.vue +8 -0
  89. package/src/brand-page/components/page/Page.vue.test.ts +142 -0
  90. package/src/brand-page/components/payment/Payment.mixin.ts +0 -6
  91. package/src/brand-page/components/payment/Payment.vue +25 -44
  92. package/src/brand-page/components/payment/RequestPaymentStripe.vue +22 -26
  93. package/src/brand-page/components/profile/Profile.vue +1 -1
  94. package/src/brand-page/components/shop/Shop.vue +6 -15
  95. package/src/brand-page/components/social-links/SocialLinks.vue +1 -1
  96. package/src/brand-page/components/testimonial-section/TestimonialSection.vue +1 -1
  97. package/src/brand-page/components/text-media-section/TextMediaSection.vue +1 -1
  98. package/src/brand-page/components/text-wrapper/TextWrapper.vue +12 -18
  99. package/src/brand-page/models/index.ts +26 -36
  100. package/src/brand-page/models/payment.model.ts +0 -2
  101. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +3 -3
  102. package/src/brand-page/utils/button.util.ts +0 -17
  103. package/src/brand-page/utils/image.util.test.ts +25 -0
  104. package/src/brand-page/utils/index.ts +1 -0
  105. package/src/brand-page/utils/migration.util.ts +0 -33
  106. package/src/brand-page/utils/page-heading.util.test.ts +116 -0
  107. package/src/brand-page/utils/page-heading.util.ts +33 -0
  108. package/src/brand-page/utils/style.util.test.ts +0 -51
  109. package/src/brand-page/utils/text.util.ts +4 -43
  110. package/src/brand-page/utils/vcard.util.ts +4 -6
  111. package/src/brand-page/utils/view-model.util.ts +26 -95
  112. package/src/brand-page/view-models.ts +2 -3
  113. package/src/brand-page-maker/assessors/contact-form-visibility.assessor.ts +0 -11
  114. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +107 -23
  115. package/src/brand-page-maker/constants/config-settings-constant.ts +2 -43
  116. package/src/brand-page-maker/default-getters/index.ts +0 -1
  117. package/src/brand-page-maker/models/button-styles-config.ts +3 -15
  118. package/src/brand-page-maker/models/content-settings-configs.ts +1 -4
  119. package/src/brand-page-maker/models/content-settings.ts +3 -16
  120. package/src/brand-page-maker/utils/index.ts +0 -2
  121. package/src/brand-page-maker/utils/rich-text-editor.util.test.ts +3 -4
  122. package/src/brand-page-maker/utils/rich-text-editor.util.ts +11 -50
  123. package/src/brand-page-maker/validators/field.validator.ts +2 -10
  124. package/src/lib.ts +0 -9
  125. package/src/metadata-builder/builders/update-content-text-builder.ts +18 -32
  126. package/src/metadata-builder/builders/update-content-text-style-builder.ts +4 -14
  127. package/src/metadata-builder/helpers/rte.helpers.ts +7 -11
  128. package/src/shared/content-settings/components/GenericTextInput.mixin.ts +1 -17
  129. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.ts +3 -22
  130. package/src/shared/content-settings/models.ts +0 -3
  131. package/src/shared/content-settings/store/content-settings-store.ts +0 -3
  132. package/src/shared/logo-settings/components/EditLogoSettings.vue +1 -0
  133. package/src/shared/style-settings/components/StyleSettings.vue +0 -1
  134. package/src/utils/minify-brand-page-metadata.ts +1 -4
  135. package/lib/src/brand-page/utils/migration/migration-19.d.ts +0 -2
  136. package/lib/src/brand-page/utils/migration/migration-19.js +0 -71
  137. package/lib/src/brand-page/utils/migration/migration-20.d.ts +0 -2
  138. package/lib/src/brand-page/utils/migration/migration-20.js +0 -28
  139. package/lib/src/brand-page/utils/migration/migration-21.d.ts +0 -2
  140. package/lib/src/brand-page/utils/migration/migration-21.js +0 -27
  141. package/lib/src/brand-page-maker/__fixtures__/complex-rte.fixture.d.ts +0 -22
  142. package/lib/src/brand-page-maker/__fixtures__/complex-rte.fixture.js +0 -22
  143. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.d.ts +0 -14
  144. package/lib/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.js +0 -39
  145. package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.d.ts +0 -28
  146. package/lib/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.js +0 -66
  147. package/lib/src/brand-page-maker/default-getters/contact-form-card-color.default-getter.d.ts +0 -8
  148. package/lib/src/brand-page-maker/default-getters/contact-form-card-color.default-getter.js +0 -16
  149. package/lib/src/brand-page-maker/utils/rte-render.util.d.ts +0 -33
  150. package/lib/src/brand-page-maker/utils/rte-render.util.js +0 -50
  151. package/lib/src/brand-page-maker/utils/rte-sanitize.util.d.ts +0 -6
  152. package/lib/src/brand-page-maker/utils/rte-sanitize.util.js +0 -158
  153. package/lib/src/brand-page-maker/utils/rte-serializer.d.ts +0 -5
  154. package/lib/src/brand-page-maker/utils/rte-serializer.js +0 -112
  155. package/src/brand-page/components/button/ButtonStyleWrapper.vue.test.ts +0 -167
  156. package/src/brand-page/utils/migration/migration-19.test.ts +0 -72
  157. package/src/brand-page/utils/migration/migration-19.ts +0 -83
  158. package/src/brand-page/utils/migration/migration-20.test.ts +0 -115
  159. package/src/brand-page/utils/migration/migration-20.ts +0 -44
  160. package/src/brand-page/utils/migration/migration-21.test.ts +0 -112
  161. package/src/brand-page/utils/migration/migration-21.ts +0 -45
  162. package/src/brand-page/utils/text.util.test.ts +0 -47
  163. package/src/brand-page/utils/view-model.pageid-rte.test.ts +0 -104
  164. package/src/brand-page-maker/__fixtures__/complex-rte.fixture.ts +0 -23
  165. package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.test.ts +0 -52
  166. package/src/brand-page-maker/composables/rich-text-editor/extensions/FontFamily.ts +0 -42
  167. package/src/brand-page-maker/composables/rich-text-editor/getRteExtensions.ts +0 -113
  168. package/src/brand-page-maker/default-getters/contact-form-card-color.default-getter.ts +0 -23
  169. package/src/brand-page-maker/utils/__snapshots__/rte-render-parity.test.ts.snap +0 -200
  170. package/src/brand-page-maker/utils/rte-features.test.ts +0 -330
  171. package/src/brand-page-maker/utils/rte-render-parity.test.ts +0 -156
  172. package/src/brand-page-maker/utils/rte-render.util.ts +0 -77
  173. package/src/brand-page-maker/utils/rte-sanitize-json.test.ts +0 -158
  174. package/src/brand-page-maker/utils/rte-sanitize.util.ts +0 -195
  175. package/src/brand-page-maker/utils/rte-serializer.ts +0 -172
  176. package/src/brand-page-maker/validators/field.validator.test.ts +0 -55
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as t } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as e } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as e } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as e } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as e } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as e } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as M } from "./lib-CK2FPBv5.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-CYYPMTsG.js";
2
+ import { _ as M } from "./lib-CK2FPBv5.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -25,11 +25,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
25
25
  required: false;
26
26
  default: undefined;
27
27
  };
28
- backgroundStyle: {
29
- type: PropType<BrandPageCssStyle>;
30
- required: false;
31
- default: undefined;
32
- };
33
28
  context: {
34
29
  type: PropType<BrandPageContext>;
35
30
  required: true;
@@ -66,11 +61,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
66
61
  required: false;
67
62
  default: undefined;
68
63
  };
69
- backgroundStyle: {
70
- type: PropType<BrandPageCssStyle>;
71
- required: false;
72
- default: undefined;
73
- };
74
64
  context: {
75
65
  type: PropType<BrandPageContext>;
76
66
  required: true;
@@ -78,7 +68,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
78
68
  }>> & Readonly<{}>, {
79
69
  titleStyle: BrandPageCssStyle;
80
70
  cardStyle: BrandPageCssStyle;
81
- backgroundStyle: BrandPageCssStyle;
82
71
  buttonStyles: BrandPageCssStyle;
83
72
  canCollapse: boolean;
84
73
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
@@ -25,11 +25,6 @@ export default defineComponent({
25
25
  required: false,
26
26
  default: undefined,
27
27
  },
28
- backgroundStyle: {
29
- type: Object,
30
- required: false,
31
- default: undefined,
32
- },
33
28
  context: {
34
29
  type: Object,
35
30
  required: true,
@@ -45,16 +40,9 @@ export default defineComponent({
45
40
  if (borderRadius === '9999px') {
46
41
  containerStyle.borderRadius = '26px';
47
42
  }
48
- // Guarded on backgroundColor so an empty {} never blanks the container
49
- // (BP/BC contact-form card colour defaults to the button fill).
50
- if (this.cardStyle?.backgroundColor) {
43
+ if (this.cardStyle) {
51
44
  containerStyle.backgroundColor = this.cardStyle.backgroundColor;
52
45
  }
53
- // Own background colour decouples the container from the button fill (BP-5800).
54
- // Guarded on backgroundColor so an empty {} never blanks the container.
55
- if (this.backgroundStyle?.backgroundColor) {
56
- containerStyle.backgroundColor = this.backgroundStyle.backgroundColor;
57
- }
58
46
  return containerStyle;
59
47
  },
60
48
  arrowStyle() {
@@ -43,7 +43,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
43
43
  isSubmitting: boolean;
44
44
  submitError: string | undefined;
45
45
  }, {
46
- isDecorativeSubmitStyle(): boolean;
47
46
  submitButtonStyle(): BrandPageCssStyle;
48
47
  submitButtonTextStyle(): BrandPageCssStyle;
49
48
  contentPaddingStyle(): {
@@ -1,12 +1,11 @@
1
1
  import { defineComponent } from 'vue';
2
2
  import { FORM_FIELD_TYPES } from '@brand-page/models';
3
3
  import { getEmailValidationError, getMessageValidationError, getNameValidationError, getPhoneValidationError, } from '@brand-page/utils';
4
- import { isDecorativeButtonStyle } from '../../utils/button.util';
5
4
  import brandPageClient from '../../clients/brand-page.client';
6
5
  import { isEmail } from '../../../utils/validator.util';
7
6
  import { ALIGN_CARD_CENTER, ALIGN_CARD_CENTER_IMAGE, ALIGN_CENTERED, ALIGN_LEFT_FULL_IMAGE, ALIGN_RIGHT_FULL_IMAGE, DISPLAY_STYLE_COLLAPSED, RECAPTCHA_ACTION_CONTACT_FORM, TEXT_ONLY, } from '../../constants';
8
7
  import { getRenderText, contentPaddingStyle as toContentPaddingStyle, mutedTextForBackground, backgroundColorFromStyle, } from '@brand-page/utils';
9
- import { hasRTEContent, getPlainTextFromRTE } from '@brand-page-maker/utils';
8
+ import { hasRTEContent } from '@brand-page-maker/utils';
10
9
  import { useReCaptcha } from '../../composables/recaptcha.composable';
11
10
  export default defineComponent({
12
11
  props: {
@@ -45,12 +44,6 @@ export default defineComponent({
45
44
  submitError: undefined,
46
45
  }),
47
46
  computed: {
48
- // Decorative styles (brushstroke/arrow/paper) render a shape that needs width
49
- // to read — at pure w-fit the arrow chevron collapses. Give the submit button a
50
- // ~200px min-width so the decoration looks intentional without going full-width.
51
- isDecorativeSubmitStyle() {
52
- return isDecorativeButtonStyle(this.viewModel.buttonStyles?.selectedButtonStyleId);
53
- },
54
47
  submitButtonStyle() {
55
48
  const buttonStyle = { ...this.viewModel.buttonStyles?.style };
56
49
  const buttonTextStyle = {
@@ -120,10 +113,7 @@ export default defineComponent({
120
113
  isEmail(this.viewModel.responseEmail));
121
114
  },
122
115
  title() {
123
- // BP-5787: title may be RTE JSON (not a string), so `.trim()` would
124
- // throw — read the visible text via getPlainTextFromRTE to decide
125
- // whether to fall back to the default.
126
- return getPlainTextFromRTE(this.viewModel.title)
116
+ return this.viewModel.title && this.viewModel.title.trim() !== ''
127
117
  ? this.viewModel.title
128
118
  : 'Contact Us';
129
119
  },
@@ -161,8 +151,8 @@ export default defineComponent({
161
151
  // differs by website type:
162
152
  // - brandSite: the card style (card + divided layouts) or the section
163
153
  // background (other layouts).
164
- // - brand.page / brand.contact: the container is the collapsible, whose
165
- // colour is the card colour (defaulting to the global button fill).
154
+ // - brand.page / brand.contact: there's no section background, so the
155
+ // coloured surface is the global button fill.
166
156
  // Falls back to the title colour when there's no solid colour to anchor to.
167
157
  const style = this.context.isBrandSite
168
158
  ? this.hasCard || this.isDividedContent
@@ -170,9 +160,7 @@ export default defineComponent({
170
160
  : this.hasBgColor
171
161
  ? this.viewModel.backgroundStyle
172
162
  : undefined
173
- : this.viewModel.cardStyle?.backgroundColor
174
- ? this.viewModel.cardStyle
175
- : this.viewModel.buttonStyles?.style;
163
+ : this.viewModel.buttonStyles?.style;
176
164
  return (mutedTextForBackground(backgroundColorFromStyle(style)) ??
177
165
  this.viewModel.titleStyle?.color);
178
166
  },
@@ -94,11 +94,6 @@ export default defineComponent({
94
94
  if (borderRadius === '9999px') {
95
95
  buttonStyle.borderRadius = '24px';
96
96
  }
97
- // Own background colour decouples the container from the button fill (BP-5800).
98
- if (this.viewModel.backgroundStyle?.backgroundColor) {
99
- buttonStyle.backgroundColor =
100
- this.viewModel.backgroundStyle.backgroundColor;
101
- }
102
97
  return buttonStyle;
103
98
  },
104
99
  isFormDisabled() {
@@ -68,7 +68,16 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
68
68
  }>, {}, {
69
69
  type: string | undefined;
70
70
  isImageBroken: boolean;
71
- }, {}, {
71
+ }, {
72
+ /**
73
+ * BP-5866: content images must never emit an empty `alt`. Reuses the
74
+ * shared alt fallback (author title → "{business}'s image" → "image") so
75
+ * a caller that passes no `alt-text` still renders descriptive text.
76
+ * Only consumed by the content `<FallbackImage>`; decorative/background
77
+ * images (rendered via `media`) and shapes never reach this path.
78
+ */
79
+ effectiveAltText(): string;
80
+ }, {
72
81
  onImageError(): void;
73
82
  }, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
74
83
  mediaType: {
@@ -1,4 +1,5 @@
1
1
  import { defineComponent } from 'vue';
2
+ import { getImageAltText } from '@brand-page/utils';
2
3
  export default defineComponent({
3
4
  props: {
4
5
  mediaType: {
@@ -71,6 +72,18 @@ export default defineComponent({
71
72
  isImageBroken: false,
72
73
  };
73
74
  },
75
+ computed: {
76
+ /**
77
+ * BP-5866: content images must never emit an empty `alt`. Reuses the
78
+ * shared alt fallback (author title → "{business}'s image" → "image") so
79
+ * a caller that passes no `alt-text` still renders descriptive text.
80
+ * Only consumed by the content `<FallbackImage>`; decorative/background
81
+ * images (rendered via `media`) and shapes never reach this path.
82
+ */
83
+ effectiveAltText() {
84
+ return getImageAltText({ imageTitle: this.altText }, this.context);
85
+ },
86
+ },
74
87
  methods: {
75
88
  onImageError() {
76
89
  this.isImageBroken = true;
@@ -75,6 +75,11 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
75
75
  bpShowTopNavigationMobile(): boolean;
76
76
  bpShowTopNavigationDesktop(): boolean;
77
77
  slug(): string;
78
+ /**
79
+ * Text for the single page-level `<h1>` (BP-5866). Sourced from the
80
+ * business/site name + page name so it mirrors the SSR document `<title>`.
81
+ */
82
+ pageHeadingText(): string;
78
83
  shouldShowSaveContactWidget(): boolean;
79
84
  isPremiumSubscription(): boolean;
80
85
  shouldShowPopupBranding(): boolean;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent } from 'vue';
2
2
  import { DEFAULT_FONT_FAMILY_KEY, FALLBACK_FONT_FAMILIES, FONT_FAMILY_CONFIGS, } from '../../constants';
3
- import { getSlugFromContext } from '@brand-page/utils';
3
+ import { getSlugFromContext, getPageHeadingText } 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';
@@ -292,6 +292,13 @@ export default defineComponent({
292
292
  slug() {
293
293
  return getSlugFromContext(this.context);
294
294
  },
295
+ /**
296
+ * Text for the single page-level `<h1>` (BP-5866). Sourced from the
297
+ * business/site name + page name so it mirrors the SSR document `<title>`.
298
+ */
299
+ pageHeadingText() {
300
+ return getPageHeadingText(this.context);
301
+ },
295
302
  shouldShowSaveContactWidget() {
296
303
  try {
297
304
  if ((!this.context.isPreview &&
@@ -77,11 +77,6 @@ export default defineComponent({
77
77
  if (borderRadius === '9999px') {
78
78
  buttonStyle.borderRadius = '26px';
79
79
  }
80
- // Own background colour decouples the container from the button fill (BP-5800).
81
- if (this.viewModel.backgroundStyle?.backgroundColor) {
82
- buttonStyle.backgroundColor =
83
- this.viewModel.backgroundStyle.backgroundColor;
84
- }
85
80
  return buttonStyle;
86
81
  },
87
82
  continueButtonStyle() {
@@ -7,14 +7,6 @@ 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;
18
10
  export * from './brand-page-context.model';
19
11
  export * from './payment.model';
20
12
  export * from './content.model';
@@ -156,7 +148,7 @@ export interface TextContent extends Content {
156
148
  /**
157
149
  * For BrandPage/BrandContact only
158
150
  */
159
- text: RichTextValue;
151
+ text: string;
160
152
  /**
161
153
  * For BrandSite
162
154
  */
@@ -179,9 +171,9 @@ export interface TextContent extends Content {
179
171
  }
180
172
  export interface ProfileContent extends Content {
181
173
  avatarImageUrl: string;
182
- name: RichTextValue;
183
- title: RichTextValue;
184
- description: RichTextValue;
174
+ name: string;
175
+ title: string;
176
+ description: string;
185
177
  backgroundColor: BrandPageCssStyle;
186
178
  colorReplacements: ColorReplacement[];
187
179
  mediaType?: string;
@@ -199,11 +191,10 @@ export interface MapContent extends Content {
199
191
  }
200
192
  export interface MailingListContent extends Content {
201
193
  acceptedFields?: 'emailOnly' | 'nameAndEmail';
202
- title: RichTextValue;
194
+ title: string;
203
195
  buttonText: string;
204
196
  titleStyle: TextStyleDeclaration;
205
197
  buttonTextStyle: TextStyleDeclaration;
206
- backgroundStyle?: BrandPageCssStyle;
207
198
  }
208
199
  export declare const FORM_FIELD_TYPES: {
209
200
  readonly text: "text";
@@ -251,10 +242,10 @@ export interface FormField {
251
242
  export interface ContactFormContent extends Content {
252
243
  type: 'contact-form';
253
244
  displayStyle: string;
254
- title: RichTextValue;
255
- description: RichTextValue;
245
+ title: string;
246
+ description: string;
256
247
  buttonText: string;
257
- successMessage: RichTextValue;
248
+ successMessage: string;
258
249
  fields: FormField[];
259
250
  responseEmail: string;
260
251
  imageUrl?: string;
@@ -273,8 +264,8 @@ export interface ContactFormContent extends Content {
273
264
  export interface BannerSectionContent extends Content {
274
265
  type: 'banner-section';
275
266
  imageUrl: string;
276
- title: RichTextValue;
277
- description: RichTextValue;
267
+ title: string;
268
+ description: string;
278
269
  buttonText: string | false;
279
270
  url: string;
280
271
  email?: string;
@@ -301,8 +292,8 @@ export declare const MEDIA_TYPES: {
301
292
  };
302
293
  export type MediaType = keyof typeof MEDIA_TYPES;
303
294
  export interface TextMediaItem extends ImageItem {
304
- title: RichTextValue;
305
- paragraph: RichTextValue;
295
+ title: string;
296
+ paragraph: string;
306
297
  itemsId: number;
307
298
  buttonText?: string | false;
308
299
  buttonPageId?: string;
@@ -321,8 +312,8 @@ export interface TextShapeItem extends TextMediaItem {
321
312
  export interface ShapeItem extends ImageItem {
322
313
  colorReplacements: ColorReplacement[];
323
314
  mediaType: MediaType;
324
- title?: RichTextValue;
325
- paragraph?: RichTextValue;
315
+ title?: string;
316
+ paragraph?: string;
326
317
  titleOverride?: string;
327
318
  paragraphOverride?: string;
328
319
  }
@@ -330,9 +321,9 @@ export interface TestimonialItems {
330
321
  /** Stable per-item identifier. See ImageItem.id. */
331
322
  id: string;
332
323
  imageUrl: string;
333
- name: RichTextValue;
334
- position: RichTextValue;
335
- testimonials: RichTextValue;
324
+ name: string;
325
+ position: string;
326
+ testimonials: string;
336
327
  colorReplacements: ColorReplacement[];
337
328
  mediaType: string;
338
329
  size?: string;
@@ -345,7 +336,7 @@ export interface TestimonialItems {
345
336
  export interface TextItem {
346
337
  /** Stable per-item identifier. See ImageItem.id. */
347
338
  id: string;
348
- text: RichTextValue;
339
+ text: string;
349
340
  textStyle: TextStyleDeclaration;
350
341
  textOverride?: string;
351
342
  }
@@ -362,8 +353,8 @@ export interface ImagesSectionContent extends Content, MediaSection {
362
353
  enablePopup: boolean;
363
354
  }
364
355
  export interface MediaSection extends Content {
365
- title: RichTextValue;
366
- description: RichTextValue;
356
+ title: string;
357
+ description: string;
367
358
  displayStyle: ImagesSectionContentDisplayStyle;
368
359
  items: TextShapeItem[] | TextMediaItem[];
369
360
  titleStyle: TextStyleDeclaration;
@@ -380,7 +371,7 @@ export interface ColorReplacement {
380
371
  }
381
372
  export interface TestimonialSectionContent extends Content {
382
373
  type: 'testimonial-section';
383
- title: RichTextValue;
374
+ title: string;
384
375
  displayStyle: string;
385
376
  items: TestimonialItems[];
386
377
  titleStyle: TextStyleDeclaration;
@@ -394,8 +385,8 @@ export interface TestimonialSectionContent extends Content {
394
385
  export interface AboutSectionContent extends Content {
395
386
  type: 'about-section';
396
387
  imageUrl: string;
397
- title: RichTextValue;
398
- paragraph: RichTextValue;
388
+ title: string;
389
+ paragraph: string;
399
390
  displayStyle: string;
400
391
  titleStyle: TextStyleDeclaration;
401
392
  paragraphStyle: TextStyleDeclaration;
@@ -419,7 +410,7 @@ export declare const SOCIAL_LINKS_ICON_DISPLAY_STYLES: {
419
410
  export type SocialLinksIconDisplayStyle = keyof typeof SOCIAL_LINKS_ICON_DISPLAY_STYLES;
420
411
  export interface SocialLinksContent extends Content {
421
412
  type: 'social-links';
422
- title: RichTextValue;
413
+ title: string;
423
414
  links: LinksItem[];
424
415
  iconDisplayStyle: SocialLinksIconDisplayStyle;
425
416
  iconFillStyles: BrandPageCssStyle;
@@ -442,8 +433,8 @@ export interface DividerSectionContent extends Content {
442
433
  }
443
434
  export interface BookingSectionContent extends Content {
444
435
  type: 'booking-section';
445
- title: RichTextValue;
446
- description: RichTextValue;
436
+ title: string;
437
+ description: string;
447
438
  buttonText: string;
448
439
  url: string;
449
440
  email?: string;
@@ -134,7 +134,6 @@ export interface RequestPaymentContent extends Content {
134
134
  descriptionStyle?: TextStyleDeclaration;
135
135
  itemTextStyle: TextStyleDeclaration;
136
136
  buttonTextStyle?: TextStyleDeclaration;
137
- backgroundStyle?: BrandPageCssStyle;
138
137
  }
139
138
  export interface ShopContentConfig extends PaymentConfig {
140
139
  paymentOptionDisplayType: PaymentOptionDisplayType;
@@ -175,7 +174,6 @@ export interface SupportMeContent extends Content {
175
174
  descriptionStyle: TextStyleDeclaration;
176
175
  buttonTextStyle: TextStyleDeclaration;
177
176
  itemTextStyle: TextStyleDeclaration;
178
- backgroundStyle?: BrandPageCssStyle;
179
177
  }
180
178
  export interface CreateStripePaymentIntentResponse {
181
179
  paymentIntent: StripePaymentIntent;
@@ -5,8 +5,3 @@ import type { ButtonStyles } from '../models';
5
5
  * @returns The calculated box shadow CSS value
6
6
  */
7
7
  export declare const getBoxShadowValue: (buttonStyles: ButtonStyles) => string;
8
- export declare const BUTTON_STYLE_BRUSHSTROKE = "BUTTON_STYLE_19";
9
- export declare const BUTTON_STYLE_ARROW = "BUTTON_STYLE_20";
10
- export declare const BUTTON_STYLE_PAPER = "BUTTON_STYLE_21";
11
- export declare const DECORATIVE_BUTTON_STYLE_IDS: string[];
12
- export declare const isDecorativeButtonStyle: (styleId?: string) => boolean;
@@ -27,16 +27,3 @@ export const getBoxShadowValue = (buttonStyles) => {
27
27
  }
28
28
  return boxShadowValue;
29
29
  };
30
- // The "decorative" button styles — brushstroke / arrow / torn-paper — whose visual
31
- // is drawn by ButtonStyleWrapper rather than plain CSS. Their banner-like SVG
32
- // decoration needs the button to be reasonably wide to render legibly, so narrow
33
- // (w-fit) hosts should widen when one of these is active (BP-5800).
34
- export const BUTTON_STYLE_BRUSHSTROKE = 'BUTTON_STYLE_19';
35
- export const BUTTON_STYLE_ARROW = 'BUTTON_STYLE_20';
36
- export const BUTTON_STYLE_PAPER = 'BUTTON_STYLE_21';
37
- export const DECORATIVE_BUTTON_STYLE_IDS = [
38
- BUTTON_STYLE_BRUSHSTROKE,
39
- BUTTON_STYLE_ARROW,
40
- BUTTON_STYLE_PAPER,
41
- ];
42
- export const isDecorativeButtonStyle = (styleId) => !!styleId && DECORATIVE_BUTTON_STYLE_IDS.includes(styleId);
@@ -6,6 +6,7 @@ export * from './model.util';
6
6
  export * from './validation.util';
7
7
  export * from './payment.util';
8
8
  export * from './image.util';
9
+ export * from './page-heading.util';
9
10
  export * from './font-loader.util';
10
11
  export * from './aspect-ratio.util';
11
12
  export * from './context.util';
@@ -6,6 +6,7 @@ export * from './model.util';
6
6
  export * from './validation.util';
7
7
  export * from './payment.util';
8
8
  export * from './image.util';
9
+ export * from './page-heading.util';
9
10
  export * from './font-loader.util';
10
11
  export * from './aspect-ratio.util';
11
12
  export * from './context.util';
@@ -21,9 +21,6 @@ import { migration15 } from './migration/migration-15';
21
21
  import { migration16 } from './migration/migration-16';
22
22
  import { migration17 } from './migration/migration-17';
23
23
  import { migration18 } from './migration/migration-18';
24
- import { migration19 } from './migration/migration-19';
25
- import { migration20 } from './migration/migration-20';
26
- import { migration21 } from './migration/migration-21';
27
24
  const MIGRATION_TABLE = [
28
25
  {
29
26
  version: 1,
@@ -141,33 +138,6 @@ const MIGRATION_TABLE = [
141
138
  migrateFn: migration18,
142
139
  description: 'BP-5603: backfill stable item ids on all nested items (gallery/section/testimonial/text items, section + footer social links) — the item id is now non-nullable',
143
140
  },
144
- {
145
- version: 19,
146
- migrateFn: migration19,
147
- // runAlways: normalise RTE to JSON on every load. Idempotent (only HTML
148
- // strings are converted; JSON is skipped), so it also catches content the
149
- // AI section builders still emit as HTML — converting it on the next read
150
- // without a new migration or changes to those builders.
151
- runAlways: true,
152
- description: 'BP-5787: convert inline-HTML RTE content to Tiptap JSON on load (lazy migrate-on-read for web-renderer; persisted on next maker save; also normalises AI-built HTML)',
153
- },
154
- {
155
- version: 20,
156
- migrateFn: migration20,
157
- // runAlways: re-apply on every load so already-published sites pick up the seed
158
- // without a version bump. Idempotent — only seeds backgroundColor when unset.
159
- runAlways: true,
160
- description: 'BP-5800: seed own container backgroundStyle from the button fill colour for mailing-list, request-payment and support-me so the container background is independent of the site button (existing sites render unchanged)',
161
- },
162
- {
163
- version: 21,
164
- migrateFn: migration21,
165
- // runAlways: seed on every load so content already at the latest version
166
- // (skipped by a version gate) still detaches. Idempotent — only seeds
167
- // cardStyle.backgroundColor when unset, so a user colour is never clobbered.
168
- runAlways: true,
169
- description: 'BP-5800: contact-form BP/BC container colour moves to cardStyle — seed cardStyle from the button fill (its long-standing rendered colour) so existing sites render unchanged',
170
- },
171
141
  ];
172
142
  export const GetLatestModelVersion = () => Math.max(...MIGRATION_TABLE.map((x) => x.version));
173
143
  export const migrateBrandPageModel = async (brandPageModel, options) => {
@@ -0,0 +1,13 @@
1
+ import type { BrandPageContext } from '../models';
2
+ /**
3
+ * Resolves the text for the single page-level `<h1>` a published site renders
4
+ * (BP-5866 — Bing rejected indexing because every section emitted its own
5
+ * `<h1>`; the page now owns exactly one).
6
+ *
7
+ * Mirrors the SSR `<title>` rule so the crawlable heading matches the document
8
+ * title: a sub-page reads `"{business} - {page}"`, while the home/root page
9
+ * reads just the business/site name — never the weak, non-descriptive literal
10
+ * "Home". Falls back to the page name, then the slug, when the business name
11
+ * is unset.
12
+ */
13
+ export declare const getPageHeadingText: (context: BrandPageContext) => string;