@designcrowd/library.brand-page 5.18.4 → 5.18.6-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 (148) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-DQLtpdLe.js → CreatedOnBrandCrowd-de-de-CAtPZtwo.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-CvEhlADd.js → CreatedOnBrandCrowd-en-us-Dcx4yFkK.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-pYQeTTC0.js → CreatedOnBrandCrowd-es-es-DpodH0gD.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-CcE-iCEq.js → CreatedOnBrandCrowd-fr-ca-DZbMRJn-.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-CcE-iCEq.js → CreatedOnBrandCrowd-fr-fr-DZbMRJn-.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-OyhWWWyO.js → CreatedOnBrandCrowd-pt-br-C3gBveLk.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-OyhWWWyO.js → CreatedOnBrandCrowd-pt-pt-C3gBveLk.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-DH98FFLS.js → CreatedOnDcom-de-de-DHNyyTV9.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-DK67NN1r.js → CreatedOnDcom-en-us-BjqZ0Jmw.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-9-QU4BU6.js → CreatedOnDcom-es-es-tiNjDJmH.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-U9J9H9VB.js → CreatedOnDcom-fr-ca-COUSI6w1.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-DqdzB1DJ.js → CreatedOnDcom-fr-fr-c3UCfh9A.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-c4UiWtkB.js → CreatedOnDcom-pt-br-U1jbo_g5.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-Do2qJsYp.js → CreatedOnDcom-pt-pt-BOW_n3bo.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/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/constants/misc.constants.d.ts +30 -0
  28. package/lib/src/brand-page/constants/misc.constants.js +51 -0
  29. package/lib/src/brand-page/models/content.model.d.ts +2 -0
  30. package/lib/src/brand-page/models/navigation-styles.model.d.ts +7 -0
  31. package/lib/src/brand-page/models/navigation-styles.model.js +25 -2
  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 +47 -0
  38. package/lib/src/brand-page/utils/migration/migration-17.d.ts +2 -0
  39. package/lib/src/brand-page/utils/migration/migration-17.js +50 -0
  40. package/lib/src/brand-page/utils/migration.util.js +17 -0
  41. package/lib/src/brand-page-maker/components/admin-logo-settings/AdminLogoSettings.mixin.d.ts +2 -0
  42. package/lib/src/brand-page-maker/components/brand-page-maker/BrandPageMaker.mixin.d.ts +12 -0
  43. package/lib/src/brand-page-maker/components/brandpage-maker-page/BrandPageMakerPage.mixin.d.ts +14 -0
  44. package/lib/src/brand-page-maker/constants/config-settings-constant.js +37 -0
  45. package/lib/src/brand-page-maker/convertors/about-display-style.convertor.js +9 -1
  46. package/lib/src/brand-page-maker/convertors/banner-align-display-style.convertor.js +7 -1
  47. package/lib/src/brand-page-maker/convertors/contact-layout-style.convertor.js +6 -1
  48. package/lib/src/brand-page-maker/models/content-settings.js +36 -2
  49. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +12 -0
  50. package/lib/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.js +1 -9
  51. package/lib/src/{bundled-translations-B5Fkt3qd.js → bundled-translations-Chw0nsFv.js} +9 -9
  52. package/lib/src/{bundled-translations.de-DE-DpdVePM9.js → bundled-translations.de-DE-cqBv7atZ.js} +1 -1
  53. package/lib/src/{bundled-translations.es-ES-BsIcrzZF.js → bundled-translations.es-ES-D9VXftl_.js} +9 -9
  54. package/lib/src/{bundled-translations.fr-CA-G1XCp2Qh.js → bundled-translations.fr-CA-BYstWXcO.js} +1 -1
  55. package/lib/src/{bundled-translations.fr-FR-BdwLXOnB.js → bundled-translations.fr-FR-D1H1hJD4.js} +1 -1
  56. package/lib/src/{bundled-translations.pt-BR-Bvn5ePe7.js → bundled-translations.pt-BR-DqNFuNHX.js} +1 -1
  57. package/lib/src/{bundled-translations.pt-PT-CDtkb2k1.js → bundled-translations.pt-PT-tOic0FfQ.js} +9 -9
  58. package/lib/src/bundles/bundled-translations.de-DE.json +2 -0
  59. package/lib/src/bundles/bundled-translations.es-ES.json +2 -0
  60. package/lib/src/bundles/bundled-translations.fr-CA.json +2 -0
  61. package/lib/src/bundles/bundled-translations.fr-FR.json +2 -0
  62. package/lib/src/bundles/bundled-translations.json +2 -0
  63. package/lib/src/bundles/bundled-translations.pt-BR.json +2 -0
  64. package/lib/src/bundles/bundled-translations.pt-PT.json +2 -0
  65. package/lib/src/css/library.brand-page-brandCrowd.min.css +150 -168
  66. package/lib/src/css/library.brand-page-brandPage.min.css +150 -168
  67. package/lib/src/css/library.brand-page-designCom.min.css +150 -168
  68. package/lib/src/css/library.brand-page-preview.min.css +150 -168
  69. package/lib/src/index.mjs +62 -60
  70. package/lib/src/{lib-BI3J4Mbk.js → lib-Bl7w5LQl.js} +19205 -18991
  71. package/lib/src/shared/content-settings/components/content-settings/ContentSettings.mixin.d.ts +14 -0
  72. package/lib/src/shared/content-settings/components/content-settings/ReplaceImageSettingsForContent.mixin.d.ts +14 -0
  73. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.mixin.d.ts +12 -0
  74. package/lib/src/shared/content-settings/components/content-settings-item/ContentSettingsItemField.mixin.d.ts +12 -0
  75. package/lib/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.mixin.d.ts +12 -0
  76. package/lib/src/shared/content-settings/components/slider-field/SliderField.mixin.js +9 -0
  77. package/lib/src/shared/content-settings/store/content-settings-store.d.ts +12 -0
  78. package/lib/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.js +10 -8
  79. package/lib/src/shared/navigation-style-settings/store/index.js +1 -12
  80. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +16 -0
  81. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +14 -0
  82. package/lib/src/utils/minify-brand-page-metadata.js +11 -1
  83. package/package.json +1 -1
  84. package/src/brand-page/components/about-section/AboutSection.vue +10 -4
  85. package/src/brand-page/components/banner-section/BannerSection.vue +11 -4
  86. package/src/brand-page/components/booking-section/BookingSection.vue +11 -3
  87. package/src/brand-page/components/button/Button.vue +2 -10
  88. package/src/brand-page/components/contact-form/ContactForm.mixin.ts +12 -6
  89. package/src/brand-page/components/contact-form/ContactForm.vue +117 -120
  90. package/src/brand-page/components/image-gallery/ImageGallery.mixin.ts +5 -0
  91. package/src/brand-page/components/image-gallery/ImageGallery.vue +1 -1
  92. package/src/brand-page/components/mailing-list/MailingList.mixin.ts +8 -1
  93. package/src/brand-page/components/mailing-list/MailingList.vue +1 -1
  94. package/src/brand-page/components/map/Map.vue +5 -1
  95. package/src/brand-page/components/navigation/navigation-side-menu/NavigationSideMenu.vue +4 -1
  96. package/src/brand-page/components/payment/request-payment/RequestPayment.mixin.ts +5 -0
  97. package/src/brand-page/components/payment/request-payment/RequestPayment.vue +1 -0
  98. package/src/brand-page/components/payment/support-me/SupportMe.mixin.ts +8 -1
  99. package/src/brand-page/components/payment/support-me/SupportMe.vue +1 -0
  100. package/src/brand-page/components/shop/Shop.vue +7 -2
  101. package/src/brand-page/components/social-links/SocialLinks.vue +7 -3
  102. package/src/brand-page/components/text/Text.vue +12 -5
  103. package/src/brand-page/components/text-media-section/TextMediaSection.vue +11 -3
  104. package/src/brand-page/components/video/Video.mixin.ts +5 -0
  105. package/src/brand-page/components/video/Video.vue +1 -1
  106. package/src/brand-page/constants/misc.constants.ts +60 -0
  107. package/src/brand-page/models/content.model.ts +2 -0
  108. package/src/brand-page/models/navigation-styles.model.ts +39 -1
  109. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +9 -3
  110. package/src/brand-page/utils/content-padding.util.test.ts +29 -0
  111. package/src/brand-page/utils/content-padding.util.ts +13 -0
  112. package/src/brand-page/utils/index.ts +1 -0
  113. package/src/brand-page/utils/migration/migration-16.test.ts +319 -0
  114. package/src/brand-page/utils/migration/migration-16.ts +75 -0
  115. package/src/brand-page/utils/migration/migration-17.ts +73 -0
  116. package/src/brand-page/utils/migration.util.test.ts +145 -0
  117. package/src/brand-page/utils/migration.util.ts +19 -0
  118. package/src/brand-page-maker/components/color-palette/BpColorPalette.vue +9 -7
  119. package/src/brand-page-maker/constants/config-settings-constant.ts +43 -0
  120. package/src/brand-page-maker/convertors/about-display-style.convertor.ts +10 -0
  121. package/src/brand-page-maker/convertors/banner-align-display-style.convertor.ts +8 -0
  122. package/src/brand-page-maker/convertors/contact-layout-style.convertor.test.ts +50 -0
  123. package/src/brand-page-maker/convertors/contact-layout-style.convertor.ts +8 -0
  124. package/src/brand-page-maker/models/content-settings.ts +38 -2
  125. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.test.ts +43 -0
  126. package/src/brand-page-maker/stores/brandpage-maker/brandpage-maker-store.ts +0 -14
  127. package/src/bundles/bundled-translations.de-DE.json +2 -0
  128. package/src/bundles/bundled-translations.es-ES.json +2 -0
  129. package/src/bundles/bundled-translations.fr-CA.json +2 -0
  130. package/src/bundles/bundled-translations.fr-FR.json +2 -0
  131. package/src/bundles/bundled-translations.json +2 -0
  132. package/src/bundles/bundled-translations.pt-BR.json +2 -0
  133. package/src/bundles/bundled-translations.pt-PT.json +2 -0
  134. package/src/shared/content-settings/components/color-field/ColorField.vue +10 -5
  135. package/src/shared/content-settings/components/content-settings/i18n/content-settings.de-DE.json +2 -0
  136. package/src/shared/content-settings/components/content-settings/i18n/content-settings.es-ES.json +2 -0
  137. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-CA.json +2 -0
  138. package/src/shared/content-settings/components/content-settings/i18n/content-settings.fr-FR.json +2 -0
  139. package/src/shared/content-settings/components/content-settings/i18n/content-settings.json +2 -0
  140. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-BR.json +2 -0
  141. package/src/shared/content-settings/components/content-settings/i18n/content-settings.pt-PT.json +2 -0
  142. package/src/shared/content-settings/components/content-settings-item/ContentSettingsItem.vue +1 -1
  143. package/src/shared/content-settings/components/focused-content-item-settings/FocusedContentItemSettings.vue +2 -2
  144. package/src/shared/content-settings/components/slider-field/SliderField.mixin.ts +9 -0
  145. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.mixin.ts +17 -11
  146. package/src/shared/navigation-style-settings/components/navigation-style-settings/NavigationStyleSettings.vue +4 -1
  147. package/src/shared/navigation-style-settings/store/index.ts +1 -21
  148. package/src/utils/minify-brand-page-metadata.ts +11 -1
@@ -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,
@@ -1278,6 +1308,7 @@ export const TEXT_CONTENT_SETTINGS_CONFIG = (): ContentSettingsConfig<
1278
1308
  variant: 'icon',
1279
1309
  visibilityAssessor: brandSiteTypeVisibilityAssessor,
1280
1310
  },
1311
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
1281
1312
  backgroundColor: {
1282
1313
  type: 'color',
1283
1314
  defaultValue: {},
@@ -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,
@@ -2170,6 +2205,7 @@ export const CONTACT_FORM_SETTINGS_CONFIG =
2170
2205
  variant: 'icon',
2171
2206
  visibilityAssessor: brandSiteTypeVisibilityAssessor,
2172
2207
  },
2208
+ ...PADDING_CONTROL_FIELDS(CONTACT_FORM_GROUPS.style),
2173
2209
  titleStyle: DEFAULT_TITLE_STYLE_SETTINGS_FILED_WITH_TITLE(),
2174
2210
  descriptionStyle: DEFAULT_DESCRIPTION_STYLE_FILED(),
2175
2211
  buttonTextStyle: DEFAULT_BUTTON_TEXT_STYLE_FIELD(),
@@ -2229,6 +2265,7 @@ export const BANNER_SECTION_SETTINGS_CONFIG =
2229
2265
  groupId: SETTINGS_STYLE_FIELD_GROUP_IDS.style,
2230
2266
  variant: 'icon',
2231
2267
  },
2268
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2232
2269
  overlayColor: {
2233
2270
  type: 'color',
2234
2271
  title: contentSettingsTr(`overlayColorTitle`),
@@ -2507,6 +2544,7 @@ export const ABOUT_SECTION_SETTINGS_CONFIG =
2507
2544
  groupId: SETTINGS_STYLE_FIELD_GROUP_IDS.style,
2508
2545
  variant: 'icon',
2509
2546
  },
2547
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2510
2548
  titleStyle: DEFAULT_TITLE_STYLE_SETTINGS_FILED_WITH_TITLE(),
2511
2549
  paragraphStyle: {
2512
2550
  type: 'text-style',
@@ -2594,6 +2632,7 @@ export const IMAGES_SECTION_SETTINGS_CONFIG =
2594
2632
  ],
2595
2633
  fields: {
2596
2634
  displayStyle: TEXT_MEDIA_DISPLAY_STYLE_FIELD(MEDIA_TYPES.image),
2635
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2597
2636
  aspectRatio: {
2598
2637
  type: 'radio',
2599
2638
  role: 'multi',
@@ -2793,6 +2832,7 @@ export const SOCIAL_LINKS_SETTINGS_CONFIG =
2793
2832
  optionsConvertor: socialLinksIconDisplayStyleConvertor,
2794
2833
  variant: 'icon',
2795
2834
  },
2835
+ ...PADDING_CONTROL_FIELDS(SOCIAL_LINKS_GROUPS.style),
2796
2836
  titleStyle: {
2797
2837
  type: 'text-style',
2798
2838
  groupId: SOCIAL_LINKS_GROUPS.style,
@@ -2905,6 +2945,7 @@ export const SHAPES_SECTION_SETTINGS_CONFIG =
2905
2945
  ],
2906
2946
  fields: {
2907
2947
  displayStyle: TEXT_MEDIA_DISPLAY_STYLE_FIELD(MEDIA_TYPES.shape),
2948
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2908
2949
  size: IMAGE_SIZE_FIELD(),
2909
2950
  title: TEXT_MEDIA_TITLE_FIELD(),
2910
2951
  description: TEXT_MEDIA_DESCRIPTION_FIELD(),
@@ -2942,6 +2983,7 @@ export const SHAPES_SECTION_SETTINGS_CONFIG =
2942
2983
  ? MAX_BS_MEDIA_AND_IMAGE_ITEMS
2943
2984
  : MAX_BP_MEDIA_AND_IMAGE_ITEMS,
2944
2985
  },
2986
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
2945
2987
  },
2946
2988
  isEnabled: true,
2947
2989
  isLocked: false,
@@ -3166,6 +3208,7 @@ export const BOOKING_SECTION_SETTINGS_CONFIG =
3166
3208
  visibilityAssessor: (c, b) =>
3167
3209
  personalisationOverrideVisibility(c, b, 'buttonText'),
3168
3210
  },
3211
+ ...PADDING_CONTROL_FIELDS(SETTINGS_STYLE_FIELD_GROUP_IDS.style),
3169
3212
  backgroundStyle: {
3170
3213
  type: 'color',
3171
3214
  groupId: SETTINGS_STYLE_FIELD_GROUP_IDS.style,
@@ -6,6 +6,7 @@ import {
6
6
  ALIGN_RIGHT_ALIGNED,
7
7
  ALIGN_RIGHT_FULL_IMAGE,
8
8
  TEXT_ONLY,
9
+ aboutDisplayStyleDefaultPadding,
9
10
  } from '@brand-page/constants';
10
11
 
11
12
  import type { AboutSectionContent } from '@brand-page';
@@ -76,11 +77,18 @@ export const aboutDisplayStyleConvertor: ValueConvertor<
76
77
  convertBack(config: ButtonGroupConfig): Partial<AboutSectionContent> {
77
78
  const selectedOption = config.options.find((v) => v.isSelected);
78
79
 
80
+ // Switching display style adopts that style's canonical look — like the
81
+ // textAlign reset below — including its default block padding. The two
82
+ // full-image styles default to 0 (image flush to the edges); the rest to 32.
83
+ const padding = aboutDisplayStyleDefaultPadding(selectedOption?.value);
84
+
79
85
  if (!selectedOption || selectedOption.value === ALIGN_CENTERED) {
80
86
  const textAlign = 'center';
81
87
 
82
88
  return {
83
89
  displayStyle: selectedOption?.value,
90
+ topPadding: padding,
91
+ bottomPadding: padding,
84
92
  titleStyle: {
85
93
  textAlign,
86
94
  },
@@ -94,6 +102,8 @@ export const aboutDisplayStyleConvertor: ValueConvertor<
94
102
 
95
103
  return {
96
104
  displayStyle: selectedOption?.value,
105
+ topPadding: padding,
106
+ bottomPadding: padding,
97
107
  titleStyle: {
98
108
  textAlign,
99
109
  },
@@ -15,6 +15,7 @@ import {
15
15
  ALIGN_TOP_FULL_IMAGE,
16
16
  ALIGN_BOTTOM_FULL_IMAGE,
17
17
  ALIGN_MIDDLE_FULL_IMAGE,
18
+ bannerDisplayStyleDefaultPadding,
18
19
  } from '@brand-page/constants';
19
20
  import type { BannerSectionContent } from '@brand-page';
20
21
 
@@ -172,8 +173,15 @@ export const bannerAlignDisplayStyleConvertor: ValueConvertor<
172
173
  textAlign = 'center';
173
174
  }
174
175
 
176
+ // Switching display style adopts that style's canonical look — like the
177
+ // textAlign resets above — including its default block padding. Full-bleed
178
+ // image styles default to 0 (image flush to the edges); the rest to 32.
179
+ const padding = bannerDisplayStyleDefaultPadding(selectedOption?.value);
180
+
175
181
  return {
176
182
  displayStyle: selectedOption?.value,
183
+ topPadding: padding,
184
+ bottomPadding: padding,
177
185
  titleStyle: {
178
186
  textAlign,
179
187
  },
@@ -0,0 +1,50 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import { contactLayoutStyleConvertor } from './contact-layout-style.convertor';
3
+ import {
4
+ ALIGN_CENTERED,
5
+ ALIGN_CARD_CENTER,
6
+ ALIGN_CARD_CENTER_IMAGE,
7
+ ALIGN_LEFT_FULL_IMAGE,
8
+ TEXT_ONLY,
9
+ } from '@brand-page/constants';
10
+
11
+ const configWithSelected = (selected: string) => ({
12
+ options: contactLayoutStyleConvertor
13
+ .convert(selected)
14
+ .options.map((option) => ({
15
+ ...option,
16
+ isSelected: option.value === selected,
17
+ })),
18
+ });
19
+
20
+ describe('contact-layout-style.convertor', () => {
21
+ test.each([
22
+ [ALIGN_CARD_CENTER, 32, 'center'],
23
+ [ALIGN_CENTERED, 24, 'center'],
24
+ [ALIGN_CARD_CENTER_IMAGE, 0, 'center'],
25
+ [TEXT_ONLY, 32, 'left'],
26
+ [ALIGN_LEFT_FULL_IMAGE, 0, 'left'],
27
+ ])(
28
+ 'convertBack should apply the default padding and text alignment for %s',
29
+ (layoutStyle, padding, textAlign) => {
30
+ const result = contactLayoutStyleConvertor.convertBack(
31
+ configWithSelected(layoutStyle),
32
+ );
33
+
34
+ expect(result).toStrictEqual({
35
+ layoutStyle,
36
+ topPadding: padding,
37
+ bottomPadding: padding,
38
+ titleStyle: {
39
+ textAlign,
40
+ },
41
+ descriptionStyle: {
42
+ textAlign,
43
+ },
44
+ buttonTextStyle: {
45
+ textAlign: 'center',
46
+ },
47
+ });
48
+ },
49
+ );
50
+ });
@@ -6,6 +6,7 @@ import {
6
6
  ALIGN_CARD_CENTER_IMAGE,
7
7
  TEXT_ONLY,
8
8
  ALIGN_CARD_CENTER,
9
+ CONTACT_FORM_LAYOUT_DEFAULT_PADDING,
9
10
  } from '@brand-page/constants';
10
11
  import type { ContactFormContent } from '@brand-page';
11
12
 
@@ -84,8 +85,15 @@ export const contactLayoutStyleConvertor: ValueConvertor<
84
85
  textAlign = 'left';
85
86
  }
86
87
 
88
+ // Switching layout adopts that layout's canonical look — same as the
89
+ // textAlign resets below — including its default block padding.
90
+ const padding =
91
+ CONTACT_FORM_LAYOUT_DEFAULT_PADDING[selectedOption?.value ?? ''] ?? 0;
92
+
87
93
  return {
88
94
  layoutStyle: selectedOption?.value,
95
+ topPadding: padding,
96
+ bottomPadding: padding,
89
97
  titleStyle: {
90
98
  textAlign,
91
99
  },
@@ -24,6 +24,7 @@ import {
24
24
  EMPTY_LOGO_IMAGE_MODEL,
25
25
  BRAND_PAGE_TYPES,
26
26
  SENSITIVE_CONTENT_TYPES,
27
+ CONTACT_FORM_LAYOUT_DEFAULT_PADDING,
27
28
  } from '@brand-page';
28
29
  import type {
29
30
  ButtonContent,
@@ -171,6 +172,8 @@ export const createInitialImageGalleryContent = (): ImageGalleryContent => {
171
172
  galleryStyles: {
172
173
  galleryType: 'grid',
173
174
  },
175
+ topPadding: 0,
176
+ bottomPadding: 0,
174
177
  };
175
178
  };
176
179
 
@@ -182,6 +185,8 @@ export const createInitialVideoContent = (): VideoContent => {
182
185
  displayStyle: DISPLAY_STYLE_PREVIEW,
183
186
  mute: false,
184
187
  videoUrl: '',
188
+ topPadding: 0,
189
+ bottomPadding: 0,
185
190
  };
186
191
  };
187
192
 
@@ -239,6 +244,8 @@ export const createInitialTextContent = (
239
244
  ]
240
245
  : undefined,
241
246
  type: 'text',
247
+ topPadding: 12,
248
+ bottomPadding: 12,
242
249
  textSize: {
243
250
  fontSize: FONT_SIZE_BODY,
244
251
  lineHeight: LINE_HEIGHT_BODY,
@@ -282,6 +289,8 @@ export const createInitialMapContent = (): MapContent => {
282
289
  formattedAddress: '',
283
290
  placeId: '',
284
291
  },
292
+ topPadding: 0,
293
+ bottomPadding: 0,
285
294
  };
286
295
  };
287
296
 
@@ -291,6 +300,8 @@ export const createInitialMailingListContent = (
291
300
  return {
292
301
  id: uuid.v4(),
293
302
  type: 'mailing-list',
303
+ topPadding: 0,
304
+ bottomPadding: 0,
294
305
  title: contentSettingsTr(`mailingListTitle`),
295
306
  buttonText: contentSettingsTr(`subscribePlaceholder`),
296
307
  acceptedFields: 'emailOnly',
@@ -324,6 +335,8 @@ export const createInitialRequestPaymentContent = (
324
335
  successMessage: '',
325
336
  title: contentSettingsTr(`buyNowTitle`),
326
337
  type: 'request-payment',
338
+ topPadding: 0,
339
+ bottomPadding: 0,
327
340
  fillColor: {},
328
341
  defaultBorderColor: {},
329
342
  selectedBorderColor: {},
@@ -356,6 +369,8 @@ export const createInitialShopContent = (
356
369
  return {
357
370
  id: uuid.v4(),
358
371
  description: '',
372
+ topPadding: 16,
373
+ bottomPadding: 16,
359
374
  products: [],
360
375
  displayStyle: PAYMENT_OPTION_DISPLAY_TYPES.thumbnail,
361
376
  aspectRatio: PAYMENT_OPTION_IMAGE_TYPES.auto,
@@ -415,6 +430,8 @@ export const createInitialSupportMeContent = (
415
430
  successMessage: contentSettingsTr(`successSupportPlaceholder`),
416
431
  description: contentSettingsTr(`makeADonationDescription`),
417
432
  type: 'support-me',
433
+ topPadding: 0,
434
+ bottomPadding: 0,
418
435
  titleStyle: {
419
436
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
420
437
  textStyleType: TEXT_STYLE_TYPES.headings,
@@ -453,14 +470,21 @@ export const createInitialContactFormContent: CreateInitialContentFunction<
453
470
  console.error('userState.emailAddress should not be undefined');
454
471
  }
455
472
 
473
+ // New blocks inherit the padding their initial layout previously had
474
+ // hard-coded — same source as the migration backfill for existing pages.
475
+ const layoutStyle =
476
+ options?.brandPageType === 'brandSite' ? 'center-card-aligned' : '';
477
+ const padding = CONTACT_FORM_LAYOUT_DEFAULT_PADDING[layoutStyle] ?? 0;
478
+
456
479
  return {
457
480
  id: uuid.v4(),
458
481
  title: contentSettingsTr(`contactUsTitle`),
459
482
  description: '',
460
483
  buttonText: contentSettingsTr(`sendPlaceholder`),
461
484
  displayStyle: DISPLAY_STYLE_PREVIEW,
462
- layoutStyle:
463
- options?.brandPageType === 'brandSite' ? 'center-card-aligned' : '',
485
+ layoutStyle,
486
+ topPadding: padding,
487
+ bottomPadding: padding,
464
488
  imageUrl: '',
465
489
  fields: [
466
490
  {
@@ -553,6 +577,8 @@ export const createInitialBannerSectionContent: CreateInitialContentFunction<
553
577
  > = (options?: CreateInitialContentOptions) => {
554
578
  return {
555
579
  id: uuid.v4(),
580
+ topPadding: 32,
581
+ bottomPadding: 32,
556
582
  imageUrl: '',
557
583
  title: contentSettingsTr(`thisIsABannerTitle`),
558
584
  description: '',
@@ -599,6 +625,8 @@ export const createInitialBookingSectionContent: CreateInitialContentFunction<
599
625
  buttonText: contentSettingsTr(`bookNowLabel`),
600
626
  url: '',
601
627
  type: 'booking-section',
628
+ topPadding: 32,
629
+ bottomPadding: 32,
602
630
  descriptionStyle: {
603
631
  applyAutoScale: options?.brandPageType === BRAND_PAGE_TYPES.brandSite,
604
632
  textStyleType: TEXT_STYLE_TYPES.paragraphs,
@@ -628,6 +656,8 @@ export const createInitialImagesSectionContent: CreateInitialContentFunction<
628
656
  title: contentSettingsTr(`imagesTitle`),
629
657
  description: '',
630
658
  type: 'images-section',
659
+ topPadding: 32,
660
+ bottomPadding: 32,
631
661
  displayStyle: 'centered',
632
662
  aspectRatio: 'Default',
633
663
  areImagesFullWidth: false,
@@ -731,6 +761,8 @@ export const createInitialAboutSectionContent: CreateInitialContentFunction<
731
761
  textAlign: 'center',
732
762
  },
733
763
  backgroundStyle: {},
764
+ topPadding: 32,
765
+ bottomPadding: 32,
734
766
  };
735
767
  };
736
768
 
@@ -793,6 +825,8 @@ export const createInitialSocialLinksContent = (
793
825
  return {
794
826
  id: uuid.v4(),
795
827
  type: 'social-links',
828
+ topPadding: 32,
829
+ bottomPadding: 32,
796
830
  title: contentSettingsTr(`followUsOnTitle`),
797
831
  links: [
798
832
  {
@@ -846,6 +880,8 @@ export const createInitialShapesSectionContent: CreateInitialContentFunction<
846
880
  title: contentSettingsTr(`shapesTitle`),
847
881
  description: '',
848
882
  type: 'shapes-section',
883
+ topPadding: 32,
884
+ bottomPadding: 32,
849
885
  displayStyle: 'centered',
850
886
  items: [
851
887
  {
@@ -9,10 +9,14 @@ import {
9
9
  BrandPageModel,
10
10
  type ContactFormContent,
11
11
  emptyGlobalTextStyleDeclaration,
12
+ HEADER_DISPLAY,
12
13
  type LogoTheme,
14
+ NAVIGATION_DISPLAY,
13
15
  type PageStyles,
16
+ STYLE_THEME_KEYS,
14
17
  VIEWPORTS,
15
18
  } from '@brand-page';
19
+ import { useUiNavigationStyleSettingsStore } from '@shared/navigation-style-settings/store';
16
20
  import {
17
21
  DEFAULT_LOGO_HEIGHT,
18
22
  DEFAULT_LOGO_WIDTH,
@@ -302,6 +306,45 @@ describe('brand page maker store module', () => {
302
306
  );
303
307
  });
304
308
 
309
+ // bp-5634: the sub nav default is applied when content is first materialised. The
310
+ // admin maker loads a template (no designDraftToken => isUserDraft === false), so a
311
+ // colour-matched menu font colour-matches the sub nav on load. (Existing user drafts
312
+ // are skipped — covered by migration-16.test.ts.)
313
+ test('hamburger template in admin colour-matches the sub nav when the font is matched', async () => {
314
+ useBrandPageMakerUserStore().setUserState({ isAdmin: true });
315
+
316
+ const store = useBrandPageMakerStore();
317
+
318
+ const hamburgerHeader = (displayStyle: string) => ({
319
+ displayStyle,
320
+ navigation: {
321
+ displayType: NAVIGATION_DISPLAY.HAMBURGER_1,
322
+ hamburgerMenuStyle: {
323
+ defaultButtonStyle: { color: STYLE_THEME_KEYS.LogoTextColor },
324
+ },
325
+ },
326
+ });
327
+
328
+ await store.initialise({
329
+ ...INITIALISE_PAYLOAD,
330
+ brandPage: {
331
+ ...BRAND_PAGE,
332
+ pageHeaderDesktop: hamburgerHeader(HEADER_DISPLAY.DESKTOP_HAMBURGER_1),
333
+ pageHeaderMobile: hamburgerHeader(HEADER_DISPLAY.MOBILE_HAMBURGER_1),
334
+ },
335
+ });
336
+ await store.initialiseAdminMaker({ models: [] });
337
+
338
+ const hamburger =
339
+ useUiNavigationStyleSettingsStore().navigation[PAGE_SECTIONS.header][
340
+ VIEWPORTS.desktop
341
+ ].hamburgerMenuStyle;
342
+
343
+ expect(hamburger.subNavBackgroundColor).toBe(
344
+ STYLE_THEME_KEYS.LogoBackgroundColor,
345
+ );
346
+ });
347
+
305
348
  test('brand page maker module should returns distinct brand page content type', async () => {
306
349
  // Arrange
307
350
  const store = useBrandPageMakerStore();
@@ -71,7 +71,6 @@ import { useAdminLogoSettingsStore } from '../admin-logo-settings';
71
71
  import type { PageSettingsStateSections } from '@shared/page-settings/store';
72
72
  import { useUiPageSettingsStore } from '@shared/page-settings/store';
73
73
  import {
74
- isColorMatched,
75
74
  mapBrandPageContentToContentSettingsItem,
76
75
  removeContentFieldValues,
77
76
  removeLogoTemplateModel,
@@ -1098,19 +1097,6 @@ export const useBrandPageMakerStore = defineStore('brandPageMaker', {
1098
1097
  },
1099
1098
  });
1100
1099
 
1101
- if (userStore.isAdmin && !this.isUserDraft) {
1102
- for (const viewport of [VIEWPORTS.desktop, VIEWPORTS.mobile]) {
1103
- const hamburger =
1104
- navigationStyleSettingsStore.navigation[PAGE_SECTIONS.header][
1105
- viewport
1106
- ].hamburgerMenuStyle;
1107
-
1108
- if (isColorMatched(hamburger.subNavBackgroundColor)) {
1109
- hamburger.subNavBackgroundColor = undefined;
1110
- }
1111
- }
1112
- }
1113
-
1114
1100
  uiStore.setThirdPartySettings({
1115
1101
  thirdPartySettings: {
1116
1102
  unsplashApplicationName,
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Farbe der Symbolfüllung",
1528
1528
  "iconBackgroundColorTitle": "Symbolhintergrundfarbe",
1529
1529
  "paddingTitle": "Polsterung",
1530
+ "topPaddingTitle": "Polsterung oben",
1531
+ "bottomPaddingTitle": "Polsterung unten",
1530
1532
  "dividerStyleTitle": "Trennlinienstil",
1531
1533
  "dividerColorTitle": "Trennlinienfarbe",
1532
1534
  "addItemTitle": "Artikel hinzufügen",
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Color de relleno del icono",
1528
1528
  "iconBackgroundColorTitle": "Color de fondo del icono",
1529
1529
  "paddingTitle": "Relleno",
1530
+ "topPaddingTitle": "Relleno superior",
1531
+ "bottomPaddingTitle": "Relleno inferior",
1530
1532
  "dividerStyleTitle": "Estilo del divisor",
1531
1533
  "dividerColorTitle": "Color del separador",
1532
1534
  "addItemTitle": "Añadir artículo",
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
1528
1528
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
1529
1529
  "paddingTitle": "Marges intérieures",
1530
+ "topPaddingTitle": "Marge intérieure supérieure",
1531
+ "bottomPaddingTitle": "Marges intérieures inférieures",
1530
1532
  "dividerStyleTitle": "Style de séparateur",
1531
1533
  "dividerColorTitle": "Couleur du séparateur",
1532
1534
  "addItemTitle": "Ajouter un article",
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
1528
1528
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
1529
1529
  "paddingTitle": "Marges intérieures",
1530
+ "topPaddingTitle": "Marges intérieures supérieures",
1531
+ "bottomPaddingTitle": "Marges intérieures inférieures",
1530
1532
  "dividerStyleTitle": "Style de séparateur",
1531
1533
  "dividerColorTitle": "Couleur du séparateur",
1532
1534
  "addItemTitle": "Ajouter un article",
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Icon fill color",
1528
1528
  "iconBackgroundColorTitle": "Icon background color",
1529
1529
  "paddingTitle": "Padding",
1530
+ "topPaddingTitle": "Top padding",
1531
+ "bottomPaddingTitle": "Bottom padding",
1530
1532
  "dividerStyleTitle": "Divider Style",
1531
1533
  "dividerColorTitle": "Divider color",
1532
1534
  "addItemTitle": "Add Item",
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Cor de preenchimento do ícone",
1528
1528
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
1529
1529
  "paddingTitle": "Preenchimento",
1530
+ "topPaddingTitle": "Preenchimento superior",
1531
+ "bottomPaddingTitle": "Preenchimento inferior",
1530
1532
  "dividerStyleTitle": "Estilo do separador",
1531
1533
  "dividerColorTitle": "Cor do separador",
1532
1534
  "addItemTitle": "Adicionar item",
@@ -1527,6 +1527,8 @@
1527
1527
  "iconFillColorTitle": "Cor de preenchimento do ícone",
1528
1528
  "iconBackgroundColorTitle": "Cor de fundo do ícone",
1529
1529
  "paddingTitle": "Preenchimento",
1530
+ "topPaddingTitle": "Preenchimento superior",
1531
+ "bottomPaddingTitle": "Preenchimento inferior",
1530
1532
  "dividerStyleTitle": "Estilo do separador",
1531
1533
  "dividerColorTitle": "Cor do separador",
1532
1534
  "addItemTitle": "Adicionar Item",
@@ -269,12 +269,17 @@ const onColorMatchToggled = (value: boolean) => {
269
269
  } else {
270
270
  newColor.value = STYLE_THEME_KEYS.LogoTextColor;
271
271
  }
272
+ } else if (props.name === 'background') {
273
+ newColor.value = '';
274
+ } else if (props.disableTransparent) {
275
+ // Fields that disallow transparent (e.g. font colour) must not fall back to
276
+ // transparent when color match is turned off - resolve to the actual logo colour.
277
+ newColor.value =
278
+ color.value === STYLE_THEME_KEYS.LogoBackgroundColor
279
+ ? props.logoTheme.logoBackgroundColor.rgb
280
+ : props.logoTheme.logoTextColor.rgb;
272
281
  } else {
273
- if (props.name === 'background') {
274
- newColor.value = '';
275
- } else {
276
- newColor.value = 'transparent';
277
- }
282
+ newColor.value = 'transparent';
278
283
  }
279
284
 
280
285
  changeColor();
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Farbe der Symbolfüllung",
114
114
  "iconBackgroundColorTitle": "Symbolhintergrundfarbe",
115
115
  "paddingTitle": "Polsterung",
116
+ "topPaddingTitle": "Polsterung oben",
117
+ "bottomPaddingTitle": "Polsterung unten",
116
118
  "dividerStyleTitle": "Trennlinienstil",
117
119
  "dividerColorTitle": "Trennlinienfarbe",
118
120
  "addItemTitle": "Artikel hinzufügen",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Color de relleno del icono",
114
114
  "iconBackgroundColorTitle": "Color de fondo del icono",
115
115
  "paddingTitle": "Relleno",
116
+ "topPaddingTitle": "Relleno superior",
117
+ "bottomPaddingTitle": "Relleno inferior",
116
118
  "dividerStyleTitle": "Estilo del divisor",
117
119
  "dividerColorTitle": "Color del separador",
118
120
  "addItemTitle": "Añadir artículo",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
114
114
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
115
115
  "paddingTitle": "Marges intérieures",
116
+ "topPaddingTitle": "Marge intérieure supérieure",
117
+ "bottomPaddingTitle": "Marges intérieures inférieures",
116
118
  "dividerStyleTitle": "Style de séparateur",
117
119
  "dividerColorTitle": "Couleur du séparateur",
118
120
  "addItemTitle": "Ajouter un article",
@@ -113,6 +113,8 @@
113
113
  "iconFillColorTitle": "Couleur de remplissage de l’icône",
114
114
  "iconBackgroundColorTitle": "Couleur d’arrière-plan de l’icône",
115
115
  "paddingTitle": "Marges intérieures",
116
+ "topPaddingTitle": "Marges intérieures supérieures",
117
+ "bottomPaddingTitle": "Marges intérieures inférieures",
116
118
  "dividerStyleTitle": "Style de séparateur",
117
119
  "dividerColorTitle": "Couleur du séparateur",
118
120
  "addItemTitle": "Ajouter un article",
@@ -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",