UNPKG

@coreui/angular

Version:

CoreUI Components Library for Angular

82 lines 11.6 kB
import { inject, Injectable, RendererFactory2 } from '@angular/core'; import { DOCUMENT } from '@angular/common'; import { Subject } from 'rxjs'; import * as i0 from "@angular/core"; export class BackdropService { constructor() { this.#backdropClick = new Subject(); this.backdropClick$ = this.#backdropClick.asObservable(); this.#document = inject(DOCUMENT); this.#rendererFactory = inject(RendererFactory2); this.#renderer = this.#rendererFactory.createRenderer(null, null); this.scrollbarWidth = this.#scrollbarWidth; this.#scrollBarVisible = true; } #backdropClick; #document; #rendererFactory; #renderer; #unListen; get #scrollbarWidth() { // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes const documentWidth = this.#document.documentElement.clientWidth; const scrollbarWidth = Math.abs((this.#document.defaultView?.innerWidth ?? documentWidth) - documentWidth); return `${scrollbarWidth}px`; } setBackdrop(type = 'modal') { const backdropElement = this.#renderer.createElement('div'); this.#renderer.addClass(backdropElement, `${type}-backdrop`); this.#renderer.addClass(backdropElement, 'fade'); this.#renderer.appendChild(this.#document.body, backdropElement); this.#unListen = this.#renderer.listen(backdropElement, 'click', (e) => { this.onClickHandler(); }); this.scrollbarWidth = this.#scrollbarWidth; setTimeout(() => { this.#renderer.addClass(backdropElement, 'show'); // this.hideScrollbar(); }); this.activeBackdrop = backdropElement; return backdropElement; } clearBackdrop(backdropElement) { if (backdropElement) { this.#unListen(); this.#renderer.removeClass(backdropElement, 'show'); setTimeout(() => { this.#renderer.removeChild(this.#document.body, backdropElement); if (this.activeBackdrop === backdropElement) { this.resetScrollbar(); } backdropElement = undefined; }, 300); } return undefined; } get #isRTL() { return this.#document.documentElement.dir === 'rtl' || this.#document.body.dir === 'rtl'; } #scrollBarVisible; hideScrollbar() { if (this.#scrollBarVisible) { this.#renderer.setStyle(this.#document.body, 'overflow', 'hidden'); this.#renderer.setStyle(this.#document.body, `padding-${this.#isRTL ? 'left' : 'right'}`, this.scrollbarWidth); this.#scrollBarVisible = false; } } resetScrollbar() { this.#renderer.removeStyle(this.#document.body, 'overflow'); this.#renderer.removeStyle(this.#document.body, `padding-${this.#isRTL ? 'left' : 'right'}`); this.#scrollBarVisible = true; } onClickHandler() { this.#backdropClick.next(true); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BackdropService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BackdropService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: BackdropService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFja2Ryb3Auc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmV1aS1hbmd1bGFyL3NyYy9saWIvYmFja2Ryb3AvYmFja2Ryb3Auc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFLL0IsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFLVyxtQkFBYyxHQUFHLElBQUksT0FBTyxFQUFXLENBQUM7UUFDeEMsbUJBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRTdELGNBQVMsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0IscUJBQWdCLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDNUMsY0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBWTdELG1CQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztRQW9DdEMsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO0tBbUIxQjtJQXhFVSxjQUFjLENBQTBCO0lBR2pELFNBQVMsQ0FBb0I7SUFDN0IsZ0JBQWdCLENBQTRCO0lBQzVDLFNBQVMsQ0FBb0Q7SUFDN0QsU0FBUyxDQUFjO0lBSXZCLElBQUksZUFBZTtRQUNqQixpRkFBaUY7UUFDakYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FB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RUFBRSxVQUFVLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUM3RixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxjQUFjO1FBQ1osSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQzsrR0F6RVUsZUFBZTttSEFBZixlQUFlLGNBRmQsTUFBTTs7NEZBRVAsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQmFja2Ryb3BTZXJ2aWNlIHtcblxuICByZWFkb25seSAjYmFja2Ryb3BDbGljayA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG4gIHJlYWRvbmx5IGJhY2tkcm9wQ2xpY2skID0gdGhpcy4jYmFja2Ryb3BDbGljay5hc09ic2VydmFibGUoKTtcblxuICAjZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICAjcmVuZGVyZXJGYWN0b3J5ID0gaW5qZWN0KFJlbmRlcmVyRmFjdG9yeTIpO1xuICAjcmVuZGVyZXIgPSB0aGlzLiNyZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIobnVsbCwgbnVsbCk7XG4gICN1bkxpc3RlbiE6ICgpID0+IHZvaWQ7XG5cbiAgYWN0aXZlQmFja2Ryb3A6IGFueTtcblxuICBnZXQgI3Njcm9sbGJhcldpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSB0aGlzLiNkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSBNYXRoLmFicygodGhpcy4jZG9jdW1lbnQuZGVmYXVsdFZpZXc/LmlubmVyV2lkdGggPz8gZG9jdW1lbnRXaWR0aCkgLSBkb2N1bWVudFdpZHRoKTtcbiAgICByZXR1cm4gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICB9XG5cbiAgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLiNzY3JvbGxiYXJXaWR0aDtcblxuICBzZXRCYWNrZHJvcCh0eXBlOiBzdHJpbmcgPSAnbW9kYWwnKTogYW55IHtcbiAgICBjb25zdCBiYWNrZHJvcEVsZW1lbnQgPSB0aGlzLiNyZW5kZXJlci5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLiNyZW5kZXJlci5hZGRDbGFzcyhiYWNrZHJvcEVsZW1lbnQsIGAke3R5cGV9LWJhY2tkcm9wYCk7XG4gICAgdGhpcy4jcmVuZGVyZXIuYWRkQ2xhc3MoYmFja2Ryb3BFbGVtZW50LCAnZmFkZScpO1xuICAgIHRoaXMuI3JlbmRlcmVyLmFwcGVuZENoaWxkKHRoaXMuI2RvY3VtZW50LmJvZHksIGJhY2tkcm9wRWxlbWVudCk7XG4gICAgdGhpcy4jdW5MaXN0ZW4gPSB0aGlzLiNyZW5kZXJlci5saXN0ZW4oYmFja2Ryb3BFbGVtZW50LCAnY2xpY2snLCAoZSk6IHZvaWQgPT4ge1xuICAgICAgdGhpcy5vbkNsaWNrSGFuZGxlcigpO1xuICAgIH0pO1xuICAgIHRoaXMuc2Nyb2xsYmFyV2lkdGggPSB0aGlzLiNzY3JvbGxiYXJXaWR0aDtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLmFkZENsYXNzKGJhY2tkcm9wRWxlbWVudCwgJ3Nob3cnKTtcbiAgICAgIC8vIHRoaXMuaGlkZVNjcm9sbGJhcigpO1xuICAgIH0pO1xuICAgIHRoaXMuYWN0aXZlQmFja2Ryb3AgPSBiYWNrZHJvcEVsZW1lbnQ7XG4gICAgcmV0dXJuIGJhY2tkcm9wRWxlbWVudDtcbiAgfVxuXG4gIGNsZWFyQmFja2Ryb3AoYmFja2Ryb3BFbGVtZW50OiBhbnkpOiBhbnkge1xuICAgIGlmIChiYWNrZHJvcEVsZW1lbnQpIHtcbiAgICAgIHRoaXMuI3VuTGlzdGVuKCk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5yZW1vdmVDbGFzcyhiYWNrZHJvcEVsZW1lbnQsICdzaG93Jyk7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy4jcmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy4jZG9jdW1lbnQuYm9keSwgYmFja2Ryb3BFbGVtZW50KTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlQmFja2Ryb3AgPT09IGJhY2tkcm9wRWxlbWVudCkge1xuICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxiYXIoKTtcbiAgICAgICAgfVxuICAgICAgICBiYWNrZHJvcEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICB9LCAzMDApO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0ICNpc1JUTCgpIHsgcmV0dXJuIHRoaXMuI2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnIHx8IHRoaXMuI2RvY3VtZW50LmJvZHkuZGlyID09PSAncnRsJzsgfVxuXG4gICNzY3JvbGxCYXJWaXNpYmxlID0gdHJ1ZTtcblxuICBoaWRlU2Nyb2xsYmFyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNzY3JvbGxCYXJWaXNpYmxlKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRTdHlsZSh0aGlzLiNkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRTdHlsZSh0aGlzLiNkb2N1bWVudC5ib2R5LCBgcGFkZGluZy0ke3RoaXMuI2lzUlRMID8gJ2xlZnQnIDogJ3JpZ2h0J31gLCB0aGlzLnNjcm9sbGJhcldpZHRoKTtcbiAgICAgIHRoaXMuI3Njcm9sbEJhclZpc2libGUgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXNldFNjcm9sbGJhcigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLiNkb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLiNyZW5kZXJlci5yZW1vdmVTdHlsZSh0aGlzLiNkb2N1bWVudC5ib2R5LCBgcGFkZGluZy0ke3RoaXMuI2lzUlRMID8gJ2xlZnQnIDogJ3JpZ2h0J31gKTtcbiAgICB0aGlzLiNzY3JvbGxCYXJWaXNpYmxlID0gdHJ1ZTtcbiAgfVxuXG4gIG9uQ2xpY2tIYW5kbGVyKCk6IHZvaWQge1xuICAgIHRoaXMuI2JhY2tkcm9wQ2xpY2submV4dCh0cnVlKTtcbiAgfVxufVxuIl19