UNPKG

@favian/headwind-ui

Version:

Headless UI for Angular - Styleless Angular components to integrate with Tailwind CSS

47 lines 7.35 kB
import { Injectable, ViewContainerRef } from '@angular/core'; import { HeadwindOverlayOutletComponent } from '../components/headwind-overlay-outlet/headwind-overlay-outlet.component'; import * as i0 from "@angular/core"; export class HeadwindOverlayService { constructor(_applicationRef) { this._applicationRef = _applicationRef; this._openedViewRefs = []; } get viewContainerRef() { if (!this._cachedViewContainerRef) { const rootViewContainerRef = this._applicationRef.components[0].injector.get(ViewContainerRef); const overlayOutletRef = rootViewContainerRef.createComponent(HeadwindOverlayOutletComponent); overlayOutletRef.changeDetectorRef.detectChanges(); this._cachedViewContainerRef = overlayOutletRef.instance.viewContainerRef; } return this._cachedViewContainerRef; } /** * Open a template as overlay * @param templateRef - TemplateRef to open as an overlay * @param onDestroy - Callback to call when destroying EmbeddedViewRef */ open(templateRef, onDestroy) { const embeddedViewRef = this.viewContainerRef.createEmbeddedView(templateRef); this._openedViewRefs.push(embeddedViewRef); embeddedViewRef.onDestroy(() => { this._openedViewRefs = this._openedViewRefs.filter((_openedViewRef) => _openedViewRef !== embeddedViewRef); if (onDestroy) { onDestroy(); } }); return embeddedViewRef; } closeLatest() { const latestViewRef = this._openedViewRefs[this._openedViewRefs.length - 1]; // item is removed from the `onDestroy()` method latestViewRef?.destroy(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindOverlayService, deps: [{ token: i0.ApplicationRef }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindOverlayService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeadwindOverlayService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }], ctorParameters: () => [{ type: i0.ApplicationRef }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZHdpbmQtb3ZlcmxheS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvaGVhZHdpbmQtdWkvc3JjL3NlcnZpY2VzL2hlYWR3aW5kLW92ZXJsYXkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW1DLFVBQVUsRUFBZSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx5RUFBeUUsQ0FBQzs7QUFLekgsTUFBTSxPQUFPLHNCQUFzQjtJQVNqQyxZQUE2QixlQUErQjtRQUEvQixvQkFBZSxHQUFmLGVBQWUsQ0FBZ0I7UUFScEQsb0JBQWUsR0FBMkIsRUFBRSxDQUFDO0lBUVUsQ0FBQztJQUVoRSxJQUFJLGdCQUFnQjtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDbEMsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDL0YsTUFBTSxnQkFBZ0IsR0FBRyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsOEJBQThCLENBQUMsQ0FBQztZQUU5RixnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUVuRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDO1FBQzVFLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztJQUN0QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQUksQ0FBVSxXQUEyQixFQUFFLFNBQXNCO1FBQy9ELE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUU5RSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUzQyxlQUFlLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUM3QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxjQUFjLEtBQUssZUFBZSxDQUFDLENBQUM7WUFFM0csSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDZCxTQUFTLEVBQUUsQ0FBQztZQUNkLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sZUFBZSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxXQUFXO1FBQ1QsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLGdEQUFnRDtRQUU3SCxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQzsrR0FqRFUsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FGckIsTUFBTTs7NEZBRVAsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFwcGxpY2F0aW9uUmVmLCBFbWJlZGRlZFZpZXdSZWYsIEluamVjdGFibGUsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEhlYWR3aW5kT3ZlcmxheU91dGxldENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvaGVhZHdpbmQtb3ZlcmxheS1vdXRsZXQvaGVhZHdpbmQtb3ZlcmxheS1vdXRsZXQuY29tcG9uZW50JztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBIZWFkd2luZE92ZXJsYXlTZXJ2aWNlIHtcclxuICBwcml2YXRlIF9vcGVuZWRWaWV3UmVmczogRW1iZWRkZWRWaWV3UmVmPGFueT5bXSA9IFtdO1xyXG5cclxuICAvKipcclxuICAgKiBCeSBkZWZhdWx0LCBvcGVuaW5nIGFuIG92ZXJsYXkgd2lsbCBjcmVhdGUgdmlld0NvbnRhaW5lclJlZiB0byByZW5kZXIgb3ZlcmxheS5cclxuICAgKiBPbmNlIHZpZXdDb250YWluZXJSZWYgaXMgY3JlYXRlZCwgdGhhdCBpcyBjYWNoZWQgdG8gdGhpcyBwcm9wZXJ0eSB0byBwcmV2ZW50IGNyZWF0aW5nIG11bHRpcGxlIHZpZXdDb250YWluZXJSZWZzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2NhY2hlZFZpZXdDb250YWluZXJSZWY/OiBWaWV3Q29udGFpbmVyUmVmO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvblJlZjogQXBwbGljYXRpb25SZWYpIHt9XHJcblxyXG4gIGdldCB2aWV3Q29udGFpbmVyUmVmKCk6IFZpZXdDb250YWluZXJSZWYge1xyXG4gICAgaWYgKCF0aGlzLl9jYWNoZWRWaWV3Q29udGFpbmVyUmVmKSB7XHJcbiAgICAgIGNvbnN0IHJvb3RWaWV3Q29udGFpbmVyUmVmID0gdGhpcy5fYXBwbGljYXRpb25SZWYuY29tcG9uZW50c1swXS5pbmplY3Rvci5nZXQoVmlld0NvbnRhaW5lclJlZik7XHJcbiAgICAgIGNvbnN0IG92ZXJsYXlPdXRsZXRSZWYgPSByb290Vmlld0NvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoSGVhZHdpbmRPdmVybGF5T3V0bGV0Q29tcG9uZW50KTtcclxuXHJcbiAgICAgIG92ZXJsYXlPdXRsZXRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG5cclxuICAgICAgdGhpcy5fY2FjaGVkVmlld0NvbnRhaW5lclJlZiA9IG92ZXJsYXlPdXRsZXRSZWYuaW5zdGFuY2Uudmlld0NvbnRhaW5lclJlZjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkVmlld0NvbnRhaW5lclJlZjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE9wZW4gYSB0ZW1wbGF0ZSBhcyBvdmVybGF5XHJcbiAgICogQHBhcmFtIHRlbXBsYXRlUmVmIC0gVGVtcGxhdGVSZWYgdG8gb3BlbiBhcyBhbiBvdmVybGF5XHJcbiAgICogQHBhcmFtIG9uRGVzdHJveSAtIENhbGxiYWNrIHRvIGNhbGwgd2hlbiBkZXN0cm95aW5nIEVtYmVkZGVkVmlld1JlZlxyXG4gICAqL1xyXG4gIG9wZW48QyA9IGFueT4odGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEM+LCBvbkRlc3Ryb3k/OiAoKSA9PiB2b2lkKTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcclxuICAgIGNvbnN0IGVtYmVkZGVkVmlld1JlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGVSZWYpO1xyXG5cclxuICAgIHRoaXMuX29wZW5lZFZpZXdSZWZzLnB1c2goZW1iZWRkZWRWaWV3UmVmKTtcclxuXHJcbiAgICBlbWJlZGRlZFZpZXdSZWYub25EZXN0cm95KCgpID0+IHtcclxuICAgICAgdGhpcy5fb3BlbmVkVmlld1JlZnMgPSB0aGlzLl9vcGVuZWRWaWV3UmVmcy5maWx0ZXIoKF9vcGVuZWRWaWV3UmVmKSA9PiBfb3BlbmVkVmlld1JlZiAhPT0gZW1iZWRkZWRWaWV3UmVmKTtcclxuXHJcbiAgICAgIGlmIChvbkRlc3Ryb3kpIHtcclxuICAgICAgICBvbkRlc3Ryb3koKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGVtYmVkZGVkVmlld1JlZjtcclxuICB9XHJcblxyXG4gIGNsb3NlTGF0ZXN0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgbGF0ZXN0Vmlld1JlZiA9IHRoaXMuX29wZW5lZFZpZXdSZWZzW3RoaXMuX29wZW5lZFZpZXdSZWZzLmxlbmd0aCAtIDFdOyAvLyBpdGVtIGlzIHJlbW92ZWQgZnJvbSB0aGUgYG9uRGVzdHJveSgpYCBtZXRob2RcclxuXHJcbiAgICBsYXRlc3RWaWV3UmVmPy5kZXN0cm95KCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==