@skyux/core 5.6.1 → 5.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1230,13 +1230,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1230
1230
  class SkyDockService {
1231
1231
  constructor(dynamicComponentService) {
1232
1232
  this.dynamicComponentService = dynamicComponentService;
1233
- this._items = [];
1234
1233
  }
1235
1234
  /**
1236
1235
  * Returns all docked items.
1237
1236
  */
1238
1237
  get items() {
1239
- return this._items;
1238
+ return SkyDockService._items;
1240
1239
  }
1241
1240
  /**
1242
1241
  * Docks a component to the bottom of the page.
@@ -1244,20 +1243,20 @@ class SkyDockService {
1244
1243
  * @param config Options that affect the docking action.
1245
1244
  */
1246
1245
  insertComponent(component, config) {
1247
- if (!this.dockRef) {
1246
+ if (!SkyDockService.dockRef) {
1248
1247
  this.createDock();
1249
1248
  }
1250
- const itemRef = this.dockRef.instance.insertComponent(component, config);
1249
+ const itemRef = SkyDockService.dockRef.instance.insertComponent(component, config);
1251
1250
  const item = new SkyDockItem(itemRef.componentRef.instance, itemRef.stackOrder);
1252
1251
  item.destroyed.subscribe(() => {
1253
- this.dockRef.instance.removeItem(itemRef);
1254
- this._items.splice(this._items.indexOf(item), 1);
1255
- if (this._items.length === 0) {
1252
+ SkyDockService.dockRef.instance.removeItem(itemRef);
1253
+ SkyDockService._items.splice(SkyDockService._items.indexOf(item), 1);
1254
+ if (SkyDockService._items.length === 0) {
1256
1255
  this.destroyDock();
1257
1256
  }
1258
1257
  });
1259
- this._items.push(item);
1260
- this._items.sort(sortByStackOrder);
1258
+ SkyDockService._items.push(item);
1259
+ SkyDockService._items.sort(sortByStackOrder);
1261
1260
  return item;
1262
1261
  }
1263
1262
  /**
@@ -1290,20 +1289,24 @@ class SkyDockService {
1290
1289
  referenceEl: this.options.referenceEl,
1291
1290
  };
1292
1291
  }
1293
- this.dockRef = this.dynamicComponentService.createComponent(SkyDockComponent, dockOptions);
1294
- this.dockRef.instance.setOptions(this.options);
1292
+ SkyDockService.dockRef = this.dynamicComponentService.createComponent(SkyDockComponent, dockOptions);
1293
+ SkyDockService.dockRef.instance.setOptions(this.options);
1295
1294
  }
1296
1295
  destroyDock() {
1297
- this.dynamicComponentService.removeComponent(this.dockRef);
1298
- this.dockRef = undefined;
1296
+ this.dynamicComponentService.removeComponent(SkyDockService.dockRef);
1297
+ SkyDockService.dockRef = undefined;
1299
1298
  }
1300
1299
  }
1300
+ SkyDockService._items = [];
1301
1301
  SkyDockService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyDockService, deps: [{ token: SkyDynamicComponentService }], target: i0.ɵɵFactoryTarget.Injectable });
1302
- SkyDockService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyDockService, providedIn: 'root' });
1302
+ SkyDockService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyDockService, providedIn: 'any' });
1303
1303
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyDockService, decorators: [{
1304
1304
  type: Injectable,
1305
1305
  args: [{
1306
- providedIn: 'root',
1306
+ // Must be 'any' so that the dock component is created in the context of its module's injector.
1307
+ // If set to 'root', the component's dependency injections would only be derived from the root
1308
+ // injector and may loose context if the dock was opened from within a lazy-loaded module.
1309
+ providedIn: 'any',
1307
1310
  }]
1308
1311
  }], ctorParameters: function () { return [{ type: SkyDynamicComponentService }]; } });
1309
1312
 
@@ -1552,7 +1555,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImpo
1552
1555
  /**
1553
1556
  * NOTICE: DO NOT MODIFY THIS FILE!
1554
1557
  * The contents of this file were automatically generated by
1555
- * the 'ng generate @skyux/i18n:lib-resources-module modules/shared/sky-core' schematic.
1558
+ * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-core' schematic.
1556
1559
  * To update this file, simply rerun the command.
1557
1560
  */
1558
1561
  const RESOURCES = {
@@ -1625,7 +1628,7 @@ class NumericOptions {
1625
1628
  this.iso = 'USD';
1626
1629
  /**
1627
1630
  * Indicates whether to shorten numbers to rounded numbers and abbreviation characters
1628
- * such as K for thousands, M for millions, B for billions, and T for trillion.
1631
+ * such as K for thousands, M for millions, B for billions, and T for trillions.
1629
1632
  */
1630
1633
  this.truncate = true;
1631
1634
  /**
@@ -1653,8 +1656,6 @@ function parseIntAutoRadix(text) {
1653
1656
  // See: https://github.com/ng-packagr/ng-packagr/issues/641
1654
1657
  // @dynamic
1655
1658
  class SkyNumberFormatUtility {
1656
- /* istanbul ignore next */
1657
- constructor() { }
1658
1659
  static formatNumber(locale, value, style, digits, currency = null, currencyAsSymbol = false, currencySign) {
1659
1660
  if (value == null) {
1660
1661
  return null;
@@ -2435,20 +2436,30 @@ class SkyScrollableHostService {
2435
2436
  */
2436
2437
  watchScrollableHost(elementRef) {
2437
2438
  const subscribers = [];
2438
- let mutationObserver;
2439
+ let parentMutationObserver;
2440
+ let documentHiddenElementMutationObserver;
2439
2441
  return new Observable((subscriber) => {
2440
2442
  subscribers.push(subscriber);
2441
2443
  let scrollableHost = this.findScrollableHost(elementRef.nativeElement);
2442
2444
  if (subscribers.length === 1) {
2443
- mutationObserver = this.mutationObserverSvc.create(() => {
2445
+ parentMutationObserver = this.mutationObserverSvc.create(() => {
2444
2446
  const newScrollableHost = this.findScrollableHost(elementRef.nativeElement);
2445
- if (newScrollableHost !== scrollableHost) {
2447
+ if (newScrollableHost !== scrollableHost &&
2448
+ elementRef.nativeElement.offsetParent) {
2446
2449
  scrollableHost = newScrollableHost;
2447
- this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
2450
+ this.observeForScrollableHostChanges(scrollableHost, parentMutationObserver);
2451
+ notifySubscribers(subscribers, scrollableHost);
2452
+ }
2453
+ });
2454
+ this.observeForScrollableHostChanges(scrollableHost, parentMutationObserver);
2455
+ documentHiddenElementMutationObserver = this.mutationObserverSvc.create(() => {
2456
+ if (!elementRef.nativeElement.offsetParent) {
2457
+ scrollableHost = undefined;
2458
+ this.observeForScrollableHostChanges(scrollableHost, parentMutationObserver);
2448
2459
  notifySubscribers(subscribers, scrollableHost);
2449
2460
  }
2450
2461
  });
2451
- this.observeForScrollableHostChanges(scrollableHost, mutationObserver);
2462
+ this.observeDocumentHiddenElementChanges(documentHiddenElementMutationObserver);
2452
2463
  }
2453
2464
  subscriber.next(scrollableHost);
2454
2465
  subscriber.add(() => {
@@ -2459,7 +2470,8 @@ class SkyScrollableHostService {
2459
2470
  subscribers.splice(subIndex, 1);
2460
2471
  }
2461
2472
  if (subscribers.length === 0) {
2462
- mutationObserver.disconnect();
2473
+ documentHiddenElementMutationObserver.disconnect();
2474
+ parentMutationObserver.disconnect();
2463
2475
  }
2464
2476
  });
2465
2477
  });
@@ -2468,7 +2480,7 @@ class SkyScrollableHostService {
2468
2480
  * Returns an observable which emits whenever the element's scrollable host emits a scroll event. The observable will always emit the scroll events from the elements current scrollable host and will update based on any scrollable host changes. The observable will also emit once whenever the scrollable host changes.
2469
2481
  * @param elementRef The element whose scrollable host scroll events are being requested
2470
2482
  * @param completionObservable An observable which alerts the internal observers that they should complete
2471
- * @returns An observable which emits the scroll events from the given element's scrollable host
2483
+ * @returns An observable which emits when the elements scrollable host is scrolled or is changed
2472
2484
  */
2473
2485
  watchScrollableHostScrollEvents(elementRef) {
2474
2486
  const subscribers = [];
@@ -2487,11 +2499,13 @@ class SkyScrollableHostService {
2487
2499
  }
2488
2500
  scrollableHost = newScrollableHost;
2489
2501
  newScrollableHostObservable = new Subject();
2490
- scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')
2491
- .pipe(takeUntil(newScrollableHostObservable))
2492
- .subscribe(() => {
2493
- notifySubscribers(subscribers);
2494
- });
2502
+ if (newScrollableHost) {
2503
+ scrollEventSubscription = fromEvent(newScrollableHost, 'scroll')
2504
+ .pipe(takeUntil(newScrollableHostObservable))
2505
+ .subscribe(() => {
2506
+ notifySubscribers(subscribers);
2507
+ });
2508
+ }
2495
2509
  });
2496
2510
  }
2497
2511
  subscriber.add(() => {
@@ -2534,12 +2548,20 @@ class SkyScrollableHostService {
2534
2548
  }
2535
2549
  return parent;
2536
2550
  }
2551
+ observeDocumentHiddenElementChanges(mutationObserver) {
2552
+ mutationObserver.observe(document.documentElement, {
2553
+ attributes: true,
2554
+ attributeFilter: ['class', 'style', 'hidden'],
2555
+ childList: true,
2556
+ subtree: true,
2557
+ });
2558
+ }
2537
2559
  observeForScrollableHostChanges(element, mutationObserver) {
2538
2560
  mutationObserver.disconnect();
2539
2561
  if (element instanceof HTMLElement) {
2540
2562
  mutationObserver.observe(element, {
2541
2563
  attributes: true,
2542
- attributeFilter: ['class', 'style.overflow', 'style.overflow-y'],
2564
+ attributeFilter: ['class', 'style'],
2543
2565
  childList: true,
2544
2566
  subtree: true,
2545
2567
  });
@@ -2547,7 +2569,7 @@ class SkyScrollableHostService {
2547
2569
  else {
2548
2570
  mutationObserver.observe(document.documentElement, {
2549
2571
  attributes: true,
2550
- attributeFilter: ['class', 'style.overflow', 'style.overflow-y'],
2572
+ attributeFilter: ['class', 'style'],
2551
2573
  childList: true,
2552
2574
  subtree: true,
2553
2575
  });