{"version":3,"file":"seniorsistemas-angular-components-sidebar.mjs","sources":["../../projects/angular-components/sidebar/src/lib/sidebar/sidebar.component.ts","../../projects/angular-components/sidebar/src/lib/sidebar/sidebar.component.html","../../projects/angular-components/sidebar/src/lib/sidebar/sidebar.module.ts","../../projects/angular-components/sidebar/src/seniorsistemas-angular-components-sidebar.ts"],"sourcesContent":["import { animate, style, transition, trigger } from '@angular/animations';\nimport {\n    AfterContentInit,\n    Component,\n    ContentChildren,\n    effect,\n    Input,\n    model,\n    OnDestroy,\n    QueryList,\n    TemplateRef,\n} from '@angular/core';\nimport { TemplateDirective } from '@seniorsistemas/angular-components/template';\nimport { disableScroll, enableScroll } from '@seniorsistemas/angular-components/utils';\n\n/**\n * @description Componente de painel lateral deslizante (sidebar) que aparece sobre o conteúdo\n * vindo do lado direito da tela. Suporta templates customizados para cabeçalho, corpo e rodapé\n * via `sTemplate`, bloqueio de scroll automático e confirmação de fechamento.\n *\n * @example\n * ```html\n * <s-sidebar [(visible)]=\"sidebarOpen\" header=\"Filtros\" [closable]=\"true\">\n *   <ng-template sTemplate=\"body\">Conteúdo</ng-template>\n * </s-sidebar>\n * ```\n *\n * @category Overlay\n */\n@Component({\n    selector: 's-sidebar',\n    templateUrl: './sidebar.component.html',\n    styleUrls: ['./sidebar.component.scss'],\n    host: {\n        '(document:keydown.escape)': 'handleEscape()',\n    },\n    animations: [\n        trigger('visibilityChanged', [\n            transition(':enter', [\n                style({ transform: 'translateX(100%)' }),\n                animate('300ms', style({ transform: 'translateX(0)' })),\n            ]),\n            transition(':leave', [\n                style({ transform: 'translateX(0)' }),\n                animate('300ms', style({ transform: 'translateX(100%)' })),\n            ]),\n        ]),\n    ],\n})\nexport class SidebarComponent implements AfterContentInit, OnDestroy {\n    @ContentChildren(TemplateDirective)\n    public templates: QueryList<TemplateDirective> | null = null;\n\n    /**\n     * @description Controla a visibilidade da sidebar. Suporta two-way binding via `[(visible)]`.\n     *\n     * @default false\n     */\n    public visible = model<boolean>(false);\n\n    /**\n     * @description Quando `true`, exibe o botão de fechar (X) no cabeçalho da sidebar.\n     *\n     * @default true\n     */\n    @Input()\n    public closable = true;\n\n    /**\n     * @description Quando `true`, clicar no backdrop (área escurecida fora da sidebar) fecha o painel.\n     *\n     * @default true\n     */\n    @Input()\n    public dismissible = true;\n\n    /**\n     * @description Quando `true`, pressionar a tecla Escape fecha a sidebar.\n     *\n     * @default true\n     */\n    @Input()\n    public closeOnEscape = true;\n\n    /**\n     * @description Texto exibido no cabeçalho padrão da sidebar.\n     * Pode ser substituído por um template customizado via `sTemplate=\"header\"`.\n     */\n    @Input()\n    public header?: string;\n\n    /**\n     * @description Quando `true`, aumenta a largura da sidebar para acomodar mais conteúdo.\n     *\n     * @default false\n     */\n    @Input()\n    public largeSized = false;\n\n    /**\n     * @description Quando `true`, mantém o conteúdo da sidebar no DOM mesmo quando oculta,\n     * preservando o estado interno dos componentes filhos.\n     *\n     * @default false\n     */\n    @Input()\n    public cache = false;\n\n    /**\n     * @description Função de confirmação chamada antes de fechar a sidebar.\n     * Quando retornar `false`, o fechamento é bloqueado. Útil para validar formulários não salvos.\n     */\n    @Input()\n    public set registerConfirmClose(fn: () => boolean) {\n        this._confirmClose = fn;\n    }\n\n    public headerTemplate: TemplateRef<unknown> | null = null;\n    public bodyTemplate: TemplateRef<unknown> | null = null;\n    public footerTemplate: TemplateRef<unknown> | null = null;\n\n    private _confirmClose = () => true;\n\n    private readonly visibleEffect = effect(() => {\n        const visible = this.visible();\n        if (visible) {\n            disableScroll();\n        } else {\n            enableScroll();\n        }\n    });\n\n    public ngAfterContentInit(): void {\n        this._getTemplates();\n    }\n\n    public ngOnDestroy(): void {\n        this.visibleEffect.destroy();\n    }\n\n    public closeSidebar(): void {\n        if (this._confirmClose()) {\n            this.visible.set(false);\n        }\n    }\n\n    public handleEscape(): void {\n        if (this.closeOnEscape) {\n            this.closeSidebar();\n        }\n    }\n\n    private _getCustomTemplate(type: string): TemplateRef<any> | null {\n        return this.templates?.find((template: TemplateDirective) => template.type === type)?.template ?? null;\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","@if (visible()) {\n    <div\n        class=\"backdrop\"\n        (click)=\"dismissible && closeSidebar()\"\n    ></div>\n}\n\n@if (cache || visible()) {\n    <div\n        cdkTrapFocus\n        [cdkTrapFocusAutoCapture]=\"visible()\"\n        [@visibilityChanged]\n        class=\"sidebar\"\n        [class.sidebar--open]=\"visible()\"\n        [class.sidebar--large-size]=\"largeSized\"\n    >\n        <div class=\"sidebar__header\">\n            @if (headerTemplate) {\n                <ng-template *ngTemplateOutlet=\"headerTemplate\"></ng-template>\n            } @else {\n                <span class=\"sidebar__header__title\">{{ header }}</span>\n            }\n            @if (closable) {\n                <button\n                    class=\"sidebar__header__close fa-solid fa-xmark\"\n                    (click)=\"closeSidebar()\"\n                ></button>\n            }\n        </div>\n        <div class=\"sidebar__body\">\n            @if (bodyTemplate) {\n                <ng-template [ngTemplateOutlet]=\"bodyTemplate\"></ng-template>\n            } @else {\n                <ng-content></ng-content>\n            }\n        </div>\n        @if (footerTemplate) {\n            <div class=\"sidebar__footer\">\n                <ng-template [ngTemplateOutlet]=\"footerTemplate\"></ng-template>\n            </div>\n        }\n    </div>\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { A11yModule } from '@angular/cdk/a11y';\n\nimport { SidebarComponent } from './sidebar.component';\nimport { TemplateModule } from '@seniorsistemas/angular-components/template';\n\n@NgModule({\n    imports: [CommonModule, A11yModule],\n    declarations: [SidebarComponent],\n    exports: [SidebarComponent, TemplateModule],\n})\nexport class SidebarModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AAeA;;;;;;;;;;;;;AAaG;MAqBU,gBAAgB,CAAA;IAElB,SAAS,GAAwC,IAAI,CAAC;AAE7D;;;;AAIG;AACI,IAAA,OAAO,GAAG,KAAK,CAAU,KAAK,CAAC,CAAC;AAEvC;;;;AAIG;IAEI,QAAQ,GAAG,IAAI,CAAC;AAEvB;;;;AAIG;IAEI,WAAW,GAAG,IAAI,CAAC;AAE1B;;;;AAIG;IAEI,aAAa,GAAG,IAAI,CAAC;AAE5B;;;AAGG;AAEI,IAAA,MAAM,CAAU;AAEvB;;;;AAIG;IAEI,UAAU,GAAG,KAAK,CAAC;AAE1B;;;;;AAKG;IAEI,KAAK,GAAG,KAAK,CAAC;AAErB;;;AAGG;IACH,IACW,oBAAoB,CAAC,EAAiB,EAAA;AAC7C,QAAA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;KAC3B;IAEM,cAAc,GAAgC,IAAI,CAAC;IACnD,YAAY,GAAgC,IAAI,CAAC;IACjD,cAAc,GAAgC,IAAI,CAAC;AAElD,IAAA,aAAa,GAAG,MAAM,IAAI,CAAC;AAElB,IAAA,aAAa,GAAG,MAAM,CAAC,MAAK;AACzC,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,OAAO,EAAE;AACT,YAAA,aAAa,EAAE,CAAC;SACnB;aAAM;AACH,YAAA,YAAY,EAAE,CAAC;SAClB;AACL,KAAC,CAAC,CAAC;IAEI,kBAAkB,GAAA;QACrB,IAAI,CAAC,aAAa,EAAE,CAAC;KACxB;IAEM,WAAW,GAAA;AACd,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;KAChC;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;AACtB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;SAC3B;KACJ;IAEM,YAAY,GAAA;AACf,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,YAAY,EAAE,CAAC;SACvB;KACJ;AAEO,IAAA,kBAAkB,CAAC,IAAY,EAAA;QACnC,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,QAA2B,KAAK,QAAQ,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;KAC1G;IAEO,iBAAiB,GAAA;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;KACpD;IAEO,eAAe,GAAA;QACnB,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;KAClD;IAEO,iBAAiB,GAAA;QACrB,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;KACpD;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC;AAC3C,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAClD;wGA3HQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,gBAAgB,EACR,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,MAAA,EAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,UAAA,EAAA,QAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,oBAAA,EAAA,EAAA,iBAAA,EAAA,sBAAA,EAAA,UAAA,EAAA,sBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,yBAAA,EAAA,gBAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,SAAA,EAAA,iBAAiB,EClDtC,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,k1CA2CA,EDPgB,MAAA,EAAA,CAAA,w7BAAA,CAAA,EAAA,YAAA,EAAA,CAAA,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,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,cAAA,EAAA,yBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACR,OAAO,CAAC,mBAAmB,EAAE;gBACzB,UAAU,CAAC,QAAQ,EAAE;AACjB,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;oBACxC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;iBAC1D,CAAC;gBACF,UAAU,CAAC,QAAQ,EAAE;AACjB,oBAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;oBACrC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;iBAC7D,CAAC;aACL,CAAC;AACL,SAAA,EAAA,CAAA,CAAA;;4FAEQ,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBApB5B,SAAS;AACI,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EAGf,IAAA,EAAA;AACF,wBAAA,2BAA2B,EAAE,gBAAgB;qBAChD,EACW,UAAA,EAAA;wBACR,OAAO,CAAC,mBAAmB,EAAE;4BACzB,UAAU,CAAC,QAAQ,EAAE;AACjB,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;gCACxC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,CAAC;6BAC1D,CAAC;4BACF,UAAU,CAAC,QAAQ,EAAE;AACjB,gCAAA,KAAK,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;gCACrC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;6BAC7D,CAAC;yBACL,CAAC;AACL,qBAAA,EAAA,QAAA,EAAA,k1CAAA,EAAA,MAAA,EAAA,CAAA,w7BAAA,CAAA,EAAA,CAAA;8BAIM,SAAS,EAAA,CAAA;sBADf,eAAe;uBAAC,iBAAiB,CAAA;gBAgB3B,QAAQ,EAAA,CAAA;sBADd,KAAK;gBASC,WAAW,EAAA,CAAA;sBADjB,KAAK;gBASC,aAAa,EAAA,CAAA;sBADnB,KAAK;gBAQC,MAAM,EAAA,CAAA;sBADZ,KAAK;gBASC,UAAU,EAAA,CAAA;sBADhB,KAAK;gBAUC,KAAK,EAAA,CAAA;sBADX,KAAK;gBAQK,oBAAoB,EAAA,CAAA;sBAD9B,KAAK;;;MEpGG,aAAa,CAAA;wGAAb,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAAb,aAAa,EAAA,YAAA,EAAA,CAHP,gBAAgB,CADrB,EAAA,OAAA,EAAA,CAAA,YAAY,EAAE,UAAU,CAAA,EAAA,OAAA,EAAA,CAExB,gBAAgB,EAAE,cAAc,CAAA,EAAA,CAAA,CAAA;AAEjC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,EAJZ,OAAA,EAAA,CAAA,YAAY,EAAE,UAAU,EAEN,cAAc,CAAA,EAAA,CAAA,CAAA;;4FAEjC,aAAa,EAAA,UAAA,EAAA,CAAA;kBALzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,UAAU,CAAC;oBACnC,YAAY,EAAE,CAAC,gBAAgB,CAAC;AAChC,oBAAA,OAAO,EAAE,CAAC,gBAAgB,EAAE,cAAc,CAAC;AAC9C,iBAAA,CAAA;;;ACXD;;AAEG;;;;"}