{"version":3,"file":"taiga-ui-core-portals-modal.mjs","sources":["../../../projects/core/portals/modal/modal.component.ts","../../../projects/core/portals/modal/modal.service.ts","../../../projects/core/portals/modal/taiga-ui-core-portals-modal.ts"],"sourcesContent":["import {DOCUMENT} from '@angular/common';\nimport {\n    ChangeDetectionStrategy,\n    Component,\n    inject,\n    type OnDestroy,\n    type OnInit,\n    signal,\n    ViewEncapsulation,\n} from '@angular/core';\nimport {TUI_VERSION} from '@taiga-ui/cdk/constants';\nimport {TuiActiveZone} from '@taiga-ui/cdk/directives/active-zone';\nimport {TuiFocusTrap} from '@taiga-ui/cdk/directives/focus-trap';\nimport {type TuiPortalContext} from '@taiga-ui/cdk/portals';\nimport {tuiGetFocused} from '@taiga-ui/cdk/utils/focus';\nimport {TuiScrollControls, TuiScrollRef} from '@taiga-ui/core/components/scrollbar';\nimport {\n    injectContext,\n    type PolymorpheusContent,\n    PolymorpheusOutlet,\n} from '@taiga-ui/polymorpheus';\n\n@Component({\n    selector: 'tui-modal',\n    imports: [PolymorpheusOutlet, TuiScrollControls, TuiScrollRef],\n    template: `\n        <div tuiScrollRef>\n            <ng-container *polymorpheusOutlet=\"component(); context: context\" />\n            <tui-scroll-controls class=\"t-scrollbars\" />\n        </div>\n    `,\n    styles: `\n        [data-tui-version='${TUI_VERSION}'] {\n            @import './modal.style.less';\n        }\n    `,\n    encapsulation: ViewEncapsulation.None,\n    // eslint-disable-next-line @angular-eslint/prefer-on-push-component-change-detection\n    changeDetection: ChangeDetectionStrategy.Default,\n    hostDirectives: [TuiActiveZone, TuiFocusTrap],\n    host: {\n        'aria-modal': 'true',\n        'data-tui-version': TUI_VERSION,\n        role: 'dialog',\n        class: 'tui-enter',\n        '[attr.aria-labelledby]': 'context.id',\n        '(animationend.self)': '$event.target.classList.remove(\"tui-enter\")',\n    },\n})\nexport class TuiModalComponent<T> implements OnDestroy, OnInit {\n    private readonly current = inject(TuiActiveZone);\n\n    private readonly parent = findActive(\n        inject(TuiActiveZone, {skipSelf: true}),\n        tuiGetFocused(inject(DOCUMENT)),\n    );\n\n    public readonly context = injectContext<TuiPortalContext<T>>();\n    public readonly component = signal<PolymorpheusContent<TuiPortalContext<T>>>(null);\n\n    public ngOnInit(): void {\n        this.current.tuiActiveZoneParentSetter = this.parent;\n    }\n\n    public ngOnDestroy(): void {\n        this.current.tuiActiveZoneParentSetter = null;\n    }\n}\n\nfunction findActive(zone: TuiActiveZone, el: Element | null): TuiActiveZone | null {\n    if (!el || !zone.contains(el)) {\n        return null;\n    }\n\n    const active = zone.children.find(\n        (child) => !child['el'].matches('[tuiActiveZoneAdapter]') && child.contains(el),\n    );\n\n    return active ? findActive(active, el) : zone;\n}\n","import {inject, Injectable, type Type} from '@angular/core';\nimport {TUI_LEAVE} from '@taiga-ui/cdk/directives/animated';\nimport {TuiPortal} from '@taiga-ui/cdk/portals';\nimport {TuiPopupService} from '@taiga-ui/core/portals/popup';\nimport {PolymorpheusComponent} from '@taiga-ui/polymorpheus';\n\nimport {TuiModalComponent} from './modal.component';\n\n@Injectable()\nexport abstract class TuiModalService<T, K = void> extends TuiPortal<T, K> {\n    protected abstract readonly content: Type<unknown>;\n    protected readonly component = TuiModalComponent;\n\n    constructor() {\n        super(inject(TuiPopupService));\n    }\n\n    protected override add(\n        component: PolymorpheusComponent<TuiModalComponent<T>>,\n    ): () => void {\n        const ref = this.service.add(component);\n        const el: HTMLElement = ref.location.nativeElement;\n\n        el.closest('tui-root')?.firstElementChild?.setAttribute('inert', '');\n        ref.instance.component.set(new PolymorpheusComponent(this.content));\n\n        return () => {\n            ref.instance.component.set(null);\n            ref.changeDetectorRef.detectChanges();\n            el.classList.add(TUI_LEAVE);\n\n            Promise.allSettled(getAnimations(el))\n                .then(async () =>\n                    Promise.allSettled(\n                        getAnimations(el.firstElementChild?.firstElementChild),\n                    ),\n                )\n                .then(() => {\n                    // Under zoneless + provideAnimations Angular's animation engine queues\n                    // the modal removal but engine.flush never runs from a microtask, so\n                    // the element stays in DOM with `tui-leave` class. Detach it manually.\n                    el.closest('tui-root')?.firstElementChild?.removeAttribute('inert');\n                    ref.destroy();\n                    el.remove();\n                });\n        };\n    }\n}\n\nfunction getAnimations(el?: Element | null): ReadonlyArray<Promise<unknown>> {\n    return el?.getAnimations?.().map(async ({finished}) => finished) || [];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}