{"version":3,"file":"seniorsistemas-angular-components-panel.mjs","sources":["../../projects/angular-components/panel/src/lib/panel/panel.component.ts","../../projects/angular-components/panel/src/lib/panel/panel.component.html","../../projects/angular-components/panel/src/lib/panel/panel.module.ts","../../projects/angular-components/panel/src/seniorsistemas-angular-components-panel.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\r\nimport {\r\n    AfterContentInit,\r\n    Component,\r\n    ContentChildren,\r\n    EventEmitter,\r\n    Input,\r\n    Output,\r\n    QueryList,\r\n    TemplateRef,\r\n} from '@angular/core';\r\nimport {\r\n    BorderButtonOptions,\r\n    EnumSeverity,\r\n    Severities,\r\n    BorderButtonComponent,\r\n} from '@seniorsistemas/angular-components/shared';\r\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n/**\r\n * @description Componente de painel com cabeçalho, corpo e rodapé customizáveis\r\n * via `TemplateDirective`. Suporta colapsar/expandir com animação, nível de\r\n * severidade para estilo visual e botão de borda configurável.\r\n *\r\n * @example\r\n * ```html\r\n * <s-panel header=\"Título\" [toggleable]=\"true\" severity=\"info\">\r\n *   <p>Conteúdo</p>\r\n * </s-panel>\r\n * ```\r\n *\r\n * @category Data\r\n */\r\n@Component({\r\n    selector: 's-panel',\r\n    templateUrl: './panel.component.html',\r\n    animations: [\r\n        trigger('BorderButtonAnimation', [\r\n            transition(':enter', [\r\n                style({ transform: 'scaleY(0)', opacity: 0 }),\r\n                animate('300ms ease', style({ transform: 'scaleY(1)', opacity: 1 })),\r\n            ]),\r\n            transition(':leave', [\r\n                style({ transform: 'scaleY(1)', opacity: 1 }),\r\n                animate('300ms ease', style({ transform: 'scaleY(0)', opacity: 0 })),\r\n            ]),\r\n        ]),\r\n    ],\r\n    standalone: true,\r\n    imports: [NgClass, BorderButtonComponent, NgTemplateOutlet, TranslateModule],\r\n})\r\nexport class PanelComponent implements AfterContentInit {\r\n    private static _idCounter = 0;\r\n\r\n    /** @description ID único gerado automaticamente para associar o botão toggle ao corpo do painel via aria-controls. */\r\n    public readonly panelBodyId = `panel-body-${++PanelComponent._idCounter}`;\r\n\r\n    /** @description Nível do heading do cabeçalho para acessibilidade (aria-level). @default 3 */\r\n    @Input()\r\n    public ariaHeaderLevel: number = 3;\r\n\r\n    /** @description Título exibido no cabeçalho do painel. */\r\n    @Input()\r\n    public header?: string;\r\n\r\n    /** @description Descrição exibida no cabeçalho do painel. */\r\n    @Input()\r\n    public description?: string;\r\n\r\n    /** @description Habilita o botão de toggle para colapsar/expandir o painel. @default false */\r\n    @Input()\r\n    public toggleable = false;\r\n\r\n    /** @description Define o estado inicial do painel como colapsado. @default false */\r\n    @Input()\r\n    public collapsed = false;\r\n\r\n    /** @description Nível de severidade que altera o estilo visual do painel. @default 'default' */\r\n    @Input()\r\n    public severity: Severities = 'default';\r\n\r\n    /** @description Opções de configuração do botão de borda lateral do painel. */\r\n    @Input()\r\n    public borderButtonOptions?: BorderButtonOptions;\r\n\r\n    /** @description Classes CSS adicionais aplicadas ao elemento raíz do painel. @default '' */\r\n    @Input()\r\n    public class: string = '';\r\n\r\n    /** @description Emitido quando o estado de colapso muda, com o novo valor booleano. */\r\n    @Output()\r\n    public collapsedChange = new EventEmitter<boolean>();\r\n\r\n    @ContentChildren(TemplateDirective)\r\n    public templates: QueryList<TemplateDirective> | null = null;\r\n\r\n    public headerTemplate: TemplateRef<unknown> | null = null;\r\n\r\n    public bodyTemplate: TemplateRef<unknown> | null = null;\r\n\r\n    public footerTemplate: TemplateRef<unknown> | null = null;\r\n\r\n    readonly EnumSeverity = EnumSeverity;\r\n\r\n    public ngAfterContentInit(): void {\r\n        this._getTemplates();\r\n    }\r\n\r\n    public toggleCollapsed(): void {\r\n        this.collapsed = !this.collapsed;\r\n        this.collapsedChange.emit(this.collapsed);\r\n    }\r\n\r\n    private _getCustomTemplate(type: string) {\r\n        return this.templates?.find((template: TemplateDirective) => template.type === type)?.template;\r\n    }\r\n\r\n    private _getHeaderTemplate(): TemplateRef<unknown> | null {\r\n        return this._getCustomTemplate('header') ?? null;\r\n    }\r\n\r\n    private _getBodyTemplate(): TemplateRef<unknown> | null {\r\n        return this._getCustomTemplate('body') ?? null;\r\n    }\r\n\r\n    private _getFooterTemplate(): TemplateRef<unknown> | null {\r\n        return this._getCustomTemplate('footer') ?? null;\r\n    }\r\n\r\n    private _getTemplates(): void {\r\n        this.headerTemplate = this._getHeaderTemplate();\r\n        this.bodyTemplate = this._getBodyTemplate();\r\n        this.footerTemplate = this._getFooterTemplate();\r\n    }\r\n}\r\n","<div\n    class=\"relative border border-[#dedce5] bg-grayscale-0 p-5 transition-colors duration-500 ease-in-out\"\n    [class]=\"class\"\n    [ngClass]=\"{\n        'border-criticality-green': severity === EnumSeverity.Success,\n        'border-criticality-blue': severity === EnumSeverity.Info,\n        'border-criticality-orange': severity === EnumSeverity.Warn,\n        'border-criticality-red': severity === EnumSeverity.Error,\n    }\"\n>\n    @if (borderButtonOptions && borderButtonOptions.visible?.(severity)) {\n        <s-border-button\n            [severity]=\"severity\"\n            [options]=\"borderButtonOptions\"\n            class=\"absolute -top-3 right-[15px] z-10\"\n            [@BorderButtonAnimation]\n        >\n        </s-border-button>\n    }\n\n    @if (header || headerTemplate) {\n        <div\n            class=\"flex justify-between\"\n            [ngClass]=\"{ 'mb-3 border-b border-b-[#dedce5] pb-3': !collapsed }\"\n        >\n            <div class=\"grow\">\n                @if (headerTemplate) {\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                } @else {\n                    <div class=\"flex flex-col gap-3\">\n                        <span\n                            class=\"uppercase\"\n                            role=\"heading\"\n                            [attr.aria-level]=\"ariaHeaderLevel\"\n                            >{{ header }}</span\n                        >\n                        @if (description) {\n                            <span class=\"text-sm text-grayscale-60\">{{ description }}</span>\n                        }\n                    </div>\n                }\n            </div>\n\n            @if (toggleable) {\n                <button\n                    type=\"button\"\n                    class=\"fas h-6 w-6 cursor-pointer border-none bg-transparent text-[#212533]\"\n                    [ngClass]=\"{\n                        'fa-plus': collapsed,\n                        'fa-minus': !collapsed,\n                    }\"\n                    [attr.aria-expanded]=\"!collapsed\"\n                    [attr.aria-controls]=\"collapsed ? null : panelBodyId\"\n                    [attr.aria-label]=\"'platform.angular_components.panel_toggle' | translate: { header: header || '' }\"\n                    (click)=\"toggleCollapsed()\"\n                ></button>\n            }\n        </div>\n    }\n\n    @if (!toggleable || !collapsed) {\n        <div [id]=\"panelBodyId\">\n            <div [class.pb-3]=\"footerTemplate\">\n                <ng-content></ng-content>\n                <ng-container *ngTemplateOutlet=\"bodyTemplate\"></ng-container>\n            </div>\n\n            @if (footerTemplate) {\n                <div class=\"border-t border-t-[#dedce5] pt-3\">\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n            }\n        </div>\n    }\n</div>\n\n","import { NgModule } from '@angular/core';\r\n\r\nimport { PanelComponent } from './panel.component';\r\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\r\n\r\n@NgModule({\r\n    imports: [PanelComponent],\r\n    exports: [PanelComponent, TemplateModule],\r\n})\r\nexport class PanelModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}