{"version":3,"file":"taiga-ui-polymorpheus.mjs","sources":["../../../projects/ng-polymorpheus/src/tokens/context.ts","../../../projects/ng-polymorpheus/src/classes/component.ts","../../../projects/ng-polymorpheus/src/classes/context.ts","../../../projects/ng-polymorpheus/src/utils/is-primitive.ts","../../../projects/ng-polymorpheus/src/directives/template.ts","../../../projects/ng-polymorpheus/src/directives/outlet.ts","../../../projects/ng-polymorpheus/src/index.ts","../../../projects/ng-polymorpheus/src/taiga-ui-polymorpheus.ts"],"sourcesContent":["import type {InjectOptions} from '@angular/core';\nimport {inject, InjectionToken} from '@angular/core';\n\n/**\n * Use this token to access context within your components when\n * instantiating them through {@link PolymorpheusOutlet}\n */\nexport const POLYMORPHEUS_CONTEXT = new InjectionToken<Record<any, any>>('');\n\nexport function injectContext<T>(options?: InjectOptions & {optional?: false}): T;\nexport function injectContext<T>(options?: InjectOptions & {optional: true}): T | null;\nexport function injectContext<T>(options: InjectOptions = {}): T | null {\n    return inject(POLYMORPHEUS_CONTEXT, options);\n}\n","import type {Type} from '@angular/core';\nimport {Injector} from '@angular/core';\n\nimport {POLYMORPHEUS_CONTEXT} from '../tokens/context';\n\n/**\n * Wrapper class for a component that will be used as content for {@link PolymorpheusOutlet}\n *\n * @param component — an Angular component to be dynamically created\n * @param injector — optional {@link Injector} for lazy loaded module case\n */\nexport class PolymorpheusComponent<T> {\n    constructor(\n        public readonly component: Type<T>,\n        private readonly i?: Injector,\n    ) {}\n\n    public createInjector<C>(injector: Injector, useValue?: C): Injector {\n        return Injector.create({\n            parent: this.i || injector,\n            providers: [\n                {\n                    provide: POLYMORPHEUS_CONTEXT,\n                    useValue,\n                },\n            ],\n        });\n    }\n}\n","export class PolymorpheusContext<T> {\n    constructor(public readonly $implicit: T) {}\n\n    public get polymorpheusOutlet(): T {\n        return this.$implicit;\n    }\n}\n\n/**\n * @deprecated: use {@link PolymorpheusContext} instead\n * Primitive types used as content by {@link PolymorpheusOutlet}\n */\nexport class PrimitiveContext<T> extends PolymorpheusContext<T> {}\n","export function isPrimitive(value: unknown): boolean {\n    return Object(value) !== value;\n}\n","import {ChangeDetectorRef, Directive, inject, TemplateRef} from '@angular/core';\n\n/**\n * ng-template wrapper directive also stores {@link ChangeDetectorRef} to properly handle change detection.\n */\n@Directive({\n    standalone: true,\n    selector: 'ng-template[polymorpheus]',\n    inputs: ['polymorpheus'],\n    exportAs: 'polymorpheus',\n})\nexport class PolymorpheusTemplate<C = any> {\n    public polymorpheus: C | '' = '';\n\n    constructor(\n        public readonly template: TemplateRef<C> = inject(TemplateRef<C>, {self: true}),\n        private readonly cdr: ChangeDetectorRef = inject(ChangeDetectorRef),\n    ) {}\n\n    public static ngTemplateContextGuard<T>(\n        _dir: PolymorpheusTemplate<T>,\n        _ctx: any,\n    ): _ctx is T extends '' ? any : T {\n        return true;\n    }\n\n    public check(): void {\n        this.cdr.markForCheck();\n    }\n}\n","import type {ComponentRef, DoCheck, OnChanges, SimpleChanges} from '@angular/core';\nimport {\n    ChangeDetectorRef,\n    Directive,\n    inject,\n    INJECTOR,\n    Input,\n    TemplateRef,\n    ViewContainerRef,\n} from '@angular/core';\n\nimport {PolymorpheusComponent} from '../classes/component';\nimport {PolymorpheusContext} from '../classes/context';\nimport type {PolymorpheusContent} from '../types/content';\nimport type {PolymorpheusPrimitive} from '../types/primitive';\nimport {isPrimitive} from '../utils/is-primitive';\nimport {PolymorpheusTemplate} from './template';\n\n@Directive({\n    standalone: true,\n    selector: '[polymorpheusOutlet]',\n})\nexport class PolymorpheusOutlet<C> implements OnChanges, DoCheck {\n    private readonly vcr = inject(ViewContainerRef);\n    private readonly i = inject(INJECTOR);\n    private readonly t: TemplateRef<PolymorpheusContext<PolymorpheusPrimitive>> =\n        inject(TemplateRef);\n\n    private c?: ComponentRef<unknown>;\n\n    @Input('polymorpheusOutlet')\n    public content: PolymorpheusContent<C> = '';\n\n    @Input('polymorpheusOutletContext')\n    public context?: C;\n\n    public static ngTemplateContextGuard<T>(\n        _dir: PolymorpheusOutlet<T>,\n        _ctx: any,\n    ): _ctx is PolymorpheusContext<T extends PolymorpheusPrimitive ? T : never> {\n        return true;\n    }\n\n    public ngOnChanges({content}: SimpleChanges): void {\n        const context = this.getContext();\n\n        this.c?.injector.get(ChangeDetectorRef).markForCheck();\n\n        if (!content) {\n            return;\n        }\n\n        this.vcr.clear();\n\n        const proxy =\n            context &&\n            (new Proxy(ensureContext(context) as object, {\n                get: (_, key) =>\n                    ensureContext(this.getContext())?.[\n                        key as keyof (C | PolymorpheusContext<any>)\n                    ],\n            }) as unknown as C);\n\n        if (isComponent(this.content)) {\n            this.process(this.content, proxy);\n        } else if (\n            (context instanceof PolymorpheusContext && context.$implicit) != null\n        ) {\n            this.vcr.createEmbeddedView(this.template, proxy, {injector: this.i});\n        }\n    }\n\n    public ngDoCheck(): void {\n        if (isDirective(this.content)) {\n            this.content.check();\n        }\n    }\n\n    private get template(): TemplateRef<unknown> {\n        if (isDirective(this.content)) {\n            return this.content.template;\n        }\n\n        return this.content instanceof TemplateRef ? this.content : this.t;\n    }\n\n    private getContext(): C | PolymorpheusContext<any> | undefined {\n        if (isTemplate(this.content) || isComponent(this.content)) {\n            return this.context;\n        }\n\n        return new PolymorpheusContext(\n            typeof this.content === 'function'\n                ? this.content(this.context ?? ({} as any))\n                : this.content,\n        );\n    }\n\n    private process(content: PolymorpheusComponent<unknown>, proxy?: C): void {\n        const injector = content.createInjector(this.i, proxy);\n\n        this.c = this.vcr.createComponent(content.component, {injector});\n    }\n}\n\nfunction isDirective<C>(\n    content: PolymorpheusContent<C>,\n): content is PolymorpheusTemplate<C> {\n    return content instanceof PolymorpheusTemplate;\n}\n\nfunction isComponent<C>(\n    content: PolymorpheusContent<C>,\n): content is PolymorpheusComponent<any> {\n    return content instanceof PolymorpheusComponent;\n}\n\nfunction isTemplate<C>(\n    content: PolymorpheusContent<C>,\n): content is PolymorpheusTemplate<C> | TemplateRef<C> {\n    return isDirective(content) || content instanceof TemplateRef;\n}\n\nfunction ensureContext<C>(\n    context: C | PolymorpheusContext<any> | undefined,\n): C | PolymorpheusContext<any> | undefined {\n    if (context && isPrimitive(context)) {\n        return new PolymorpheusContext(context);\n    }\n\n    return context;\n}\n","/**\n * Public API Surface of ng-polymorpheus\n */\nexport * from './classes/component';\nexport * from './directives/outlet';\nexport * from './directives/template';\nexport * from './tokens/context';\nexport * from './types/content';\nexport * from './types/handler';\nexport * from './types/primitive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}