@angular/cdk 19.0.3 → 19.0.4

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,6 +1,6 @@
1
1
  import { coerceNumberProperty, coerceElement } from '@angular/cdk/coercion';
2
2
  import * as i0 from '@angular/core';
3
- import { InjectionToken, forwardRef, Directive, Input, inject, NgZone, Injectable, ElementRef, ChangeDetectorRef, Injector, afterNextRender, booleanAttribute, Optional, Inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, ViewChild, ViewContainerRef, TemplateRef, IterableDiffers, NgModule } from '@angular/core';
3
+ import { InjectionToken, forwardRef, Directive, Input, inject, NgZone, Injectable, ElementRef, RendererFactory2, ChangeDetectorRef, Injector, afterNextRender, booleanAttribute, Optional, Inject, Component, ViewEncapsulation, ChangeDetectionStrategy, Output, ViewChild, ViewContainerRef, TemplateRef, IterableDiffers, NgModule } from '@angular/core';
4
4
  import { Subject, of, Observable, fromEvent, animationFrameScheduler, asapScheduler, Subscription, isObservable } from 'rxjs';
5
5
  import { distinctUntilChanged, auditTime, filter, takeUntil, startWith, pairwise, switchMap, shareReplay } from 'rxjs/operators';
6
6
  import { Platform, getRtlScrollAxisType, RtlScrollAxisType, supportsScrollBehavior } from '@angular/cdk/platform';
@@ -527,25 +527,23 @@ const DEFAULT_RESIZE_TIME = 20;
527
527
  */
528
528
  class ViewportRuler {
529
529
  _platform = inject(Platform);
530
+ _listeners;
530
531
  /** Cached viewport dimensions. */
531
532
  _viewportSize;
532
533
  /** Stream of viewport change events. */
533
534
  _change = new Subject();
534
- /** Event listener that will be used to handle the viewport change events. */
535
- _changeListener = (event) => {
536
- this._change.next(event);
537
- };
538
535
  /** Used to reference correct document/window */
539
536
  _document = inject(DOCUMENT, { optional: true });
540
537
  constructor() {
541
538
  const ngZone = inject(NgZone);
539
+ const renderer = inject(RendererFactory2).createRenderer(null, null);
542
540
  ngZone.runOutsideAngular(() => {
543
541
  if (this._platform.isBrowser) {
544
- const window = this._getWindow();
545
- // Note that bind the events ourselves, rather than going through something like RxJS's
546
- // `fromEvent` so that we can ensure that they're bound outside of the NgZone.
547
- window.addEventListener('resize', this._changeListener);
548
- window.addEventListener('orientationchange', this._changeListener);
542
+ const changeListener = (event) => this._change.next(event);
543
+ this._listeners = [
544
+ renderer.listen('window', 'resize', changeListener),
545
+ renderer.listen('window', 'orientationchange', changeListener),
546
+ ];
549
547
  }
550
548
  // Clear the cached position so that the viewport is re-measured next time it is required.
551
549
  // We don't need to keep track of the subscription, because it is completed on destroy.
@@ -553,11 +551,7 @@ class ViewportRuler {
553
551
  });
554
552
  }
555
553
  ngOnDestroy() {
556
- if (this._platform.isBrowser) {
557
- const window = this._getWindow();
558
- window.removeEventListener('resize', this._changeListener);
559
- window.removeEventListener('orientationchange', this._changeListener);
560
- }
554
+ this._listeners?.forEach(cleanup => cleanup());
561
555
  this._change.complete();
562
556
  }
563
557
  /** Returns the viewport's width and height. */