UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

39 lines 8.2 kB
import { DOCUMENT } from '@angular/common'; import { inject, Injectable } from '@angular/core'; import { WA_WINDOW } from '@ng-web-apis/common'; import { tuiCloseWatcher, tuiTypedFromEvent, tuiZonefull } from '@taiga-ui/cdk/observables'; import { tuiContainsOrAfter, tuiGetActualTarget, tuiInjectElement, tuiIsElement, } from '@taiga-ui/cdk/utils/dom'; import { tuiGetViewportWidth } from '@taiga-ui/core/utils'; import { filter, map, merge, Observable, switchMap, take } from 'rxjs'; import * as i0 from "@angular/core"; const SCROLLBAR_PLACEHOLDER = 17; class TuiDialogCloseService extends Observable { constructor() { super((subscriber) => merge(this.esc$, this.mousedown$, tuiCloseWatcher().pipe(tuiZonefull())).subscribe(subscriber)); this.win = inject(WA_WINDOW); this.doc = inject(DOCUMENT); this.el = tuiInjectElement(); this.esc$ = tuiTypedFromEvent(this.doc, 'keydown').pipe(filter((event) => { const target = tuiGetActualTarget(event); return ( // @ts-ignore typeof CloseWatcher === 'undefined' && event.key?.toLowerCase() === 'escape' && !event.defaultPrevented && (this.el.contains(target) || this.isOutside(target))); })); this.mousedown$ = tuiTypedFromEvent(this.doc, 'mousedown').pipe(filter((event) => tuiGetViewportWidth(this.win) - event.clientX > SCROLLBAR_PLACEHOLDER && this.isOutside(tuiGetActualTarget(event))), switchMap(() => tuiTypedFromEvent(this.doc, 'mouseup').pipe(take(1), map(tuiGetActualTarget), filter((target) => this.isOutside(target))))); } isOutside(target) { return (tuiIsElement(target) && (!tuiContainsOrAfter(this.el, target) || target === this.el)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDialogCloseService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDialogCloseService }); } } export { TuiDialogCloseService }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDialogCloseService, decorators: [{ type: Injectable }], ctorParameters: function () { return []; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhbG9nLWNsb3NlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2NvbXBvbmVudHMvZGlhbG9nL2RpYWxvZy1jbG9zZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QyxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFDLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRixPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsWUFBWSxHQUNmLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDOztBQUVyRSxNQUFNLHFCQUFxQixHQUFHLEVBQUUsQ0FBQztBQUVqQyxNQUNhLHFCQUFzQixTQUFRLFVBQW1CO0lBa0MxRDtRQUNJLEtBQUssQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQ2pCLEtBQUssQ0FDRCxJQUFJLENBQUMsSUFBSSxFQUNULElBQUksQ0FBQyxVQUFVLEVBQ2YsZUFBZSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3hDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUMxQixDQUFDO1FBeENXLFFBQUcsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN2QixPQUFFLEdBQUcsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixTQUFJLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLENBQy9ELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ2IsTUFBTSxNQUFNLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFekMsT0FBTztZQUNILGFBQWE7WUFDYixPQUFPLFlBQVksS0FBSyxXQUFXO2dCQUNuQyxLQUFLLENBQUMsR0FBRyxFQUFFLFdBQVcsRUFBRSxLQUFLLFFBQVE7Z0JBQ3JDLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtnQkFDdkIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQ3ZELENBQUM7UUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO1FBRWUsZUFBVSxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUN2RSxNQUFNLENBQ0YsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNOLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsT0FBTyxHQUFHLHFCQUFxQjtZQUNyRSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQ2hELEVBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNYLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUN2QyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ1AsR0FBRyxDQUFDLGtCQUFrQixDQUFDLEVBQ3ZCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUM3QyxDQUNKLENBQ0osQ0FBQztJQVVGLENBQUM7SUFFTyxTQUFTLENBQUMsTUFBbUI7UUFDakMsT0FBTyxDQUNILFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDcEIsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FDL0QsQ0FBQztJQUNOLENBQUM7K0dBakRRLHFCQUFxQjttSEFBckIscUJBQXFCOztTQUFyQixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFEakMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RE9DVU1FTlR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge2luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1dBX1dJTkRPV30gZnJvbSAnQG5nLXdlYi1hcGlzL2NvbW1vbic7XG5pbXBvcnQge3R1aUNsb3NlV2F0Y2hlciwgdHVpVHlwZWRGcm9tRXZlbnQsIHR1aVpvbmVmdWxsfSBmcm9tICdAdGFpZ2EtdWkvY2RrL29ic2VydmFibGVzJztcbmltcG9ydCB7XG4gICAgdHVpQ29udGFpbnNPckFmdGVyLFxuICAgIHR1aUdldEFjdHVhbFRhcmdldCxcbiAgICB0dWlJbmplY3RFbGVtZW50LFxuICAgIHR1aUlzRWxlbWVudCxcbn0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9kb20nO1xuaW1wb3J0IHt0dWlHZXRWaWV3cG9ydFdpZHRofSBmcm9tICdAdGFpZ2EtdWkvY29yZS91dGlscyc7XG5pbXBvcnQge2ZpbHRlciwgbWFwLCBtZXJnZSwgT2JzZXJ2YWJsZSwgc3dpdGNoTWFwLCB0YWtlfSBmcm9tICdyeGpzJztcblxuY29uc3QgU0NST0xMQkFSX1BMQUNFSE9MREVSID0gMTc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUdWlEaWFsb2dDbG9zZVNlcnZpY2UgZXh0ZW5kcyBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbiA9IGluamVjdChXQV9XSU5ET1cpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsID0gdHVpSW5qZWN0RWxlbWVudCgpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlc2MkID0gdHVpVHlwZWRGcm9tRXZlbnQodGhpcy5kb2MsICdrZXlkb3duJykucGlwZShcbiAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdHVpR2V0QWN0dWFsVGFyZ2V0KGV2ZW50KTtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgdHlwZW9mIENsb3NlV2F0Y2hlciA9PT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgICAgICBldmVudC5rZXk/LnRvTG93ZXJDYXNlKCkgPT09ICdlc2NhcGUnICYmXG4gICAgICAgICAgICAgICAgIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiZcbiAgICAgICAgICAgICAgICAodGhpcy5lbC5jb250YWlucyh0YXJnZXQpIHx8IHRoaXMuaXNPdXRzaWRlKHRhcmdldCkpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBtb3VzZWRvd24kID0gdHVpVHlwZWRGcm9tRXZlbnQodGhpcy5kb2MsICdtb3VzZWRvd24nKS5waXBlKFxuICAgICAgICBmaWx0ZXIoXG4gICAgICAgICAgICAoZXZlbnQpID0+XG4gICAgICAgICAgICAgICAgdHVpR2V0Vmlld3BvcnRXaWR0aCh0aGlzLndpbikgLSBldmVudC5jbGllbnRYID4gU0NST0xMQkFSX1BMQUNFSE9MREVSICYmXG4gICAgICAgICAgICAgICAgdGhpcy5pc091dHNpZGUodHVpR2V0QWN0dWFsVGFyZ2V0KGV2ZW50KSksXG4gICAgICAgICksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICAgICAgICAgICAgdHVpVHlwZWRGcm9tRXZlbnQodGhpcy5kb2MsICdtb3VzZXVwJykucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIG1hcCh0dWlHZXRBY3R1YWxUYXJnZXQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigodGFyZ2V0KSA9PiB0aGlzLmlzT3V0c2lkZSh0YXJnZXQpKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigoc3Vic2NyaWJlcikgPT5cbiAgICAgICAgICAgIG1lcmdlKFxuICAgICAgICAgICAgICAgIHRoaXMuZXNjJCxcbiAgICAgICAgICAgICAgICB0aGlzLm1vdXNlZG93biQsXG4gICAgICAgICAgICAgICAgdHVpQ2xvc2VXYXRjaGVyKCkucGlwZSh0dWlab25lZnVsbCgpKSxcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKHN1YnNjcmliZXIpLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNPdXRzaWRlKHRhcmdldDogRXZlbnRUYXJnZXQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR1aUlzRWxlbWVudCh0YXJnZXQpICYmXG4gICAgICAgICAgICAoIXR1aUNvbnRhaW5zT3JBZnRlcih0aGlzLmVsLCB0YXJnZXQpIHx8IHRhcmdldCA9PT0gdGhpcy5lbClcbiAgICAgICAgKTtcbiAgICB9XG59XG4iXX0=