@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
77 lines • 9.36 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
/// <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; perhaps you forgot to wrap your application with tui-root.'
: '');
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydGFscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Nkay9jbGFzc2VzL3BvcnRhbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsd0RBQXdEO0FBQXhELHdEQUF3RDtBQUN4RCxPQUFPLEVBRUgsU0FBUyxFQUVULE1BQU0sRUFDTixVQUFVLEVBQ1YsUUFBUSxFQUdSLFNBQVMsRUFDVCxnQkFBZ0IsR0FFbkIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHFCQUFxQixDQUFDOztBQUcvQzs7R0FFRztBQUNILE1BQ3NCLFVBQVU7SUFEaEM7UUFLcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQixZQUFPLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBaUJ0RTtJQWZVLGlCQUFpQixDQUFJLFNBQW1DO1FBQzNELE1BQU0sUUFBUSxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsRUFBQyxRQUFRLEVBQUMsQ0FBQyxDQUFDO1FBRXRFLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QyxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTSxnQkFBZ0IsQ0FDbkIsV0FBMkIsRUFDM0IsT0FBVztRQUVYLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDN0QsQ0FBQzsrR0F0QmlCLFVBQVU7bUdBQVYsVUFBVSwyR0FDTyxnQkFBZ0I7O1NBRGpDLFVBQVU7NEZBQVYsVUFBVTtrQkFEL0IsU0FBUzs4QkFHVyxHQUFHO3NCQURuQixTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBQzs7QUF3QnhEOztHQUVHO0FBQ0gsTUFDc0IsZ0JBQWdCO0lBRzNCLE1BQU0sQ0FBQyxJQUFnQjtRQUMxQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNyQixDQUFDO0lBRU0sR0FBRyxDQUFJLFNBQW1DO1FBQzdDLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRU0sTUFBTSxDQUFJLEVBQUMsUUFBUSxFQUFrQjtRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxXQUFXLENBQUksV0FBMkIsRUFBRSxPQUFXO1FBQzFELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVNLGNBQWMsQ0FBSSxPQUFxQztRQUMxRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNwQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDckI7SUFDTCxDQUFDO0lBRUQsSUFBYyxRQUFRO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ1osTUFBTSxJQUFJLGtCQUFrQixFQUFFLENBQUM7U0FDbEM7UUFFRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQzsrR0EvQmlCLGdCQUFnQjttSEFBaEIsZ0JBQWdCOztTQUFoQixnQkFBZ0I7NEZBQWhCLGdCQUFnQjtrQkFEckMsVUFBVTs7QUFtQ1gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxNQUErQjtJQUN2RCxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUNoRCxDQUFDO0FBRUQsTUFBTSxPQUFPLGtCQUFtQixTQUFRLEtBQUs7SUFDekM7UUFDSSxLQUFLLENBQ0QsU0FBUztZQUNMLENBQUMsQ0FBQyxtSEFBbUg7WUFDckgsQ0FBQyxDQUFDLEVBQUUsQ0FDWCxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAdGFpZ2EtdWkvdHNjb25maWcvbmctZGV2LW1vZGVcIiAvPlxuaW1wb3J0IHtcbiAgICB0eXBlIENvbXBvbmVudFJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgdHlwZSBFbWJlZGRlZFZpZXdSZWYsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgSU5KRUNUT1IsXG4gICAgdHlwZSBQcm92aWRlcixcbiAgICB0eXBlIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHR5cGUgVmlld1JlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3R1aVByb3ZpZGV9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMnO1xuaW1wb3J0IHt0eXBlIFBvbHltb3JwaGV1c0NvbXBvbmVudH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgZm9yIGhvc3QgZWxlbWVudCBmb3IgZHluYW1pY2FsbHkgY3JlYXRlZCBwb3J0YWxzLlxuICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBUdWlQb3J0YWxzIHtcbiAgICBAVmlld0NoaWxkKCd2aWV3Q29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgdmNyITogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSU5KRUNUT1IpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5vdGhpbmcgPSBpbmplY3QoVHVpUG9ydGFsU2VydmljZSkuYXR0YWNoKHRoaXMpO1xuXG4gICAgcHVibGljIGFkZENvbXBvbmVudENoaWxkPEM+KGNvbXBvbmVudDogUG9seW1vcnBoZXVzQ29tcG9uZW50PEM+KTogQ29tcG9uZW50UmVmPEM+IHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3IgPSBjb21wb25lbnQuY3JlYXRlSW5qZWN0b3IodGhpcy5pbmplY3Rvcik7XG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMudmNyLmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnQuY29tcG9uZW50LCB7aW5qZWN0b3J9KTtcblxuICAgICAgICByZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHJldHVybiByZWY7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRlbXBsYXRlQ2hpbGQ8Qz4oXG4gICAgICAgIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxDPixcbiAgICAgICAgY29udGV4dD86IEMsXG4gICAgKTogRW1iZWRkZWRWaWV3UmVmPEM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmNyLmNyZWF0ZUVtYmVkZGVkVmlldyh0ZW1wbGF0ZVJlZiwgY29udGV4dCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEFic3RyYWN0IHNlcnZpY2UgZm9yIGRpc3BsYXlpbmcgcG9ydGFsc1xuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgVHVpUG9ydGFsU2VydmljZSB7XG4gICAgcHJvdGVjdGVkIGhvc3Q/OiBUdWlQb3J0YWxzO1xuXG4gICAgcHVibGljIGF0dGFjaChob3N0OiBUdWlQb3J0YWxzKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaG9zdCA9IGhvc3Q7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZDxDPihjb21wb25lbnQ6IFBvbHltb3JwaGV1c0NvbXBvbmVudDxDPik6IENvbXBvbmVudFJlZjxDPiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVIb3N0LmFkZENvbXBvbmVudENoaWxkKGNvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbW92ZTxDPih7aG9zdFZpZXd9OiBDb21wb25lbnRSZWY8Qz4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVUZW1wbGF0ZShob3N0Vmlldyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZFRlbXBsYXRlPEM+KHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxDPiwgY29udGV4dD86IEMpOiBFbWJlZGRlZFZpZXdSZWY8Qz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zYWZlSG9zdC5hZGRUZW1wbGF0ZUNoaWxkKHRlbXBsYXRlUmVmLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlVGVtcGxhdGU8Qz4odmlld1JlZjogRW1iZWRkZWRWaWV3UmVmPEM+IHwgVmlld1JlZik6IHZvaWQge1xuICAgICAgICBpZiAoIXZpZXdSZWYuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICB2aWV3UmVmLmRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBnZXQgc2FmZUhvc3QoKTogVHVpUG9ydGFscyB7XG4gICAgICAgIGlmICghdGhpcy5ob3N0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHVpTm9Ib3N0RXhjZXB0aW9uKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5ob3N0O1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1aUFzUG9ydGFsKHBvcnRhbDogdHlwZW9mIFR1aVBvcnRhbFNlcnZpY2UpOiBQcm92aWRlciB7XG4gICAgcmV0dXJuIHR1aVByb3ZpZGUoVHVpUG9ydGFsU2VydmljZSwgcG9ydGFsKTtcbn1cblxuZXhwb3J0IGNsYXNzIFR1aU5vSG9zdEV4Y2VwdGlvbiBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICBuZ0Rldk1vZGVcbiAgICAgICAgICAgICAgICA/ICdQb3J0YWxzIGNhbm5vdCBiZSB1c2VkIHdpdGhvdXQgVHVpUG9ydGFsSG9zdENvbXBvbmVudDsgcGVyaGFwcyB5b3UgZm9yZ290IHRvIHdyYXAgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHR1aS1yb290LidcbiAgICAgICAgICAgICAgICA6ICcnLFxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==