Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 1x 102x 102x 102x 102x 102x 101x 87x 102x | /**
* Copyright (c) Siemens 2016 - 2025
* SPDX-License-Identifier: MIT
*/
import {
booleanAttribute,
Directive,
ElementRef,
inject,
input,
OnDestroy,
OnInit,
output
} from '@angular/core';
import { Subscription } from 'rxjs';
import { ElementDimensions, ResizeObserverService } from './resize-observer.service';
/**
* Directive to emit events on element size change. Use like this:
* `<div (siResizeObserver)="handleResize($event)">`
* When the size of the element changes, an event in the format
* `{ width: number, height: number }`
* will be emitted. Also an initial event will be emitted on init.
*
* By default, events are throttled and to an event every 100ms. To change
* this, add `[resizeThrottle]="200"` on the same element. Input in milliseconds.
*/
@Directive({
selector: '[siResizeObserver]'
})
export class SiResizeObserverDirective implements OnInit, OnDestroy {
/** @defaultValue 100 */
readonly resizeThrottle = input(100);
/** @defaultValue true */
readonly emitInitial = input(true, { transform: booleanAttribute });
readonly siResizeObserver = output<ElementDimensions>();
private subs?: Subscription;
private element = inject(ElementRef);
private service = inject(ResizeObserverService);
ngOnInit(): void {
this.subs = this.service
.observe(this.element.nativeElement, this.resizeThrottle(), this.emitInitial())
.subscribe(value => this.siResizeObserver.emit(value));
}
ngOnDestroy(): void {
this.subs?.unsubscribe();
}
}
|