{"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';\nimport {\n    AfterContentInit,\n    Component,\n    ContentChildren,\n    EventEmitter,\n    Input,\n    Output,\n    QueryList,\n    TemplateRef,\n} from '@angular/core';\nimport { BorderButtonOptions, EnumSeverity, Severities } from '@seniorsistemas/angular-components/shared';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\n\n/**\n * @description Componente de painel com cabeçalho, corpo e rodapé customizáveis\n * via `TemplateDirective`. Suporta colapsar/expandir com animação, nível de\n * severidade para estilo visual e botão de borda configurável.\n *\n * @example\n * ```html\n * <s-panel header=\"Título\" [toggleable]=\"true\" severity=\"info\">\n *   <p>Conteúdo</p>\n * </s-panel>\n * ```\n *\n * @category Data\n */\n@Component({\n    selector: 's-panel',\n    templateUrl: './panel.component.html',\n    styleUrls: ['./panel.component.scss'],\n    animations: [\n        trigger('BorderButtonAnimation', [\n            transition(':enter', [\n                style({ transform: 'scaleY(0)', opacity: 0 }),\n                animate('300ms ease', style({ transform: 'scaleY(1)', opacity: 1 })),\n            ]),\n            transition(':leave', [\n                style({ transform: 'scaleY(1)', opacity: 1 }),\n                animate('300ms ease', style({ transform: 'scaleY(0)', opacity: 0 })),\n            ]),\n        ]),\n    ],\n})\nexport class PanelComponent implements AfterContentInit {\n    /** @description Título exibido no cabeçalho do painel. */\n    @Input()\n    public header?: string;\n\n    /** @description Habilita o botão de toggle para colapsar/expandir o painel. @default false */\n    @Input()\n    public toggleable = false;\n\n    /** @description Define o estado inicial do painel como colapsado. @default false */\n    @Input()\n    public collapsed = false;\n\n    /** @description Nível de severidade que altera o estilo visual do painel. @default 'default' */\n    @Input()\n    public severity: Severities = 'default';\n\n    /** @description Opções de configuração do botão de borda lateral do painel. */\n    @Input()\n    public borderButtonOptions?: BorderButtonOptions;\n\n    /** @description Classes CSS adicionais aplicadas ao elemento raíz do painel. @default '' */\n    @Input()\n    public class: string = '';\n\n    /** @description Emitido quando o estado de colapso muda, com o novo valor booleano. */\n    @Output()\n    public collapsedChange = new EventEmitter<boolean>();\n\n    @ContentChildren(TemplateDirective)\n    public templates: QueryList<TemplateDirective> | null = null;\n\n    public headerTemplate: TemplateRef<unknown> | null = null;\n\n    public bodyTemplate: TemplateRef<unknown> | null = null;\n\n    public footerTemplate: TemplateRef<unknown> | null = null;\n\n    readonly EnumSeverity = EnumSeverity;\n\n    public ngAfterContentInit(): void {\n        this._getTemplates();\n    }\n\n    public toggleCollapsed(): void {\n        this.collapsed = !this.collapsed;\n        this.collapsedChange.emit(this.collapsed);\n    }\n\n    private _getCustomTemplate(type: string) {\n        return this.templates?.find((template: TemplateDirective) => template.type === type)?.template;\n    }\n\n    private _getHeaderTemplate(): TemplateRef<unknown> | null {\n        return this._getCustomTemplate('header') ?? null;\n    }\n\n    private _getBodyTemplate(): TemplateRef<unknown> | null {\n        return this._getCustomTemplate('body') ?? null;\n    }\n\n    private _getFooterTemplate(): TemplateRef<unknown> | null {\n        return this._getCustomTemplate('footer') ?? null;\n    }\n\n    private _getTemplates(): void {\n        this.headerTemplate = this._getHeaderTemplate();\n        this.bodyTemplate = this._getBodyTemplate();\n        this.footerTemplate = this._getFooterTemplate();\n    }\n}\n\n","<div\n    [class]=\"class\"\n    [ngClass]=\"{\n        panel: true,\n        'panel--success': severity === EnumSeverity.Success,\n        'panel--info': severity === EnumSeverity.Info,\n        'panel--warn': severity === EnumSeverity.Warn,\n        'panel--error': severity === EnumSeverity.Error,\n        'panel--collapsed': collapsed,\n    }\"\n>\n    @if (borderButtonOptions?.visible ? borderButtonOptions?.visible(severity) : false) {\n        <s-border-button\n            [severity]=\"severity\"\n            [options]=\"borderButtonOptions\"\n            class=\"border-button\"\n            [@BorderButtonAnimation]\n        >\n        </s-border-button>\n    }\n\n    @if (header || headerTemplate) {\n        <div class=\"header\">\n            <div class=\"header-content\">\n                @if (headerTemplate) {\n                    <ng-container *ngTemplateOutlet=\"headerTemplate\"></ng-container>\n                } @else {\n                    <span>{{ header }}</span>\n                }\n            </div>\n\n            @if (toggleable) {\n                <button\n                    class=\"collapse-button fas\"\n                    [ngClass]=\"{\n                        'fa-plus': collapsed,\n                        'fa-minus': !collapsed,\n                    }\"\n                    (click)=\"toggleCollapsed()\"\n                ></button>\n            }\n        </div>\n    }\n\n    @if (!toggleable || !collapsed) {\n        <div class=\"panel-content\">\n            <div class=\"body\">\n                <ng-content></ng-content>\n                <ng-container *ngTemplateOutlet=\"bodyTemplate\"></ng-container>\n            </div>\n\n            @if (footerTemplate) {\n                <div class=\"footer\">\n                    <ng-container *ngTemplateOutlet=\"footerTemplate\"></ng-container>\n                </div>\n            }\n        </div>\n    }\n</div>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { PanelComponent } from \"./panel.component\";\nimport { TemplateModule } from \"@seniorsistemas/angular-components/template\";\nimport { BorderButtonModule } from \"@seniorsistemas/angular-components/shared\";\n\n@NgModule({\n    imports: [CommonModule, BorderButtonModule],\n    declarations: [PanelComponent],\n    exports: [PanelComponent, TemplateModule],\n})\nexport class PanelModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;AAcA;;;;;;;;;;;;;AAaG;MAkBU,cAAc,CAAA;;AAGhB,IAAA,MAAM,CAAU;;IAIhB,UAAU,GAAG,KAAK,CAAC;;IAInB,SAAS,GAAG,KAAK,CAAC;;IAIlB,QAAQ,GAAe,SAAS,CAAC;;AAIjC,IAAA,mBAAmB,CAAuB;;IAI1C,KAAK,GAAW,EAAE,CAAC;;AAInB,IAAA,eAAe,GAAG,IAAI,YAAY,EAAW,CAAC;IAG9C,SAAS,GAAwC,IAAI,CAAC;IAEtD,cAAc,GAAgC,IAAI,CAAC;IAEnD,YAAY,GAAgC,IAAI,CAAC;IAEjD,cAAc,GAAgC,IAAI,CAAC;IAEjD,YAAY,GAAG,YAAY,CAAC;IAE9B,kBAAkB,GAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAEM,eAAe,GAAA;AAClB,QAAA,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;KAC7C;AAEO,IAAA,kBAAkB,CAAC,IAAY,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAA2B,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,QAAQ,CAAC;KAClG;IAEO,kBAAkB,GAAA;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;KACpD;IAEO,gBAAgB,GAAA;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;KAClD;IAEO,kBAAkB,GAAA;QACtB,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;KACpD;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAChD,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;KACnD;wGArEQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAd,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,cAAc,EA6BN,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,UAAA,EAAA,mBAAA,EAAA,qBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAiB,EC1EtC,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,y3DA2DA,ED3BgB,MAAA,EAAA,CAAA,6wBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACR,OAAO,CAAC,uBAAuB,EAAE;gBAC7B,UAAU,CAAC,QAAQ,EAAE;oBACjB,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7C,oBAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;iBACvE,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;oBACjB,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7C,oBAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;iBACvE,CAAC;aACL,CAAC;AACL,SAAA,EAAA,CAAA,CAAA;;4FAEQ,cAAc,EAAA,UAAA,EAAA,CAAA;kBAjB1B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,SAAS,EAGP,UAAA,EAAA;wBACR,OAAO,CAAC,uBAAuB,EAAE;4BAC7B,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7C,gCAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BACvE,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;gCACjB,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;AAC7C,gCAAA,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;6BACvE,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,y3DAAA,EAAA,MAAA,EAAA,CAAA,6wBAAA,CAAA,EAAA,CAAA;8BAKM,MAAM,EAAA,CAAA;sBADZ,KAAK;gBAKC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAKC,SAAS,EAAA,CAAA;sBADf,KAAK;gBAKC,QAAQ,EAAA,CAAA;sBADd,KAAK;gBAKC,mBAAmB,EAAA,CAAA;sBADzB,KAAK;gBAKC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAKC,eAAe,EAAA,CAAA;sBADrB,MAAM;gBAIA,SAAS,EAAA,CAAA;sBADf,eAAe;uBAAC,iBAAiB,CAAA;;;ME9DzB,WAAW,CAAA;wGAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAX,WAAW,EAAA,YAAA,EAAA,CAHL,cAAc,CADnB,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,kBAAkB,CAAA,EAAA,OAAA,EAAA,CAEhC,cAAc,EAAE,cAAc,CAAA,EAAA,CAAA,CAAA;AAE/B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAJV,OAAA,EAAA,CAAA,YAAY,EAAE,kBAAkB,EAEhB,cAAc,CAAA,EAAA,CAAA,CAAA;;4FAE/B,WAAW,EAAA,UAAA,EAAA,CAAA;kBALvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,kBAAkB,CAAC;oBAC3C,YAAY,EAAE,CAAC,cAAc,CAAC;AAC9B,oBAAA,OAAO,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;AAC5C,iBAAA,CAAA;;;ACXD;;AAEG;;;;"}