@designcrowd/library.brand-page 6.1.13-ast-opacity → 6.1.13

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 (71) hide show
  1. package/lib/src/{CreatedOnBrandCrowd-de-de-B8j4uryC.js → CreatedOnBrandCrowd-de-de-Fgb3311h.js} +1 -1
  2. package/lib/src/{CreatedOnBrandCrowd-en-us-BsI2J4TR.js → CreatedOnBrandCrowd-en-us-B5STCD_n.js} +1 -1
  3. package/lib/src/{CreatedOnBrandCrowd-es-es-CYxTGgvK.js → CreatedOnBrandCrowd-es-es-DdgIbk4D.js} +1 -1
  4. package/lib/src/{CreatedOnBrandCrowd-fr-fr-V6_P_kVa.js → CreatedOnBrandCrowd-fr-ca-DI51kQX5.js} +1 -1
  5. package/lib/src/{CreatedOnBrandCrowd-fr-ca-V6_P_kVa.js → CreatedOnBrandCrowd-fr-fr-DI51kQX5.js} +1 -1
  6. package/lib/src/{CreatedOnBrandCrowd-pt-pt-DSbvq-jt.js → CreatedOnBrandCrowd-pt-br-BSnb2rTr.js} +1 -1
  7. package/lib/src/{CreatedOnBrandCrowd-pt-br-DSbvq-jt.js → CreatedOnBrandCrowd-pt-pt-BSnb2rTr.js} +1 -1
  8. package/lib/src/{CreatedOnDcom-de-de-6LMPXiBe.js → CreatedOnDcom-de-de-CSZ70DSJ.js} +1 -1
  9. package/lib/src/{CreatedOnDcom-en-us-LJWKUu3G.js → CreatedOnDcom-en-us-ndmcsQ7u.js} +1 -1
  10. package/lib/src/{CreatedOnDcom-es-es-BcJkodUE.js → CreatedOnDcom-es-es-CaxTn1I3.js} +1 -1
  11. package/lib/src/{CreatedOnDcom-fr-ca-DDBXmhmV.js → CreatedOnDcom-fr-ca-D2G_gRcn.js} +1 -1
  12. package/lib/src/{CreatedOnDcom-fr-fr-D0jyOtYU.js → CreatedOnDcom-fr-fr-DEWTbL0q.js} +1 -1
  13. package/lib/src/{CreatedOnDcom-pt-br-DzwvL7Me.js → CreatedOnDcom-pt-br-JrWcosfu.js} +1 -1
  14. package/lib/src/{CreatedOnDcom-pt-pt-B-6e1n0b.js → CreatedOnDcom-pt-pt-C81R_qUX.js} +1 -1
  15. package/lib/src/brand-page/models/index.d.ts +1 -4
  16. package/lib/src/brand-page/models/index.js +1 -4
  17. package/lib/src/brand-page/utils/view-model.util.js +2 -18
  18. package/lib/src/brand-page/view-models.d.ts +1 -2
  19. package/lib/src/brand-page-maker/stores/ai-checkpoint/ai-checkpoint-store.d.ts +0 -18
  20. package/lib/src/{bundled-translations-B2q5GWTQ.js → bundled-translations-BiFAlQdC.js} +1 -1
  21. package/lib/src/{bundled-translations.de-DE-FhH2H_rd.js → bundled-translations.de-DE-DuRWnOP-.js} +5 -5
  22. package/lib/src/{bundled-translations.es-ES-_ZExxMi7.js → bundled-translations.es-ES-CokHdZtW.js} +5 -5
  23. package/lib/src/{bundled-translations.fr-CA-Tg-ODIiC.js → bundled-translations.fr-CA-CJcMmubA.js} +1 -1
  24. package/lib/src/{bundled-translations.fr-FR-C0sU51Mz.js → bundled-translations.fr-FR-DYPup8fJ.js} +1 -1
  25. package/lib/src/{bundled-translations.pt-BR-MYFIhA4u.js → bundled-translations.pt-BR-GSsp1kuV.js} +9 -9
  26. package/lib/src/{bundled-translations.pt-PT-DeUBSzCB.js → bundled-translations.pt-PT-DbkY8UQ3.js} +9 -9
  27. package/lib/src/bundles/bundled-translations.de-DE.json +0 -1
  28. package/lib/src/bundles/bundled-translations.es-ES.json +0 -1
  29. package/lib/src/bundles/bundled-translations.fr-CA.json +0 -1
  30. package/lib/src/bundles/bundled-translations.fr-FR.json +0 -1
  31. package/lib/src/bundles/bundled-translations.json +0 -1
  32. package/lib/src/bundles/bundled-translations.pt-BR.json +0 -1
  33. package/lib/src/bundles/bundled-translations.pt-PT.json +0 -1
  34. package/lib/src/css/library.brand-page-brandCrowd.min.css +1 -1
  35. package/lib/src/css/library.brand-page-brandPage.min.css +1 -1
  36. package/lib/src/css/library.brand-page-designCom.min.css +1 -1
  37. package/lib/src/css/library.brand-page-preview.min.css +1 -1
  38. package/lib/src/index.mjs +1 -1
  39. package/lib/src/{lib-Dpv7KURd.js → lib-BmaHdOpJ.js} +8420 -8470
  40. package/lib/src/shared/page-settings/components/page-settings/PageSettings.mixin.d.ts +0 -2
  41. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.d.ts +0 -5
  42. package/lib/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.js +0 -25
  43. package/lib/src/utils/minify-brand-page-metadata.d.ts +0 -1
  44. package/lib/src/utils/minify-brand-page-metadata.js +3 -13
  45. package/package.json +1 -1
  46. package/src/brand-page/models/index.ts +2 -9
  47. package/src/brand-page/utils/__snapshots__/migration.util.test.ts.snap +6 -18
  48. package/src/brand-page/utils/__snapshots__/migration2.util.test.ts.snap +2 -6
  49. package/src/brand-page/utils/__snapshots__/model.util.test.ts.snap +4 -12
  50. package/src/brand-page/utils/view-model.util.test.ts +1 -145
  51. package/src/brand-page/utils/view-model.util.ts +2 -27
  52. package/src/brand-page/view-models.ts +0 -2
  53. package/src/bundles/bundled-translations.de-DE.json +0 -1
  54. package/src/bundles/bundled-translations.es-ES.json +0 -1
  55. package/src/bundles/bundled-translations.fr-CA.json +0 -1
  56. package/src/bundles/bundled-translations.fr-FR.json +0 -1
  57. package/src/bundles/bundled-translations.json +0 -1
  58. package/src/bundles/bundled-translations.pt-BR.json +0 -1
  59. package/src/bundles/bundled-translations.pt-PT.json +0 -1
  60. package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.vue +0 -18
  61. package/src/shared/page-settings/components/page-settings/i18n/page-settings.de-DE.json +0 -1
  62. package/src/shared/page-settings/components/page-settings/i18n/page-settings.es-ES.json +0 -1
  63. package/src/shared/page-settings/components/page-settings/i18n/page-settings.fr-CA.json +0 -1
  64. package/src/shared/page-settings/components/page-settings/i18n/page-settings.fr-FR.json +0 -1
  65. package/src/shared/page-settings/components/page-settings/i18n/page-settings.json +0 -1
  66. package/src/shared/page-settings/components/page-settings/i18n/page-settings.pt-BR.json +0 -1
  67. package/src/shared/page-settings/components/page-settings/i18n/page-settings.pt-PT.json +0 -1
  68. package/src/shared/page-settings/components/page-settings-section-styles/PageSettingsSectionStyles.mixin.ts +0 -33
  69. package/src/utils/minify-brand-page-metadata.test.ts +1 -70
  70. package/src/utils/minify-brand-page-metadata.ts +4 -19
  71. package/src/shared/page-settings/components/header-settings-panel/HeaderSettingsPanel.test.ts +0 -111
@@ -1277,7 +1277,6 @@ declare const _default: import("vue").DefineComponent<{}, {
1277
1277
  } | undefined;
1278
1278
  logoImageBase64Url?: string | undefined;
1279
1279
  backgroundStyle: {
1280
- backgroundOpacity?: number | undefined;
1281
1280
  aspectRatio?: string | undefined;
1282
1281
  backgroundAttachment?: string | undefined;
1283
1282
  background?: string | undefined;
@@ -2570,7 +2569,6 @@ declare const _default: import("vue").DefineComponent<{}, {
2570
2569
  } | undefined;
2571
2570
  logoImageBase64Url?: string | undefined;
2572
2571
  backgroundStyle: {
2573
- backgroundOpacity?: number | undefined;
2574
2572
  aspectRatio?: string | undefined;
2575
2573
  backgroundAttachment?: string | undefined;
2576
2574
  background?: string | undefined;
@@ -1235,7 +1235,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
1235
1235
  } | undefined;
1236
1236
  logoImageBase64Url?: string | undefined;
1237
1237
  backgroundStyle: {
1238
- backgroundOpacity?: number | undefined;
1239
1238
  aspectRatio?: string | undefined;
1240
1239
  backgroundAttachment?: string | undefined;
1241
1240
  background?: string | undefined;
@@ -2528,7 +2527,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
2528
2527
  } | undefined;
2529
2528
  logoImageBase64Url?: string | undefined;
2530
2529
  backgroundStyle: {
2531
- backgroundOpacity?: number | undefined;
2532
2530
  aspectRatio?: string | undefined;
2533
2531
  backgroundAttachment?: string | undefined;
2534
2532
  background?: string | undefined;
@@ -4640,8 +4638,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4640
4638
  logoSliderMax(): number;
4641
4639
  backgroundColor(): string;
4642
4640
  isBackgroundColorEnabled(): boolean;
4643
- backgroundOpacity(): number;
4644
- showBackgroundOpacity(): boolean;
4645
4641
  copyrightPlaceholder(): string;
4646
4642
  copyrightText: {
4647
4643
  get(): string;
@@ -4693,7 +4689,6 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
4693
4689
  logoImageBase64Url?: string;
4694
4690
  }): void;
4695
4691
  onSelectColor(selectedColor: UpdateItemValuePayload<string>): void;
4696
- onBackgroundOpacityChange(value: number | string): void;
4697
4692
  onBackgroundEnable(enabled: UpdateItemValuePayload<boolean>): void;
4698
4693
  onLogoVisibleChanged(showLogo: boolean): void;
4699
4694
  onLogoVariationSelected(selectedLogoVariationIndex: number): void;
@@ -3,7 +3,6 @@ import { PAGE_SECTION_STYLE_OPTIONS } from '@brand-page-maker/models/page-sectio
3
3
  import { PAGE_SECTIONS } from '../../models';
4
4
  import { LOGO_SLIDER_DESKTOP_MAX, LOGO_SLIDER_DESKTOP_MIN, LOGO_SLIDER_MOBILE_MAX, LOGO_SLIDER_MOBILE_MIN, VIEWPORTS, getNavigationType, NAVIGATION_TYPE_DEFAULT_DISPLAY_TYPE, } from '@brand-page';
5
5
  import { UI_DEVICE_MODES, UI_EVENT_SOURCES } from '../../../models';
6
- import { isTransparentColour } from '@brand-page/utils/color.util';
7
6
  import { useUiPageSettingsStore } from '../../store';
8
7
  import { useUiNavigationStyleSettingsStore } from '../../../navigation-style-settings/store';
9
8
  import { useUiStyleSettingsStore } from '../../../style-settings/store';
@@ -142,15 +141,6 @@ export default defineComponent({
142
141
  return this.sections[this.sectionName][this.viewport]
143
142
  .backgroundColorEnabled;
144
143
  },
145
- backgroundOpacity() {
146
- // Real default: an un-constructed (JSON.parse'd) header never saw the constructor's default.
147
- return (this.sections[this.sectionName][this.viewport].backgroundStyle
148
- ?.backgroundOpacity ?? 100);
149
- },
150
- showBackgroundOpacity() {
151
- // isTransparentColour('') is false, so an unset color needs its own check.
152
- return (!!this.backgroundColor && !isTransparentColour(this.backgroundColor));
153
- },
154
144
  copyrightPlaceholder() {
155
145
  return commonTr(`copyrightTextPlaceholder`);
156
146
  },
@@ -404,21 +394,6 @@ export default defineComponent({
404
394
  viewport: this.viewport,
405
395
  });
406
396
  },
407
- onBackgroundOpacityChange(value) {
408
- // Clamped here: the Slider's text field can emit an out-of-range value mid-typing.
409
- const clamped = Math.min(100, Math.max(0, Number(value) || 0));
410
- // A variable, not an inline literal — backgroundOpacity isn't on BrandPageCssStyle.
411
- const backgroundStyle = {
412
- backgroundOpacity: clamped,
413
- };
414
- this.pageSettingsStore.setPageSettingsSectionValue({
415
- sectionName: this.sectionName,
416
- propName: 'backgroundStyle',
417
- value: backgroundStyle,
418
- merge: true,
419
- viewport: this.viewport,
420
- });
421
- },
422
397
  onBackgroundEnable(enabled) {
423
398
  this.pageSettingsStore.setPageSettingsSectionValue({
424
399
  sectionName: this.sectionName,
@@ -24,7 +24,6 @@ type MinifiedHeader = {
24
24
  logoAssetKey?: string;
25
25
  backgroundStyle?: {
26
26
  backgroundColor?: string;
27
- backgroundOpacity?: number;
28
27
  };
29
28
  navigation?: {
30
29
  displayType?: string;
@@ -389,18 +389,6 @@ const minifyFooter = (footer, logoAssetKey) => {
389
389
  : undefined,
390
390
  };
391
391
  };
392
- // Fully opaque (100) is the default, so it's omitted to keep the AI payload small.
393
- const minifyHeaderBackgroundStyle = (backgroundStyle) => {
394
- const backgroundColor = backgroundStyle?.backgroundColor;
395
- if (!backgroundColor)
396
- return undefined;
397
- const backgroundOpacity = backgroundStyle.backgroundOpacity;
398
- return {
399
- backgroundColor,
400
- ...(backgroundOpacity !== undefined &&
401
- backgroundOpacity < 100 && { backgroundOpacity }),
402
- };
403
- };
404
392
  const minifyHeader = (header, logoAssetKey) => {
405
393
  if (!header)
406
394
  return undefined;
@@ -411,7 +399,9 @@ const minifyHeader = (header, logoAssetKey) => {
411
399
  logoImageHeight: header.logoImageHeight || undefined,
412
400
  logoImageWidth: header.logoImageWidth || undefined,
413
401
  ...(logoAssetKey && { logoAssetKey }),
414
- backgroundStyle: minifyHeaderBackgroundStyle(header.backgroundStyle),
402
+ backgroundStyle: header.backgroundStyle?.backgroundColor
403
+ ? { backgroundColor: header.backgroundStyle.backgroundColor }
404
+ : undefined,
415
405
  navigation: nav
416
406
  ? {
417
407
  displayType: nav.displayType || undefined,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@designcrowd/library.brand-page",
3
3
  "description": "A collection of Maker/Designer applications",
4
- "version": "6.1.13-ast-opacity",
4
+ "version": "6.1.13",
5
5
  "author": "Design.com Eng",
6
6
  "license": "UNLICENSED",
7
7
  "type": "module",
@@ -90,10 +90,6 @@ export type BackgroundStyle = Partial<
90
90
  Omit<BrandPageCssStyle, 'backgroundColor'>
91
91
  >;
92
92
 
93
- export interface BackgroundColorStyle extends BrandPageCssStyle {
94
- backgroundOpacity?: number;
95
- }
96
-
97
93
  /**
98
94
  * The complete default for a page's background media overlay. Seeded into
99
95
  * metadata (constructor for new models, migration-20.5 for persisted partials) so
@@ -738,7 +734,7 @@ export abstract class AbstractPageHeaderStyles {
738
734
  logoImage: LogoImageModel;
739
735
  logoTemplateImage: LogoTemplateImageModel | undefined;
740
736
  logoImageBase64Url?: string;
741
- backgroundStyle: BackgroundColorStyle;
737
+ backgroundStyle: BrandPageCssStyle;
742
738
  style: BrandPageCssStyle;
743
739
  viewport: ViewportsType;
744
740
 
@@ -775,10 +771,7 @@ export abstract class AbstractPageHeaderStyles {
775
771
  this.logoVariation = options.logoVariation || 0;
776
772
 
777
773
  this.style = options.style || {};
778
- this.backgroundStyle = {
779
- ...(options.backgroundStyle || {}),
780
- backgroundOpacity: options.backgroundStyle?.backgroundOpacity ?? 100,
781
- };
774
+ this.backgroundStyle = options.backgroundStyle || {};
782
775
  }
783
776
  }
784
777
 
@@ -152,9 +152,7 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
152
152
  "viewport": "mobile",
153
153
  },
154
154
  "pageHeaderDesktop": PageHeaderDesktop {
155
- "backgroundStyle": {
156
- "backgroundOpacity": 100,
157
- },
155
+ "backgroundStyle": {},
158
156
  "displayStyle": "desktop-tab-vertical-stack-centered-logo-centered-menu",
159
157
  "isLogoOptional": false,
160
158
  "isLogoVisible": true,
@@ -227,9 +225,7 @@ exports[`migration.util > Banner Contents - text Align and Font Family should no
227
225
  "viewport": "desktop",
228
226
  },
229
227
  "pageHeaderMobile": PageHeaderMobile {
230
- "backgroundStyle": {
231
- "backgroundOpacity": 100,
232
- },
228
+ "backgroundStyle": {},
233
229
  "displayStyle": "mobile-tab-vertical-stack-centered-logo-centered-menu",
234
230
  "isLogoOptional": false,
235
231
  "isLogoVisible": true,
@@ -649,9 +645,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
649
645
  "viewport": "mobile",
650
646
  },
651
647
  "pageHeaderDesktop": PageHeaderDesktop {
652
- "backgroundStyle": {
653
- "backgroundOpacity": 100,
654
- },
648
+ "backgroundStyle": {},
655
649
  "displayStyle": "desktop-tab-vertical-stack-centered-logo-centered-menu",
656
650
  "isLogoOptional": false,
657
651
  "isLogoVisible": true,
@@ -724,9 +718,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
724
718
  "viewport": "desktop",
725
719
  },
726
720
  "pageHeaderMobile": PageHeaderMobile {
727
- "backgroundStyle": {
728
- "backgroundOpacity": 100,
729
- },
721
+ "backgroundStyle": {},
730
722
  "displayStyle": "mobile-tab-vertical-stack-centered-logo-centered-menu",
731
723
  "isLogoOptional": false,
732
724
  "isLogoVisible": true,
@@ -1130,9 +1122,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
1130
1122
  "viewport": "mobile",
1131
1123
  },
1132
1124
  "pageHeaderDesktop": PageHeaderDesktop {
1133
- "backgroundStyle": {
1134
- "backgroundOpacity": 100,
1135
- },
1125
+ "backgroundStyle": {},
1136
1126
  "displayStyle": "desktop-tab-vertical-stack-centered-logo-centered-menu",
1137
1127
  "isLogoOptional": false,
1138
1128
  "isLogoVisible": true,
@@ -1205,9 +1195,7 @@ exports[`migration.util > migrateBrandPageModel should return brand page model w
1205
1195
  "viewport": "desktop",
1206
1196
  },
1207
1197
  "pageHeaderMobile": PageHeaderMobile {
1208
- "backgroundStyle": {
1209
- "backgroundOpacity": 100,
1210
- },
1198
+ "backgroundStyle": {},
1211
1199
  "displayStyle": "mobile-tab-vertical-stack-centered-logo-centered-menu",
1212
1200
  "isLogoOptional": false,
1213
1201
  "isLogoVisible": true,
@@ -137,9 +137,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
137
137
  "viewport": "mobile",
138
138
  },
139
139
  "pageHeaderDesktop": PageHeaderDesktop {
140
- "backgroundStyle": {
141
- "backgroundOpacity": 100,
142
- },
140
+ "backgroundStyle": {},
143
141
  "displayStyle": "desktop-tab-vertical-stack-centered-logo-centered-menu",
144
142
  "isLogoOptional": false,
145
143
  "isLogoVisible": true,
@@ -213,9 +211,7 @@ exports[`migration02.ts > migration02 should return converted letterspacing 1`]
213
211
  "viewport": "desktop",
214
212
  },
215
213
  "pageHeaderMobile": PageHeaderMobile {
216
- "backgroundStyle": {
217
- "backgroundOpacity": 100,
218
- },
214
+ "backgroundStyle": {},
219
215
  "displayStyle": "mobile-tab-vertical-stack-centered-logo-centered-menu",
220
216
  "isLogoOptional": false,
221
217
  "isLogoVisible": true,
@@ -136,9 +136,7 @@ BrandPageModel {
136
136
  "viewport": "mobile",
137
137
  },
138
138
  "pageHeaderDesktop": PageHeaderDesktop {
139
- "backgroundStyle": {
140
- "backgroundOpacity": 100,
141
- },
139
+ "backgroundStyle": {},
142
140
  "displayStyle": "desktop-tab-vertical-stack-centered-logo-centered-menu",
143
141
  "isLogoOptional": false,
144
142
  "isLogoVisible": true,
@@ -212,9 +210,7 @@ BrandPageModel {
212
210
  "viewport": "desktop",
213
211
  },
214
212
  "pageHeaderMobile": PageHeaderMobile {
215
- "backgroundStyle": {
216
- "backgroundOpacity": 100,
217
- },
213
+ "backgroundStyle": {},
218
214
  "displayStyle": "mobile-tab-vertical-stack-centered-logo-centered-menu",
219
215
  "isLogoOptional": false,
220
216
  "isLogoVisible": true,
@@ -597,9 +593,7 @@ BrandPageModel {
597
593
  "viewport": "mobile",
598
594
  },
599
595
  "pageHeaderDesktop": PageHeaderDesktop {
600
- "backgroundStyle": {
601
- "backgroundOpacity": 100,
602
- },
596
+ "backgroundStyle": {},
603
597
  "displayStyle": "desktop-tab-vertical-stack-centered-logo-centered-menu",
604
598
  "isLogoOptional": false,
605
599
  "isLogoVisible": true,
@@ -673,9 +667,7 @@ BrandPageModel {
673
667
  "viewport": "desktop",
674
668
  },
675
669
  "pageHeaderMobile": PageHeaderMobile {
676
- "backgroundStyle": {
677
- "backgroundOpacity": 100,
678
- },
670
+ "backgroundStyle": {},
679
671
  "displayStyle": "mobile-tab-vertical-stack-centered-logo-centered-menu",
680
672
  "isLogoOptional": false,
681
673
  "isLogoVisible": true,
@@ -6,13 +6,12 @@ import {
6
6
  type ContactFormContent,
7
7
  type ColorItem,
8
8
  } from '../models';
9
- import { BRAND_PAGE_TYPES, PageHeaderDesktop, PageStyles } from '../models';
9
+ import { BRAND_PAGE_TYPES, PageStyles } from '../models';
10
10
  import {
11
11
  mapToBannerSectionViewModel,
12
12
  mapToContactFormViewModel,
13
13
  mapToImageViewModel,
14
14
  mapToMailingListViewModel,
15
- mapToPageHeaderViewModel,
16
15
  mapToProfileViewModel,
17
16
  mapToTextViewModel,
18
17
  mapToViewModel,
@@ -509,149 +508,6 @@ describe('view model util', () => {
509
508
  expect(url.searchParams.has('w')).toBe(true);
510
509
  expect(wParamValue).toBe('1080');
511
510
  });
512
-
513
- describe('mapToPageHeaderViewModel background opacity (BP-5851)', () => {
514
- const mapHeader = (header: PageHeaderDesktop) =>
515
- mapToPageHeaderViewModel(header, new PageStyles(), []);
516
-
517
- test('constructing without an explicit backgroundOpacity defaults it to 100 and renders unchanged', () => {
518
- const header = new PageHeaderDesktop({
519
- backgroundStyle: { backgroundColor: '#ff0000' },
520
- });
521
-
522
- expect(header.backgroundStyle.backgroundOpacity).toBe(100);
523
-
524
- const viewModel = mapHeader(header);
525
-
526
- expect(viewModel.backgroundStyle).toEqual({ backgroundColor: '#ff0000' });
527
- });
528
-
529
- test('header constructed with no options still gets a concrete backgroundOpacity', () => {
530
- expect(new PageHeaderDesktop().backgroundStyle.backgroundOpacity).toBe(
531
- 100,
532
- );
533
- });
534
-
535
- test('un-constructed legacy header (parsed metadata that never ran the constructor) renders fully opaque', () => {
536
- // The maker's live-preview path can hold the header JSON.parse'd verbatim.
537
- const header = JSON.parse(
538
- JSON.stringify(
539
- new PageHeaderDesktop({
540
- backgroundStyle: { backgroundColor: '#ff0000' },
541
- }),
542
- ),
543
- ) as PageHeaderDesktop;
544
-
545
- delete header.backgroundStyle.backgroundOpacity;
546
-
547
- const viewModel = mapHeader(header);
548
-
549
- expect(viewModel.backgroundStyle).toEqual({ backgroundColor: '#ff0000' });
550
- });
551
-
552
- test('a header with backgroundStyle itself absent renders fully opaque instead of throwing', () => {
553
- const header = new PageHeaderDesktop();
554
-
555
- delete (header as { backgroundStyle?: unknown }).backgroundStyle;
556
-
557
- expect(() => mapHeader(header)).not.toThrow();
558
- expect(mapHeader(header).backgroundStyle).toEqual({});
559
- });
560
-
561
- test('opacity 100 (default) leaves backgroundColor unchanged', () => {
562
- const header = new PageHeaderDesktop({
563
- backgroundStyle: { backgroundColor: '#ff0000', backgroundOpacity: 100 },
564
- });
565
-
566
- const viewModel = mapHeader(header);
567
-
568
- expect(viewModel.backgroundStyle.backgroundColor).toBe('#ff0000');
569
- });
570
-
571
- test('opacity 60 composites into the expected 8-digit hex backgroundColor', () => {
572
- const header = new PageHeaderDesktop({
573
- backgroundStyle: { backgroundColor: '#ff0000', backgroundOpacity: 60 },
574
- });
575
-
576
- const viewModel = mapHeader(header);
577
-
578
- expect(viewModel.backgroundStyle.backgroundColor).toBe('#ff000099');
579
- });
580
-
581
- test('opacity below 100 composites into an 8-digit hex backgroundColor', () => {
582
- const header = new PageHeaderDesktop({
583
- backgroundStyle: { backgroundColor: '#ff0000', backgroundOpacity: 50 },
584
- });
585
-
586
- const viewModel = mapHeader(header);
587
-
588
- expect(viewModel.backgroundStyle.backgroundColor).toBe('#ff000080');
589
- });
590
-
591
- test('opacity 0 composites to the transparent keyword', () => {
592
- const header = new PageHeaderDesktop({
593
- backgroundStyle: { backgroundColor: '#ff0000', backgroundOpacity: 0 },
594
- });
595
-
596
- const viewModel = mapHeader(header);
597
-
598
- expect(viewModel.backgroundStyle.backgroundColor).toBe('transparent');
599
- });
600
-
601
- test('a palette-matched (var(--palette-n)) backgroundColor is faded via color-mix, not handed back unfaded', () => {
602
- const header = new PageHeaderDesktop({
603
- backgroundStyle: {
604
- backgroundColor: 'var(--palette-1)',
605
- backgroundOpacity: 30,
606
- },
607
- });
608
-
609
- const viewModel = mapHeader(header);
610
-
611
- expect(viewModel.backgroundStyle.backgroundColor).toBe(
612
- 'color-mix(in srgb, var(--palette-1) 30%, transparent)',
613
- );
614
- });
615
-
616
- test('transparent backgroundColor is left unchanged regardless of opacity', () => {
617
- const header = new PageHeaderDesktop({
618
- backgroundStyle: {
619
- backgroundColor: 'transparent',
620
- backgroundOpacity: 40,
621
- },
622
- });
623
-
624
- const viewModel = mapHeader(header);
625
-
626
- expect(viewModel.backgroundStyle.backgroundColor).toBe('transparent');
627
- });
628
-
629
- test('unset backgroundColor is left unchanged regardless of opacity', () => {
630
- const header = new PageHeaderDesktop({
631
- backgroundStyle: { backgroundOpacity: 40 },
632
- });
633
-
634
- const viewModel = mapHeader(header);
635
-
636
- expect(viewModel.backgroundStyle.backgroundColor).toBeUndefined();
637
- });
638
-
639
- test.each([100, 30])(
640
- 'backgroundOpacity %i never leaks into the rendered style, and CSS opacity is never set (children must stay opaque)',
641
- (backgroundOpacity) => {
642
- const header = new PageHeaderDesktop({
643
- backgroundStyle: { backgroundColor: '#ff0000', backgroundOpacity },
644
- });
645
-
646
- const viewModel = mapHeader(header);
647
-
648
- expect(viewModel.backgroundStyle).not.toHaveProperty(
649
- 'backgroundOpacity',
650
- );
651
- expect(viewModel.backgroundStyle.opacity).toBeUndefined();
652
- },
653
- );
654
- });
655
511
  });
656
512
 
657
513
  // The reCAPTCHA footnote colour is a raw colour anchored to the surface it sits on.
@@ -88,10 +88,9 @@ import type {
88
88
  NavItemViewModel,
89
89
  } from '../view-models';
90
90
  import {
91
- backgroundColorFromStyle,
92
91
  isTransparentColour,
93
92
  mutedTextForBackground,
94
- withColorOpacity,
93
+ backgroundColorFromStyle,
95
94
  } from './color.util';
96
95
  import { resolveColorReference } from './color-palette.util';
97
96
  import {
@@ -1282,31 +1281,7 @@ export const mapToPageHeaderViewModel = (
1282
1281
  hamburgerMenuStyle,
1283
1282
  }),
1284
1283
  style: pageHeader.style,
1285
- backgroundStyle: getHeaderBackgroundStyleWithOpacity(pageHeader),
1286
- };
1287
- };
1288
-
1289
- // Folds backgroundOpacity into backgroundColor's alpha so only the container's paint fades, not its children.
1290
- const getHeaderBackgroundStyleWithOpacity = (
1291
- pageHeader: PageHeaderDesktop | PageHeaderMobile,
1292
- ): BrandPageCssStyle => {
1293
- // Real defaults: an un-constructed maker header, or metadata older than migration-11's backfill, can lack these entirely.
1294
- const { backgroundOpacity = 100, ...backgroundStyle } =
1295
- pageHeader.backgroundStyle ?? {};
1296
- const { backgroundColor } = backgroundStyle;
1297
-
1298
- if (
1299
- backgroundOpacity >= 100 ||
1300
- !backgroundColor ||
1301
- isTransparentColour(backgroundColor)
1302
- ) {
1303
- return backgroundStyle;
1304
- }
1305
-
1306
- // withColorOpacity, not setRgbAlpha: fades a var(--palette-n) reference too.
1307
- return {
1308
- ...backgroundStyle,
1309
- backgroundColor: withColorOpacity(backgroundColor, backgroundOpacity / 100),
1284
+ backgroundStyle: pageHeader.backgroundStyle,
1310
1285
  };
1311
1286
  };
1312
1287
 
@@ -259,11 +259,9 @@ export interface PageHeaderViewModel extends Omit<
259
259
  | 'logoTemplateImage'
260
260
  | 'logoImageHeight'
261
261
  | 'logoImageWidth'
262
- | 'backgroundStyle'
263
262
  > {
264
263
  logo: LogoViewModel;
265
264
  pages: PageViewModel[];
266
- backgroundStyle: BrandPageCssStyle;
267
265
  }
268
266
 
269
267
  export interface PageFooterViewModel extends Omit<
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Kopfzeilen-Einstellungen",
1842
1842
  "navigationSectionTitle": "Navigation",
1843
1843
  "headerSectionTitle": "Header",
1844
- "backgroundOpacity": "Hintergrunddeckkraft",
1845
1844
  "buttonSectionTitle": "Schaltfläche",
1846
1845
  "footerSettings": "Fußzeilen-Einstellungen",
1847
1846
  "managePages": "Seiten verwalten",
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Configuración del encabezado",
1842
1842
  "navigationSectionTitle": "Navegación",
1843
1843
  "headerSectionTitle": "Encabezado",
1844
- "backgroundOpacity": "Opacidad del fondo",
1845
1844
  "buttonSectionTitle": "Botón",
1846
1845
  "footerSettings": "Configuración del pie de página",
1847
1846
  "managePages": "Gestionar páginas",
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Paramètres d'en-tête",
1842
1842
  "navigationSectionTitle": "Navigation",
1843
1843
  "headerSectionTitle": "En-tête",
1844
- "backgroundOpacity": "Opacité de l'arrière-plan",
1845
1844
  "buttonSectionTitle": "Bouton",
1846
1845
  "footerSettings": "Paramètres de pied de page",
1847
1846
  "managePages": "Gérer les pages",
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Paramètres d'en-tête",
1842
1842
  "navigationSectionTitle": "Navigation",
1843
1843
  "headerSectionTitle": "En-tête",
1844
- "backgroundOpacity": "Opacité de l'arrière-plan",
1845
1844
  "buttonSectionTitle": "Bouton",
1846
1845
  "footerSettings": "Paramètres de pied de page",
1847
1846
  "managePages": "Gérer les pages",
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Header Settings",
1842
1842
  "navigationSectionTitle": "Navigation",
1843
1843
  "headerSectionTitle": "Header",
1844
- "backgroundOpacity": "Background opacity",
1845
1844
  "buttonSectionTitle": "Button",
1846
1845
  "footerSettings": "Footer Settings",
1847
1846
  "managePages": "Manage Pages",
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Configurações do cabeçalho",
1842
1842
  "navigationSectionTitle": "Navegação",
1843
1843
  "headerSectionTitle": "Cabeçalho",
1844
- "backgroundOpacity": "Opacidade do plano de fundo",
1845
1844
  "buttonSectionTitle": "Botão",
1846
1845
  "footerSettings": "Definições de rodapé",
1847
1846
  "managePages": "Gerenciar páginas",
@@ -1841,7 +1841,6 @@
1841
1841
  "headerSettings": "Definições de cabeçalho",
1842
1842
  "navigationSectionTitle": "Navegação",
1843
1843
  "headerSectionTitle": "Cabeçalho",
1844
- "backgroundOpacity": "Opacidade do fundo",
1845
1844
  "buttonSectionTitle": "Botão",
1846
1845
  "footerSettings": "Definições de rodapé",
1847
1846
  "managePages": "Gerir páginas",
@@ -95,22 +95,6 @@
95
95
  :toggle-unique-id="sectionName"
96
96
  @update:model-value="onSelectColor"
97
97
  />
98
- <div
99
- v-if="showBackgroundOpacity"
100
- data-test-header-background-opacity
101
- class="tw-mt-4"
102
- >
103
- <span class="header-settings-panel_option-title">
104
- {{ pageSettingsTr('backgroundOpacity') }}
105
- </span>
106
- <Slider
107
- :model-value="backgroundOpacity"
108
- :min="0"
109
- :max="100"
110
- suffix="%"
111
- @update:model-value="onBackgroundOpacityChange"
112
- />
113
- </div>
114
98
  </CollapsiblePanel>
115
99
 
116
100
  <CollapsiblePanel
@@ -160,7 +144,6 @@
160
144
  import {
161
145
  CollapsiblePanel,
162
146
  HelloBar,
163
- Slider,
164
147
  TabMenu,
165
148
  Toggle,
166
149
  } from '@designcrowd/fe-shared-lib';
@@ -180,7 +163,6 @@ export default {
180
163
  CollapsiblePanel,
181
164
  ColorField,
182
165
  HelloBar,
183
- Slider,
184
166
  TabMenu,
185
167
  Toggle,
186
168
  HeaderDisplayStyle,
@@ -3,7 +3,6 @@
3
3
  "headerSettings": "Kopfzeilen-Einstellungen",
4
4
  "navigationSectionTitle": "Navigation",
5
5
  "headerSectionTitle": "Header",
6
- "backgroundOpacity": "Hintergrunddeckkraft",
7
6
  "buttonSectionTitle": "Schaltfläche",
8
7
  "footerSettings": "Fußzeilen-Einstellungen",
9
8
  "managePages": "Seiten verwalten",
@@ -3,7 +3,6 @@
3
3
  "headerSettings": "Configuración del encabezado",
4
4
  "navigationSectionTitle": "Navegación",
5
5
  "headerSectionTitle": "Encabezado",
6
- "backgroundOpacity": "Opacidad del fondo",
7
6
  "buttonSectionTitle": "Botón",
8
7
  "footerSettings": "Configuración del pie de página",
9
8
  "managePages": "Gestionar páginas",
@@ -3,7 +3,6 @@
3
3
  "headerSettings": "Paramètres d'en-tête",
4
4
  "navigationSectionTitle": "Navigation",
5
5
  "headerSectionTitle": "En-tête",
6
- "backgroundOpacity": "Opacité de l'arrière-plan",
7
6
  "buttonSectionTitle": "Bouton",
8
7
  "footerSettings": "Paramètres de pied de page",
9
8
  "managePages": "Gérer les pages",