UNPKG

@coreui/angular

Version:

CoreUI Components Library for Angular

48 lines 6.38 kB
import { DOCUMENT } from '@angular/common'; import { DestroyRef, Directive, effect, ElementRef, inject, Input, signal } from '@angular/core'; import { takeUntilDestroyed } from '@angular/core/rxjs-interop'; import { fromEvent } from 'rxjs'; import * as i0 from "@angular/core"; export class ShadowOnScrollDirective { #destroyRef = inject(DestroyRef); #document = inject(DOCUMENT); #elementRef = inject(ElementRef); #scrolled = signal(false); #scrollEffect = effect(() => { this.#elementRef.nativeElement.classList.toggle(this.#shadowClass, this.#scrolled()); }); #observable; #shadowClass = 'shadow-sm'; constructor() { this.#destroyRef.onDestroy(() => { this.#scrollEffect?.destroy(); }); } set cShadowOnScroll(value) { this.#scrolled.set(false); if (value) { this.#shadowClass = value === true ? 'shadow' : `shadow-${value}`; this.#observable = fromEvent(this.#document, 'scroll') .pipe(takeUntilDestroyed(this.#destroyRef)) .subscribe(scrolled => { this.#scrolled.set(this.#document.documentElement.scrollTop > 0); }); } else { this.#observable?.unsubscribe(); } } ; static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ShadowOnScrollDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: ShadowOnScrollDirective, isStandalone: true, selector: "[cShadowOnScroll]", inputs: { cShadowOnScroll: "cShadowOnScroll" }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ShadowOnScrollDirective, decorators: [{ type: Directive, args: [{ selector: '[cShadowOnScroll]', standalone: true }] }], ctorParameters: () => [], propDecorators: { cShadowOnScroll: [{ type: Input }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhZG93LW9uLXNjcm9sbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JldWktYW5ndWxhci9zcmMvbGliL3V0aWxpdGllcy9zaGFkb3ctb24tc2Nyb2xsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDakgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFNBQVMsRUFBZ0IsTUFBTSxNQUFNLENBQUM7O0FBTS9DLE1BQU0sT0FBTyx1QkFBdUI7SUFFekIsV0FBVyxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3QyxTQUFTLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLFdBQVcsR0FBZSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDN0MsU0FBUyxHQUE0QixNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFbkQsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZGLENBQUMsQ0FBQyxDQUFDO0lBRUgsV0FBVyxDQUFnQjtJQUMzQixZQUFZLEdBQUcsV0FBVyxDQUFDO0lBRTNCO1FBQ0UsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzlCLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFDSSxlQUFlLENBQUMsS0FBcUM7UUFDdkQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDMUIsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUNWLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLEtBQUssRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDO2lCQUNuRCxJQUFJLENBQ0gsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUNyQztpQkFDQSxTQUFTLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLFdBQVcsRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUFBLENBQUM7K0dBbkNTLHVCQUF1QjttR0FBdkIsdUJBQXVCOzs0RkFBdkIsdUJBQXVCO2tCQUpuQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxtQkFBbUI7b0JBQzdCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjt3REFzQkssZUFBZTtzQkFEbEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIERpcmVjdGl2ZSwgZWZmZWN0LCBFbGVtZW50UmVmLCBpbmplY3QsIElucHV0LCBzaWduYWwsIFdyaXRhYmxlU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbY1NoYWRvd09uU2Nyb2xsXScsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgU2hhZG93T25TY3JvbGxEaXJlY3RpdmUge1xuXG4gIHJlYWRvbmx5ICNkZXN0cm95UmVmOiBEZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICByZWFkb25seSAjZG9jdW1lbnQ6IERvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcmVhZG9ubHkgI2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gIHJlYWRvbmx5ICNzY3JvbGxlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xuXG4gIHJlYWRvbmx5ICNzY3JvbGxFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIHRoaXMuI2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKHRoaXMuI3NoYWRvd0NsYXNzLCB0aGlzLiNzY3JvbGxlZCgpKTtcbiAgfSk7XG5cbiAgI29ic2VydmFibGUhOiBTdWJzY3JpcHRpb247XG4gICNzaGFkb3dDbGFzcyA9ICdzaGFkb3ctc20nO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuI2Rlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMuI3Njcm9sbEVmZmVjdD8uZGVzdHJveSgpO1xuICAgIH0pO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IGNTaGFkb3dPblNjcm9sbCh2YWx1ZTogJ3NtJyB8ICdsZycgfCAnbm9uZScgfCBib29sZWFuKSB7XG4gICAgdGhpcy4jc2Nyb2xsZWQuc2V0KGZhbHNlKTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuI3NoYWRvd0NsYXNzID0gdmFsdWUgPT09IHRydWUgPyAnc2hhZG93JyA6IGBzaGFkb3ctJHt2YWx1ZX1gO1xuICAgICAgdGhpcy4jb2JzZXJ2YWJsZSA9IGZyb21FdmVudCh0aGlzLiNkb2N1bWVudCwgJ3Njcm9sbCcpXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoc2Nyb2xsZWQgPT4ge1xuICAgICAgICAgIHRoaXMuI3Njcm9sbGVkLnNldCh0aGlzLiNkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wID4gMCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNvYnNlcnZhYmxlPy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfTtcbn1cbiJdfQ==