@designcrowd/library.brand-page 5.17.27-shape-memory-2 → 5.17.28-ast-padding

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 (91) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-CmwyVngB.js → CreatedOnBrandCrowd-de-de-BKiqBMgr.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BsYNmX7g.js → CreatedOnBrandCrowd-en-us-BE9ztLEZ.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-Di-Cb90E.js → CreatedOnBrandCrowd-es-es-isBp-_KV.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-DkPUGPrO.js → CreatedOnBrandCrowd-fr-ca-BHkyP1Ym.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-DkPUGPrO.js → CreatedOnBrandCrowd-fr-fr-BHkyP1Ym.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-BB1hWv0w.js → CreatedOnBrandCrowd-pt-br-D4EXIp5p.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-BB1hWv0w.js → CreatedOnBrandCrowd-pt-pt-D4EXIp5p.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-CLPQHUdt.js → CreatedOnDcom-de-de-DCyTITAn.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-4xPohzcl.js → CreatedOnDcom-en-us-Bwr-eCqH.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-COjxz_Aa.js → CreatedOnDcom-es-es-DBMJ7xE-.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-sxQVouYP.js → CreatedOnDcom-fr-ca-itsxeehe.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-B2XC86kO.js → CreatedOnDcom-fr-fr-B8CIK3Dc.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-CYK9le9x.js → CreatedOnDcom-pt-br-mV_AMZNj.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-CF-QACKl.js → CreatedOnDcom-pt-pt-mwvCkhOd.js} +1 -1
  15. package/lib/src/brand-page/components/background-shape/BackgroundShape.mixin.js +6 -0
  16. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.d.ts +4 -0
  17. package/lib/src/brand-page/components/image-gallery/ImageGallery.mixin.js +4 -0
  18. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.d.ts +4 -0
  19. package/lib/src/brand-page/components/mailing-list/MailingList.mixin.js +4 -1
  20. package/lib/src/brand-page/components/media/Shape.mixin.js +6 -0
  21. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.d.ts +4 -0
  22. package/lib/src/brand-page/components/payment/request-payment/RequestPayment.mixin.js +4 -0
  23. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.d.ts +4 -0
  24. package/lib/src/brand-page/components/payment/support-me/SupportMe.mixin.js +4 -1
  25. package/lib/src/brand-page/components/video/Video.mixin.d.ts +4 -0
  26. package/lib/src/brand-page/components/video/Video.mixin.js +4 -0
  27. package/lib/src/brand-page/models/content.model.d.ts +2 -0
  28. package/lib/src/brand-page/utils/content-padding.util.d.ts +13 -0
  29. package/lib/src/brand-page/utils/content-padding.util.js +10 -0
  30. package/lib/src/brand-page/utils/index.d.ts +1 -0
  31. package/lib/src/brand-page/utils/index.js +1 -0
  32. package/lib/src/brand-page/utils/migration/migration-16.d.ts +2 -0
  33. package/lib/src/brand-page/utils/migration/migration-16.js +32 -0
  34. package/lib/src/brand-page/utils/migration.util.js +6 -0
  35. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +2 -0
  36. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +12 -0
  37. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +14 -0
  38. package/lib/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.js +6 -8
  39. package/lib/src/brand-page-maker/constants/config-settings-constant.js +33 -0
  40. package/lib/src/brand-page-maker/models/content-settings.js +22 -0
  41. package/lib/src/{bundled-translations-CNK7l6_v.js → bundled-translations-D4Pw0u0B.js} +1 -1
  42. package/lib/src/bundles/bundled-translations.json +2 -0
  43. package/lib/src/css/library.brand-page-brandCrowd.min.css +84 -115
  44. package/lib/src/css/library.brand-page-brandPage.min.css +84 -115
  45. package/lib/src/css/library.brand-page-designCom.min.css +84 -115
  46. package/lib/src/css/library.brand-page-preview.min.css +84 -115
  47. package/lib/src/index.mjs +1 -1
  48. package/lib/src/{lib-vkr7dfRD.js → lib-ro9XYcgh.js} +19363 -19245
  49. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +14 -0
  50. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +14 -0
  51. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +12 -0
  52. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +12 -0
  53. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +12 -0
  54. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +12 -0
  55. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +16 -0
  56. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +14 -0
  57. package/lib/src/utils/minify-brand-page-metadata.js +11 -1
  58. package/package.json +1 -1
  59. package/src/brand-page/components/background-shape/BackgroundShape.mixin.ts +6 -0
  60. package/src/brand-page/components/background-shape/BackgroundShape.vue +5 -1
  61. package/src/brand-page/components/booking-section/BookingSection.vue +11 -3
  62. package/src/brand-page/components/contact-form/ContactForm.vue +13 -13
  63. package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +5 -0
  64. package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
  65. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -1
  66. package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
  67. package/src/brand-page/components/map/Map.vue +5 -1
  68. package/src/brand-page/components/media/Shape.mixin.ts +6 -0
  69. package/src/brand-page/components/media/Shape.vue +1 -1
  70. package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +5 -0
  71. package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -0
  72. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +8 -1
  73. package/src/brand-page/components/payment/support-me/SupportMe.vue +1 -0
  74. package/src/brand-page/components/placeholder/Placeholder.vue +39 -100
  75. package/src/brand-page/components/social-links/SocialLinks.vue +7 -3
  76. package/src/brand-page/components/text/Text.vue +12 -5
  77. package/src/brand-page/components/text-media-section/TextMediaSection.vue +11 -3
  78. package/src/brand-page/components/video/Video.mixin.ts +5 -0
  79. package/src/brand-page/components/video/Video.vue +1 -1
  80. package/src/brand-page/models/content.model.ts +2 -0
  81. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +7 -3
  82. package/src/brand-page/utils/content-padding.util.ts +13 -0
  83. package/src/brand-page/utils/index.ts +1 -0
  84. package/src/brand-page/utils/migration/migration-16.ts +42 -0
  85. package/src/brand-page/utils/migration.util.ts +7 -0
  86. package/src/brand-page-maker/composables/rich-text-editor/useRichTextEditor.ts +10 -8
  87. package/src/brand-page-maker/constants/config-settings-constant.ts +39 -0
  88. package/src/brand-page-maker/models/content-settings.ts +22 -0
  89. package/src/bundles/bundled-translations.json +2 -0
  90. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +2 -0
  91. package/src/utils/minify-brand-page-metadata.ts +11 -1
@@ -454,7 +454,7 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
454
454
  },
455
455
  },
456
456
  },
457
- "v": 15,
457
+ "v": 16,
458
458
  },
459
459
  "useOldLogoRenderSize": true,
460
460
  }
@@ -751,6 +751,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
751
751
  {
752
752
  "contents": [
753
753
  {
754
+ "bottomPadding": 12,
754
755
  "id": "bec5aca6-e3c5-4d4c-93fa-2894816a8040",
755
756
  "text": "",
756
757
  "textColor": {},
@@ -774,6 +775,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
774
775
  "textAlign": "center",
775
776
  "textStyleType": "paragraphs",
776
777
  },
778
+ "topPadding": 12,
777
779
  "type": "text",
778
780
  },
779
781
  ],
@@ -897,7 +899,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
897
899
  },
898
900
  },
899
901
  },
900
- "v": 15,
902
+ "v": 16,
901
903
  },
902
904
  "useOldLogoRenderSize": true,
903
905
  }
@@ -1194,6 +1196,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
1194
1196
  {
1195
1197
  "contents": [
1196
1198
  {
1199
+ "bottomPadding": 12,
1197
1200
  "id": "bec5aca6-e3c5-4d4c-93fa-2894816a8040",
1198
1201
  "text": "",
1199
1202
  "textColor": {},
@@ -1224,6 +1227,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
1224
1227
  "textAlign": "center",
1225
1228
  "textStyleType": "paragraphs",
1226
1229
  },
1230
+ "topPadding": 12,
1227
1231
  "type": "text",
1228
1232
  },
1229
1233
  ],
@@ -1347,7 +1351,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
1347
1351
  },
1348
1352
  },
1349
1353
  },
1350
- "v": 15,
1354
+ "v": 16,
1351
1355
  },
1352
1356
  "useOldLogoRenderSize": true,
1353
1357
  }
@@ -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 const contentPaddingStyle = (content: {
8
+ topPadding?: number;
9
+ bottomPadding?: number;
10
+ }): { paddingTop: string; paddingBottom: string } => ({
11
+ paddingTop: `${content.topPadding ?? 0}px`,
12
+ paddingBottom: `${content.bottomPadding ?? 0}px`,
13
+ });
@@ -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,42 @@
1
+ import type { MigrationData } from '../migration.util';
2
+
3
+ /**
4
+ * Tier 2 Padding Control (BP-5699): blocks that already had hard-coded
5
+ * top/bottom spacing. Backfill that spacing as the block's explicit
6
+ * topPadding/bottomPadding so existing pages render unchanged once the spacing
7
+ * moves to the Padding Control sliders. Type-scoped and idempotent — only the
8
+ * listed types, and only when the value isn't already set.
9
+ */
10
+ const TIER2_DEFAULT_PADDING: Partial<Record<string, number>> = {
11
+ text: 12,
12
+ 'images-section': 32,
13
+ 'social-links': 32,
14
+ 'shapes-section': 32,
15
+ 'booking-section': 32,
16
+ };
17
+
18
+ export const migration16 = async (
19
+ migrationResult: MigrationData,
20
+ ): Promise<MigrationData> => {
21
+ const { brandPageModel } = migrationResult;
22
+
23
+ brandPageModel.pages.forEach((page) => {
24
+ page.contents.forEach((content) => {
25
+ const value = TIER2_DEFAULT_PADDING[content.type];
26
+
27
+ if (value === undefined) {
28
+ return;
29
+ }
30
+
31
+ if (content.topPadding === undefined) {
32
+ content.topPadding = value;
33
+ }
34
+
35
+ if (content.bottomPadding === undefined) {
36
+ content.bottomPadding = value;
37
+ }
38
+ });
39
+ });
40
+
41
+ return migrationResult;
42
+ };
@@ -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
 
22
23
  export interface MigrationData {
23
24
  brandPageModel: BrandPageModel;
@@ -141,6 +142,12 @@ const MIGRATION_TABLE = [
141
142
  migrateFn: migration15,
142
143
  description: 'Adding default mediaOverlayStyle to background styles',
143
144
  },
145
+ {
146
+ version: 16,
147
+ migrateFn: migration16,
148
+ description:
149
+ 'Tier 2 Padding Control (BP-5699): backfill existing top/bottom spacing as explicit padding for text (12px) and images, social links, shapes and booking (32px)',
150
+ },
144
151
  ] as MigrationTableItem[];
145
152
 
146
153
  export const GetLatestModelVersion = () =>
@@ -614,10 +614,11 @@ export const useRichTextEditor = (
614
614
  globalStyles ?? {},
615
615
  );
616
616
 
617
- if (!currentAlignment?.textAlign) {
618
- props.styles &&
619
- props.styles.textAlign &&
620
- toggleTextAlign(props.styles.textAlign ?? 'none');
617
+ if (
618
+ props.styles?.textAlign &&
619
+ currentAlignment?.textAlign !== props.styles.textAlign
620
+ ) {
621
+ toggleTextAlign(props.styles.textAlign);
621
622
  }
622
623
  } else if (props.styles) {
623
624
  // copy the content settings styles to the editor
@@ -643,10 +644,11 @@ export const useRichTextEditor = (
643
644
  props.styles ?? {},
644
645
  );
645
646
 
646
- if (!currentAlignment?.textAlign) {
647
- props.styles &&
648
- props.styles.textAlign &&
649
- toggleTextAlign(props.styles.textAlign ?? 'none');
647
+ if (
648
+ props.styles?.textAlign &&
649
+ currentAlignment?.textAlign !== props.styles.textAlign
650
+ ) {
651
+ toggleTextAlign(props.styles.textAlign);
650
652
  }
651
653
  }
652
654
  };
@@ -201,6 +201,34 @@ const SETTINGS_STYLE_FIElD_GROUPS = (): ContentSettingsFieldGroup[] => {
201
201
  ];
202
202
  };
203
203
 
204
+ /**
205
+ * Shared Top/Bottom padding sliders (BP-5687). Reuses the same `slider` control
206
+ * as the Divider block (track + editable number box), range 0–100, continuous.
207
+ * Spread into a block's `fields` to expose the Padding Control on that block.
208
+ * Pass the Style field-group id for blocks that use grouped panels.
209
+ */
210
+ const PADDING_CONTROL_FIELDS = (
211
+ groupId?: string,
212
+ ): {
213
+ topPadding: ContentSettingsField<Content>;
214
+ bottomPadding: ContentSettingsField<Content>;
215
+ } => ({
216
+ topPadding: {
217
+ type: 'slider',
218
+ title: contentSettingsTr(`topPaddingTitle`),
219
+ minLength: 0,
220
+ maxLength: 100,
221
+ groupId,
222
+ },
223
+ bottomPadding: {
224
+ type: 'slider',
225
+ title: contentSettingsTr(`bottomPaddingTitle`),
226
+ minLength: 0,
227
+ maxLength: 100,
228
+ groupId,
229
+ },
230
+ });
231
+
204
232
  const DEFAULT_TITLE_STYLE_SETTINGS_FILED =
205
233
  (): ContentSettingsField<Content> => ({
206
234
  type: 'text-style',
@@ -1097,6 +1125,7 @@ export const IMAGE_GALLERY_CONTENT_SETTINGS_CONFIG = (): ContentSettingsConfig<
1097
1125
  defaultValue: false,
1098
1126
  visibilityAssessor: imageGalleryFieldVisibilityAssessor,
1099
1127
  },
1128
+ ...PADDING_CONTROL_FIELDS(),
1100
1129
  },
1101
1130
  isEnabled: true,
1102
1131
  isLocked: (features) => !features.canAddImageContents,
@@ -1136,6 +1165,7 @@ export const VIDEO_CONTENT_SETTINGS_CONFIG = (): ContentSettingsConfig<
1136
1165
  label: contentSettingsTr(`muteLabel`),
1137
1166
  valueConvertor: videoContentStateConvertor,
1138
1167
  },
1168
+ ...PADDING_CONTROL_FIELDS(),
1139
1169
  },
1140
1170
  isEnabled: true,
1141
1171
  isLocked: (features) => !features.canAddVideoContents,
@@ -1287,6 +1317,7 @@ export const TEXT_CONTENT_SETTINGS_CONFIG = (): ContentSettingsConfig<
1287
1317
  valueConvertor: backgroundColorConvertor,
1288
1318
  groupId: SETTINGS_STYLE_FIELD_GROUP_IDS.style,
1289
1319
  },
1320
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
1290
1321
  },
1291
1322
  isEnabled: true,
1292
1323
  isLocked: false,
@@ -1736,6 +1767,7 @@ export const MAP_CONTENT_SETTINGS_CONFIG =
1736
1767
  type: 'address',
1737
1768
  title: contentSettingsTr(`addressTitle`),
1738
1769
  },
1770
+ ...PADDING_CONTROL_FIELDS(),
1739
1771
  },
1740
1772
  isEnabled: true,
1741
1773
  isLocked: (features) => !features.canAddMapContents,
@@ -1787,6 +1819,7 @@ export const MAILING_LIST_CONTENT_SETTINGS_CONFIG =
1787
1819
  },
1788
1820
  titleStyle: DEFAULT_TITLE_STYLE_SETTINGS_FILED_WITH_TITLE(),
1789
1821
  buttonTextStyle: DEFAULT_BUTTON_TEXT_STYLE_FIELD(),
1822
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
1790
1823
  },
1791
1824
  isEnabled: true,
1792
1825
  isLocked: false,
@@ -1971,6 +2004,7 @@ export const REQUEST_PAYMENT_CONTENT_SETTINGS_CONFIG =
1971
2004
  defaultValue: {},
1972
2005
  label: contentSettingsTr(`buttonTextStyleLabel`),
1973
2006
  },
2007
+ ...PADDING_CONTROL_FIELDS(REQUEST_PAYMENT_GROUPS.style),
1974
2008
  },
1975
2009
  isEnabled: (features) => features.canAddRequestPaymentContents,
1976
2010
  isLocked: false,
@@ -2038,6 +2072,7 @@ export const SUPPORT_ME_CONTENT_SETTINGS_CONFIG =
2038
2072
  label: contentSettingsTr(`itemStyleLabel`),
2039
2073
  },
2040
2074
  buttonTextStyle: DEFAULT_BUTTON_TEXT_STYLE_FIELD(),
2075
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2041
2076
  },
2042
2077
  isEnabled: (features) => features.canAddRequestPaymentContents,
2043
2078
  isLocked: false,
@@ -2656,6 +2691,7 @@ export const IMAGES_SECTION_SETTINGS_CONFIG =
2656
2691
  ? MAX_BS_MEDIA_AND_IMAGE_ITEMS
2657
2692
  : MAX_BP_MEDIA_AND_IMAGE_ITEMS,
2658
2693
  },
2694
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2659
2695
  },
2660
2696
  isEnabled: true,
2661
2697
  isLocked: false,
@@ -2829,6 +2865,7 @@ export const SOCIAL_LINKS_SETTINGS_CONFIG =
2829
2865
  title: contentSettingsTr(`backgroundColorTitle`),
2830
2866
  valueConvertor: backgroundColorConvertor,
2831
2867
  },
2868
+ ...PADDING_CONTROL_FIELDS(SOCIAL_LINKS_GROUPS.style),
2832
2869
  },
2833
2870
  isEnabled: true,
2834
2871
  isLocked: false,
@@ -2942,6 +2979,7 @@ export const SHAPES_SECTION_SETTINGS_CONFIG =
2942
2979
  ? MAX_BS_MEDIA_AND_IMAGE_ITEMS
2943
2980
  : MAX_BP_MEDIA_AND_IMAGE_ITEMS,
2944
2981
  },
2982
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2945
2983
  },
2946
2984
  isEnabled: true,
2947
2985
  isLocked: false,
@@ -3202,6 +3240,7 @@ export const BOOKING_SECTION_SETTINGS_CONFIG =
3202
3240
  validator: urlValidator,
3203
3241
  defaultValue: '',
3204
3242
  },
3243
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
3205
3244
  },
3206
3245
  isEnabled: true,
3207
3246
  isLocked: false,
@@ -171,6 +171,8 @@ export const createInitialImageGalleryContent = (): ImageGalleryContent => {
171
171
  galleryStyles: {
172
172
  galleryType: 'grid',
173
173
  },
174
+ topPadding: 0,
175
+ bottomPadding: 0,
174
176
  };
175
177
  };
176
178
 
@@ -182,6 +184,8 @@ export const createInitialVideoContent = (): VideoContent => {
182
184
  displayStyle: DISPLAY_STYLE_PREVIEW,
183
185
  mute: false,
184
186
  videoUrl: '',
187
+ topPadding: 0,
188
+ bottomPadding: 0,
185
189
  };
186
190
  };
187
191
 
@@ -239,6 +243,8 @@ export const createInitialTextContent = (
239
243
  ]
240
244
  : undefined,
241
245
  type: 'text',
246
+ topPadding: 12,
247
+ bottomPadding: 12,
242
248
  textSize: {
243
249
  fontSize: FONT_SIZE_BODY,
244
250
  lineHeight: LINE_HEIGHT_BODY,
@@ -282,6 +288,8 @@ export const createInitialMapContent = (): MapContent => {
282
288
  formattedAddress: '',
283
289
  placeId: '',
284
290
  },
291
+ topPadding: 0,
292
+ bottomPadding: 0,
285
293
  };
286
294
  };
287
295
 
@@ -291,6 +299,8 @@ export const createInitialMailingListContent = (
291
299
  return {
292
300
  id: uuid.v4(),
293
301
  type: 'mailing-list',
302
+ topPadding: 0,
303
+ bottomPadding: 0,
294
304
  title: contentSettingsTr(`mailingListTitle`),
295
305
  buttonText: contentSettingsTr(`subscribePlaceholder`),
296
306
  acceptedFields: 'emailOnly',
@@ -324,6 +334,8 @@ export const createInitialRequestPaymentContent = (
324
334
  successMessage: '',
325
335
  title: contentSettingsTr(`buyNowTitle`),
326
336
  type: 'request-payment',
337
+ topPadding: 0,
338
+ bottomPadding: 0,
327
339
  fillColor: {},
328
340
  defaultBorderColor: {},
329
341
  selectedBorderColor: {},
@@ -415,6 +427,8 @@ export const createInitialSupportMeContent = (
415
427
  successMessage: contentSettingsTr(`successSupportPlaceholder`),
416
428
  description: contentSettingsTr(`makeADonationDescription`),
417
429
  type: 'support-me',
430
+ topPadding: 0,
431
+ bottomPadding: 0,
418
432
  titleStyle: {
419
433
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
420
434
  textStyleType: TEXT_STYLE_TYPES.headings,
@@ -599,6 +613,8 @@ export const createInitialBookingSectionContent: CreateInitialContentFunction<
599
613
  buttonText: contentSettingsTr(`bookNowLabel`),
600
614
  url: '',
601
615
  type: 'booking-section',
616
+ topPadding: 32,
617
+ bottomPadding: 32,
602
618
  descriptionStyle: {
603
619
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
604
620
  textStyleType: TEXT_STYLE_TYPES.paragraphs,
@@ -628,6 +644,8 @@ export const createInitialImagesSectionContent: CreateInitialContentFunction<
628
644
  title: contentSettingsTr(`imagesTitle`),
629
645
  description: '',
630
646
  type: 'images-section',
647
+ topPadding: 32,
648
+ bottomPadding: 32,
631
649
  displayStyle: 'centered',
632
650
  aspectRatio: 'Default',
633
651
  areImagesFullWidth: false,
@@ -793,6 +811,8 @@ export const createInitialSocialLinksContent = (
793
811
  return {
794
812
  id: uuid.v4(),
795
813
  type: 'social-links',
814
+ topPadding: 32,
815
+ bottomPadding: 32,
796
816
  title: contentSettingsTr(`followUsOnTitle`),
797
817
  links: [
798
818
  {
@@ -846,6 +866,8 @@ export const createInitialShapesSectionContent: CreateInitialContentFunction<
846
866
  title: contentSettingsTr(`shapesTitle`),
847
867
  description: '',
848
868
  type: 'shapes-section',
869
+ topPadding: 32,
870
+ bottomPadding: 32,
849
871
  displayStyle: 'centered',
850
872
  items: [
851
873
  {
@@ -1544,6 +1544,8 @@
1544
1544
  "iconFillColorTitle": "Icon fill color",
1545
1545
  "iconBackgroundColorTitle": "Icon background color",
1546
1546
  "paddingTitle": "Padding",
1547
+ "topPaddingTitle": "Top padding",
1548
+ "bottomPaddingTitle": "Bottom padding",
1547
1549
  "dividerStyleTitle": "Divider Style",
1548
1550
  "dividerColorTitle": "Divider color",
1549
1551
  "addItemTitle": "Add Item",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Icon fill color",
114
114
  "iconBackgroundColorTitle": "Icon background color",
115
115
  "paddingTitle": "Padding",
116
+ "topPaddingTitle": "Top padding",
117
+ "bottomPaddingTitle": "Bottom padding",
116
118
  "dividerStyleTitle": "Divider Style",
117
119
  "dividerColorTitle": "Divider color",
118
120
  "addItemTitle": "Add Item",
@@ -74,7 +74,17 @@ const includeString = (value: unknown): string | undefined => {
74
74
  };
75
75
 
76
76
  const minifyContent = (content: Content): MinifiedContent => {
77
- const base: MinifiedContent = { id: content.id, type: content.type };
77
+ const base: MinifiedContent = {
78
+ id: content.id,
79
+ type: content.type,
80
+ // Padding Control (BP-5687) — shared across every block, persist when set.
81
+ ...(typeof content.topPadding === 'number' && {
82
+ topPadding: content.topPadding,
83
+ }),
84
+ ...(typeof content.bottomPadding === 'number' && {
85
+ bottomPadding: content.bottomPadding,
86
+ }),
87
+ };
78
88
  const c = content as any;
79
89
 
80
90
  if (BUTTON_TYPES.includes(content.type)) {