{"version":3,"file":"seniorsistemas-angular-components-dialog.mjs","sources":["../../projects/angular-components/dialog/src/lib/src/dialog/models/active-dialog.ts","../../projects/angular-components/dialog/src/lib/src/dialog/services/dialog.service.ts","../../projects/angular-components/dialog/src/lib/src/dialog/services/internal-dialog.service.ts","../../projects/angular-components/dialog/src/lib/src/dialog/dialog.component.ts","../../projects/angular-components/dialog/src/lib/src/dialog/dialog.component.html","../../projects/angular-components/dialog/src/seniorsistemas-angular-components-dialog.ts"],"sourcesContent":["import { Subject } from \"rxjs\";\nimport { DialogSize } from \"./dialog-models\";\n\nexport class ActiveDialog {\n    dialogSize: DialogSize = 'md';\n    escapeOnEsc = true;\n    private _close = new Subject<any>();\n    private _dismiss = new Subject<any>();\n\n    close<T>(result?: T) {\n        this._close.next(result);\n        this._close.complete();\n    }\n\n    dismiss<T>(reason?: T) {\n        this._dismiss.next(reason);\n        this._dismiss.complete();\n    }\n\n    onClose$ = this._close.asObservable();\n    onDismiss$ = this._dismiss.asObservable();\n}\n","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { inject, Injectable, Injector, Type } from '@angular/core';\nimport { take } from 'rxjs';\nimport { ActiveDialog } from '../models/active-dialog';\nimport { DialogOptions, DialogRef } from '../models/dialog-models';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class DialogService {\n    protected readonly activeDialogInstances: ActiveDialog[] = [];\n    protected readonly overlay = inject(Overlay);\n    protected readonly injector = inject(Injector);\n\n    constructor() {\n        this.checkEscapeEvent();\n    }\n\n    open<T>(componentRef: Type<T>, options?: DialogOptions): DialogRef<T> {\n        const createdComponent = this.createComponent(componentRef, options);\n        return {\n            componentInstance: createdComponent.componentInstance as T,\n            closed: createdComponent.activeDialog.onClose$,\n            dismissed: createdComponent.activeDialog.onDismiss$,\n        };\n    }\n\n    protected createComponent<T>(\n        componentRef: Type<T>,\n        dialogOptions?: DialogOptions,\n    ): {\n        componentInstance?: T;\n        activeDialog: ActiveDialog;\n    } {\n        const injector = this.dialogInjector;\n        const overlayRef = this.getOverlayRef();\n        const portal = new ComponentPortal(componentRef, null, injector);\n        const _componentRef = overlayRef.attach(portal);\n        const activeDialog = this.getActiveDialog(injector);\n        this.activeDialogInstances.push(activeDialog);\n        this.applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions);\n        this.handleDialogDestroyEvents(injector, overlayRef, dialogOptions);\n        return {\n            activeDialog,\n            componentInstance: _componentRef.instance,\n        };\n    }\n\n    protected handleDialogDestroyEvents(injector: Injector, overlayRef: OverlayRef, dialogOptions?: DialogOptions) {\n        const destroyClickOutside = dialogOptions?.destroyClickOutside ?? true;\n        const activeDialog = this.getActiveDialog(injector);\n        const destroyDialog = () => {\n            overlayRef.dispose();\n            const index = this.activeDialogInstances.indexOf(activeDialog);\n            this.activeDialogInstances.splice(index, 1);\n        };\n        if (destroyClickOutside) {\n            overlayRef\n                .backdropClick()\n                .pipe(take(1))\n                .subscribe(() => {\n                    activeDialog.dismiss();\n                });\n        }\n        activeDialog.onClose$.pipe(take(1)).subscribe(destroyDialog);\n        activeDialog.onDismiss$.pipe(take(1)).subscribe(destroyDialog);\n    }\n\n    protected applyDialogOptionsIntoActiveDialog(activeDialog: ActiveDialog, dialogOptions: DialogOptions | undefined) {\n        activeDialog.dialogSize = dialogOptions?.size ?? 'md';\n        activeDialog.escapeOnEsc = dialogOptions?.escapeOnEsc ?? true;\n    }\n\n    protected getOverlayRef() {\n        const panelClass = ['h-min'];\n        const overlayRef = this.overlay.create({\n            hasBackdrop: true,\n            positionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n            panelClass,\n        });\n        return overlayRef;\n    }\n\n    protected getActiveDialog(injector: Injector) {\n        return injector.get(ActiveDialog);\n    }\n\n    protected get dialogInjector() {\n        const injector = Injector.create({\n            providers: [{ provide: ActiveDialog, useClass: ActiveDialog }],\n            parent: this.injector,\n        });\n        return injector;\n    }\n\n    protected checkEscapeEvent() {\n        document.body.addEventListener('keydown', (keyboardEvent: KeyboardEvent) => {\n            const isEscapePressed = keyboardEvent.key === 'Escape';\n            if (!isEscapePressed) {\n                return;\n            }\n            const lastActiveModal = this.activeDialogInstances.at(this.activeDialogInstances.length - 1);\n            if (lastActiveModal && lastActiveModal.escapeOnEsc) {\n                lastActiveModal.dismiss();\n            }\n        });\n    }\n}\n\n","import { TemplatePortal } from '@angular/cdk/portal';\nimport { Injectable, TemplateRef, ViewContainerRef } from '@angular/core';\nimport { DialogOptions } from '../models/dialog-models';\nimport { DialogService } from './dialog.service';\n\n@Injectable({\n    providedIn: 'root',\n})\nexport class InternalDialogService extends DialogService {\n    constructor() {\n        super();\n    }\n\n    openByTemplate(templateRef: TemplateRef<any>, viewContainerRef: ViewContainerRef, dialogOptions?: DialogOptions) {\n        const injector = this.dialogInjector;\n        const overlayRef = this.getOverlayRef();\n        const portal = new TemplatePortal(templateRef, viewContainerRef);\n        overlayRef.attach(portal);\n        const activeDialog = this.getActiveDialog(injector);\n        this.applyDialogOptionsIntoActiveDialog(activeDialog, dialogOptions);\n        this.activeDialogInstances.push(activeDialog);\n        this.handleDialogDestroyEvents(injector, overlayRef, dialogOptions);\n        return activeDialog;\n    }\n}\n\n","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    Component,\n    computed,\n    contentChildren,\n    inject,\n    input,\n    model,\n    OnDestroy,\n    TemplateRef,\n    viewChild,\n    ViewContainerRef,\n} from '@angular/core';\nimport { toObservable } from '@angular/core/rxjs-interop';\nimport { InteractiveContentDirective } from '@seniorsistemas/angular-components/interactive-content';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { Subject, take, takeUntil } from 'rxjs';\nimport { ActiveDialog } from './models/active-dialog';\nimport { InternalDialogService } from './services/internal-dialog.service';\nimport { DialogSize } from './models/dialog-models';\n\n/**\n * @description Componente de diálogo modal que exibe conteúdo em uma janela sobreposta.\n * Suporta templates customizados para cabeçalho, corpo e rodapé via `sTemplate`.\n * Pode ser utilizado de forma declarativa (via `visible`) ou programática (via `DialogService`).\n *\n * @example\n * ```html\n * <!-- Modo declarativo -->\n * <s-dialog header=\"Título\" [(visible)]=\"showDialog\">\n *   <ng-template sTemplate=\"body\">Conteúdo</ng-template>\n *   <ng-template sTemplate=\"footer\"><button (click)=\"showDialog = false\">Fechar</button></ng-template>\n * </s-dialog>\n * ```\n *\n * @category Overlay\n */\n@Component({\n    selector: 's-dialog',\n    standalone: true,\n    templateUrl: './dialog.component.html',\n    imports: [NgTemplateOutlet, InteractiveContentDirective, NgClass],\n    providers: [{ provide: ActiveDialog, useValue: null }],\n})\nexport class DialogComponent implements AfterViewInit, OnDestroy {\n    /** @description Texto exibido no cabeçalho do diálogo. Pode ser substituído por um template com `sTemplate=\"header\"`. */\n    header = input();\n\n    /**\n     * @description Controla a visibilidade do diálogo. Suporta two-way binding via `[(visible)]`.\n     * Ao definir `true`, o diálogo é aberto; ao definir `false`, é fechado.\n     * Não deve ser usado em conjunto com `DialogService` (modo programático).\n     */\n    visible = model<boolean | undefined>(undefined);\n\n    /**\n     * @description Instância do diálogo ativo.\n     * Em modo programático (aberto via `DialogService`): injetado do pai via `skipSelf`.\n     * Em modo declarativo (via `visible`): atribuído internamente ao abrir.\n     *\n     * O `providers` do componente sobrescreve o token com `null` para que descendentes\n     * (ex: `s-dialog` dentro de um lookup dentro deste diálogo) não herdem esta instância.\n     */\n    activeDialog = inject(ActiveDialog, { optional: true, skipSelf: true });\n\n    /**\n     * @description Tamanho do diálogo.\n     * Valores aceitos: `'sm'`, `'md'` (padrão), `'lg'`, `'xl'`, `'fullscreen'`.\n     *\n     * @default 'md'\n     */\n    size = input<DialogSize>('md');\n\n    /**\n     * @description Classes CSS adicionais aplicadas ao container de conteúdo do diálogo.\n     *\n     * @default ''\n     */\n    contentClassName = input('');\n\n    /**\n     * @description Quando `true`, pressionar a tecla Escape fecha o diálogo.\n     *\n     * @default true\n     */\n    escapeOnEsc = input(true);\n\n    /**\n     * @description Quando `true`, clicar fora do diálogo (no backdrop) fecha o diálogo.\n     *\n     * @default true\n     */\n    destroyClickOutside = input(true);\n\n    /**\n     * @description Valor do aria-label do botão de fechar a dialog.\n     *\n     * @default 'Fechar'\n     */\n    closeAriaLabel = input('Fechar');\n\n    private readonly viewContainerRef = inject(ViewContainerRef);\n    private readonly dialogService = inject(InternalDialogService);\n    private readonly template = viewChild<TemplateRef<any>>('dialogTemplate');\n    private readonly templateDiretives = contentChildren(TemplateDirective);\n    private readonly onDestroy$ = new Subject<void>();\n\n    protected headerTemplate = computed(() => {\n        return this.getTemplate('header');\n    });\n\n    protected bodyTemplate = computed(() => {\n        return this.getTemplate('body');\n    });\n\n    protected footerTemplate = computed(() => {\n        return this.getTemplate('footer');\n    });\n\n    constructor() {\n        toObservable(this.visible)\n            .pipe(takeUntil(this.onDestroy$))\n            .subscribe(() => {\n                const visible = this.visible();\n                if (visible === true) {\n                    this.openDialog();\n                } else if (visible === false) {\n                    this.activeDialog?.dismiss();\n                }\n            });\n    }\n\n    ngAfterViewInit(): void {\n        if (!this.header() && !this.headerTemplate()) {\n            console.error('Header is required. provide header via input or sTemplate=\"header\"');\n        }\n\n        if (this.activeDialog && this.visible() !== undefined) {\n            throw new Error(\n                '[s-dialog] O input \"visible\" não pode ser usado em um componente aberto via DialogService. ' +\n                    'Remova o binding \"[visible]\" — o ciclo de vida deste diálogo já é controlado pelo ActiveDialog injetado.',\n            );\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.onDestroy$.next();\n        this.onDestroy$.complete();\n    }\n\n    protected onDismiss() {\n        this.activeDialog?.dismiss();\n    }\n\n    private getTemplate(templateType: string) {\n        return this.templateDiretives().find((template) => template.type === templateType)?.template;\n    }\n\n    private openDialog(): void {\n        this.activeDialog = this.dialogService.openByTemplate(this.template()!, this.viewContainerRef, {\n            size: this.size(),\n            destroyClickOutside: this.destroyClickOutside(),\n            escapeOnEsc: this.escapeOnEsc(),\n        });\n        this.activeDialog.onClose$.pipe(take(1)).subscribe(() => {\n            this.activeDialog = null;\n            this.visible.set(false);\n        });\n\n        this.activeDialog.onDismiss$.pipe(take(1)).subscribe(() => {\n            this.activeDialog = null;\n            this.visible.set(false);\n        });\n    }\n}\n\n","@let activeDialogContext = { activeDialog: activeDialog };\n<ng-template #dialogTemplate>\n    @if (activeDialog) {\n        @let isSm = activeDialog.dialogSize === 'sm';\n        @let isMd = activeDialog.dialogSize === 'md';\n        @let isLg = activeDialog.dialogSize === 'lg';\n        @let isXl = activeDialog.dialogSize === 'xl';\n        @let isFullscreen = activeDialog.dialogSize === 'fullscreen';\n\n        <div\n            [class]=\"contentClassName()\"\n            class=\"max-sm:h-screen max-sm:w-screen flex h-min max-h-screen w-screen flex-col bg-grayscale-0 shadow-md\"\n            [ngClass]=\"{\n                'max-w-[300px]': isSm,\n                'max-w-[500px]': isMd,\n                'max-w-[800px]': isLg,\n                'max-w-[1140px]': isXl,\n                'h-screen': isFullscreen,\n            }\"\n            role=\"dialog\"\n            aria-modal=\"true\"\n            aria-labelledby=\"dialog-main-title\"\n        >\n            <header class=\"flex flex-wrap justify-between gap-3 p-4 pb-0\">\n                @let _header = headerTemplate();\n                @if (_header) {\n                    <ng-container *ngTemplateOutlet=\"_header; context: activeDialogContext\"></ng-container>\n                } @else {\n                    <h3 id=\"dialog-main-title\">{{ header() }}</h3>\n                }\n\n                <button\n                    type=\"button\"\n                    class=\"rounded flex cursor-pointer items-center justify-center border-none bg-transparent outline-none focus-visible:ring-2 focus-visible:ring-primary\"\n                    [attr.aria-label]=\"closeAriaLabel()\"\n                    (click)=\"onDismiss()\"\n                >\n                    <i\n                        class=\"fas fa-times\"\n                        aria-hidden=\"true\"\n                    ></i>\n                </button>\n            </header>\n            <hr class=\"mt-4 h-[1px] w-full bg-grayscale-20\" />\n\n            <main class=\"flex-1 p-4\">\n                @let _bodyTemplate = bodyTemplate();\n                @if (_bodyTemplate) {\n                    <ng-container *ngTemplateOutlet=\"_bodyTemplate; context: activeDialogContext\"></ng-container>\n                } @else {\n                    <ng-content></ng-content>\n                }\n            </main>\n\n            @let footer = footerTemplate();\n            @if (footer) {\n                <footer class=\"flex flex-wrap gap-3 p-4 pt-0\">\n                    <hr class=\"h-[1px] w-full bg-grayscale-20\" />\n                    <div class=\"w-full\">\n                        <ng-container *ngTemplateOutlet=\"footer; context: activeDialogContext\"></ng-container>\n                    </div>\n                </footer>\n            }\n        </div>\n    }\n</ng-template>\n\n@if (visible() === undefined) {\n    <ng-container *ngTemplateOutlet=\"dialogTemplate\"></ng-container>\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}