@skyux/core 9.0.0-alpha.8 → 9.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,14 +1,14 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgModule, Injectable, EventEmitter, Directive, Input, Output, Injector, ViewContainerRef, Component, ChangeDetectionStrategy, ViewChild, inject, EnvironmentInjector, createEnvironmentInjector, createComponent, InjectionToken, Optional, Inject, Pipe, ElementRef, HostBinding, ApplicationRef } from '@angular/core';
3
- import * as i5 from '@angular/common';
2
+ import { NgModule, Injectable, inject, RendererFactory2, NgZone, EventEmitter, Directive, Input, Output, EnvironmentInjector, createEnvironmentInjector, createComponent, ChangeDetectorRef, ElementRef, ViewContainerRef, Component, ChangeDetectionStrategy, ViewChild, InjectionToken, Optional, Inject, Pipe, HostBinding, ApplicationRef } from '@angular/core';
3
+ import * as i1$1 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT } from '@angular/common';
5
- import { Subject, fromEvent, ReplaySubject, BehaviorSubject, Observable, of, concat, animationFrameScheduler } from 'rxjs';
5
+ import { Subject, Subscription, ReplaySubject, fromEvent, BehaviorSubject, Observable, of, concat, animationFrameScheduler } from 'rxjs';
6
6
  import { takeUntil, debounceTime, finalize, switchMap, map } from 'rxjs/operators';
7
+ import { ViewportRuler } from '@angular/cdk/overlay';
7
8
  import * as i1 from '@skyux/i18n';
8
- import { getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS, SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';
9
- import * as i4 from '@angular/router';
10
- import { NavigationStart } from '@angular/router';
11
- import * as i1$1 from '@angular/platform-browser';
9
+ import { SkyLibResourcesService, getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS, SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';
10
+ import { Router, NavigationStart } from '@angular/router';
11
+ import * as i1$2 from '@angular/platform-browser';
12
12
 
13
13
  /**
14
14
  * @deprecated The `SkyCoreAdapterService` no longer needs the `SkyCoreAdapterModule`.
@@ -431,12 +431,17 @@ class SkyAffixer {
431
431
  #placementChange;
432
432
  #placementChangeObs;
433
433
  #renderer;
434
- #resizeListener;
435
- #scrollListeners;
434
+ #scrollChange = new Subject();
435
+ #viewportListeners;
436
+ #viewportRuler;
437
+ #zone;
436
438
  #_config = DEFAULT_AFFIX_CONFIG;
437
- constructor(affixedElement, renderer) {
439
+ #scrollChangeListener = () => this.#scrollChange.next();
440
+ constructor(affixedElement, renderer, viewportRuler, zone) {
438
441
  this.#affixedElement = affixedElement;
439
442
  this.#renderer = renderer;
443
+ this.#viewportRuler = viewportRuler;
444
+ this.#zone = zone;
440
445
  this.#offsetChange = new Subject();
441
446
  this.#overflowScroll = new Subject();
442
447
  this.#placementChange = new Subject();
@@ -456,8 +461,7 @@ class SkyAffixer {
456
461
  this.#overflowParents = getOverflowParents(baseElement);
457
462
  this.#affix();
458
463
  if (this.#config.isSticky) {
459
- this.#addScrollListeners();
460
- this.#addResizeListener();
464
+ this.#addViewportListeners();
461
465
  }
462
466
  }
463
467
  getConfig() {
@@ -479,6 +483,7 @@ class SkyAffixer {
479
483
  this.#placementChange.complete();
480
484
  this.#offsetChange.complete();
481
485
  this.#overflowScroll.complete();
486
+ this.#scrollChange.complete();
482
487
  }
483
488
  #affix() {
484
489
  const offset = this.#getOffset();
@@ -502,8 +507,11 @@ class SkyAffixer {
502
507
  top: 0,
503
508
  };
504
509
  if (this.#config.position === 'absolute') {
505
- autoFitOverflowOffset.top =
506
- (autoFitOverflowOffset.top || 0) + window.scrollY;
510
+ const { top, left } = this.#viewportRuler.getViewportScrollPosition();
511
+ autoFitOverflowOffset.top = (autoFitOverflowOffset.top || 0) + top;
512
+ autoFitOverflowOffset.left = (autoFitOverflowOffset.left || 0) + left;
513
+ autoFitOverflowOffset.bottom = (autoFitOverflowOffset.bottom || 0) + top;
514
+ autoFitOverflowOffset.right = (autoFitOverflowOffset.right || 0) + left;
507
515
  }
508
516
  do {
509
517
  offset = this.#getPreferredOffset(placement);
@@ -545,8 +553,11 @@ class SkyAffixer {
545
553
  height: baseDomRect.height,
546
554
  };
547
555
  if (this.#config.position === 'absolute') {
548
- baseRect.top += window.scrollY;
549
- baseRect.bottom = baseRect.top + baseDomRect.height;
556
+ const { left, top } = this.#viewportRuler.getViewportScrollPosition();
557
+ baseRect.top += top;
558
+ baseRect.left += left;
559
+ baseRect.bottom += top;
560
+ baseRect.right += left;
550
561
  }
551
562
  return baseRect;
552
563
  }
@@ -706,8 +717,7 @@ class SkyAffixer {
706
717
  }
707
718
  }
708
719
  #reset() {
709
- this.#removeScrollListeners();
710
- this.#removeResizeListener();
720
+ this.#removeViewportListeners();
711
721
  this.#overflowParents = [];
712
722
  this.#config =
713
723
  this.#baseElement =
@@ -739,47 +749,46 @@ class SkyAffixer {
739
749
  bottom: baseRect.bottom,
740
750
  }, this.#config.autoFitOverflowOffset);
741
751
  }
742
- #addScrollListeners() {
743
- this.#scrollListeners = this.#overflowParents.map((parentElement) => {
744
- const overflow = parentElement === document.body ? 'window' : parentElement;
745
- return this.#renderer.listen(overflow, 'scroll', () => {
746
- this.#affix();
747
- this.#overflowScroll.next();
752
+ #addViewportListeners() {
753
+ this.#viewportListeners = new Subscription();
754
+ // Resize and orientation changes.
755
+ this.#viewportListeners.add(this.#viewportRuler.change().subscribe(() => {
756
+ this.#affix();
757
+ }));
758
+ this.#viewportListeners.add(this.#scrollChange.subscribe(() => {
759
+ this.#affix();
760
+ this.#overflowScroll.next();
761
+ }));
762
+ // Listen for scroll events on the window, visual viewport, and any overflow parents.
763
+ // https://developer.chrome.com/blog/visual-viewport-api/#events-only-fire-when-the-visual-viewport-changes
764
+ this.#zone.runOutsideAngular(() => {
765
+ [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
766
+ parentElement?.addEventListener('scroll', this.#scrollChangeListener);
748
767
  });
749
768
  });
750
769
  }
751
- #addResizeListener() {
752
- this.#resizeListener = fromEvent(window, 'resize').subscribe(() => this.#affix());
753
- }
754
- #removeResizeListener() {
755
- if (this.#resizeListener) {
756
- this.#resizeListener.unsubscribe();
757
- this.#resizeListener = undefined;
758
- }
759
- }
760
- #removeScrollListeners() {
761
- if (this.#scrollListeners) {
762
- // Remove renderer-generated listeners by calling the listener itself.
763
- // https://github.com/angular/angular/issues/9368#issuecomment-227199778
764
- this.#scrollListeners.forEach((listener) => listener());
765
- this.#scrollListeners = undefined;
766
- }
770
+ #removeViewportListeners() {
771
+ this.#viewportListeners?.unsubscribe();
772
+ this.#zone.runOutsideAngular(() => {
773
+ [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
774
+ parentElement?.removeEventListener('scroll', this.#scrollChangeListener);
775
+ });
776
+ });
767
777
  }
768
778
  }
769
779
 
770
780
  class SkyAffixService {
771
- #renderer;
772
- constructor(rendererFactory) {
773
- this.#renderer = rendererFactory.createRenderer(undefined, null);
774
- }
781
+ #renderer = inject(RendererFactory2).createRenderer(undefined, null);
782
+ #viewportRuler = inject(ViewportRuler);
783
+ #zone = inject(NgZone);
775
784
  /**
776
785
  * Creates an instance of [[SkyAffixer]].
777
786
  * @param affixed The element to be affixed.
778
787
  */
779
788
  createAffixer(affixed) {
780
- return new SkyAffixer(affixed.nativeElement, this.#renderer);
789
+ return new SkyAffixer(affixed.nativeElement, this.#renderer, this.#viewportRuler, this.#zone);
781
790
  }
782
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
791
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
783
792
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, providedIn: 'root' }); }
784
793
  }
785
794
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, decorators: [{
@@ -787,7 +796,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
787
796
  args: [{
788
797
  providedIn: 'root',
789
798
  }]
790
- }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
799
+ }] });
791
800
 
792
801
  /**
793
802
  * Affixes the host element to a base element.
@@ -988,6 +997,181 @@ var SkyDockLocation;
988
997
  SkyDockLocation[SkyDockLocation["ElementBottom"] = 2] = "ElementBottom";
989
998
  })(SkyDockLocation || (SkyDockLocation = {}));
990
999
 
1000
+ /**
1001
+ * @deprecated The `SkyDockModule` is no longer needed and can be removed from your application.
1002
+ */
1003
+ class SkyDockModule {
1004
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1005
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule }); }
1006
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule }); }
1007
+ }
1008
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule, decorators: [{
1009
+ type: NgModule,
1010
+ args: [{}]
1011
+ }] });
1012
+
1013
+ /**
1014
+ * The location on the page where the dynamic component should be rendered.
1015
+ */
1016
+ var SkyDynamicComponentLocation;
1017
+ (function (SkyDynamicComponentLocation) {
1018
+ /**
1019
+ * Renders the dynamic component before a given element.
1020
+ */
1021
+ SkyDynamicComponentLocation[SkyDynamicComponentLocation["BeforeElement"] = 0] = "BeforeElement";
1022
+ /**
1023
+ * Renders the dynamic component as the last element inside the BODY element.
1024
+ */
1025
+ SkyDynamicComponentLocation[SkyDynamicComponentLocation["BodyBottom"] = 1] = "BodyBottom";
1026
+ /**
1027
+ * Renders the dynamic component as the first element inside the BODY element.
1028
+ */
1029
+ SkyDynamicComponentLocation[SkyDynamicComponentLocation["BodyTop"] = 2] = "BodyTop";
1030
+ /**
1031
+ * Renders the dynamic component as the last element inside a given element.
1032
+ */
1033
+ SkyDynamicComponentLocation[SkyDynamicComponentLocation["ElementBottom"] = 3] = "ElementBottom";
1034
+ /**
1035
+ * Renders the dynamic component as the first element inside a given element.
1036
+ */
1037
+ SkyDynamicComponentLocation[SkyDynamicComponentLocation["ElementTop"] = 4] = "ElementTop";
1038
+ })(SkyDynamicComponentLocation || (SkyDynamicComponentLocation = {}));
1039
+
1040
+ /**
1041
+ * @internal
1042
+ */
1043
+ function getWindow() {
1044
+ return window;
1045
+ }
1046
+ /**
1047
+ * The application window reference service references the global window variable.
1048
+ * After users inject SkyAppWindowRef into a component, they can use the service to interact with
1049
+ * window properties and event handlers by referencing its nativeWindow property.
1050
+ */
1051
+ class SkyAppWindowRef {
1052
+ /**
1053
+ * The global `window` variable.
1054
+ */
1055
+ get nativeWindow() {
1056
+ return getWindow();
1057
+ }
1058
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppWindowRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1059
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppWindowRef, providedIn: 'root' }); }
1060
+ }
1061
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppWindowRef, decorators: [{
1062
+ type: Injectable,
1063
+ args: [{
1064
+ providedIn: 'root',
1065
+ }]
1066
+ }] });
1067
+
1068
+ /**
1069
+ * Angular service for creating and rendering a dynamic component.
1070
+ * @internal
1071
+ */
1072
+ class SkyDynamicComponentService {
1073
+ #applicationRef;
1074
+ #renderer;
1075
+ #windowRef;
1076
+ #environmentInjector = inject(EnvironmentInjector);
1077
+ constructor(applicationRef, windowRef, rendererFactory) {
1078
+ this.#applicationRef = applicationRef;
1079
+ this.#windowRef = windowRef;
1080
+ // Based on suggestions from https://github.com/angular/angular/issues/17824
1081
+ // for accessing an instance of Renderer2 in a service since Renderer2 can't
1082
+ // be injected into a service. Passing undefined for both parameters results
1083
+ // in the default renderer which is what we want here.
1084
+ this.#renderer = rendererFactory.createRenderer(undefined, null);
1085
+ }
1086
+ /**
1087
+ * Creates an instance of the specified component and adds it to the specified location
1088
+ * on the page.
1089
+ */
1090
+ createComponent(componentType, options) {
1091
+ options ||= {
1092
+ location: SkyDynamicComponentLocation.BodyBottom,
1093
+ };
1094
+ const environmentInjector = createEnvironmentInjector(options.providers ?? [], options.environmentInjector ?? this.#environmentInjector);
1095
+ let componentRef;
1096
+ if (options.viewContainerRef) {
1097
+ componentRef = options.viewContainerRef.createComponent(componentType, {
1098
+ environmentInjector,
1099
+ });
1100
+ }
1101
+ else {
1102
+ componentRef = createComponent(componentType, {
1103
+ environmentInjector,
1104
+ });
1105
+ this.#applicationRef.attachView(componentRef.hostView);
1106
+ const el = this.#getRootNode(componentRef);
1107
+ const bodyEl = this.#windowRef.nativeWindow.document.body;
1108
+ switch (options.location) {
1109
+ case SkyDynamicComponentLocation.BeforeElement:
1110
+ if (!options.referenceEl) {
1111
+ throw new Error('[SkyDynamicComponentService] Could not create a component at location `SkyDynamicComponentLocation.BeforeElement` because a reference element was not provided.');
1112
+ }
1113
+ this.#renderer.insertBefore(options.referenceEl.parentElement, el, options.referenceEl);
1114
+ break;
1115
+ case SkyDynamicComponentLocation.ElementTop:
1116
+ if (!options.referenceEl) {
1117
+ throw new Error('[SkyDynamicComponentService] Could not create a component at location `SkyDynamicComponentLocation.ElementTop` because a reference element was not provided.');
1118
+ }
1119
+ this.#renderer.insertBefore(options.referenceEl, el, options.referenceEl.firstChild);
1120
+ break;
1121
+ case SkyDynamicComponentLocation.ElementBottom:
1122
+ this.#renderer.appendChild(options.referenceEl, el);
1123
+ break;
1124
+ case SkyDynamicComponentLocation.BodyTop:
1125
+ this.#renderer.insertBefore(bodyEl, el, bodyEl.firstChild);
1126
+ break;
1127
+ default:
1128
+ this.#renderer.appendChild(bodyEl, el);
1129
+ break;
1130
+ }
1131
+ }
1132
+ return componentRef;
1133
+ }
1134
+ /**
1135
+ * Removes a component ref from the page
1136
+ * @param componentRef Component ref for the component being removed
1137
+ */
1138
+ removeComponent(componentRef) {
1139
+ if (!componentRef) {
1140
+ return;
1141
+ }
1142
+ this.#applicationRef.detachView(componentRef.hostView);
1143
+ componentRef.destroy();
1144
+ }
1145
+ #getRootNode(componentRef) {
1146
+ // Technique for retrieving the component's root node taken from here:
1147
+ // https://malcoded.com/posts/angular-dynamic-components
1148
+ return componentRef.hostView.rootNodes[0];
1149
+ }
1150
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentService, deps: [{ token: i0.ApplicationRef }, { token: SkyAppWindowRef }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
1151
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentService, providedIn: 'root' }); }
1152
+ }
1153
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentService, decorators: [{
1154
+ type: Injectable,
1155
+ args: [{
1156
+ providedIn: 'root',
1157
+ }]
1158
+ }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: SkyAppWindowRef }, { type: i0.RendererFactory2 }]; } });
1159
+ /**
1160
+ * Angular service for creating and rendering a dynamic component.
1161
+ * @internal
1162
+ * @deprecated Use `SkyDynamicComponentService` to create a standalone component instead.
1163
+ */
1164
+ class SkyDynamicComponentLegacyService extends SkyDynamicComponentService {
1165
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentLegacyService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
1166
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentLegacyService, providedIn: 'any' }); }
1167
+ }
1168
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentLegacyService, decorators: [{
1169
+ type: Injectable,
1170
+ args: [{
1171
+ providedIn: 'any',
1172
+ }]
1173
+ }] });
1174
+
991
1175
  /**
992
1176
  * @internal
993
1177
  */
@@ -1098,29 +1282,22 @@ function sortByStackOrder(a, b) {
1098
1282
  * @internal
1099
1283
  */
1100
1284
  class SkyDockComponent {
1101
- #changeDetector;
1102
- #domAdapter;
1103
- #elementRef;
1104
- #injector;
1105
1285
  #itemRefs = [];
1106
1286
  #options;
1107
- constructor(changeDetector, elementRef, injector, domAdapter) {
1108
- this.#changeDetector = changeDetector;
1109
- this.#elementRef = elementRef;
1110
- this.#injector = injector;
1111
- this.#domAdapter = domAdapter;
1112
- }
1287
+ #changeDetector = inject(ChangeDetectorRef);
1288
+ #domAdapter = inject(SkyDockDomAdapterService);
1289
+ #dynamicComponentSvc = inject(SkyDynamicComponentService);
1290
+ #elementRef = inject(ElementRef);
1291
+ #environmentInjector = inject(EnvironmentInjector);
1113
1292
  insertComponent(component, config = {}) {
1114
1293
  /*istanbul ignore if: untestable*/
1115
1294
  if (!this.target) {
1116
1295
  throw Error('[SkyDockComponent] Could not insert the component because the target element could not be found.');
1117
1296
  }
1118
- const injector = Injector.create({
1119
- providers: config.providers || [],
1120
- parent: this.#injector,
1121
- });
1122
- const componentRef = this.target.createComponent(component, {
1123
- injector,
1297
+ const componentRef = this.#dynamicComponentSvc.createComponent(component, {
1298
+ environmentInjector: this.#environmentInjector,
1299
+ providers: config.providers,
1300
+ viewContainerRef: this.target,
1124
1301
  });
1125
1302
  const stackOrder = config.stackOrder !== null && config.stackOrder !== undefined
1126
1303
  ? config.stackOrder
@@ -1182,13 +1359,13 @@ class SkyDockComponent {
1182
1359
  }
1183
1360
  return this.#itemRefs[0].stackOrder + 1;
1184
1361
  }
1185
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Injector }, { token: SkyDockDomAdapterService }], target: i0.ɵɵFactoryTarget.Component }); }
1186
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SkyDockComponent, selector: "sky-dock", providers: [SkyDockDomAdapterService], viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container #target></ng-container>\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host:not(.sky-dock-unbound){position:fixed;left:var(--sky-viewport-left, 0);bottom:var(--sky-viewport-bottom, 0);right:var(--sky-viewport-right, 0);width:auto}:host.sky-dock-sticky{position:sticky}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1362
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
1363
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SkyDockComponent, isStandalone: true, selector: "sky-dock", providers: [SkyDockDomAdapterService], viewQueries: [{ propertyName: "target", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<ng-container #target></ng-container>\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host:not(.sky-dock-unbound){position:fixed;left:var(--sky-viewport-left, 0);bottom:var(--sky-viewport-bottom, 0);right:var(--sky-viewport-right, 0);width:auto}:host.sky-dock-sticky{position:sticky}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1187
1364
  }
1188
1365
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockComponent, decorators: [{
1189
1366
  type: Component,
1190
- args: [{ selector: 'sky-dock', providers: [SkyDockDomAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container #target></ng-container>\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host:not(.sky-dock-unbound){position:fixed;left:var(--sky-viewport-left, 0);bottom:var(--sky-viewport-bottom, 0);right:var(--sky-viewport-right, 0);width:auto}:host.sky-dock-sticky{position:sticky}\n"] }]
1191
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Injector }, { type: SkyDockDomAdapterService }]; }, propDecorators: { target: [{
1367
+ args: [{ standalone: true, selector: 'sky-dock', providers: [SkyDockDomAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container #target></ng-container>\n", styles: [":host{display:flex;flex-direction:column;width:100%}:host:not(.sky-dock-unbound){position:fixed;left:var(--sky-viewport-left, 0);bottom:var(--sky-viewport-bottom, 0);right:var(--sky-viewport-right, 0);width:auto}:host.sky-dock-sticky{position:sticky}\n"] }]
1368
+ }], propDecorators: { target: [{
1192
1369
  type: ViewChild,
1193
1370
  args: ['target', {
1194
1371
  read: ViewContainerRef,
@@ -1196,167 +1373,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
1196
1373
  }]
1197
1374
  }] } });
1198
1375
 
1199
- class SkyDockModule {
1200
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
1201
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule, declarations: [SkyDockComponent], imports: [CommonModule] }); }
1202
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule, providers: [SkyMutationObserverService], imports: [CommonModule] }); }
1203
- }
1204
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockModule, decorators: [{
1205
- type: NgModule,
1206
- args: [{
1207
- imports: [CommonModule],
1208
- declarations: [SkyDockComponent],
1209
- providers: [SkyMutationObserverService],
1210
- }]
1211
- }] });
1212
-
1213
- /**
1214
- * The location on the page where the dynamic component should be rendered.
1215
- */
1216
- var SkyDynamicComponentLocation;
1217
- (function (SkyDynamicComponentLocation) {
1218
- /**
1219
- * Renders the dynamic component before a given element.
1220
- */
1221
- SkyDynamicComponentLocation[SkyDynamicComponentLocation["BeforeElement"] = 0] = "BeforeElement";
1222
- /**
1223
- * Renders the dynamic component as the last element inside the BODY element.
1224
- */
1225
- SkyDynamicComponentLocation[SkyDynamicComponentLocation["BodyBottom"] = 1] = "BodyBottom";
1226
- /**
1227
- * Renders the dynamic component as the first element inside the BODY element.
1228
- */
1229
- SkyDynamicComponentLocation[SkyDynamicComponentLocation["BodyTop"] = 2] = "BodyTop";
1230
- /**
1231
- * Renders the dynamic component as the last element inside a given element.
1232
- */
1233
- SkyDynamicComponentLocation[SkyDynamicComponentLocation["ElementBottom"] = 3] = "ElementBottom";
1234
- /**
1235
- * Renders the dynamic component as the first element inside a given element.
1236
- */
1237
- SkyDynamicComponentLocation[SkyDynamicComponentLocation["ElementTop"] = 4] = "ElementTop";
1238
- })(SkyDynamicComponentLocation || (SkyDynamicComponentLocation = {}));
1239
-
1240
- /**
1241
- * @internal
1242
- */
1243
- function getWindow() {
1244
- return window;
1245
- }
1246
- /**
1247
- * The application window reference service references the global window variable.
1248
- * After users inject SkyAppWindowRef into a component, they can use the service to interact with
1249
- * window properties and event handlers by referencing its nativeWindow property.
1250
- */
1251
- class SkyAppWindowRef {
1252
- /**
1253
- * The global `window` variable.
1254
- */
1255
- get nativeWindow() {
1256
- return getWindow();
1257
- }
1258
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppWindowRef, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1259
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppWindowRef, providedIn: 'root' }); }
1260
- }
1261
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppWindowRef, decorators: [{
1262
- type: Injectable,
1263
- args: [{
1264
- providedIn: 'root',
1265
- }]
1266
- }] });
1267
-
1268
- /**
1269
- * Angular service for creating and rendering a dynamic component.
1270
- * @internal
1271
- */
1272
- class SkyDynamicComponentService {
1273
- #applicationRef;
1274
- #renderer;
1275
- #windowRef;
1276
- #environmentInjector = inject(EnvironmentInjector);
1277
- constructor(applicationRef, windowRef, rendererFactory) {
1278
- this.#applicationRef = applicationRef;
1279
- this.#windowRef = windowRef;
1280
- // Based on suggestions from https://github.com/angular/angular/issues/17824
1281
- // for accessing an instance of Renderer2 in a service since Renderer2 can't
1282
- // be injected into a service. Passing undefined for both parameters results
1283
- // in the default renderer which is what we want here.
1284
- this.#renderer = rendererFactory.createRenderer(undefined, null);
1285
- }
1286
- /**
1287
- * Creates an instance of the specified component and adds it to the specified location
1288
- * on the page.
1289
- */
1290
- createComponent(componentType, options) {
1291
- options ||= {
1292
- location: SkyDynamicComponentLocation.BodyBottom,
1293
- };
1294
- const environmentInjector = createEnvironmentInjector(options.providers ?? [], options.environmentInjector ?? this.#environmentInjector);
1295
- let componentRef;
1296
- if (options.viewContainerRef) {
1297
- componentRef = options.viewContainerRef.createComponent(componentType, {
1298
- environmentInjector,
1299
- });
1300
- }
1301
- else {
1302
- componentRef = createComponent(componentType, {
1303
- environmentInjector,
1304
- });
1305
- this.#applicationRef.attachView(componentRef.hostView);
1306
- const el = this.#getRootNode(componentRef);
1307
- const bodyEl = this.#windowRef.nativeWindow.document.body;
1308
- switch (options.location) {
1309
- case SkyDynamicComponentLocation.BeforeElement:
1310
- if (!options.referenceEl) {
1311
- throw new Error('[SkyDynamicComponentService] Could not create a component at location `SkyDynamicComponentLocation.BeforeElement` because a reference element was not provided.');
1312
- }
1313
- this.#renderer.insertBefore(options.referenceEl.parentElement, el, options.referenceEl);
1314
- break;
1315
- case SkyDynamicComponentLocation.ElementTop:
1316
- if (!options.referenceEl) {
1317
- throw new Error('[SkyDynamicComponentService] Could not create a component at location `SkyDynamicComponentLocation.ElementTop` because a reference element was not provided.');
1318
- }
1319
- this.#renderer.insertBefore(options.referenceEl, el, options.referenceEl.firstChild);
1320
- break;
1321
- case SkyDynamicComponentLocation.ElementBottom:
1322
- this.#renderer.appendChild(options.referenceEl, el);
1323
- break;
1324
- case SkyDynamicComponentLocation.BodyTop:
1325
- this.#renderer.insertBefore(bodyEl, el, bodyEl.firstChild);
1326
- break;
1327
- default:
1328
- this.#renderer.appendChild(bodyEl, el);
1329
- break;
1330
- }
1331
- }
1332
- return componentRef;
1333
- }
1334
- /**
1335
- * Removes a component ref from the page
1336
- * @param componentRef Component ref for the component being removed
1337
- */
1338
- removeComponent(componentRef) {
1339
- if (!componentRef) {
1340
- return;
1341
- }
1342
- this.#applicationRef.detachView(componentRef.hostView);
1343
- componentRef.destroy();
1344
- }
1345
- #getRootNode(componentRef) {
1346
- // Technique for retrieving the component's root node taken from here:
1347
- // https://malcoded.com/posts/angular-dynamic-components
1348
- return componentRef.hostView.rootNodes[0];
1349
- }
1350
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentService, deps: [{ token: i0.ApplicationRef }, { token: SkyAppWindowRef }, { token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
1351
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentService, providedIn: 'any' }); }
1352
- }
1353
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDynamicComponentService, decorators: [{
1354
- type: Injectable,
1355
- args: [{
1356
- providedIn: 'any',
1357
- }]
1358
- }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: SkyAppWindowRef }, { type: i0.RendererFactory2 }]; } });
1359
-
1360
1376
  /**
1361
1377
  * This service docks components to specific areas on the page.
1362
1378
  */
@@ -1433,12 +1449,12 @@ class SkyDockService {
1433
1449
  SkyDockService.dockRef = undefined;
1434
1450
  }
1435
1451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockService, deps: [{ token: SkyDynamicComponentService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1436
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockService, providedIn: 'any' }); }
1452
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockService, providedIn: 'root' }); }
1437
1453
  }
1438
1454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyDockService, decorators: [{
1439
1455
  type: Injectable,
1440
1456
  args: [{
1441
- providedIn: 'any',
1457
+ providedIn: 'root',
1442
1458
  }]
1443
1459
  }], ctorParameters: function () { return [{ type: SkyDynamicComponentService }]; } });
1444
1460
 
@@ -1927,6 +1943,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
1927
1943
  }]
1928
1944
  }], ctorParameters: function () { return [{ type: i0.NgZone }]; } });
1929
1945
 
1946
+ /* istanbul ignore file */
1930
1947
  /**
1931
1948
  * NOTICE: DO NOT MODIFY THIS FILE!
1932
1949
  * The contents of this file were automatically generated by
@@ -1941,6 +1958,7 @@ const RESOURCES = {
1941
1958
  skyux_numeric_trillions_symbol: { message: 'T' },
1942
1959
  },
1943
1960
  };
1961
+ SkyLibResourcesService.addResources(RESOURCES);
1944
1962
  class SkyCoreResourcesProvider {
1945
1963
  getString(localeInfo, name) {
1946
1964
  return getLibStringForLocale(RESOURCES, localeInfo.locale, name);
@@ -2260,12 +2278,12 @@ class SkyNumericService {
2260
2278
  return this.#resourcesSvc.getStringForLocale({ locale: 'en_US' }, key);
2261
2279
  }
2262
2280
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyNumericService, deps: [{ token: i1.SkyLibResourcesService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2263
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyNumericService, providedIn: 'any' }); }
2281
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyNumericService, providedIn: 'root' }); }
2264
2282
  }
2265
2283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyNumericService, decorators: [{
2266
2284
  type: Injectable,
2267
2285
  args: [{
2268
- providedIn: 'any',
2286
+ providedIn: 'root',
2269
2287
  }]
2270
2288
  }], ctorParameters: function () { return [{ type: i1.SkyLibResourcesService }]; } });
2271
2289
 
@@ -2419,10 +2437,60 @@ class SkyOverlayInstance {
2419
2437
  }
2420
2438
  }
2421
2439
 
2440
+ /**
2441
+ * @deprecated The `SkyOverlayModule` is no longer needed and can be removed from your application.
2442
+ */
2443
+ class SkyOverlayModule {
2444
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2445
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule }); }
2446
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule }); }
2447
+ }
2448
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule, decorators: [{
2449
+ type: NgModule,
2450
+ args: [{}]
2451
+ }] });
2452
+
2422
2453
  /**
2423
2454
  * @internal
2424
2455
  */
2425
- const SKY_STACKING_CONTEXT = new InjectionToken('SkyStackingContext');
2456
+ class SkyOverlayAdapterService {
2457
+ #renderer;
2458
+ #styleElement;
2459
+ constructor(rendererFactory) {
2460
+ this.#renderer = rendererFactory.createRenderer(undefined, null);
2461
+ }
2462
+ restrictBodyScroll() {
2463
+ // Create a style element to avoid overwriting any existing inline body styles.
2464
+ const styleElement = this.#renderer.createElement('style');
2465
+ const textNode = this.#renderer.createText('body { overflow: hidden }');
2466
+ // Apply a `data-` attribute to make unit testing easier.
2467
+ this.#renderer.setAttribute(styleElement, 'data-test-selector', 'sky-overlay-restrict-scroll-styles');
2468
+ this.#renderer.appendChild(styleElement, textNode);
2469
+ this.#renderer.appendChild(document.head, styleElement);
2470
+ if (this.#styleElement) {
2471
+ this.#destroyStyleElement();
2472
+ }
2473
+ this.#styleElement = styleElement;
2474
+ }
2475
+ releaseBodyScroll() {
2476
+ this.#destroyStyleElement();
2477
+ }
2478
+ #destroyStyleElement() {
2479
+ /* istanbul ignore else */
2480
+ if (this.#styleElement &&
2481
+ this.#styleElement.parentElement === document.head) {
2482
+ this.#renderer.removeChild(document.head, this.#styleElement);
2483
+ }
2484
+ }
2485
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
2486
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayAdapterService, providedIn: 'root' }); }
2487
+ }
2488
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayAdapterService, decorators: [{
2489
+ type: Injectable,
2490
+ args: [{
2491
+ providedIn: 'root',
2492
+ }]
2493
+ }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
2426
2494
 
2427
2495
  /**
2428
2496
  * Contextual information for each overlay.
@@ -2434,6 +2502,11 @@ class SkyOverlayContext {
2434
2502
  }
2435
2503
  }
2436
2504
 
2505
+ /**
2506
+ * @internal
2507
+ */
2508
+ const SKY_STACKING_CONTEXT = new InjectionToken('SkyStackingContext');
2509
+
2437
2510
  const POSITION_DEFAULT = 'fixed';
2438
2511
  /**
2439
2512
  * Omnibar is 1000.
@@ -2461,16 +2534,17 @@ class SkyOverlayComponent {
2461
2534
  }
2462
2535
  #backdropClick;
2463
2536
  #backdropClickObs;
2464
- #changeDetector;
2465
2537
  #closed;
2466
2538
  #closedObs;
2539
+ #ngUnsubscribe;
2540
+ #routerSubscription;
2541
+ #changeDetector;
2467
2542
  #context;
2468
2543
  #coreAdapter;
2469
- #injector;
2470
- #ngUnsubscribe;
2544
+ #environmentInjector;
2545
+ #idSvc;
2471
2546
  #router;
2472
- #routerSubscription;
2473
- constructor(changeDetector, injector, coreAdapter, context, idSvc, router) {
2547
+ constructor() {
2474
2548
  this.wrapperClass = '';
2475
2549
  this.enablePointerEvents = false;
2476
2550
  this.showBackdrop = false;
@@ -2478,12 +2552,13 @@ class SkyOverlayComponent {
2478
2552
  this.clipPath$ = new ReplaySubject(1);
2479
2553
  this.position = POSITION_DEFAULT;
2480
2554
  this.#ngUnsubscribe = new Subject();
2481
- this.#changeDetector = changeDetector;
2482
- this.#injector = injector;
2483
- this.#coreAdapter = coreAdapter;
2484
- this.#context = context;
2485
- this.#router = router;
2486
- this.id = idSvc.generateId();
2555
+ this.#changeDetector = inject(ChangeDetectorRef);
2556
+ this.#context = inject(SkyOverlayContext);
2557
+ this.#coreAdapter = inject(SkyCoreAdapterService);
2558
+ this.#environmentInjector = inject(EnvironmentInjector);
2559
+ this.#idSvc = inject(SkyIdService);
2560
+ this.#router = inject(Router, { optional: true });
2561
+ this.id = this.#idSvc.generateId();
2487
2562
  this.#backdropClick = new Subject();
2488
2563
  this.#closed = new Subject();
2489
2564
  this.#backdropClickObs = this.#backdropClick.asObservable();
@@ -2512,22 +2587,19 @@ class SkyOverlayComponent {
2512
2587
  throw new Error('[SkyOverlayComponent] Could not attach the component because the target element could not be found.');
2513
2588
  }
2514
2589
  this.targetRef.clear();
2515
- const injector = Injector.create({
2516
- providers: [
2517
- {
2518
- provide: SKY_STACKING_CONTEXT,
2519
- useValue: {
2520
- zIndex: new BehaviorSubject(parseInt(this.zIndex, 10))
2521
- .asObservable()
2522
- .pipe(takeUntil(this.#ngUnsubscribe)),
2523
- },
2590
+ const environmentInjector = createEnvironmentInjector([
2591
+ {
2592
+ provide: SKY_STACKING_CONTEXT,
2593
+ useValue: {
2594
+ zIndex: new BehaviorSubject(parseInt(this.zIndex, 10))
2595
+ .asObservable()
2596
+ .pipe(takeUntil(this.#ngUnsubscribe)),
2524
2597
  },
2525
- ...providers,
2526
- ],
2527
- parent: this.#injector,
2528
- });
2598
+ },
2599
+ ...providers,
2600
+ ], this.#environmentInjector);
2529
2601
  const componentRef = this.targetRef.createComponent(component, {
2530
- injector,
2602
+ environmentInjector,
2531
2603
  });
2532
2604
  // Run an initial change detection cycle after the component has been created.
2533
2605
  componentRef.changeDetectorRef.detectChanges();
@@ -2539,7 +2611,9 @@ class SkyOverlayComponent {
2539
2611
  throw new Error('[SkyOverlayComponent] Could not attach the template because the target element could not be found.');
2540
2612
  }
2541
2613
  this.targetRef.clear();
2542
- return this.targetRef.createEmbeddedView(templateRef, context);
2614
+ return this.targetRef.createEmbeddedView(templateRef, context, {
2615
+ injector: this.#environmentInjector,
2616
+ });
2543
2617
  }
2544
2618
  updateClipPath(clipPath) {
2545
2619
  this.clipPath$.next(clipPath);
@@ -2585,15 +2659,13 @@ class SkyOverlayComponent {
2585
2659
  this.#routerSubscription = undefined;
2586
2660
  }
2587
2661
  }
2588
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: SkyCoreAdapterService }, { token: SkyOverlayContext }, { token: SkyIdService }, { token: i4.Router, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
2589
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SkyOverlayComponent, selector: "sky-overlay", host: { properties: { "id": "this.id" } }, viewQueries: [{ propertyName: "overlayContentRef", first: true, predicate: ["overlayContentRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "overlayRef", first: true, predicate: ["overlayRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "targetRef", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n [class]=\"'sky-overlay-position-' + position + ' ' + wrapperClass\"\n [style.z-index]=\"zIndex\"\n [style.clip-path]=\"clipPath$ | async\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n", styles: [".sky-overlay{inset:0;width:100%;height:100%;display:flex;pointer-events:auto}.sky-overlay-position-absolute{position:absolute}.sky-overlay-position-fixed{position:fixed}.sky-overlay-content{position:relative;z-index:1;display:inline-flex;align-self:start;pointer-events:auto}.sky-overlay-backdrop{background:rgba(0,0,0,.5);inset:0;width:100%;height:100%;position:absolute}.enable-pointer-events-pass-through,.enable-pointer-events-pass-through .sky-overlay-backdrop{pointer-events:none}.enable-pointer-events-pass-through .sky-overlay-content{pointer-events:auto}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2662
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
2663
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.1", type: SkyOverlayComponent, isStandalone: true, selector: "sky-overlay", host: { properties: { "id": "this.id" } }, viewQueries: [{ propertyName: "overlayContentRef", first: true, predicate: ["overlayContentRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "overlayRef", first: true, predicate: ["overlayRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "targetRef", first: true, predicate: ["target"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n [class]=\"'sky-overlay-position-' + position + ' ' + wrapperClass\"\n [style.z-index]=\"zIndex\"\n [style.clip-path]=\"clipPath$ | async\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n", styles: [".sky-overlay{inset:0;width:100%;height:100%;display:flex;pointer-events:auto}.sky-overlay-position-absolute{position:absolute}.sky-overlay-position-fixed{position:fixed}.sky-overlay-content{position:relative;z-index:1;display:inline-flex;align-self:start;pointer-events:auto}.sky-overlay-backdrop{background:rgba(0,0,0,.5);inset:0;width:100%;height:100%;position:absolute}.enable-pointer-events-pass-through,.enable-pointer-events-pass-through .sky-overlay-backdrop{pointer-events:none}.enable-pointer-events-pass-through .sky-overlay-content{pointer-events:auto}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2590
2664
  }
2591
2665
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayComponent, decorators: [{
2592
2666
  type: Component,
2593
- args: [{ selector: 'sky-overlay', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [class]=\"'sky-overlay-position-' + position + ' ' + wrapperClass\"\n [style.z-index]=\"zIndex\"\n [style.clip-path]=\"clipPath$ | async\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n", styles: [".sky-overlay{inset:0;width:100%;height:100%;display:flex;pointer-events:auto}.sky-overlay-position-absolute{position:absolute}.sky-overlay-position-fixed{position:fixed}.sky-overlay-content{position:relative;z-index:1;display:inline-flex;align-self:start;pointer-events:auto}.sky-overlay-backdrop{background:rgba(0,0,0,.5);inset:0;width:100%;height:100%;position:absolute}.enable-pointer-events-pass-through,.enable-pointer-events-pass-through .sky-overlay-backdrop{pointer-events:none}.enable-pointer-events-pass-through .sky-overlay-content{pointer-events:auto}\n"] }]
2594
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Injector }, { type: SkyCoreAdapterService }, { type: SkyOverlayContext }, { type: SkyIdService }, { type: i4.Router, decorators: [{
2595
- type: Optional
2596
- }] }]; }, propDecorators: { id: [{
2667
+ args: [{ standalone: true, selector: 'sky-overlay', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule], template: "<div\n [class]=\"'sky-overlay-position-' + position + ' ' + wrapperClass\"\n [style.z-index]=\"zIndex\"\n [style.clip-path]=\"clipPath$ | async\"\n [ngClass]=\"{\n 'enable-pointer-events-pass-through': enablePointerEvents,\n 'sky-overlay': true\n }\"\n #overlayRef\n>\n <div class=\"sky-overlay-content\" #overlayContentRef>\n <ng-template #target> </ng-template>\n </div>\n <div *ngIf=\"showBackdrop\" class=\"sky-overlay-backdrop\"></div>\n</div>\n", styles: [".sky-overlay{inset:0;width:100%;height:100%;display:flex;pointer-events:auto}.sky-overlay-position-absolute{position:absolute}.sky-overlay-position-fixed{position:fixed}.sky-overlay-content{position:relative;z-index:1;display:inline-flex;align-self:start;pointer-events:auto}.sky-overlay-backdrop{background:rgba(0,0,0,.5);inset:0;width:100%;height:100%;position:absolute}.enable-pointer-events-pass-through,.enable-pointer-events-pass-through .sky-overlay-backdrop{pointer-events:none}.enable-pointer-events-pass-through .sky-overlay-content{pointer-events:auto}\n"] }]
2668
+ }], ctorParameters: function () { return []; }, propDecorators: { id: [{
2597
2669
  type: HostBinding,
2598
2670
  args: ['id']
2599
2671
  }], overlayContentRef: [{
@@ -2616,61 +2688,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
2616
2688
  }]
2617
2689
  }] } });
2618
2690
 
2619
- class SkyOverlayModule {
2620
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2621
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule, declarations: [SkyOverlayComponent], imports: [CommonModule] }); }
2622
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule, imports: [CommonModule] }); }
2623
- }
2624
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayModule, decorators: [{
2625
- type: NgModule,
2626
- args: [{
2627
- imports: [CommonModule],
2628
- declarations: [SkyOverlayComponent],
2629
- }]
2630
- }] });
2631
-
2632
- /**
2633
- * @internal
2634
- */
2635
- class SkyOverlayAdapterService {
2636
- #renderer;
2637
- #styleElement;
2638
- constructor(rendererFactory) {
2639
- this.#renderer = rendererFactory.createRenderer(undefined, null);
2640
- }
2641
- restrictBodyScroll() {
2642
- // Create a style element to avoid overwriting any existing inline body styles.
2643
- const styleElement = this.#renderer.createElement('style');
2644
- const textNode = this.#renderer.createText('body { overflow: hidden }');
2645
- // Apply a `data-` attribute to make unit testing easier.
2646
- this.#renderer.setAttribute(styleElement, 'data-test-selector', 'sky-overlay-restrict-scroll-styles');
2647
- this.#renderer.appendChild(styleElement, textNode);
2648
- this.#renderer.appendChild(document.head, styleElement);
2649
- if (this.#styleElement) {
2650
- this.#destroyStyleElement();
2651
- }
2652
- this.#styleElement = styleElement;
2653
- }
2654
- releaseBodyScroll() {
2655
- this.#destroyStyleElement();
2656
- }
2657
- #destroyStyleElement() {
2658
- /* istanbul ignore else */
2659
- if (this.#styleElement &&
2660
- this.#styleElement.parentElement === document.head) {
2661
- this.#renderer.removeChild(document.head, this.#styleElement);
2662
- }
2663
- }
2664
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
2665
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayAdapterService, providedIn: 'root' }); }
2666
- }
2667
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayAdapterService, decorators: [{
2668
- type: Injectable,
2669
- args: [{
2670
- providedIn: 'root',
2671
- }]
2672
- }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
2673
-
2674
2691
  /**
2675
2692
  * This service is used to create new overlays.
2676
2693
  * @internal
@@ -2679,8 +2696,11 @@ class SkyOverlayService {
2679
2696
  static { this.overlays = []; }
2680
2697
  #adapter = inject(SkyOverlayAdapterService);
2681
2698
  #applicationRef = inject(ApplicationRef);
2682
- #dynamicComponentSvc = inject(SkyDynamicComponentService);
2699
+ #dynamicComponentSvc;
2683
2700
  #environmentInjector = inject(EnvironmentInjector);
2701
+ constructor(dynamicComponentSvc) {
2702
+ this.#dynamicComponentSvc = dynamicComponentSvc;
2703
+ }
2684
2704
  /**
2685
2705
  * Creates an empty overlay. Use the returned `SkyOverlayInstance` to append content.
2686
2706
  * @param config Configuration for the overlay.
@@ -2764,7 +2784,7 @@ class SkyOverlayService {
2764
2784
  }
2765
2785
  }
2766
2786
  }
2767
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
2787
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayService, deps: [{ token: SkyDynamicComponentService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2768
2788
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayService, providedIn: 'root' }); }
2769
2789
  }
2770
2790
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayService, decorators: [{
@@ -2772,7 +2792,26 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
2772
2792
  args: [{
2773
2793
  providedIn: 'root',
2774
2794
  }]
2775
- }] });
2795
+ }], ctorParameters: function () { return [{ type: SkyDynamicComponentService }]; } });
2796
+ /**
2797
+ * This service is used to create new overlays.
2798
+ * @internal
2799
+ * @deprecated Use `SkyOverlayService` to open a standalone component instead.
2800
+ */
2801
+ class SkyOverlayLegacyService extends SkyOverlayService {
2802
+ /* istanbul ignore next */
2803
+ constructor(dynamicComponentSvc) {
2804
+ super(dynamicComponentSvc);
2805
+ }
2806
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayLegacyService, deps: [{ token: SkyDynamicComponentLegacyService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2807
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayLegacyService, providedIn: 'any' }); }
2808
+ }
2809
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyOverlayLegacyService, decorators: [{
2810
+ type: Injectable,
2811
+ args: [{
2812
+ providedIn: 'any',
2813
+ }]
2814
+ }], ctorParameters: function () { return [{ type: SkyDynamicComponentLegacyService }]; } });
2776
2815
 
2777
2816
  class SkyPercentPipe {
2778
2817
  get defaultLocale() {
@@ -3280,7 +3319,7 @@ class SkyAppTitleService {
3280
3319
  this.#title.setTitle(args.titleParts.join(' - '));
3281
3320
  }
3282
3321
  }
3283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppTitleService, deps: [{ token: i1$1.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
3322
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppTitleService, deps: [{ token: i1$2.Title }], target: i0.ɵɵFactoryTarget.Injectable }); }
3284
3323
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppTitleService, providedIn: 'root' }); }
3285
3324
  }
3286
3325
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAppTitleService, decorators: [{
@@ -3288,7 +3327,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
3288
3327
  args: [{
3289
3328
  providedIn: 'root',
3290
3329
  }]
3291
- }], ctorParameters: function () { return [{ type: i1$1.Title }]; } });
3330
+ }], ctorParameters: function () { return [{ type: i1$2.Title }]; } });
3292
3331
 
3293
3332
  /**
3294
3333
  * Trims whitespace in each text node that is a direct descendent of the current element.
@@ -3849,5 +3888,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
3849
3888
  * Generated bundle index. Do not edit.
3850
3889
  */
3851
3890
 
3852
- export { NumericOptions, SKY_LOG_LEVEL, SKY_STACKING_CONTEXT, SkyAffixAutoFitContext, SkyAffixModule, SkyAffixService, SkyAffixer, SkyAppFormat, SkyAppTitleService, SkyAppWindowRef, SkyCoreAdapterModule, SkyCoreAdapterService, SkyDefaultInputProvider, SkyDockItem, SkyDockLocation, SkyDockModule, SkyDockService, SkyDynamicComponentLocation, SkyDynamicComponentModule, SkyDynamicComponentService, SkyIdModule, SkyIdService, SkyLayoutHostService, SkyLiveAnnouncerService, SkyLogModule, SkyLogService, SkyMediaBreakpoints, SkyMediaQueryModule, SkyMediaQueryService, SkyMutationObserverService, SkyNumericModule, SkyNumericPipe, SkyNumericService, SkyOverlayInstance, SkyOverlayModule, SkyOverlayService, SkyPercentPipe, SkyPercentPipeModule, SkyResizeObserverMediaQueryService, SkyResizeObserverService, SkyScrollableHostService, SkyTrimModule, SkyUIConfigService, SkyViewkeeperHostOptions, SkyViewkeeperModule, SkyViewkeeperService, SkyAffixDirective as λ1, SkyIdDirective as λ2, SkyViewkeeperDirective as λ3, SkyTrimDirective as λ4 };
3891
+ export { NumericOptions, SKY_LOG_LEVEL, SKY_STACKING_CONTEXT, SkyAffixAutoFitContext, SkyAffixModule, SkyAffixService, SkyAffixer, SkyAppFormat, SkyAppTitleService, SkyAppWindowRef, SkyCoreAdapterModule, SkyCoreAdapterService, SkyDefaultInputProvider, SkyDockItem, SkyDockLocation, SkyDockModule, SkyDockService, SkyDynamicComponentLegacyService, SkyDynamicComponentLocation, SkyDynamicComponentModule, SkyDynamicComponentService, SkyIdModule, SkyIdService, SkyLayoutHostService, SkyLiveAnnouncerService, SkyLogModule, SkyLogService, SkyMediaBreakpoints, SkyMediaQueryModule, SkyMediaQueryService, SkyMutationObserverService, SkyNumericModule, SkyNumericPipe, SkyNumericService, SkyOverlayInstance, SkyOverlayLegacyService, SkyOverlayModule, SkyOverlayService, SkyPercentPipe, SkyPercentPipeModule, SkyResizeObserverMediaQueryService, SkyResizeObserverService, SkyScrollableHostService, SkyTrimModule, SkyUIConfigService, SkyViewkeeperHostOptions, SkyViewkeeperModule, SkyViewkeeperService, SkyAffixDirective as λ1, SkyIdDirective as λ2, SkyViewkeeperDirective as λ3, SkyTrimDirective as λ4 };
3853
3892
  //# sourceMappingURL=skyux-core.mjs.map