@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
74 lines • 9.06 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
import { Directive, inject, Injectable, INJECTOR, ViewChild, ViewContainerRef, } from '@angular/core';
import { tuiProvide } from '@taiga-ui/cdk/utils';
import * as i0 from "@angular/core";
/**
* Abstract class for host element for dynamically created portals.
*/
class TuiPortals {
constructor() {
this.injector = inject(INJECTOR);
this.nothing = inject(TuiPortalService).attach(this);
}
addComponentChild(component) {
const injector = component.createInjector(this.injector);
const ref = this.vcr.createComponent(component.component, { injector });
ref.changeDetectorRef.detectChanges();
return ref;
}
addTemplateChild(templateRef, context) {
return this.vcr.createEmbeddedView(templateRef, context);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPortals, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiPortals, viewQueries: [{ propertyName: "vcr", first: true, predicate: ["viewContainer"], descendants: true, read: ViewContainerRef }], ngImport: i0 }); }
}
export { TuiPortals };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPortals, decorators: [{
type: Directive
}], propDecorators: { vcr: [{
type: ViewChild,
args: ['viewContainer', { read: ViewContainerRef }]
}] } });
/**
* Abstract service for displaying portals
*/
class TuiPortalService {
attach(host) {
this.host = host;
}
add(component) {
return this.safeHost.addComponentChild(component);
}
remove({ hostView }) {
this.removeTemplate(hostView);
}
addTemplate(templateRef, context) {
return this.safeHost.addTemplateChild(templateRef, context);
}
removeTemplate(viewRef) {
if (!viewRef.destroyed) {
viewRef.destroy();
}
}
get safeHost() {
if (!this.host) {
throw new TuiNoHostException();
}
return this.host;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPortalService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPortalService }); }
}
export { TuiPortalService };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiPortalService, decorators: [{
type: Injectable
}] });
export function tuiAsPortal(portal) {
return tuiProvide(TuiPortalService, portal);
}
export class TuiNoHostException extends Error {
constructor() {
super(ngDevMode ? 'Portals cannot be used without TuiPortalHostComponent' : '');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9jbGFzc2VzL3BvcnRhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBUXhELE9BQU8sRUFDSCxTQUFTLEVBQ1QsTUFBTSxFQUNOLFVBQVUsRUFDVixRQUFRLEVBQ1IsU0FBUyxFQUNULGdCQUFnQixHQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0scUJBQXFCLENBQUM7O0FBRy9DOztHQUVHO0FBQ0gsTUFDc0IsVUFBVTtJQURoQztRQUtxQixhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTFCLFlBQU8sR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FpQnRFO0lBZlUsaUJBQWlCLENBQUksU0FBbUM7UUFDM0QsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLFNBQVMsRUFBRSxFQUFDLFFBQVEsRUFBQyxDQUFDLENBQUM7UUFFdEUsR0FBRyxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRXRDLE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUVNLGdCQUFnQixDQUNuQixXQUEyQixFQUMzQixPQUFXO1FBRVgsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM3RCxDQUFDOytHQXRCaUIsVUFBVTttR0FBVixVQUFVLDJHQUNPLGdCQUFnQjs7U0FEakMsVUFBVTs0RkFBVixVQUFVO2tCQUQvQixTQUFTOzhCQUdXLEdBQUc7c0JBRG5CLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFDOztBQXdCeEQ7O0dBRUc7QUFDSCxNQUNzQixnQkFBZ0I7SUFHM0IsTUFBTSxDQUFDLElBQWdCO1FBQzFCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxHQUFHLENBQUksU0FBbUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFTSxNQUFNLENBQUksRUFBQyxRQUFRLEVBQWtCO1FBQ3hDLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVNLFdBQVcsQ0FBSSxXQUEyQixFQUFFLE9BQVc7UUFDMUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRU0sY0FBYyxDQUFJLE9BQXFDO1FBQzFELElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3BCLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNyQjtJQUNMLENBQUM7SUFFRCxJQUFjLFFBQVE7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixNQUFNLElBQUksa0JBQWtCLEVBQUUsQ0FBQztTQUNsQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNyQixDQUFDOytHQS9CaUIsZ0JBQWdCO21IQUFoQixnQkFBZ0I7O1NBQWhCLGdCQUFnQjs0RkFBaEIsZ0JBQWdCO2tCQURyQyxVQUFVOztBQW1DWCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQStCO0lBQ3ZELE9BQU8sVUFBVSxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLE9BQU8sa0JBQW1CLFNBQVEsS0FBSztJQUN6QztRQUNJLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLHVEQUF1RCxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLy8gPHJlZmVyZW5jZSB0eXBlcz1cIkB0YWlnYS11aS90c2NvbmZpZy9uZy1kZXYtbW9kZVwiIC8+XG5pbXBvcnQgdHlwZSB7XG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBQcm92aWRlcixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIGluamVjdCxcbiAgICBJbmplY3RhYmxlLFxuICAgIElOSkVDVE9SLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dHVpUHJvdmlkZX0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscyc7XG5pbXBvcnQgdHlwZSB7UG9seW1vcnBoZXVzQ29tcG9uZW50fSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcblxuLyoqXG4gKiBBYnN0cmFjdCBjbGFzcyBmb3IgaG9zdCBlbGVtZW50IGZvciBkeW5hbWljYWxseSBjcmVhdGVkIHBvcnRhbHMuXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFR1aVBvcnRhbHMge1xuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdDb250YWluZXInLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gICAgcHJpdmF0ZSByZWFkb25seSB2Y3IhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJTkpFQ1RPUik7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm90aGluZyA9IGluamVjdChUdWlQb3J0YWxTZXJ2aWNlKS5hdHRhY2godGhpcyk7XG5cbiAgICBwdWJsaWMgYWRkQ29tcG9uZW50Q2hpbGQ8Qz4oY29tcG9uZW50OiBQb2x5bW9ycGhldXNDb21wb25lbnQ8Qz4pOiBDb21wb25lbnRSZWY8Qz4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IGNvbXBvbmVudC5jcmVhdGVJbmplY3Rvcih0aGlzLmluamVjdG9yKTtcbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy52Y3IuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudC5jb21wb25lbnQsIHtpbmplY3Rvcn0pO1xuXG4gICAgICAgIHJlZi5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgcmV0dXJuIHJlZjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVGVtcGxhdGVDaGlsZDxDPihcbiAgICAgICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEM+LFxuICAgICAgICBjb250ZXh0PzogQyxcbiAgICApOiBFbWJlZGRlZFZpZXdSZWY8Qz4ge1xuICAgICAgICByZXR1cm4gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRlbXBsYXRlUmVmLCBjb250ZXh0KTtcbiAgICB9XG59XG5cbi8qKlxuICogQWJzdHJhY3Qgc2VydmljZSBmb3IgZGlzcGxheWluZyBwb3J0YWxzXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUdWlQb3J0YWxTZXJ2aWNlIHtcbiAgICBwcm90ZWN0ZWQgaG9zdD86IFR1aVBvcnRhbHM7XG5cbiAgICBwdWJsaWMgYXR0YWNoKGhvc3Q6IFR1aVBvcnRhbHMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5ob3N0ID0gaG9zdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkPEM+KGNvbXBvbmVudDogUG9seW1vcnBoZXVzQ29tcG9uZW50PEM+KTogQ29tcG9uZW50UmVmPEM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2FmZUhvc3QuYWRkQ29tcG9uZW50Q2hpbGQoY29tcG9uZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlPEM+KHtob3N0Vmlld306IENvbXBvbmVudFJlZjxDPik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVRlbXBsYXRlKGhvc3RWaWV3KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkVGVtcGxhdGU8Qz4odGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPEM+LCBjb250ZXh0PzogQyk6IEVtYmVkZGVkVmlld1JlZjxDPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVIb3N0LmFkZFRlbXBsYXRlQ2hpbGQodGVtcGxhdGVSZWYsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVUZW1wbGF0ZTxDPih2aWV3UmVmOiBFbWJlZGRlZFZpZXdSZWY8Qz4gfCBWaWV3UmVmKTogdm9pZCB7XG4gICAgICAgIGlmICghdmlld1JlZi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIHZpZXdSZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGdldCBzYWZlSG9zdCgpOiBUdWlQb3J0YWxzIHtcbiAgICAgICAgaWYgKCF0aGlzLmhvc3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUdWlOb0hvc3RFeGNlcHRpb24oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLmhvc3Q7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVpQXNQb3J0YWwocG9ydGFsOiB0eXBlb2YgVHVpUG9ydGFsU2VydmljZSk6IFByb3ZpZGVyIHtcbiAgICByZXR1cm4gdHVpUHJvdmlkZShUdWlQb3J0YWxTZXJ2aWNlLCBwb3J0YWwpO1xufVxuXG5leHBvcnQgY2xhc3MgVHVpTm9Ib3N0RXhjZXB0aW9uIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihuZ0Rldk1vZGUgPyAnUG9ydGFscyBjYW5ub3QgYmUgdXNlZCB3aXRob3V0IFR1aVBvcnRhbEhvc3RDb21wb25lbnQnIDogJycpO1xuICAgIH1cbn1cbiJdfQ==