@designcrowd/library.brand-page 5.18.1 → 5.18.2-ast-padding-1

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 (108) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DFpjIAUv.js → CreatedOnBrandCrowd-de-de-GFYl8DtL.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BapIT2xO.js → CreatedOnBrandCrowd-en-us-D5CcXf2I.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-DaSf3Dt6.js → CreatedOnBrandCrowd-es-es-Cr7J3ooe.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-Cvgei7yn.js → CreatedOnBrandCrowd-fr-ca-BC1NFFIW.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-Cvgei7yn.js → CreatedOnBrandCrowd-fr-fr-BC1NFFIW.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-Duxd2NmR.js → CreatedOnBrandCrowd-pt-br-BdiCcpwi.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-Duxd2NmR.js → CreatedOnBrandCrowd-pt-pt-BdiCcpwi.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-DXwNbruv.js → CreatedOnDcom-de-de-d4TmC_lo.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-CkNGwN-p.js → CreatedOnDcom-en-us-DlvLEF-R.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-Csyf5yhI.js → CreatedOnDcom-es-es-BulpVp3k.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-GOIUmIdy.js → CreatedOnDcom-fr-ca-M4xqunZe.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DF63cL2a.js → CreatedOnDcom-fr-fr-BFqUXgzb.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-Ct6FWj7D.js → CreatedOnDcom-pt-br-CUVcVkV2.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-D22yb8Ci.js → CreatedOnDcom-pt-pt-Dc4CZ4xW.js} +1 -1
  15. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.d.ts +4 -0
  16. package/lib/src/brand-page/components/contact-form/ContactForm.mixin.js +8 -4
  17. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.d.ts +4 -0
  18. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.js +4 -0
  19. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +4 -0
  20. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +4 -1
  21. package/lib/src/brand-page/components/page/Page.mixin.d.ts +1 -1
  22. package/lib/src/brand-page/components/page/PageComponent.mixin.d.ts +1 -1
  23. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.d.ts +4 -0
  24. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.js +4 -0
  25. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +4 -0
  26. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +4 -1
  27. package/lib/src/brand-page/components/video/Video.mixin.d.ts +4 -0
  28. package/lib/src/brand-page/components/video/Video.mixin.js +4 -0
  29. package/lib/src/brand-page/constants/misc.constants.d.ts +17 -0
  30. package/lib/src/brand-page/constants/misc.constants.js +25 -0
  31. package/lib/src/brand-page/models/content.model.d.ts +2 -0
  32. package/lib/src/brand-page/utils/content-padding.util.d.ts +13 -0
  33. package/lib/src/brand-page/utils/content-padding.util.js +10 -0
  34. package/lib/src/brand-page/utils/index.d.ts +1 -0
  35. package/lib/src/brand-page/utils/index.js +1 -0
  36. package/lib/src/brand-page/utils/migration/migration-16.d.ts +2 -0
  37. package/lib/src/brand-page/utils/migration/migration-16.js +37 -0
  38. package/lib/src/brand-page/utils/migration.util.js +6 -0
  39. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +2 -0
  40. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +12 -0
  41. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +15 -1
  42. package/lib/src/brand-page-maker/constants/config-settings-constant.js +34 -0
  43. package/lib/src/brand-page-maker/convertors/banner-align-display-style.convertor.js +56 -2
  44. package/lib/src/brand-page-maker/convertors/contact-layout-style.convertor.js +6 -1
  45. package/lib/src/brand-page-maker/models/content-settings.js +30 -2
  46. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +12 -0
  47. package/lib/src/{bundled-translations-CnareLWC.js → bundled-translations-DYd5oFZv.js} +1 -1
  48. package/lib/src/bundles/bundled-translations.json +2 -0
  49. package/lib/src/css/library.brand-page-brandCrowd.min.css +152 -140
  50. package/lib/src/css/library.brand-page-brandPage.min.css +153 -140
  51. package/lib/src/css/library.brand-page-designCom.min.css +152 -140
  52. package/lib/src/css/library.brand-page-preview.min.css +152 -140
  53. package/lib/src/index.mjs +1 -1
  54. package/lib/src/{lib-_iwoSD1Z.js → lib-CRihSxY0.js} +20195 -19572
  55. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +14 -0
  56. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +14 -0
  57. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +12 -0
  58. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +12 -0
  59. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +12 -0
  60. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.js +9 -0
  61. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +12 -0
  62. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +16 -0
  63. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +14 -0
  64. package/lib/src/utils/minify-brand-page-metadata.js +11 -1
  65. package/package.json +2 -2
  66. package/src/brand-page/components/banner-section/BannerSection.vue +360 -12
  67. package/src/brand-page/components/banner-section/BannerSection.vue.test.ts +201 -0
  68. package/src/brand-page/components/booking-section/BookingSection.vue +11 -3
  69. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +12 -6
  70. package/src/brand-page/components/contact-form/ContactForm.vue +115 -118
  71. package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +5 -0
  72. package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
  73. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -1
  74. package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
  75. package/src/brand-page/components/map/Map.vue +5 -1
  76. package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +5 -0
  77. package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -0
  78. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +8 -1
  79. package/src/brand-page/components/payment/support-me/SupportMe.vue +1 -0
  80. package/src/brand-page/components/placeholder/Placeholder.vue +39 -100
  81. package/src/brand-page/components/social-links/SocialLinks.vue +7 -3
  82. package/src/brand-page/components/text/Text.vue +12 -5
  83. package/src/brand-page/components/text-media-section/TextMediaSection.vue +11 -3
  84. package/src/brand-page/components/video/Video.mixin.ts +5 -0
  85. package/src/brand-page/components/video/Video.vue +1 -1
  86. package/src/brand-page/constants/misc.constants.ts +26 -0
  87. package/src/brand-page/models/content.model.ts +2 -0
  88. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +7 -3
  89. package/src/brand-page/utils/content-padding.util.test.ts +29 -0
  90. package/src/brand-page/utils/content-padding.util.ts +13 -0
  91. package/src/brand-page/utils/index.ts +1 -0
  92. package/src/brand-page/utils/migration/migration-16.ts +51 -0
  93. package/src/brand-page/utils/migration.util.test.ts +64 -0
  94. package/src/brand-page/utils/migration.util.ts +7 -0
  95. package/src/brand-page-maker/constants/config-settings-constant.ts +40 -0
  96. package/src/brand-page-maker/convertors/banner-align-display-style.convertor.ts +61 -1
  97. package/src/brand-page-maker/convertors/contact-layout-style.convertor.test.ts +50 -0
  98. package/src/brand-page-maker/convertors/contact-layout-style.convertor.ts +8 -0
  99. package/src/brand-page-maker/models/content-settings.ts +32 -2
  100. package/src/bundles/bundled-translations.json +2 -0
  101. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +2 -0
  102. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +1 -1
  103. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +2 -2
  104. package/src/shared/content-settings/components/slider-field/SliderField.mixin.ts +9 -0
  105. package/src/utils/minify-brand-page-metadata.ts +11 -1
  106. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.d.ts +0 -103
  107. package/lib/src/brand-page/components/banner-section/BannerSection.mixin.js +0 -178
  108. package/src/brand-page/components/banner-section/BannerSection.mixin.ts +0 -213
@@ -1,5 +1,5 @@
1
1
  import { openBlock as e, createElementBlock as l, createStaticVNode as a } from "vue";
2
- import { _ as t } from "./lib-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as t } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as e } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as e } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as e } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as e } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as e } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as M } from "./lib-CRihSxY0.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-_iwoSD1Z.js";
2
+ import { _ as M } from "./lib-CRihSxY0.js";
3
3
  const Z = {}, e = {
4
4
  width: "232",
5
5
  height: "36",
@@ -45,6 +45,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
45
45
  }, {
46
46
  submitButtonStyle(): BrandPageCssStyle;
47
47
  submitButtonTextStyle(): BrandPageCssStyle;
48
+ contentPaddingStyle(): {
49
+ paddingTop: string;
50
+ paddingBottom: string;
51
+ };
48
52
  hasCard(): boolean;
49
53
  hasBgImage(): boolean;
50
54
  hasBgColor(): boolean;
@@ -4,7 +4,7 @@ import { getEmailValidationError, getMessageValidationError, getNameValidationEr
4
4
  import brandPageClient from '../../clients/brand-page.client';
5
5
  import { isEmail } from '../../../utils/validator.util';
6
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';
7
- import { getRenderText } from '@brand-page/utils';
7
+ import { getRenderText, contentPaddingStyle as toContentPaddingStyle, } from '@brand-page/utils';
8
8
  import { hasRTEContent } from '@brand-page-maker/utils';
9
9
  import { useReCaptcha } from '../../composables/recaptcha.composable';
10
10
  export default defineComponent({
@@ -64,6 +64,9 @@ export default defineComponent({
64
64
  };
65
65
  return buttonTextStyle;
66
66
  },
67
+ contentPaddingStyle() {
68
+ return toContentPaddingStyle(this.viewModel);
69
+ },
67
70
  hasCard() {
68
71
  return (this.viewModel.layoutStyle === ALIGN_CARD_CENTER ||
69
72
  this.viewModel.layoutStyle === ALIGN_CARD_CENTER_IMAGE);
@@ -72,9 +75,10 @@ export default defineComponent({
72
75
  return this.viewModel.layoutStyle === ALIGN_CARD_CENTER_IMAGE;
73
76
  },
74
77
  hasBgColor() {
75
- return (this.viewModel.layoutStyle === ALIGN_CARD_CENTER ||
76
- this.viewModel.layoutStyle === TEXT_ONLY ||
77
- this.viewModel.layoutStyle === ALIGN_CENTERED);
78
+ // Every brandSite layout applies the background colour on the section
79
+ // root (banner-style) so the padding control reveals it; for the image
80
+ // layouts it only shows in the padding bands around the image block.
81
+ return Boolean(this.viewModel.layoutStyle);
78
82
  },
79
83
  isCenteredLayout() {
80
84
  return (this.viewModel.layoutStyle === ALIGN_CARD_CENTER ||
@@ -23,6 +23,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
23
23
  }>, {}, {
24
24
  imageModalSelectedImageIndex: number | undefined;
25
25
  }, {
26
+ contentPaddingStyle(): {
27
+ paddingTop: string;
28
+ paddingBottom: string;
29
+ };
26
30
  getContainerStyle(): BrandPageCssStyle;
27
31
  images(): any[] | undefined;
28
32
  galleryType(): GalleryType;
@@ -1,4 +1,5 @@
1
1
  import { defineComponent } from 'vue';
2
+ import { contentPaddingStyle as toContentPaddingStyle } from '@brand-page/utils';
2
3
  import ComponentCommonMixin from '../mixins/component-common.mixin';
3
4
  import ImageModalMixin from '../mixins/image-modal.mixin';
4
5
  import { GALLERY_TYPES } from '@brand-page/models';
@@ -29,6 +30,9 @@ export default defineComponent({
29
30
  };
30
31
  },
31
32
  computed: {
33
+ contentPaddingStyle() {
34
+ return toContentPaddingStyle(this.viewModel);
35
+ },
32
36
  getContainerStyle() {
33
37
  if (this.galleryType === 'carousel') {
34
38
  const maxWidth = this.containerClientWidth
@@ -39,6 +39,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
39
39
  isSubmitting: boolean;
40
40
  show: boolean;
41
41
  }, {
42
+ contentPaddingStyle(): {
43
+ paddingTop: string;
44
+ paddingBottom: string;
45
+ };
42
46
  hasNameError(): boolean;
43
47
  hasEmailError(): boolean;
44
48
  hasFormError(): boolean;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent } from 'vue';
2
2
  import brandPageClient from '../../clients/brand-page.client';
3
- import { getEmailValidationError } from '@brand-page/utils';
3
+ import { getEmailValidationError, contentPaddingStyle as toContentPaddingStyle, } from '@brand-page/utils';
4
4
  import { contentSettingsTr, mailingListTr, } from '@src/composables/useTranslate';
5
5
  import { useReCaptcha } from '../../composables/recaptcha.composable';
6
6
  import { RECAPTCHA_ACTION_MAILING_LIST } from '../../constants';
@@ -51,6 +51,9 @@ export default defineComponent({
51
51
  }
52
52
  },
53
53
  computed: {
54
+ contentPaddingStyle() {
55
+ return toContentPaddingStyle(this.viewModel);
56
+ },
54
57
  hasNameError() {
55
58
  return !!this.nameError;
56
59
  },
@@ -145,8 +145,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
145
145
  }>, {
146
146
  viewport: ViewportsType;
147
147
  isMobileDevice: boolean;
148
- containerClientWidth: number | undefined;
149
148
  containerClientHeight: number | undefined;
149
+ containerClientWidth: number | undefined;
150
150
  isContentSelected: boolean;
151
151
  isHeaderSelected: boolean;
152
152
  isFooterSelected: boolean;
@@ -78,7 +78,7 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
78
78
  }>> & Readonly<{}>, {
79
79
  brandPageToken: string;
80
80
  isMobileDevice: boolean;
81
- containerClientWidth: number;
82
81
  containerClientHeight: number;
82
+ containerClientWidth: number;
83
83
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
84
84
  export default _default;
@@ -21,6 +21,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
21
21
  selectedPaymentOptionIds: string[];
22
22
  imageType: string;
23
23
  }, {
24
+ contentPaddingStyle(): {
25
+ paddingTop: string;
26
+ paddingBottom: string;
27
+ };
24
28
  isCustomerRequestDetailsValid(): boolean;
25
29
  paymentRequestDetails(): PaymentRequestDetails;
26
30
  paymentOptions(): PaymentOption[];
@@ -2,6 +2,7 @@ import { defineComponent } from 'vue';
2
2
  import { PAYMENT_OPTION_DISPLAY_TYPES, PAYMENT_OPTION_IMAGE_TYPES, } from '../../../models';
3
3
  import { DEFAULT_CURRENCY_SYMBOL } from '../../../constants';
4
4
  import { addOpacityToHex } from '../../../utils/color.util';
5
+ import { contentPaddingStyle as toContentPaddingStyle } from '../../../utils';
5
6
  import { RGBAtoHex } from '@utils/helpers';
6
7
  const MAX_CUSTOM_REQUEST_CHARS = 500;
7
8
  export default defineComponent({
@@ -28,6 +29,9 @@ export default defineComponent({
28
29
  };
29
30
  },
30
31
  computed: {
32
+ contentPaddingStyle() {
33
+ return toContentPaddingStyle(this.viewModel);
34
+ },
31
35
  isCustomerRequestDetailsValid() {
32
36
  return (!this.viewModel.requestPaymentConfig.isCustomerRequestDetailsEnabled ||
33
37
  this.customerRequestDetails === undefined ||
@@ -17,6 +17,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
17
17
  prevCustomAmount: string;
18
18
  customAmount: string;
19
19
  }, {
20
+ contentPaddingStyle(): {
21
+ paddingTop: string;
22
+ paddingBottom: string;
23
+ };
20
24
  isCustomAmountFieldVisible(): boolean;
21
25
  isCustomerMessageFieldVisible(): boolean;
22
26
  isCustomerMessageValid(): boolean;
@@ -1,6 +1,6 @@
1
1
  import { defineComponent } from 'vue';
2
2
  import { SUPPORT_ME_CUSTOM_PRODUCT_NAME } from '../../../constants';
3
- import { isPaymentAmountValid } from '../../../utils';
3
+ import { isPaymentAmountValid, contentPaddingStyle as toContentPaddingStyle, } from '../../../utils';
4
4
  import { DEFAULT_CURRENCY_SYMBOL, DEFAULT_CURRENCY_CODE, } from '../../../constants';
5
5
  import { paymentTr } from '@src/composables/useTranslate';
6
6
  const MAX_CUSTOM_MESSAGE_CHARS = 500;
@@ -24,6 +24,9 @@ export default defineComponent({
24
24
  };
25
25
  },
26
26
  computed: {
27
+ contentPaddingStyle() {
28
+ return toContentPaddingStyle(this.viewModel);
29
+ },
27
30
  isCustomAmountFieldVisible() {
28
31
  return this.viewModel.supportMeConfig.paymentOptions.some((o) => o.name === SUPPORT_ME_CUSTOM_PRODUCT_NAME);
29
32
  },
@@ -11,6 +11,10 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
11
11
  isCollapsed: boolean;
12
12
  title: string;
13
13
  }, {
14
+ contentPaddingStyle(): {
15
+ paddingTop: string;
16
+ paddingBottom: string;
17
+ };
14
18
  arrowStyle(): BrandPageCssStyle;
15
19
  containerStyle(): BrandPageCssStyle;
16
20
  videoUrl(): string;
@@ -1,4 +1,5 @@
1
1
  import { defineComponent } from 'vue';
2
+ import { contentPaddingStyle as toContentPaddingStyle } from '@brand-page/utils';
2
3
  import ComponentCommonMixin from '../mixins/component-common.mixin';
3
4
  import { DISPLAY_STYLE_PREVIEW, DISPLAY_STYLE_COLLAPSED, } from '../../constants';
4
5
  export default defineComponent({
@@ -16,6 +17,9 @@ export default defineComponent({
16
17
  title: 'Video',
17
18
  }),
18
19
  computed: {
20
+ contentPaddingStyle() {
21
+ return toContentPaddingStyle(this.viewModel);
22
+ },
19
23
  arrowStyle() {
20
24
  return {
21
25
  color: this.viewModel.buttonStyles.style?.color,
@@ -12,6 +12,12 @@ export declare const ALIGN_LEFT_BIG_IMAGE = "left-aligned-big-image";
12
12
  export declare const ALIGN_CARD_CENTER_IMAGE = "center-card-aligned-image";
13
13
  export declare const ALIGN_CARD_CENTER = "center-card-aligned";
14
14
  export declare const ALIGN_CARD_LEFT_IMAGE = "left-card-aligned-image";
15
+ export declare const ALIGN_TOP_CARD_IMAGE = "top-card-aligned-image";
16
+ export declare const ALIGN_BOTTOM_CARD_IMAGE = "bottom-card-aligned-image";
17
+ export declare const ALIGN_MIDDLE_CARD_IMAGE = "middle-card-aligned-image";
18
+ export declare const ALIGN_TOP_FULL_IMAGE = "top-aligned-full-image";
19
+ export declare const ALIGN_BOTTOM_FULL_IMAGE = "bottom-aligned-full-image";
20
+ export declare const ALIGN_MIDDLE_FULL_IMAGE = "middle-aligned-full-image";
15
21
  export declare const MAX_IMAGES_SECTION_ALIGNMENT_ITEMS_LENGTH = 3;
16
22
  export declare const TEXT_COLUMNS: {
17
23
  readonly 1: "1";
@@ -23,6 +29,17 @@ export declare const TEXT_ONLY = "text-only";
23
29
  export declare const ALIGN_LEFT_FULL_IMAGE = "left-aligned-full-image";
24
30
  export declare const ALIGN_RIGHT_FULL_IMAGE = "right-aligned-full-image";
25
31
  export declare const ALTERNATE_IMAGE = "alternate-image";
32
+ /**
33
+ * Padding Control (BP-5699): the top/bottom padding each Contact Form layout
34
+ * had hard-coded before the sliders existed. Single source for new-block
35
+ * defaults (content-settings) and the migration backfill for existing pages.
36
+ * The image layouts (full-image divided and card-over-image) are 0: their
37
+ * padding sits on the section root and reveals the background colour around
38
+ * the image block (same as the banner), while the spacing inside/over the
39
+ * image stays fixed — existing pages rendered the image flush to the section
40
+ * edges.
41
+ */
42
+ export declare const CONTACT_FORM_LAYOUT_DEFAULT_PADDING: Record<string, number>;
26
43
  export declare const BIG_IMAGE = "big-image";
27
44
  export declare const MEDIA_ONLY = "media-only";
28
45
  export declare const COLUMNS = "columns";
@@ -13,6 +13,12 @@ export const ALIGN_LEFT_BIG_IMAGE = 'left-aligned-big-image';
13
13
  export const ALIGN_CARD_CENTER_IMAGE = 'center-card-aligned-image';
14
14
  export const ALIGN_CARD_CENTER = 'center-card-aligned';
15
15
  export const ALIGN_CARD_LEFT_IMAGE = 'left-card-aligned-image';
16
+ export const ALIGN_TOP_CARD_IMAGE = 'top-card-aligned-image';
17
+ export const ALIGN_BOTTOM_CARD_IMAGE = 'bottom-card-aligned-image';
18
+ export const ALIGN_MIDDLE_CARD_IMAGE = 'middle-card-aligned-image';
19
+ export const ALIGN_TOP_FULL_IMAGE = 'top-aligned-full-image';
20
+ export const ALIGN_BOTTOM_FULL_IMAGE = 'bottom-aligned-full-image';
21
+ export const ALIGN_MIDDLE_FULL_IMAGE = 'middle-aligned-full-image';
16
22
  export const MAX_IMAGES_SECTION_ALIGNMENT_ITEMS_LENGTH = 3;
17
23
  export const TEXT_COLUMNS = {
18
24
  1: '1',
@@ -24,6 +30,25 @@ export const TEXT_ONLY = 'text-only';
24
30
  export const ALIGN_LEFT_FULL_IMAGE = 'left-aligned-full-image';
25
31
  export const ALIGN_RIGHT_FULL_IMAGE = 'right-aligned-full-image';
26
32
  export const ALTERNATE_IMAGE = 'alternate-image';
33
+ /**
34
+ * Padding Control (BP-5699): the top/bottom padding each Contact Form layout
35
+ * had hard-coded before the sliders existed. Single source for new-block
36
+ * defaults (content-settings) and the migration backfill for existing pages.
37
+ * The image layouts (full-image divided and card-over-image) are 0: their
38
+ * padding sits on the section root and reveals the background colour around
39
+ * the image block (same as the banner), while the spacing inside/over the
40
+ * image stays fixed — existing pages rendered the image flush to the section
41
+ * edges.
42
+ */
43
+ export const CONTACT_FORM_LAYOUT_DEFAULT_PADDING = {
44
+ '': 0, // collapsible (default on Brand Page / Brand Contact)
45
+ [ALIGN_CENTERED]: 24,
46
+ [ALIGN_CARD_CENTER]: 32,
47
+ [ALIGN_CARD_CENTER_IMAGE]: 0,
48
+ [TEXT_ONLY]: 32,
49
+ [ALIGN_LEFT_FULL_IMAGE]: 0,
50
+ [ALIGN_RIGHT_FULL_IMAGE]: 0,
51
+ };
27
52
  export const BIG_IMAGE = 'big-image';
28
53
  export const MEDIA_ONLY = 'media-only';
29
54
  export const COLUMNS = 'columns';
@@ -47,6 +47,8 @@ export interface Content {
47
47
  id: string;
48
48
  type: ContentType;
49
49
  personalisationRole?: PersonalisationRole;
50
+ topPadding?: number;
51
+ bottomPadding?: number;
50
52
  imageUrlOverride?: string;
51
53
  imageUrlsOverride?: string;
52
54
  avatarImageUrlOverride?: string;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Block top/bottom padding (BP-5687) as a bindable CSS style object. Defaults
3
+ * live in the data — `content-settings` for new content, a migration for
4
+ * existing — so this just reads the stored value (`?? 0` covers content from
5
+ * before the field existed).
6
+ */
7
+ export declare const contentPaddingStyle: (content: {
8
+ topPadding?: number;
9
+ bottomPadding?: number;
10
+ }) => {
11
+ paddingTop: string;
12
+ paddingBottom: string;
13
+ };
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Block top/bottom padding (BP-5687) as a bindable CSS style object. Defaults
3
+ * live in the data — `content-settings` for new content, a migration for
4
+ * existing — so this just reads the stored value (`?? 0` covers content from
5
+ * before the field existed).
6
+ */
7
+ export const contentPaddingStyle = (content) => ({
8
+ paddingTop: `${content.topPadding ?? 0}px`,
9
+ paddingBottom: `${content.bottomPadding ?? 0}px`,
10
+ });
@@ -1,4 +1,5 @@
1
1
  export * from './style.util';
2
+ export * from './content-padding.util';
2
3
  export * from './view-model.util';
3
4
  export * from './text.util';
4
5
  export * from './model.util';
@@ -1,4 +1,5 @@
1
1
  export * from './style.util';
2
+ export * from './content-padding.util';
2
3
  export * from './view-model.util';
3
4
  export * from './text.util';
4
5
  export * from './model.util';
@@ -0,0 +1,2 @@
1
+ import type { MigrationData } from '../migration.util';
2
+ export declare const migration16: (migrationResult: MigrationData) => Promise<MigrationData>;
@@ -0,0 +1,37 @@
1
+ import { CONTACT_FORM_LAYOUT_DEFAULT_PADDING } from '../../constants';
2
+ /**
3
+ * Tier 2 Padding Control (BP-5699): blocks that already had hard-coded
4
+ * top/bottom spacing. Backfill that spacing as the block's explicit
5
+ * topPadding/bottomPadding so existing pages render unchanged once the spacing
6
+ * moves to the Padding Control sliders. Type-scoped and idempotent — only the
7
+ * listed types, and only when the value isn't already set.
8
+ */
9
+ const TIER2_DEFAULT_PADDING = {
10
+ text: 12,
11
+ 'images-section': 32,
12
+ 'social-links': 32,
13
+ 'shapes-section': 32,
14
+ 'booking-section': 32,
15
+ };
16
+ export const migration16 = async (migrationResult) => {
17
+ const { brandPageModel } = migrationResult;
18
+ brandPageModel.pages.forEach((page) => {
19
+ page.contents.forEach((content) => {
20
+ // Contact Form's previous hard-coded spacing varies by layout, so it's
21
+ // keyed by layoutStyle rather than a single per-type value.
22
+ const value = content.type === 'contact-form'
23
+ ? CONTACT_FORM_LAYOUT_DEFAULT_PADDING[content.layoutStyle ?? '']
24
+ : TIER2_DEFAULT_PADDING[content.type];
25
+ if (value === undefined) {
26
+ return;
27
+ }
28
+ if (content.topPadding === undefined) {
29
+ content.topPadding = value;
30
+ }
31
+ if (content.bottomPadding === undefined) {
32
+ content.bottomPadding = value;
33
+ }
34
+ });
35
+ });
36
+ return migrationResult;
37
+ };
@@ -18,6 +18,7 @@ import { migration12_1 } from './migration/migration-12_1';
18
18
  import { migration13 } from './migration/migration-13';
19
19
  import { migration14 } from './migration/migration-14';
20
20
  import { migration15 } from './migration/migration-15';
21
+ import { migration16 } from './migration/migration-16';
21
22
  const MIGRATION_TABLE = [
22
23
  {
23
24
  version: 1,
@@ -115,6 +116,11 @@ const MIGRATION_TABLE = [
115
116
  migrateFn: migration15,
116
117
  description: 'Adding default mediaOverlayStyle to background styles',
117
118
  },
119
+ {
120
+ version: 16,
121
+ migrateFn: migration16,
122
+ description: 'Tier 2 Padding Control (BP-5699): backfill existing top/bottom spacing as explicit padding for text (12px), images, social links, shapes and booking (32px), and contact form (per layout)',
123
+ },
118
124
  ];
119
125
  export const GetLatestModelVersion = () => Math.max(...MIGRATION_TABLE.map((x) => x.version));
120
126
  export const migrateBrandPageModel = async (brandPageModel, options) => {
@@ -8,6 +8,8 @@ declare const _default: import("vue").DefineComponent<{}, {
8
8
  id: string;
9
9
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
10
10
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
11
+ topPadding?: number | undefined;
12
+ bottomPadding?: number | undefined;
11
13
  imageUrlOverride?: string | undefined;
12
14
  imageUrlsOverride?: string | undefined;
13
15
  avatarImageUrlOverride?: string | undefined;
@@ -496,6 +496,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
496
496
  id: string;
497
497
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
498
498
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
499
+ topPadding?: number | undefined;
500
+ bottomPadding?: number | undefined;
499
501
  imageUrlOverride?: string | undefined;
500
502
  imageUrlsOverride?: string | undefined;
501
503
  avatarImageUrlOverride?: string | undefined;
@@ -545,6 +547,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
545
547
  id: string;
546
548
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
547
549
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
550
+ topPadding?: number | undefined;
551
+ bottomPadding?: number | undefined;
548
552
  imageUrlOverride?: string | undefined;
549
553
  imageUrlsOverride?: string | undefined;
550
554
  avatarImageUrlOverride?: string | undefined;
@@ -594,6 +598,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
594
598
  id: string;
595
599
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
596
600
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
601
+ topPadding?: number | undefined;
602
+ bottomPadding?: number | undefined;
597
603
  imageUrlOverride?: string | undefined;
598
604
  imageUrlsOverride?: string | undefined;
599
605
  avatarImageUrlOverride?: string | undefined;
@@ -643,6 +649,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
643
649
  id: string;
644
650
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
645
651
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
652
+ topPadding?: number | undefined;
653
+ bottomPadding?: number | undefined;
646
654
  imageUrlOverride?: string | undefined;
647
655
  imageUrlsOverride?: string | undefined;
648
656
  avatarImageUrlOverride?: string | undefined;
@@ -692,6 +700,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
692
700
  id: string;
693
701
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
694
702
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
703
+ topPadding?: number | undefined;
704
+ bottomPadding?: number | undefined;
695
705
  imageUrlOverride?: string | undefined;
696
706
  imageUrlsOverride?: string | undefined;
697
707
  avatarImageUrlOverride?: string | undefined;
@@ -741,6 +751,8 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
741
751
  id: string;
742
752
  type: "website" | "image" | "email" | "phone" | "logo" | "general-link" | "profile" | "video" | "text" | "facebook" | "x" | "instagram" | "youtube" | "linkedin" | "pinterest" | "twitch" | "tiktok" | "map" | "image-gallery" | "mailing-list" | "request-payment" | "support-me" | "contact-form" | "banner-section" | "about-section" | "divider-section" | "images-section" | "testimonial-section" | "social-links" | "shapes-section" | "shop-section" | "booking-section";
743
753
  personalisationRole?: "website" | "email" | "phone" | "profile" | "about" | "information" | "media" | undefined;
754
+ topPadding?: number | undefined;
755
+ bottomPadding?: number | undefined;
744
756
  imageUrlOverride?: string | undefined;
745
757
  imageUrlsOverride?: string | undefined;
746
758
  avatarImageUrlOverride?: string | undefined;