{"version":3,"file":"seniorsistemas-angular-components-toast.mjs","sources":["../../projects/angular-components/toast/src/lib/toast/toast.component.ts","../../projects/angular-components/toast/src/lib/toast/toast.component.html","../../projects/angular-components/toast/src/lib/toast/toast.module.ts","../../projects/angular-components/toast/src/lib/toast/toast.service.ts","../../projects/angular-components/toast/src/seniorsistemas-angular-components-toast.ts"],"sourcesContent":["import { Component, Input, Output, EventEmitter, HostBinding, OnDestroy, OnInit } from '@angular/core'; // Adicionado HostBinding, OnDestroy\nimport { Toast } from './types/toast';\n\n/**\n * @description Componente individual de notificação (toast) que exibe uma mensagem temporária na tela.\n * Gerencia automaticamente o timer de dismiss quando `toast.sticky` é `false`.\n * Recomenda-se utilizar o `ToastService` para criar e empilhar toasts na aplicação.\n *\n * @example\n * ```html\n * <s-toast [toast]=\"toastData\" (dismiss)=\"onDismiss()\" />\n * ```\n *\n * @category Feedback\n */\n@Component({\n    selector: 's-toast',\n    templateUrl: './toast.component.html',\n    styleUrls: ['./toast.component.scss'],\n})\nexport class ToastComponent implements OnInit, OnDestroy {\n    /**\n     * @description Objeto com os dados da notificação a ser exibida.\n     * Inclui propriedades como `severity`, `summary`, `detail`, `duration` e `sticky`.\n     */\n    @Input()\n    public toast!: Toast;\n\n    /**\n     * @description Emitido quando a notificação é descartada, seja pelo timer automático\n     * (ao expirar `toast.duration`) ou pela ação manual do usuário.\n     */\n    @Output()\n    public dismiss = new EventEmitter<void>();\n\n    @HostBinding('class.toast--leaving')\n    public isLeaving = false;\n\n    private timer: ReturnType<typeof setTimeout> | null = null;\n\n    public ngOnInit(): void {\n        if (!this.toast.sticky && this.toast.duration) {\n            this.timer = setTimeout(() => {\n                this.startDismissAnimation();\n            }, this.toast.duration);\n        }\n    }\n\n    public ngOnDestroy(): void {\n        if (this.timer) {\n            clearTimeout(this.timer);\n        }\n    }\n\n    public startDismissAnimation(): void {\n        this.isLeaving = true;\n\n        setTimeout(() => {\n            this.dismiss.emit();\n        }, 300);\n    }\n\n    public dismissToast(): void {\n        if (this.timer) {\n            clearTimeout(this.timer);\n        }\n        this.startDismissAnimation();\n    }\n}\n\n","<div\n    class=\"toast\"\n    [class.toast--info]=\"toast.severity === 'info'\"\n    [class.toast--success]=\"toast.severity === 'success'\"\n    [class.toast--warning]=\"toast.severity === 'warning'\"\n    [class.toast--error]=\"toast.severity === 'error'\"\n>\n    <div class=\"toast-content\">\n        <i\n            class=\"toast-icon fas fa-info\"\n            [class.fa-info]=\"toast.severity === 'info'\"\n            [class.fa-check]=\"toast.severity === 'success'\"\n            [class.fa-exclamation-triangle]=\"toast.severity === 'warning'\"\n            [class.fa-times]=\"toast.severity === 'error'\"\n        ></i>\n        <div class=\"text-container\">\n            @if(toast.title) {\n                <span class=\"toast-summary\" [innerHTML]=\"toast.title\"></span>\n            }\n            @if(toast.text) {\n                <span [innerHTML]=\"toast.text\"></span>\n            }\n        </div>\n    </div>\n    @if(toast.closable) {\n        <button class=\"toast-close-button\" (click)=\"dismissToast()\"><i class=\"fas fa-times\"></i></button>\n    }\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { ToastComponent } from \"./toast.component\";\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [ToastComponent],\n})\nexport class ToastModule {}\n","import { Injectable, ComponentRef, ApplicationRef, Injector, EmbeddedViewRef, ComponentFactoryResolver, inject } from \"@angular/core\";\n\nimport { ToastComponent } from \"./toast.component\";\nimport { Toast } from \"./types/toast\";\nimport { first } from \"rxjs/operators\";\n\n@Injectable({\n    providedIn: \"root\",\n})\nexport class ToastService {\n    private appRef = inject(ApplicationRef);\n    private injector = inject(Injector);\n    private componentFactoryResolver = inject(ComponentFactoryResolver);\n\n    private activeToasts: ComponentRef<ToastComponent>[] = [];\n    private globalToastHostElement: HTMLElement | null = null;\n\n    private ensureGlobalToastHost(): void {\n        if (!this.globalToastHostElement) {\n            this.globalToastHostElement = document.createElement(\"div\");\n            document.body.appendChild(this.globalToastHostElement);\n\n            this.globalToastHostElement.style.display = \"flex\";\n            this.globalToastHostElement.style.flexDirection = \"column\";\n            this.globalToastHostElement.style.position = \"fixed\";\n            this.globalToastHostElement.style.right = \"20px\";\n            this.globalToastHostElement.style.top = \"20px\";\n            this.globalToastHostElement.style.zIndex = \"99999\";\n            this.globalToastHostElement.style.gap = \"10px\";\n        }\n    }\n\n    public show(toast: Toast): void {\n        this.ensureGlobalToastHost();\n\n        const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ToastComponent);\n        const componentRef = componentFactory.create(this.injector);\n\n        this.appRef.attachView(componentRef.hostView);\n\n        if (!toast.sticky) {\n            toast.duration = toast.duration ?? 10000;\n        }\n\n        componentRef.instance.toast = {\n            closable: true,\n            ...toast,\n        };\n\n        const domElem = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n        this.globalToastHostElement!.appendChild(domElem);\n        domElem.style.display = \"flex\";\n        domElem.style.justifyContent = \"center\";\n\n        componentRef.instance.dismiss.pipe(first()).subscribe(() => {\n            const index = this.activeToasts.indexOf(componentRef);\n\n            if (index !== -1) {\n                this.appRef.detachView(componentRef.hostView);\n                componentRef.destroy();\n                this.activeToasts.splice(index, 1);\n            }\n\n            if (this.activeToasts.length === 0 && this.globalToastHostElement) {\n                this.globalToastHostElement.remove();\n                this.globalToastHostElement = null;\n            }\n        });\n\n        this.activeToasts.push(componentRef);\n    }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}