@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
1 lines • 10.3 kB
Source Map (JSON)
{"version":3,"file":"taiga-ui-cdk-portals.mjs","sources":["../../../projects/cdk/portals/portal.ts","../../../projects/cdk/portals/directive.ts","../../../projects/cdk/portals/service.ts","../../../projects/cdk/portals/portals.ts","../../../projects/cdk/portals/taiga-ui-cdk-portals.ts"],"sourcesContent":["import {\n inject,\n Injectable,\n INJECTOR,\n Injector,\n type Provider,\n type Type,\n} from '@angular/core';\nimport {type TuiContext} from '@taiga-ui/cdk/types';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\nimport {tuiGenerateId} from '@taiga-ui/cdk/utils/miscellaneous';\nimport {\n // eslint-disable-next-line no-restricted-imports\n POLYMORPHEUS_CONTEXT,\n PolymorpheusComponent,\n type PolymorpheusContent,\n} from '@taiga-ui/polymorpheus';\nimport {Observable, type Observer} from 'rxjs';\n\nimport {type TuiPortalService} from './service';\n\nexport type TuiPortalContext<T, O = void> = T &\n TuiContext<Observer<O>> & {\n readonly content: PolymorpheusContent<TuiPortalContext<T, O>>;\n readonly createdAt: number;\n readonly id: string;\n completeWith(value: O): void;\n };\n\n@Injectable()\nexport abstract class TuiPortal<T, K = void> {\n protected abstract readonly component: Type<any>;\n protected abstract readonly options: T;\n\n private readonly injector = inject(INJECTOR);\n\n // eslint-disable-next-line @angular-eslint/prefer-inject\n constructor(protected readonly service: TuiPortalService) {}\n\n public open<G = void>(\n content: PolymorpheusContent<TuiPortalContext<T, K extends void ? G : K>>,\n options: Partial<T> = {},\n ): Observable<K extends void ? G : K> {\n return new Observable(($implicit) =>\n this.add(\n new PolymorpheusComponent(\n this.component,\n Injector.create({\n parent: this.injector,\n providers: [\n {\n provide: POLYMORPHEUS_CONTEXT,\n useValue: {\n ...this.options,\n ...options,\n content,\n $implicit,\n createdAt: Date.now(),\n id: tuiGenerateId(),\n completeWith: (v: K extends void ? G : K): void => {\n $implicit.next(v);\n $implicit.complete();\n },\n } satisfies TuiPortalContext<T, K extends void ? G : K>,\n },\n ],\n }),\n ),\n ),\n );\n }\n\n protected add(component: PolymorpheusComponent<unknown>): () => void {\n const ref = this.service.add(component);\n\n return () => ref.destroy();\n }\n}\n\nexport function tuiAsPortal(portal: typeof TuiPortal<any>): Provider {\n return tuiProvide(TuiPortal, portal);\n}\n","import {Directive, inject, input} from '@angular/core';\nimport {outputFromObservable, toObservable} from '@angular/core/rxjs-interop';\nimport {tuiIfMap} from '@taiga-ui/cdk/observables';\nimport {PolymorpheusTemplate} from '@taiga-ui/polymorpheus';\nimport {endWith, ignoreElements, share} from 'rxjs';\n\nimport {TuiPortal, type TuiPortalContext} from './portal';\n\n@Directive()\nexport class TuiPortalDirective<T> extends PolymorpheusTemplate<TuiPortalContext<T>> {\n private readonly service = inject(TuiPortal<T>);\n\n public readonly options = input<Partial<T>>({});\n public readonly open = input(false);\n\n public readonly openChange = outputFromObservable(\n toObservable(this.open).pipe(\n tuiIfMap(() =>\n this.service\n .open(this, this.options())\n .pipe(ignoreElements(), endWith(false)),\n ),\n share(),\n ),\n );\n}\n","import {\n type ComponentRef,\n type EmbeddedViewRef,\n Injectable,\n type TemplateRef,\n} from '@angular/core';\nimport {PolymorpheusComponent} from '@taiga-ui/polymorpheus';\n\nimport {type TuiPortals} from './portals';\n\n@Injectable()\nexport abstract class TuiPortalService {\n protected host?: TuiPortals;\n\n public attach(host: TuiPortals): void {\n this.host = host;\n }\n\n public add<C>(content: PolymorpheusComponent<C>): ComponentRef<C>;\n public add<C>(content: TemplateRef<C>, context?: C): EmbeddedViewRef<C>;\n public add<C>(\n content: PolymorpheusComponent<C> | TemplateRef<C>,\n context?: C,\n ): ComponentRef<C> | EmbeddedViewRef<C> {\n if (!this.host) {\n throw new TuiNoHostException();\n }\n\n return content instanceof PolymorpheusComponent\n ? this.host.addComponent(content)\n : this.host.addTemplate(content, context);\n }\n}\n\nexport class TuiNoHostException extends Error {\n constructor() {\n super(\n ngDevMode\n ? 'Portals cannot be used without TuiPortals component; perhaps you forgot to wrap your application with tui-root.'\n : '',\n );\n }\n}\n","import {\n type ComponentRef,\n Directive,\n type EmbeddedViewRef,\n inject,\n INJECTOR,\n type TemplateRef,\n viewChild,\n} from '@angular/core';\nimport {TuiVCR} from '@taiga-ui/cdk/directives/vcr';\nimport {type PolymorpheusComponent} from '@taiga-ui/polymorpheus';\n\nimport {TuiPortalService} from './service';\n\n@Directive()\nexport abstract class TuiPortals {\n private readonly injector = inject(INJECTOR);\n private readonly anchor = viewChild.required(TuiVCR);\n\n constructor() {\n inject(TuiPortalService).attach(this);\n }\n\n public addComponent<C>(component: PolymorpheusComponent<C>): ComponentRef<C> {\n const injector = component.createInjector(this.injector);\n const ref = this.anchor().vcr.createComponent(component.component, {injector});\n\n ref.changeDetectorRef.detectChanges();\n\n return ref;\n }\n\n public addTemplate<C>(templateRef: TemplateRef<C>, context?: C): EmbeddedViewRef<C> {\n return this.anchor().vcr.createEmbeddedView(templateRef, context);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}