@skyux/theme 12.0.0-alpha.9 → 12.0.0-beta.0

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Optional, Input, Directive, NgModule, inject, ChangeDetectorRef, HostBinding, DestroyRef, makeEnvironmentProviders, provideAppInitializer, RendererFactory2 } from '@angular/core';
2
+ import { Injectable, Optional, Input, Directive, NgModule, inject, ChangeDetectorRef, HostBinding, NgZone, DestroyRef, makeEnvironmentProviders, provideAppInitializer, RendererFactory2 } from '@angular/core';
3
3
  import { getIconManifest } from '@skyux/icons';
4
4
  import FontFaceObserver from 'fontfaceobserver';
5
5
  import { take, takeUntil } from 'rxjs/operators';
@@ -28,6 +28,52 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
28
28
  }]
29
29
  }] });
30
30
 
31
+ /**
32
+ * Defines properties of a SKY UX theme mode.
33
+ */
34
+ class SkyThemeMode {
35
+ /**
36
+ * The preset themes available in SKY UX.
37
+ */
38
+ static { this.presets = {
39
+ light: new SkyThemeMode('light', 'sky-theme-mode-light'),
40
+ dark: new SkyThemeMode('dark', 'sky-theme-mode-dark'),
41
+ }; }
42
+ /**
43
+ * Creates a new theme mode.
44
+ * @param name The name of the theme mode.
45
+ * @param hostClass The class on the host element which child components should reference when
46
+ * adjusting for a specified theme mode.
47
+ */
48
+ constructor(name, hostClass) {
49
+ this.name = name;
50
+ this.hostClass = hostClass;
51
+ }
52
+ }
53
+
54
+ /**
55
+ * Defines properties of SKY UX theme spacing.
56
+ */
57
+ class SkyThemeSpacing {
58
+ /**
59
+ * The preset spacing available in SKY UX.
60
+ */
61
+ static { this.presets = {
62
+ standard: new SkyThemeSpacing('standard', 'sky-theme-spacing-standard'),
63
+ compact: new SkyThemeSpacing('compact', 'sky-theme-spacing-compact'),
64
+ }; }
65
+ /**
66
+ * Creates a new theme spacing.
67
+ * @param name The name of the theme spacing.
68
+ * @param hostClass The class on the host element which child components should reference when
69
+ * adjusting for a specified theme spacing.
70
+ */
71
+ constructor(name, hostClass) {
72
+ this.name = name;
73
+ this.hostClass = hostClass;
74
+ }
75
+ }
76
+
31
77
  /**
32
78
  * Provides methods for updating and handling changes to the current theme.
33
79
  */
@@ -39,6 +85,7 @@ class SkyThemeService {
39
85
  return this.#_settingsObs;
40
86
  }
41
87
  #current;
88
+ #brandLinkElement;
42
89
  #hostEl;
43
90
  #renderer;
44
91
  #settings;
@@ -76,6 +123,7 @@ class SkyThemeService {
76
123
  this.#applyThemeClass(previous, settings, 'theme');
77
124
  this.#applyThemeClass(previous, settings, 'mode', 'supportedModes');
78
125
  this.#applyThemeClass(previous, settings, 'spacing', 'supportedSpacing');
126
+ this.#applyThemeClass(previous, settings, 'brand');
79
127
  this.#settings.next({
80
128
  currentSettings: settings,
81
129
  previousSettings: previous,
@@ -84,24 +132,77 @@ class SkyThemeService {
84
132
  }
85
133
  #applyThemeClass(previous, current, prop, supportedProp) {
86
134
  const currentSetting = current[prop];
87
- const previousClass = previous?.[prop].hostClass;
88
- const currentClass = currentSetting.hostClass;
89
- const classChanged = !previous || previousClass !== currentClass;
90
- if (classChanged) {
91
- if (previousClass) {
92
- this.#removeHostClass(previousClass);
135
+ const previousClass = previous?.[prop]?.hostClass;
136
+ const currentClass = currentSetting?.hostClass;
137
+ if (!previousClass || previousClass !== currentClass) {
138
+ this.#updateHostClass(prop, previousClass, currentClass, currentSetting, current, supportedProp);
139
+ if (prop === 'brand') {
140
+ this.#updateBrandStylesheet(current.brand, previous?.brand);
141
+ }
142
+ }
143
+ }
144
+ #updateBrandStylesheet(currentBrand, previousBrand) {
145
+ if (currentBrand &&
146
+ currentBrand.name !== 'blackbaud' &&
147
+ previousBrand !== currentBrand) {
148
+ this.#addBrandStylesheet(currentBrand);
149
+ }
150
+ else {
151
+ this.#removeBrandStylesheet();
152
+ }
153
+ }
154
+ #updateHostClass(prop, previousClass, currentClass, currentSetting, current, supportedProp) {
155
+ if (previousClass) {
156
+ this.#removeHostClass(previousClass);
157
+ }
158
+ if (prop === 'brand') {
159
+ if (currentClass && !previousClass) {
160
+ this.#addHostClass('sky-theme-brand-base');
93
161
  }
94
- if (!supportedProp ||
95
- current.theme[supportedProp].indexOf(currentSetting) >= 0) {
96
- this.#addHostClass(currentClass);
162
+ else if (!currentClass && previousClass) {
163
+ this.#removeHostClass('sky-theme-brand-base');
97
164
  }
98
165
  }
166
+ if (currentClass &&
167
+ this.#isSupportedProperty(currentSetting, current, supportedProp)) {
168
+ this.#addHostClass(currentClass);
169
+ }
170
+ }
171
+ #addBrandStylesheet(brand) {
172
+ if (brand.name !== 'blackbaud') {
173
+ const cssPath = `https://sky.blackbaudcdn.net/static/skyux-brand-${brand.name}/${brand.version}/assets/scss/${brand.name}.css`;
174
+ // Create a link element via Angular's renderer to avoid SSR troubles
175
+ this.#brandLinkElement = this.#getRenderer().createElement('link');
176
+ // Add the style to the head section
177
+ this.#getRenderer().appendChild(this.#hostEl, this.#brandLinkElement);
178
+ // Set type of the link item and path to the css file
179
+ this.#getRenderer().setProperty(this.#brandLinkElement, 'rel', 'stylesheet');
180
+ this.#getRenderer().setProperty(this.#brandLinkElement, 'href', cssPath);
181
+ }
182
+ }
183
+ #removeBrandStylesheet() {
184
+ if (this.#brandLinkElement) {
185
+ this.#getRenderer().removeChild(this.#hostEl, this.#brandLinkElement);
186
+ this.#brandLinkElement = undefined;
187
+ }
99
188
  }
100
189
  #addHostClass(className) {
101
- this.#renderer.addClass(this.#hostEl, className);
190
+ this.#getRenderer().addClass(this.#hostEl, className);
102
191
  }
103
192
  #removeHostClass(className) {
104
- this.#renderer.removeClass(this.#hostEl, className);
193
+ this.#getRenderer().removeClass(this.#hostEl, className);
194
+ }
195
+ #getRenderer() {
196
+ if (!this.#renderer) {
197
+ throw new Error('Renderer is not initialized. Have you called the theme service `init` method?');
198
+ }
199
+ return this.#renderer;
200
+ }
201
+ #isSupportedProperty(currentSetting, current, supportedProp) {
202
+ return (!supportedProp ||
203
+ ((currentSetting instanceof SkyThemeMode ||
204
+ currentSetting instanceof SkyThemeSpacing) &&
205
+ current.theme[supportedProp].includes(currentSetting)));
105
206
  }
106
207
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SkyThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
107
208
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SkyThemeService }); }
@@ -347,52 +448,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
347
448
  type: Input
348
449
  }] } });
349
450
 
350
- /**
351
- * Defines properties of a SKY UX theme mode.
352
- */
353
- class SkyThemeMode {
354
- /**
355
- * The preset themes available in SKY UX.
356
- */
357
- static { this.presets = {
358
- light: new SkyThemeMode('light', 'sky-theme-mode-light'),
359
- dark: new SkyThemeMode('dark', 'sky-theme-mode-dark'),
360
- }; }
361
- /**
362
- * Creates a new theme mode.
363
- * @param name The name of the theme mode.
364
- * @param hostClass The class on the host element which child components should reference when
365
- * adjusting for a specified theme mode.
366
- */
367
- constructor(name, hostClass) {
368
- this.name = name;
369
- this.hostClass = hostClass;
370
- }
371
- }
372
-
373
- /**
374
- * Defines properties of SKY UX theme spacing.
375
- */
376
- class SkyThemeSpacing {
377
- /**
378
- * The preset spacing available in SKY UX.
379
- */
380
- static { this.presets = {
381
- standard: new SkyThemeSpacing('standard', 'sky-theme-spacing-standard'),
382
- compact: new SkyThemeSpacing('compact', 'sky-theme-spacing-compact'),
383
- }; }
384
- /**
385
- * Creates a new theme spacing.
386
- * @param name The name of the theme spacing.
387
- * @param hostClass The class on the host element which child components should reference when
388
- * adjusting for a specified theme spacing.
389
- */
390
- constructor(name, hostClass) {
391
- this.name = name;
392
- this.hostClass = hostClass;
393
- }
394
- }
395
-
396
451
  /**
397
452
  * Defines properties of a SKY UX theme.
398
453
  */
@@ -429,10 +484,11 @@ class SkyThemeSettings {
429
484
  * @param theme The theme configuration.
430
485
  * @param mode The theme mode.
431
486
  */
432
- constructor(theme, mode, spacing = SkyThemeSpacing.presets.standard) {
487
+ constructor(theme, mode, spacing = SkyThemeSpacing.presets.standard, brand) {
433
488
  this.theme = theme;
434
489
  this.mode = mode;
435
490
  this.spacing = spacing;
491
+ this.brand = brand;
436
492
  }
437
493
  }
438
494
 
@@ -499,6 +555,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.1", ngImpor
499
555
  }]
500
556
  }] });
501
557
 
558
+ /**
559
+ * @internal
560
+ * Defines properties of SKY UX theme branding.
561
+ */
562
+ class SkyThemeBrand {
563
+ get hostClass() {
564
+ return this.#hostClass || `sky-theme-brand-${this.name}`;
565
+ }
566
+ set hostClass(value) {
567
+ this.#hostClass = value;
568
+ }
569
+ #hostClass;
570
+ /**
571
+ * Creates a new theme brand.
572
+ * @param name The name of the theme brand.
573
+ * @param hostClass The class on the host element which child components should reference when
574
+ * adjusting for a specified theme brand. This defaults to `sky-theme-brand-<name>
575
+ */
576
+ constructor(name, version, hostClass) {
577
+ this.name = name;
578
+ this.version = version;
579
+ this.hostClass = hostClass;
580
+ if (!/\d+\.\d+\.\d+(?:-(?:alpha|beta|rc)\.\d)*$/.test(version)) {
581
+ throw new Error(`Invalid version format "${version}" for theme brand "${name}".`);
582
+ }
583
+ }
584
+ }
585
+
502
586
  class SkyThemeComponentClassDirective {
503
587
  #changeDetector;
504
588
  #themeService;
@@ -537,7 +621,10 @@ class SkyAppViewportService {
537
621
  #reserveItems;
538
622
  #conditionallyReserveItems;
539
623
  #document;
624
+ #ngZone;
625
+ // Observe elements crossing the browser's viewport boundaries.
540
626
  #intersectionObserver;
627
+ #reservedSpaces;
541
628
  constructor() {
542
629
  /**
543
630
  * Updated when the viewport becomes visible. While the page is rendered, the
@@ -552,18 +639,15 @@ class SkyAppViewportService {
552
639
  this.#reserveItems = new Map();
553
640
  this.#conditionallyReserveItems = new Map();
554
641
  this.#document = inject(DOCUMENT);
555
- this.#intersectionObserver = new IntersectionObserver((entries) => {
556
- entries.forEach((entry) => {
557
- const item = this.#conditionallyReserveItems.get(entry.target);
558
- if (item) {
559
- item.active = entry.isIntersecting;
560
- }
561
- });
562
- this.#updateViewportArea();
563
- }, {
564
- root: this.#document,
565
- threshold: Array.from({ length: 11 }, (_, i) => i / 10),
566
- });
642
+ this.#ngZone = inject(NgZone);
643
+ // Observe elements crossing the browser's viewport boundaries.
644
+ this.#intersectionObserver = this.#ngZone.runOutsideAngular(() => new IntersectionObserver(() => this.#ngZone.run(() => this.#updateViewportArea()), { threshold: Array.from({ length: 101 }, (_, i) => i / 100) }));
645
+ this.#reservedSpaces = {
646
+ bottom: 0,
647
+ left: 0,
648
+ right: 0,
649
+ top: 0,
650
+ };
567
651
  const onScroll = () => {
568
652
  if (this.#conditionallyReserveItems.size > 0) {
569
653
  this.#updateViewportArea();
@@ -571,6 +655,10 @@ class SkyAppViewportService {
571
655
  };
572
656
  this.#document.addEventListener('scroll', onScroll);
573
657
  inject(DestroyRef).onDestroy(() => {
658
+ /* istanbul ignore next */
659
+ if (this.#updateRequest !== undefined) {
660
+ cancelAnimationFrame(this.#updateRequest);
661
+ }
574
662
  this.#intersectionObserver.disconnect();
575
663
  this.#document.removeEventListener('scroll', onScroll);
576
664
  });
@@ -582,8 +670,7 @@ class SkyAppViewportService {
582
670
  reserveSpace(args) {
583
671
  const item = {
584
672
  ...args,
585
- active: !args.reserveForElement ||
586
- this.#isElementVisible(args.reserveForElement),
673
+ active: this.#isElementVisible({ ...args, active: false }),
587
674
  };
588
675
  this.#reserveItems.set(args.id, item);
589
676
  this.#watchVisibility(item);
@@ -604,23 +691,24 @@ class SkyAppViewportService {
604
691
  }
605
692
  #updateViewportArea() {
606
693
  this.#updateRequest ??= requestAnimationFrame(() => {
694
+ this.#updateRequest = undefined;
607
695
  const reservedSpaces = {
608
696
  bottom: 0,
609
697
  left: 0,
610
698
  right: 0,
611
699
  top: 0,
612
700
  };
613
- for (const { position, size, active, reserveForElement, } of this.#reserveItems.values()) {
614
- if (active &&
615
- (!reserveForElement || this.#isElementVisible(reserveForElement))) {
616
- reservedSpaces[position] += size;
701
+ for (const args of this.#reserveItems.values()) {
702
+ args.active = this.#isElementVisible(args, reservedSpaces);
703
+ if (args.active) {
704
+ reservedSpaces[args.position] += args.size;
617
705
  }
618
706
  }
707
+ this.#reservedSpaces = reservedSpaces;
619
708
  const documentElementStyle = this.#document.documentElement.style;
620
709
  for (const [position, size] of Object.entries(reservedSpaces)) {
621
710
  documentElementStyle.setProperty(`--sky-viewport-${position}`, size + 'px');
622
711
  }
623
- this.#updateRequest = undefined;
624
712
  });
625
713
  }
626
714
  #watchVisibility(item) {
@@ -629,17 +717,45 @@ class SkyAppViewportService {
629
717
  this.#intersectionObserver.observe(item.reserveForElement);
630
718
  }
631
719
  }
632
- #isElementVisible(element) {
633
- const rect = element.getBoundingClientRect();
634
- return (
720
+ #isElementVisible(args, reservedSpaces = this
721
+ .#reservedSpaces) {
722
+ if (!args.reserveForElement) {
723
+ return true;
724
+ }
725
+ const rect = args.reserveForElement.getBoundingClientRect();
726
+ if (!rect || !rect.height || !rect.width) {
727
+ return false;
728
+ }
729
+ const midpoint = {
730
+ x: rect.x + Math.floor(rect.width / 2),
731
+ y: rect.y + Math.floor(rect.height / 2),
732
+ };
733
+ if (
635
734
  // Vertically in view
636
- rect.y <= window.innerHeight &&
637
- rect.y >= 0 &&
735
+ midpoint.y <= window.innerHeight &&
736
+ midpoint.y >= 0 &&
638
737
  // Horizontally in view
639
- rect.x <= window.innerWidth &&
640
- rect.x >= 0 &&
738
+ midpoint.x <= window.innerWidth &&
739
+ midpoint.x >= 0) {
641
740
  // Element is not hidden by another element
642
- element.contains(this.#document.elementFromPoint(rect.x + 1, rect.y + 1)));
741
+ if (args.reserveForElement.contains(this.#document.elementFromPoint(midpoint.x, midpoint.y))) {
742
+ return true;
743
+ }
744
+ // Check if the item's midpoint is visible based on current reserved spaces.
745
+ // Assumes reserved spaces are intended to be additive and not overlapping.
746
+ const threshold = reservedSpaces[args.position];
747
+ switch (args.position) {
748
+ case 'top':
749
+ return midpoint.y >= threshold;
750
+ case 'right':
751
+ return midpoint.x <= window.innerWidth - threshold;
752
+ case 'bottom':
753
+ return midpoint.y <= window.innerHeight - threshold;
754
+ case 'left':
755
+ return midpoint.x >= threshold;
756
+ }
757
+ }
758
+ return false;
643
759
  }
644
760
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SkyAppViewportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
645
761
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.1", ngImport: i0, type: SkyAppViewportService, providedIn: 'root' }); }
@@ -669,5 +785,5 @@ function provideInitialTheme(name = 'default', options) {
669
785
  * Generated bundle index. Do not edit.
670
786
  */
671
787
 
672
- export { SkyAppStyleLoader, SkyAppViewportService, SkyTheme, SkyThemeComponentClassDirective, SkyThemeIconManifestService, SkyThemeMode, SkyThemeModule, SkyThemeService, SkyThemeSettings, SkyThemeSpacing, provideInitialTheme, SkyThemeDirective as λ1, SkyThemeClassDirective as λ2, SkyThemeIfDirective as λ3 };
788
+ export { SkyAppStyleLoader, SkyAppViewportService, SkyTheme, SkyThemeBrand, SkyThemeComponentClassDirective, SkyThemeIconManifestService, SkyThemeMode, SkyThemeModule, SkyThemeService, SkyThemeSettings, SkyThemeSpacing, provideInitialTheme, SkyThemeDirective as λ1, SkyThemeClassDirective as λ2, SkyThemeIfDirective as λ3 };
673
789
  //# sourceMappingURL=skyux-theme.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-theme.mjs","sources":["../../../../../libs/components/theme/src/lib/icons/icon-manifest.service.ts","../../../../../libs/components/theme/src/lib/theming/theme.service.ts","../../../../../libs/components/theme/src/lib/style-loader.ts","../../../../../libs/components/theme/src/lib/theming/theme-class.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme-if.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme-mode.ts","../../../../../libs/components/theme/src/lib/theming/theme-spacing.ts","../../../../../libs/components/theme/src/lib/theming/theme.ts","../../../../../libs/components/theme/src/lib/theming/theme-settings.ts","../../../../../libs/components/theme/src/lib/theming/theme.directive.ts","../../../../../libs/components/theme/src/lib/theme.module.ts","../../../../../libs/components/theme/src/lib/theming/theme-component-class.directive.ts","../../../../../libs/components/theme/src/lib/viewport/viewport.service.ts","../../../../../libs/components/theme/src/lib/providers/provide-initial-theme.ts","../../../../../libs/components/theme/src/skyux-theme.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { getIconManifest } from '@skyux/icons';\n\nimport { SkyThemeIconManifest } from './icon-manifest';\n\n/**\n * Provides a method for retrieving metadata about the SKY UX icon font.\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyThemeIconManifestService {\n /**\n * Gets metadata about the SKY UX icon font.\n */\n public getManifest(): SkyThemeIconManifest {\n return getIconManifest();\n }\n}\n","import { Injectable, Renderer2 } from '@angular/core';\n\nimport { Observable, ReplaySubject } from 'rxjs';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeSettingsChange } from './theme-settings-change';\n\n/**\n * Provides methods for updating and handling changes to the current theme.\n */\n@Injectable()\nexport class SkyThemeService {\n /**\n * Notifies consumers when the current theme settings have changed.\n */\n public get settingsChange(): Observable<SkyThemeSettingsChange> {\n return this.#_settingsObs;\n }\n\n #current: SkyThemeSettings | undefined;\n\n #hostEl: any | undefined;\n\n #renderer: Renderer2 | undefined;\n\n #settings: ReplaySubject<SkyThemeSettingsChange>;\n\n #_settingsObs: Observable<SkyThemeSettingsChange>;\n\n constructor() {\n this.#settings = new ReplaySubject<SkyThemeSettingsChange>(1);\n this.#_settingsObs = this.#settings.asObservable();\n }\n\n /**\n * Initializes the theme service with the specified parameters. This should only be called\n * from a host component that provides its own theme to child components.\n * @param hostEl The host element under which themed components are rendered.\n * @param renderer A Renderer2 instance for updating the host element with theme changes.\n * @param theme The initial theme.\n */\n public init(hostEl: any, renderer: Renderer2, theme: SkyThemeSettings): void {\n this.#hostEl = hostEl;\n this.#renderer = renderer;\n\n this.setTheme(theme);\n }\n\n /**\n * Destroys the current theme service. This should only be called from a host component that\n * provides its own theme to child components.\n */\n public destroy(): void {\n this.#settings.complete();\n\n this.#hostEl = this.#renderer = undefined;\n }\n\n /**\n * Updates the current theme settings.\n * @param settings The new theme settings to apply.\n */\n public setTheme(settings: SkyThemeSettings): void {\n const previous = this.#current;\n\n this.#applyThemeClass(previous, settings, 'theme');\n this.#applyThemeClass(previous, settings, 'mode', 'supportedModes');\n this.#applyThemeClass(previous, settings, 'spacing', 'supportedSpacing');\n\n this.#settings.next({\n currentSettings: settings,\n previousSettings: previous,\n });\n\n this.#current = settings;\n }\n\n #applyThemeClass(\n previous: SkyThemeSettings | undefined,\n current: SkyThemeSettings,\n prop: 'theme' | 'mode' | 'spacing',\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n const currentSetting = current[prop];\n\n const previousClass = previous?.[prop].hostClass;\n const currentClass = currentSetting.hostClass;\n\n const classChanged = !previous || previousClass !== currentClass;\n\n if (classChanged) {\n if (previousClass) {\n this.#removeHostClass(previousClass);\n }\n\n if (\n !supportedProp ||\n current.theme[supportedProp].indexOf(currentSetting) >= 0\n ) {\n this.#addHostClass(currentClass);\n }\n }\n }\n\n #addHostClass(className: string): void {\n this.#renderer!.addClass(this.#hostEl, className);\n }\n\n #removeHostClass(className: string): void {\n this.#renderer!.removeClass(this.#hostEl, className);\n }\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport FontFaceObserver from 'fontfaceobserver';\nimport { take } from 'rxjs/operators';\n\nimport { SkyThemeService } from './theming/theme.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppStyleLoader {\n public static readonly LOAD_TIMEOUT = 3000;\n public isLoaded = false;\n\n #themeSvc: SkyThemeService | undefined;\n\n constructor(@Optional() themeSvc?: SkyThemeService) {\n this.#themeSvc = themeSvc;\n }\n\n public loadStyles(): Promise<any> {\n if (this.isLoaded) {\n return Promise.resolve();\n }\n\n let themePromise: Promise<any>;\n\n if (this.#themeSvc) {\n themePromise = this.#themeSvc.settingsChange.pipe(take(1)).toPromise();\n } else {\n themePromise = Promise.resolve();\n }\n\n const fontAwesome = new FontFaceObserver('FontAwesome');\n const skyuxIcons = new FontFaceObserver('skyux-icons');\n const blackbaudSans = new FontFaceObserver('BLKB Sans');\n\n return Promise.all([\n // Specify a character for FontAwesome since some browsers will fail to detect\n // when the font is loaded unless a known character with a different width\n // than the default is not specified.\n fontAwesome.load('\\uf0fc', SkyAppStyleLoader.LOAD_TIMEOUT),\n skyuxIcons.load('\\ue999', SkyAppStyleLoader.LOAD_TIMEOUT),\n blackbaudSans.load(undefined, SkyAppStyleLoader.LOAD_TIMEOUT),\n themePromise,\n ])\n .then(() => {\n this.isLoaded = true;\n })\n .catch((error) => {\n // Errors loading the font should not stop the page from rendering.\n // Passing the error along in case the client wants to do something with it.\n return Promise.resolve({\n error,\n });\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\ntype SkyThemeClassMap = Record<string, string>;\n\n/**\n * Component to add classes conditionally based on the current theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeClass]',\n standalone: false,\n})\nexport class SkyThemeClassDirective implements OnDestroy {\n /**\n * The HTML class attribute.\n *\n * @param value\n */\n @Input()\n public set class(value: string | undefined) {\n this.#removeInitialClasses(this.#initialClasses);\n this.#initialClasses = typeof value === 'string' ? value.split(/\\s+/) : [];\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n /**\n * An object with class names in a string for keys, and theme names (e.g. 'default' or 'modern') as values.\n *\n * @param value\n */\n @Input()\n public set skyThemeClass(value: SkyThemeClassMap | undefined) {\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n\n this.#skyThemeClassMap = value as SkyThemeClassMap;\n\n /* istanbul ignore else */\n if (this.#skyThemeClassMap) {\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n }\n\n set #themeSettings(settings: SkyThemeSettings) {\n this.#currentTheme = settings;\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #initialClasses: string[] = [];\n #skyThemeClassMap: SkyThemeClassMap | undefined;\n\n #ngEl: ElementRef;\n #renderer: Renderer2;\n\n constructor(\n ngEl: ElementRef,\n renderer: Renderer2,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#ngEl = ngEl;\n this.#renderer = renderer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#themeSettings = settingsChange.currentSettings;\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #applyInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, true));\n }\n }\n\n #applySkyThemeClassMap(skyThemeClassMap: SkyThemeClassMap | undefined): void {\n if (skyThemeClassMap) {\n const themeName = this.#currentTheme?.theme.name || 'default';\n Object.keys(skyThemeClassMap).forEach((className) => {\n const enabled = themeName === skyThemeClassMap[className];\n this.#toggleClass(className, enabled);\n });\n }\n }\n\n #removeInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, false));\n }\n }\n\n #removeSkyThemeClassMap(\n skyThemeClassMap: SkyThemeClassMap | undefined,\n ): void {\n if (skyThemeClassMap) {\n Object.keys(skyThemeClassMap).forEach((className) =>\n this.#toggleClass(className, false),\n );\n }\n }\n\n #toggleClass(className: string, enabled: boolean): void {\n className = className.trim();\n /* istanbul ignore else */\n if (className) {\n className.split(/\\s+/g).forEach((classNameItem) => {\n if (enabled) {\n this.#renderer.addClass(this.#ngEl.nativeElement, classNameItem);\n } else {\n this.#renderer.removeClass(this.#ngEl.nativeElement, classNameItem);\n }\n });\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Input,\n OnDestroy,\n Optional,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\n/**\n * Component that works like `ngIf` to show markup for matching theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeIf]',\n standalone: false,\n})\nexport class SkyThemeIfDirective implements OnDestroy {\n /**\n * A string that should match the name of a theme, `'default'` or `'modern'`.\n *\n * @param value\n */\n @Input()\n public set skyThemeIf(value: 'default' | 'modern' | undefined) {\n this.#context = value;\n this.#updateView();\n }\n\n #context: string | undefined;\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #hasView = false;\n\n #templateRef: TemplateRef<unknown>;\n #viewContainer: ViewContainerRef;\n\n constructor(\n templateRef: TemplateRef<unknown>,\n viewContainer: ViewContainerRef,\n changeDetector: ChangeDetectorRef,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#templateRef = templateRef;\n this.#viewContainer = viewContainer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#currentTheme = settingsChange.currentSettings;\n this.#updateView();\n\n // Components that use OnPush change detection will not automatically\n // check for changes when created as a result of a theme change if\n // it happens outside of an Angular change detection cycle. This\n // ensures change detection runs on those components.\n changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #updateView(): void {\n const themeName = this.#currentTheme?.theme.name || 'default';\n const condition = this.#context && themeName === this.#context;\n if (condition && !this.#hasView) {\n this.#viewContainer.createEmbeddedView(this.#templateRef);\n this.#hasView = true;\n } else if (!condition && this.#hasView) {\n this.#viewContainer.clear();\n this.#hasView = false;\n }\n }\n}\n","/**\n * Defines properties of a SKY UX theme mode.\n */\nexport class SkyThemeMode {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n light: new SkyThemeMode('light', 'sky-theme-mode-light'),\n dark: new SkyThemeMode('dark', 'sky-theme-mode-dark'),\n };\n\n /**\n * Creates a new theme mode.\n * @param name The name of the theme mode.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme mode.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n}\n","/**\n * Defines properties of SKY UX theme spacing.\n */\nexport class SkyThemeSpacing {\n /**\n * The preset spacing available in SKY UX.\n */\n public static readonly presets = {\n standard: new SkyThemeSpacing('standard', 'sky-theme-spacing-standard'),\n compact: new SkyThemeSpacing('compact', 'sky-theme-spacing-compact'),\n };\n\n /**\n * Creates a new theme spacing.\n * @param name The name of the theme spacing.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme spacing.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n}\n","import { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Defines properties of a SKY UX theme.\n */\nexport class SkyTheme {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n default: new SkyTheme(\n 'default',\n 'sky-theme-default',\n [SkyThemeMode.presets.light],\n [SkyThemeSpacing.presets.standard],\n ),\n modern: new SkyTheme(\n 'modern',\n 'sky-theme-modern',\n [SkyThemeMode.presets.light, SkyThemeMode.presets.dark],\n [SkyThemeSpacing.presets.standard, SkyThemeSpacing.presets.compact],\n ),\n };\n\n /**\n * Creates a new theme.\n * @param name The name of the theme.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme.\n * @param supportedModes An array of modes supported by the theme.\n * @param supportedSpacing An array of spacing modes supported by the theme.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n public readonly supportedModes: SkyThemeMode[],\n public readonly supportedSpacing = [SkyThemeSpacing.presets.standard],\n ) {}\n}\n","import { SkyTheme } from './theme';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Specifies the theme and mode to be applied to a host element.\n */\nexport class SkyThemeSettings {\n /**\n * Creates a new SkyThemeSettings instance.\n * @param theme The theme configuration.\n * @param mode The theme mode.\n */\n constructor(\n public readonly theme: SkyTheme,\n public readonly mode: SkyThemeMode,\n public readonly spacing = SkyThemeSpacing.presets.standard,\n ) {}\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\nconst defaultTheme = new SkyThemeSettings(\n SkyTheme.presets.default,\n SkyThemeMode.presets.light,\n);\n\n/**\n * Creates a new instance of `SkyThemeService` to allow a container\n * to have its own theme.\n */\n@Directive({\n selector: '[skyTheme]',\n providers: [SkyThemeService],\n standalone: false,\n})\nexport class SkyThemeDirective implements OnInit, OnDestroy {\n @Input()\n public set skyTheme(value: SkyThemeSettings | undefined) {\n this.skyThemeOrDefault = value || defaultTheme;\n\n if (this.#initialized) {\n this.#themeSvc.setTheme(this.skyThemeOrDefault);\n }\n }\n\n public skyThemeOrDefault = defaultTheme;\n\n #initialized = false;\n\n #elRef: ElementRef;\n #renderer: Renderer2;\n #themeSvc: SkyThemeService;\n\n constructor(\n elRef: ElementRef,\n renderer: Renderer2,\n themeSvc: SkyThemeService,\n ) {\n this.#elRef = elRef;\n this.#renderer = renderer;\n this.#themeSvc = themeSvc;\n }\n\n public ngOnInit(): void {\n this.#themeSvc.init(\n this.#elRef.nativeElement,\n this.#renderer,\n this.skyThemeOrDefault,\n );\n\n this.#initialized = true;\n }\n\n public ngOnDestroy(): void {\n this.#themeSvc.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyThemeClassDirective } from './theming/theme-class.directive';\nimport { SkyThemeIfDirective } from './theming/theme-if.directive';\nimport { SkyThemeDirective } from './theming/theme.directive';\n\n@NgModule({\n declarations: [\n SkyThemeClassDirective,\n SkyThemeDirective,\n SkyThemeIfDirective,\n ],\n exports: [SkyThemeClassDirective, SkyThemeDirective, SkyThemeIfDirective],\n})\nexport class SkyThemeModule {}\n","import {\n ChangeDetectorRef,\n Directive,\n HostBinding,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { SkyThemeService } from '../theming/theme.service';\n\n@Directive({\n selector: '[skyThemeClass]',\n standalone: true,\n})\nexport class SkyThemeComponentClassDirective {\n @HostBinding('class')\n public theme = 'sky-cmp-theme-default';\n\n #changeDetector = inject(ChangeDetectorRef);\n #themeService = inject(SkyThemeService, { optional: true });\n\n constructor() {\n this.#themeService?.settingsChange\n .pipe(takeUntilDestroyed())\n .subscribe((change) => {\n this.theme = `sky-cmp-theme-${change.currentSettings.theme.name}`;\n this.#changeDetector.markForCheck();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, inject } from '@angular/core';\n\nimport { ReplaySubject } from 'rxjs';\n\nimport { SkyAppViewportReserveArgs } from './viewport-reserve-args';\nimport { SkyAppViewportReservedPositionType } from './viewport-reserve-position-type';\n\ntype ReserveItemType = SkyAppViewportReserveArgs & {\n active: boolean;\n};\n\n/**\n * Provides information about the state of the application's viewport.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppViewportService {\n /**\n * Updated when the viewport becomes visible. While the page is rendered, the\n * viewport may remain hidden as fonts and styles are loaded asynchronously;\n * this is done to avoid a FOUC (Flash Of Unstyled Content) before the fonts\n * and styles are ready.\n */\n public visible = new ReplaySubject<boolean>(1);\n\n // ESLint doesn't recognize how this is used.\n // eslint-disable-next-line no-unused-private-class-members\n #updateRequest: number | undefined = undefined;\n readonly #reserveItems = new Map<string, ReserveItemType>();\n readonly #conditionallyReserveItems = new Map<Element, ReserveItemType>();\n readonly #document = inject(DOCUMENT);\n readonly #intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n const item = this.#conditionallyReserveItems.get(entry.target);\n if (item) {\n item.active = entry.isIntersecting;\n }\n });\n this.#updateViewportArea();\n },\n {\n root: this.#document,\n threshold: Array.from({ length: 11 }, (_, i) => i / 10),\n },\n );\n\n constructor() {\n const onScroll = (): void => {\n if (this.#conditionallyReserveItems.size > 0) {\n this.#updateViewportArea();\n }\n };\n this.#document.addEventListener('scroll', onScroll);\n inject(DestroyRef).onDestroy(() => {\n this.#intersectionObserver.disconnect();\n this.#document.removeEventListener('scroll', onScroll);\n });\n }\n\n /**\n * Reserves space for components docked to the left, top, right, or bottom of the viewport.\n * @param args\n */\n public reserveSpace(args: SkyAppViewportReserveArgs): void {\n const item = {\n ...args,\n active:\n !args.reserveForElement ||\n this.#isElementVisible(args.reserveForElement),\n };\n this.#reserveItems.set(args.id, item);\n this.#watchVisibility(item);\n this.#updateViewportArea();\n }\n\n /**\n * Removes reserved space for a component by the ID provided when it was reserved.\n * @param id\n */\n public unreserveSpace(id: string): void {\n const args = this.#reserveItems.get(id);\n if (args?.reserveForElement) {\n this.#intersectionObserver.unobserve(args.reserveForElement);\n this.#conditionallyReserveItems.delete(args.reserveForElement);\n }\n this.#reserveItems.delete(id);\n this.#updateViewportArea();\n }\n\n #updateViewportArea(): void {\n this.#updateRequest ??= requestAnimationFrame(() => {\n const reservedSpaces: {\n [key in SkyAppViewportReservedPositionType]: number;\n } = {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n for (const {\n position,\n size,\n active,\n reserveForElement,\n } of this.#reserveItems.values()) {\n if (\n active &&\n (!reserveForElement || this.#isElementVisible(reserveForElement))\n ) {\n reservedSpaces[position] += size;\n }\n }\n\n const documentElementStyle = this.#document.documentElement.style;\n\n for (const [position, size] of Object.entries(reservedSpaces)) {\n documentElementStyle.setProperty(\n `--sky-viewport-${position}`,\n size + 'px',\n );\n }\n\n this.#updateRequest = undefined;\n });\n }\n\n #watchVisibility(item: ReserveItemType): void {\n if (item.reserveForElement) {\n this.#conditionallyReserveItems.set(item.reserveForElement, item);\n this.#intersectionObserver.observe(item.reserveForElement);\n }\n }\n\n #isElementVisible(element: HTMLElement): boolean {\n const rect = element.getBoundingClientRect();\n return (\n // Vertically in view\n rect.y <= window.innerHeight &&\n rect.y >= 0 &&\n // Horizontally in view\n rect.x <= window.innerWidth &&\n rect.x >= 0 &&\n // Element is not hidden by another element\n element.contains(this.#document.elementFromPoint(rect.x + 1, rect.y + 1))\n );\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n EnvironmentProviders,\n RendererFactory2,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer,\n} from '@angular/core';\n\nimport { SkyTheme } from '../theming/theme';\nimport { SkyThemeMode } from '../theming/theme-mode';\nimport { SkyThemeSettings } from '../theming/theme-settings';\nimport { SkyThemeSpacing } from '../theming/theme-spacing';\nimport { SkyThemeService } from '../theming/theme.service';\n\nexport function provideInitialTheme(\n name: keyof typeof SkyTheme.presets = 'default',\n options?: {\n mode?: keyof typeof SkyThemeMode.presets;\n spacing?: keyof typeof SkyThemeSpacing.presets;\n },\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n SkyThemeService,\n provideAppInitializer(() => {\n const initializerFn = ((\n themeService: SkyThemeService,\n doc: Document,\n rendererFactory: RendererFactory2,\n ) => {\n return () => {\n themeService.init(\n doc.body,\n rendererFactory.createRenderer(null, null),\n new SkyThemeSettings(\n SkyTheme.presets[name],\n SkyThemeMode.presets[options?.mode ?? 'light'],\n SkyThemeSpacing.presets[options?.spacing ?? 'standard'],\n ),\n );\n };\n })(inject(SkyThemeService), inject(DOCUMENT), inject(RendererFactory2));\n return initializerFn();\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyThemeService"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-theme.mjs","sources":["../../../../../libs/components/theme/src/lib/icons/icon-manifest.service.ts","../../../../../libs/components/theme/src/lib/theming/theme-mode.ts","../../../../../libs/components/theme/src/lib/theming/theme-spacing.ts","../../../../../libs/components/theme/src/lib/theming/theme.service.ts","../../../../../libs/components/theme/src/lib/style-loader.ts","../../../../../libs/components/theme/src/lib/theming/theme-class.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme-if.directive.ts","../../../../../libs/components/theme/src/lib/theming/theme.ts","../../../../../libs/components/theme/src/lib/theming/theme-settings.ts","../../../../../libs/components/theme/src/lib/theming/theme.directive.ts","../../../../../libs/components/theme/src/lib/theme.module.ts","../../../../../libs/components/theme/src/lib/theming/theme-brand.ts","../../../../../libs/components/theme/src/lib/theming/theme-component-class.directive.ts","../../../../../libs/components/theme/src/lib/viewport/viewport.service.ts","../../../../../libs/components/theme/src/lib/providers/provide-initial-theme.ts","../../../../../libs/components/theme/src/skyux-theme.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { getIconManifest } from '@skyux/icons';\n\nimport { SkyThemeIconManifest } from './icon-manifest';\n\n/**\n * Provides a method for retrieving metadata about the SKY UX icon font.\n * @internal\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyThemeIconManifestService {\n /**\n * Gets metadata about the SKY UX icon font.\n */\n public getManifest(): SkyThemeIconManifest {\n return getIconManifest();\n }\n}\n","/**\n * Defines properties of a SKY UX theme mode.\n */\nexport class SkyThemeMode {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n light: new SkyThemeMode('light', 'sky-theme-mode-light'),\n dark: new SkyThemeMode('dark', 'sky-theme-mode-dark'),\n };\n\n /**\n * Creates a new theme mode.\n * @param name The name of the theme mode.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme mode.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n}\n","/**\n * Defines properties of SKY UX theme spacing.\n */\nexport class SkyThemeSpacing {\n /**\n * The preset spacing available in SKY UX.\n */\n public static readonly presets = {\n standard: new SkyThemeSpacing('standard', 'sky-theme-spacing-standard'),\n compact: new SkyThemeSpacing('compact', 'sky-theme-spacing-compact'),\n };\n\n /**\n * Creates a new theme spacing.\n * @param name The name of the theme spacing.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme spacing.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n ) {}\n}\n","import { Injectable, Renderer2 } from '@angular/core';\n\nimport { Observable, ReplaySubject } from 'rxjs';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeBrand } from './theme-brand';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeSettingsChange } from './theme-settings-change';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Provides methods for updating and handling changes to the current theme.\n */\n@Injectable()\nexport class SkyThemeService {\n /**\n * Notifies consumers when the current theme settings have changed.\n */\n public get settingsChange(): Observable<SkyThemeSettingsChange> {\n return this.#_settingsObs;\n }\n\n #current: SkyThemeSettings | undefined;\n\n #brandLinkElement: HTMLLinkElement | undefined;\n\n #hostEl: any | undefined;\n\n #renderer: Renderer2 | undefined;\n\n #settings: ReplaySubject<SkyThemeSettingsChange>;\n\n #_settingsObs: Observable<SkyThemeSettingsChange>;\n\n constructor() {\n this.#settings = new ReplaySubject<SkyThemeSettingsChange>(1);\n this.#_settingsObs = this.#settings.asObservable();\n }\n\n /**\n * Initializes the theme service with the specified parameters. This should only be called\n * from a host component that provides its own theme to child components.\n * @param hostEl The host element under which themed components are rendered.\n * @param renderer A Renderer2 instance for updating the host element with theme changes.\n * @param theme The initial theme.\n */\n public init(hostEl: any, renderer: Renderer2, theme: SkyThemeSettings): void {\n this.#hostEl = hostEl;\n this.#renderer = renderer;\n\n this.setTheme(theme);\n }\n\n /**\n * Destroys the current theme service. This should only be called from a host component that\n * provides its own theme to child components.\n */\n public destroy(): void {\n this.#settings.complete();\n\n this.#hostEl = this.#renderer = undefined;\n }\n\n /**\n * Updates the current theme settings.\n * @param settings The new theme settings to apply.\n */\n public setTheme(settings: SkyThemeSettings): void {\n const previous = this.#current;\n\n this.#applyThemeClass(previous, settings, 'theme');\n this.#applyThemeClass(previous, settings, 'mode', 'supportedModes');\n this.#applyThemeClass(previous, settings, 'spacing', 'supportedSpacing');\n this.#applyThemeClass(previous, settings, 'brand');\n\n this.#settings.next({\n currentSettings: settings,\n previousSettings: previous,\n });\n\n this.#current = settings;\n }\n\n #applyThemeClass(\n previous: SkyThemeSettings | undefined,\n current: SkyThemeSettings,\n prop: 'theme' | 'mode' | 'spacing' | 'brand',\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n const currentSetting = current[prop];\n const previousClass = previous?.[prop]?.hostClass;\n const currentClass = currentSetting?.hostClass;\n\n if (!previousClass || previousClass !== currentClass) {\n this.#updateHostClass(\n prop,\n previousClass,\n currentClass,\n currentSetting,\n current,\n supportedProp,\n );\n\n if (prop === 'brand') {\n this.#updateBrandStylesheet(current.brand, previous?.brand);\n }\n }\n }\n\n #updateBrandStylesheet(\n currentBrand: SkyThemeBrand | undefined,\n previousBrand: SkyThemeBrand | undefined,\n ): void {\n if (\n currentBrand &&\n currentBrand.name !== 'blackbaud' &&\n previousBrand !== currentBrand\n ) {\n this.#addBrandStylesheet(currentBrand);\n } else {\n this.#removeBrandStylesheet();\n }\n }\n\n #updateHostClass(\n prop: 'theme' | 'mode' | 'spacing' | 'brand',\n previousClass: string | undefined,\n currentClass: string | undefined,\n currentSetting:\n | SkyTheme\n | SkyThemeMode\n | SkyThemeSpacing\n | SkyThemeBrand\n | undefined,\n current: SkyThemeSettings,\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): void {\n if (previousClass) {\n this.#removeHostClass(previousClass);\n }\n\n if (prop === 'brand') {\n if (currentClass && !previousClass) {\n this.#addHostClass('sky-theme-brand-base');\n } else if (!currentClass && previousClass) {\n this.#removeHostClass('sky-theme-brand-base');\n }\n }\n\n if (\n currentClass &&\n this.#isSupportedProperty(currentSetting, current, supportedProp)\n ) {\n this.#addHostClass(currentClass);\n }\n }\n\n #addBrandStylesheet(brand: SkyThemeBrand): void {\n if (brand.name !== 'blackbaud') {\n const cssPath = `https://sky.blackbaudcdn.net/static/skyux-brand-${brand.name}/${brand.version}/assets/scss/${brand.name}.css`;\n\n // Create a link element via Angular's renderer to avoid SSR troubles\n this.#brandLinkElement = this.#getRenderer().createElement(\n 'link',\n ) as HTMLLinkElement;\n\n // Add the style to the head section\n this.#getRenderer().appendChild(this.#hostEl, this.#brandLinkElement);\n\n // Set type of the link item and path to the css file\n this.#getRenderer().setProperty(\n this.#brandLinkElement,\n 'rel',\n 'stylesheet',\n );\n this.#getRenderer().setProperty(this.#brandLinkElement, 'href', cssPath);\n }\n }\n\n #removeBrandStylesheet(): void {\n if (this.#brandLinkElement) {\n this.#getRenderer().removeChild(this.#hostEl, this.#brandLinkElement);\n this.#brandLinkElement = undefined;\n }\n }\n\n #addHostClass(className: string): void {\n this.#getRenderer().addClass(this.#hostEl, className);\n }\n\n #removeHostClass(className: string): void {\n this.#getRenderer().removeClass(this.#hostEl, className);\n }\n\n #getRenderer(): Renderer2 {\n if (!this.#renderer) {\n throw new Error(\n 'Renderer is not initialized. Have you called the theme service `init` method?',\n );\n }\n return this.#renderer;\n }\n\n #isSupportedProperty(\n currentSetting:\n | SkyTheme\n | SkyThemeMode\n | SkyThemeSpacing\n | SkyThemeBrand\n | undefined,\n current: SkyThemeSettings,\n supportedProp?: 'supportedModes' | 'supportedSpacing',\n ): boolean {\n return (\n !supportedProp ||\n ((currentSetting instanceof SkyThemeMode ||\n currentSetting instanceof SkyThemeSpacing) &&\n current.theme[supportedProp].includes(currentSetting))\n );\n }\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport FontFaceObserver from 'fontfaceobserver';\nimport { take } from 'rxjs/operators';\n\nimport { SkyThemeService } from './theming/theme.service';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppStyleLoader {\n public static readonly LOAD_TIMEOUT = 3000;\n public isLoaded = false;\n\n #themeSvc: SkyThemeService | undefined;\n\n constructor(@Optional() themeSvc?: SkyThemeService) {\n this.#themeSvc = themeSvc;\n }\n\n public loadStyles(): Promise<any> {\n if (this.isLoaded) {\n return Promise.resolve();\n }\n\n let themePromise: Promise<any>;\n\n if (this.#themeSvc) {\n themePromise = this.#themeSvc.settingsChange.pipe(take(1)).toPromise();\n } else {\n themePromise = Promise.resolve();\n }\n\n const fontAwesome = new FontFaceObserver('FontAwesome');\n const skyuxIcons = new FontFaceObserver('skyux-icons');\n const blackbaudSans = new FontFaceObserver('BLKB Sans');\n\n return Promise.all([\n // Specify a character for FontAwesome since some browsers will fail to detect\n // when the font is loaded unless a known character with a different width\n // than the default is not specified.\n fontAwesome.load('\\uf0fc', SkyAppStyleLoader.LOAD_TIMEOUT),\n skyuxIcons.load('\\ue999', SkyAppStyleLoader.LOAD_TIMEOUT),\n blackbaudSans.load(undefined, SkyAppStyleLoader.LOAD_TIMEOUT),\n themePromise,\n ])\n .then(() => {\n this.isLoaded = true;\n })\n .catch((error) => {\n // Errors loading the font should not stop the page from rendering.\n // Passing the error along in case the client wants to do something with it.\n return Promise.resolve({\n error,\n });\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n Optional,\n Renderer2,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\ntype SkyThemeClassMap = Record<string, string>;\n\n/**\n * Component to add classes conditionally based on the current theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeClass]',\n standalone: false,\n})\nexport class SkyThemeClassDirective implements OnDestroy {\n /**\n * The HTML class attribute.\n *\n * @param value\n */\n @Input()\n public set class(value: string | undefined) {\n this.#removeInitialClasses(this.#initialClasses);\n this.#initialClasses = typeof value === 'string' ? value.split(/\\s+/) : [];\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n /**\n * An object with class names in a string for keys, and theme names (e.g. 'default' or 'modern') as values.\n *\n * @param value\n */\n @Input()\n public set skyThemeClass(value: SkyThemeClassMap | undefined) {\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n\n this.#skyThemeClassMap = value as SkyThemeClassMap;\n\n /* istanbul ignore else */\n if (this.#skyThemeClassMap) {\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n }\n\n set #themeSettings(settings: SkyThemeSettings) {\n this.#currentTheme = settings;\n this.#removeSkyThemeClassMap(this.#skyThemeClassMap);\n this.#applyInitialClasses(this.#initialClasses);\n this.#applySkyThemeClassMap(this.#skyThemeClassMap);\n }\n\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #initialClasses: string[] = [];\n #skyThemeClassMap: SkyThemeClassMap | undefined;\n\n #ngEl: ElementRef;\n #renderer: Renderer2;\n\n constructor(\n ngEl: ElementRef,\n renderer: Renderer2,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#ngEl = ngEl;\n this.#renderer = renderer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#themeSettings = settingsChange.currentSettings;\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #applyInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, true));\n }\n }\n\n #applySkyThemeClassMap(skyThemeClassMap: SkyThemeClassMap | undefined): void {\n if (skyThemeClassMap) {\n const themeName = this.#currentTheme?.theme.name || 'default';\n Object.keys(skyThemeClassMap).forEach((className) => {\n const enabled = themeName === skyThemeClassMap[className];\n this.#toggleClass(className, enabled);\n });\n }\n }\n\n #removeInitialClasses(classes: string[]): void {\n /* istanbul ignore else */\n if (classes) {\n classes.forEach((className) => this.#toggleClass(className, false));\n }\n }\n\n #removeSkyThemeClassMap(\n skyThemeClassMap: SkyThemeClassMap | undefined,\n ): void {\n if (skyThemeClassMap) {\n Object.keys(skyThemeClassMap).forEach((className) =>\n this.#toggleClass(className, false),\n );\n }\n }\n\n #toggleClass(className: string, enabled: boolean): void {\n className = className.trim();\n /* istanbul ignore else */\n if (className) {\n className.split(/\\s+/g).forEach((classNameItem) => {\n if (enabled) {\n this.#renderer.addClass(this.#ngEl.nativeElement, classNameItem);\n } else {\n this.#renderer.removeClass(this.#ngEl.nativeElement, classNameItem);\n }\n });\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n Input,\n OnDestroy,\n Optional,\n TemplateRef,\n ViewContainerRef,\n} from '@angular/core';\n\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\n/**\n * Component that works like `ngIf` to show markup for matching theme.\n *\n * If the directive is within a `skyTheme` directive, it uses settings from that directive.\n */\n@Directive({\n selector: '[skyThemeIf]',\n standalone: false,\n})\nexport class SkyThemeIfDirective implements OnDestroy {\n /**\n * A string that should match the name of a theme, `'default'` or `'modern'`.\n *\n * @param value\n */\n @Input()\n public set skyThemeIf(value: 'default' | 'modern' | undefined) {\n this.#context = value;\n this.#updateView();\n }\n\n #context: string | undefined;\n #currentTheme: SkyThemeSettings | undefined;\n #ngUnsubscribe = new Subject<void>();\n #hasView = false;\n\n #templateRef: TemplateRef<unknown>;\n #viewContainer: ViewContainerRef;\n\n constructor(\n templateRef: TemplateRef<unknown>,\n viewContainer: ViewContainerRef,\n changeDetector: ChangeDetectorRef,\n @Optional() themeSvc?: SkyThemeService,\n ) {\n this.#templateRef = templateRef;\n this.#viewContainer = viewContainer;\n if (themeSvc) {\n themeSvc.settingsChange\n .pipe(takeUntil(this.#ngUnsubscribe))\n .subscribe((settingsChange) => {\n this.#currentTheme = settingsChange.currentSettings;\n this.#updateView();\n\n // Components that use OnPush change detection will not automatically\n // check for changes when created as a result of a theme change if\n // it happens outside of an Angular change detection cycle. This\n // ensures change detection runs on those components.\n changeDetector.markForCheck();\n });\n }\n }\n\n public ngOnDestroy(): void {\n this.#ngUnsubscribe.next();\n this.#ngUnsubscribe.complete();\n }\n\n #updateView(): void {\n const themeName = this.#currentTheme?.theme.name || 'default';\n const condition = this.#context && themeName === this.#context;\n if (condition && !this.#hasView) {\n this.#viewContainer.createEmbeddedView(this.#templateRef);\n this.#hasView = true;\n } else if (!condition && this.#hasView) {\n this.#viewContainer.clear();\n this.#hasView = false;\n }\n }\n}\n","import { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Defines properties of a SKY UX theme.\n */\nexport class SkyTheme {\n /**\n * The preset themes available in SKY UX.\n */\n public static readonly presets = {\n default: new SkyTheme(\n 'default',\n 'sky-theme-default',\n [SkyThemeMode.presets.light],\n [SkyThemeSpacing.presets.standard],\n ),\n modern: new SkyTheme(\n 'modern',\n 'sky-theme-modern',\n [SkyThemeMode.presets.light, SkyThemeMode.presets.dark],\n [SkyThemeSpacing.presets.standard, SkyThemeSpacing.presets.compact],\n ),\n };\n\n /**\n * Creates a new theme.\n * @param name The name of the theme.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme.\n * @param supportedModes An array of modes supported by the theme.\n * @param supportedSpacing An array of spacing modes supported by the theme.\n */\n constructor(\n public readonly name: string,\n public readonly hostClass: string,\n public readonly supportedModes: SkyThemeMode[],\n public readonly supportedSpacing = [SkyThemeSpacing.presets.standard],\n ) {}\n}\n","import { SkyTheme } from './theme';\nimport { SkyThemeBrand } from './theme-brand';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSpacing } from './theme-spacing';\n\n/**\n * Specifies the theme and mode to be applied to a host element.\n */\nexport class SkyThemeSettings {\n /**\n * Creates a new SkyThemeSettings instance.\n * @param theme The theme configuration.\n * @param mode The theme mode.\n */\n constructor(\n public readonly theme: SkyTheme,\n public readonly mode: SkyThemeMode,\n public readonly spacing = SkyThemeSpacing.presets.standard,\n public readonly brand?: SkyThemeBrand,\n ) {}\n}\n","import {\n Directive,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n} from '@angular/core';\n\nimport { SkyTheme } from './theme';\nimport { SkyThemeMode } from './theme-mode';\nimport { SkyThemeSettings } from './theme-settings';\nimport { SkyThemeService } from './theme.service';\n\nconst defaultTheme = new SkyThemeSettings(\n SkyTheme.presets.default,\n SkyThemeMode.presets.light,\n);\n\n/**\n * Creates a new instance of `SkyThemeService` to allow a container\n * to have its own theme.\n */\n@Directive({\n selector: '[skyTheme]',\n providers: [SkyThemeService],\n standalone: false,\n})\nexport class SkyThemeDirective implements OnInit, OnDestroy {\n @Input()\n public set skyTheme(value: SkyThemeSettings | undefined) {\n this.skyThemeOrDefault = value || defaultTheme;\n\n if (this.#initialized) {\n this.#themeSvc.setTheme(this.skyThemeOrDefault);\n }\n }\n\n public skyThemeOrDefault = defaultTheme;\n\n #initialized = false;\n\n #elRef: ElementRef;\n #renderer: Renderer2;\n #themeSvc: SkyThemeService;\n\n constructor(\n elRef: ElementRef,\n renderer: Renderer2,\n themeSvc: SkyThemeService,\n ) {\n this.#elRef = elRef;\n this.#renderer = renderer;\n this.#themeSvc = themeSvc;\n }\n\n public ngOnInit(): void {\n this.#themeSvc.init(\n this.#elRef.nativeElement,\n this.#renderer,\n this.skyThemeOrDefault,\n );\n\n this.#initialized = true;\n }\n\n public ngOnDestroy(): void {\n this.#themeSvc.destroy();\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { SkyThemeClassDirective } from './theming/theme-class.directive';\nimport { SkyThemeIfDirective } from './theming/theme-if.directive';\nimport { SkyThemeDirective } from './theming/theme.directive';\n\n@NgModule({\n declarations: [\n SkyThemeClassDirective,\n SkyThemeDirective,\n SkyThemeIfDirective,\n ],\n exports: [SkyThemeClassDirective, SkyThemeDirective, SkyThemeIfDirective],\n})\nexport class SkyThemeModule {}\n","/**\n * @internal\n * Defines properties of SKY UX theme branding.\n */\nexport class SkyThemeBrand {\n public get hostClass(): string {\n return this.#hostClass || `sky-theme-brand-${this.name}`;\n }\n\n private set hostClass(value: string | undefined) {\n this.#hostClass = value;\n }\n\n #hostClass: string | undefined;\n /**\n * Creates a new theme brand.\n * @param name The name of the theme brand.\n * @param hostClass The class on the host element which child components should reference when\n * adjusting for a specified theme brand. This defaults to `sky-theme-brand-<name>\n */\n constructor(\n public readonly name: string,\n public readonly version: string,\n hostClass?: string,\n ) {\n this.hostClass = hostClass;\n\n if (!/\\d+\\.\\d+\\.\\d+(?:-(?:alpha|beta|rc)\\.\\d)*$/.test(version)) {\n throw new Error(\n `Invalid version format \"${version}\" for theme brand \"${name}\".`,\n );\n }\n }\n}\n","import {\n ChangeDetectorRef,\n Directive,\n HostBinding,\n inject,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\nimport { SkyThemeService } from '../theming/theme.service';\n\n@Directive({\n selector: '[skyThemeClass]',\n standalone: true,\n})\nexport class SkyThemeComponentClassDirective {\n @HostBinding('class')\n public theme = 'sky-cmp-theme-default';\n\n #changeDetector = inject(ChangeDetectorRef);\n #themeService = inject(SkyThemeService, { optional: true });\n\n constructor() {\n this.#themeService?.settingsChange\n .pipe(takeUntilDestroyed())\n .subscribe((change) => {\n this.theme = `sky-cmp-theme-${change.currentSettings.theme.name}`;\n this.#changeDetector.markForCheck();\n });\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { DestroyRef, Injectable, NgZone, inject } from '@angular/core';\n\nimport { ReplaySubject } from 'rxjs';\n\nimport { SkyAppViewportReserveArgs } from './viewport-reserve-args';\nimport { SkyAppViewportReservedPositionType } from './viewport-reserve-position-type';\n\ntype ReserveItemType = SkyAppViewportReserveArgs & {\n active: boolean;\n};\n\n/**\n * Provides information about the state of the application's viewport.\n */\n@Injectable({\n providedIn: 'root',\n})\nexport class SkyAppViewportService {\n /**\n * Updated when the viewport becomes visible. While the page is rendered, the\n * viewport may remain hidden as fonts and styles are loaded asynchronously;\n * this is done to avoid a FOUC (Flash Of Unstyled Content) before the fonts\n * and styles are ready.\n */\n public visible = new ReplaySubject<boolean>(1);\n\n // ESLint doesn't recognize how this is used.\n // eslint-disable-next-line no-unused-private-class-members\n #updateRequest: number | undefined = undefined;\n readonly #reserveItems = new Map<string, ReserveItemType>();\n readonly #conditionallyReserveItems = new Map<Element, ReserveItemType>();\n readonly #document = inject(DOCUMENT);\n readonly #ngZone = inject(NgZone);\n // Observe elements crossing the browser's viewport boundaries.\n readonly #intersectionObserver = this.#ngZone.runOutsideAngular(\n () =>\n new IntersectionObserver(\n () => this.#ngZone.run(() => this.#updateViewportArea()),\n { threshold: Array.from({ length: 101 }, (_, i) => i / 100) },\n ),\n );\n #reservedSpaces: Record<SkyAppViewportReservedPositionType, number> = {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n constructor() {\n const onScroll = (): void => {\n if (this.#conditionallyReserveItems.size > 0) {\n this.#updateViewportArea();\n }\n };\n this.#document.addEventListener('scroll', onScroll);\n inject(DestroyRef).onDestroy(() => {\n /* istanbul ignore next */\n if (this.#updateRequest !== undefined) {\n cancelAnimationFrame(this.#updateRequest);\n }\n this.#intersectionObserver.disconnect();\n this.#document.removeEventListener('scroll', onScroll);\n });\n }\n\n /**\n * Reserves space for components docked to the left, top, right, or bottom of the viewport.\n * @param args\n */\n public reserveSpace(args: SkyAppViewportReserveArgs): void {\n const item = {\n ...args,\n active: this.#isElementVisible({ ...args, active: false }),\n };\n this.#reserveItems.set(args.id, item);\n this.#watchVisibility(item);\n this.#updateViewportArea();\n }\n\n /**\n * Removes reserved space for a component by the ID provided when it was reserved.\n * @param id\n */\n public unreserveSpace(id: string): void {\n const args = this.#reserveItems.get(id);\n if (args?.reserveForElement) {\n this.#intersectionObserver.unobserve(args.reserveForElement);\n this.#conditionallyReserveItems.delete(args.reserveForElement);\n }\n this.#reserveItems.delete(id);\n this.#updateViewportArea();\n }\n\n #updateViewportArea(): void {\n this.#updateRequest ??= requestAnimationFrame(() => {\n this.#updateRequest = undefined;\n const reservedSpaces: Record<SkyAppViewportReservedPositionType, number> =\n {\n bottom: 0,\n left: 0,\n right: 0,\n top: 0,\n };\n\n for (const args of this.#reserveItems.values()) {\n args.active = this.#isElementVisible(args, reservedSpaces);\n if (args.active) {\n reservedSpaces[args.position] += args.size;\n }\n }\n\n this.#reservedSpaces = reservedSpaces;\n const documentElementStyle = this.#document.documentElement.style;\n\n for (const [position, size] of Object.entries(reservedSpaces)) {\n documentElementStyle.setProperty(\n `--sky-viewport-${position}`,\n size + 'px',\n );\n }\n });\n }\n\n #watchVisibility(item: ReserveItemType): void {\n if (item.reserveForElement) {\n this.#conditionallyReserveItems.set(item.reserveForElement, item);\n this.#intersectionObserver.observe(item.reserveForElement);\n }\n }\n\n #isElementVisible(\n args: ReserveItemType,\n reservedSpaces: Record<SkyAppViewportReservedPositionType, number> = this\n .#reservedSpaces,\n ): boolean {\n if (!args.reserveForElement) {\n return true;\n }\n const rect = args.reserveForElement.getBoundingClientRect();\n if (!rect || !rect.height || !rect.width) {\n return false;\n }\n const midpoint = {\n x: rect.x + Math.floor(rect.width / 2),\n y: rect.y + Math.floor(rect.height / 2),\n };\n if (\n // Vertically in view\n midpoint.y <= window.innerHeight &&\n midpoint.y >= 0 &&\n // Horizontally in view\n midpoint.x <= window.innerWidth &&\n midpoint.x >= 0\n ) {\n // Element is not hidden by another element\n if (\n args.reserveForElement.contains(\n this.#document.elementFromPoint(midpoint.x, midpoint.y),\n )\n ) {\n return true;\n }\n\n // Check if the item's midpoint is visible based on current reserved spaces.\n // Assumes reserved spaces are intended to be additive and not overlapping.\n const threshold = reservedSpaces[args.position];\n switch (args.position) {\n case 'top':\n return midpoint.y >= threshold;\n case 'right':\n return midpoint.x <= window.innerWidth - threshold;\n case 'bottom':\n return midpoint.y <= window.innerHeight - threshold;\n case 'left':\n return midpoint.x >= threshold;\n }\n }\n return false;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n EnvironmentProviders,\n RendererFactory2,\n inject,\n makeEnvironmentProviders,\n provideAppInitializer,\n} from '@angular/core';\n\nimport { SkyTheme } from '../theming/theme';\nimport { SkyThemeMode } from '../theming/theme-mode';\nimport { SkyThemeSettings } from '../theming/theme-settings';\nimport { SkyThemeSpacing } from '../theming/theme-spacing';\nimport { SkyThemeService } from '../theming/theme.service';\n\nexport function provideInitialTheme(\n name: keyof typeof SkyTheme.presets = 'default',\n options?: {\n mode?: keyof typeof SkyThemeMode.presets;\n spacing?: keyof typeof SkyThemeSpacing.presets;\n },\n): EnvironmentProviders {\n return makeEnvironmentProviders([\n SkyThemeService,\n provideAppInitializer(() => {\n const initializerFn = ((\n themeService: SkyThemeService,\n doc: Document,\n rendererFactory: RendererFactory2,\n ) => {\n return () => {\n themeService.init(\n doc.body,\n rendererFactory.createRenderer(null, null),\n new SkyThemeSettings(\n SkyTheme.presets[name],\n SkyThemeMode.presets[options?.mode ?? 'light'],\n SkyThemeSpacing.presets[options?.spacing ?? 'standard'],\n ),\n );\n };\n })(inject(SkyThemeService), inject(DOCUMENT), inject(RendererFactory2));\n return initializerFn();\n }),\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.SkyThemeService"],"mappings":"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"}