{"version":3,"file":"seniorsistemas-angular-components-slide-in-bar.mjs","sources":["../../projects/angular-components/slide-in-bar/src/lib/slide-in-bar/slide-in-bar.service.ts","../../projects/angular-components/slide-in-bar/src/lib/slide-in-bar/slide-in-bar.component.ts","../../projects/angular-components/slide-in-bar/src/lib/slide-in-bar/slide-in-bar.component.html","../../projects/angular-components/slide-in-bar/src/lib/slide-in-bar/slide-in-bar.module.ts","../../projects/angular-components/slide-in-bar/src/seniorsistemas-angular-components-slide-in-bar.ts"],"sourcesContent":["import { Injectable } from \"@angular/core\";\n\nimport { Observable, Subject } from \"rxjs\";\n\n@Injectable()\nexport class SlideInBarService {\n    private modalCloseMap = new Map<string, Subject<void>>();\n\n    public createSlidePanel(id: string): Observable<void> {\n        const panelSubject = new Subject<void>();\n\n        this.modalCloseMap.set(id, panelSubject);\n        return panelSubject.asObservable();\n    }\n\n    public getModalCloseObservable(id: string): Observable<void> | null {\n        return this.modalCloseMap.get(id)?.asObservable() ?? null;\n    }\n\n    public closeModal(id: string): void {\n        const subject = this.modalCloseMap.get(id);\n        if (subject) {\n            subject.next();\n        }\n    }\n}","import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { AfterViewChecked, AfterViewInit, Component, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output, inject } from '@angular/core';\n\nimport { DEPRECATED_CONFIG } from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { DeprecatedSelectorDirective } from '@seniorsistemas/angular-components/common/deprecated-selector';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { SlideInBarService } from './slide-in-bar.service';\n\nconst SMALL_DEVICE_BREAKPOINT = 420;\n\n/**\n * @description Componente de painel deslizante lateral que expande/colapsa ao clicar em um botão de toggle.\n * Em telas pequenas (≤ 420px), o painel entra em modo overlay, sobrepondo o conteúdo.\n * Substitui o seletor `s-slide-panel` (deprecado desde v20.0.0).\n *\n * @example\n * ```html\n * <s-slide-in-bar [cache]=\"true\" (panelOpened)=\"onOpen()\">\n *   <p>Conteúdo lateral</p>\n * </s-slide-in-bar>\n * ```\n *\n * @category Overlay\n */\n@Component({\n    selector: 's-slide-in-bar, s-slide-panel',\n    templateUrl: './slide-in-bar.component.html',\n    styleUrls: ['./slide-in-bar.component.scss'],\n    hostDirectives: [DeprecatedSelectorDirective],\n    providers: [\n        {\n            provide: DEPRECATED_CONFIG,\n            useValue: {\n                oldSelector: 's-slide-panel',\n                newSelector: 's-slide-in-bar',\n                removalVersion: '20.0.0',\n            },\n        },\n    ],\n    animations: [\n        trigger('cachelessAnimation', [\n            transition(':enter', [style({ width: '0' }), animate('200ms linear', style({ width: '*' }))]),\n            transition(':leave', [style({ width: '*' }), animate('200ms linear', style({ width: '0' }))]),\n        ]),\n        trigger('cacheAnimation', [\n            state('true', style({ width: '*', padding: '0 16px' })),\n            state('false', style({ width: '0px', padding: '0' })),\n            transition('* => *', animate('200ms')),\n        ]),\n    ],\n})\nexport class SlideInBarComponent implements OnInit, AfterViewChecked, AfterViewInit, OnDestroy {\n    private readonly slidePanelService = inject(SlideInBarService);\n\n    public static nextId = 0;\n\n    /**\n     * @description Identificador único do painel. Gerado automaticamente se não informado.\n     * Usado internamente pelo `SlideInBarService` para comunicação entre painéis.\n     */\n    @Input()\n    public id = `slide-panel-${++SlideInBarComponent.nextId}`;\n\n    /**\n     * @description Classe de ícone exibida no botão de abertura do painel.\n     *\n     * @default 'fas fa-chevron-right'\n     */\n    @Input()\n    public openIcon = 'fas fa-chevron-right';\n\n    /**\n     * @description Classe de ícone exibida no botão de fechamento do painel.\n     *\n     * @default 'fas fa-chevron-left'\n     */\n    @Input()\n    public closeIcon = 'fas fa-chevron-left';\n\n    /**\n     * @description Quando `true`, mantém o conteúdo do painel no DOM mesmo quando fechado,\n     * preservando o estado interno dos componentes filhos.\n     *\n     * @default false\n     */\n    @Input()\n    public cache = false;\n\n    /**\n     * @description Quando `true`, o painel é iniciado já aberto.\n     *\n     * @default false\n     */\n    @Input()\n    public createOpen = false;\n\n    /**\n     * @description Quando `true`, o painel não sobrepõe o conteúdo ao expandir,\n     * empurrando o layout adjacente.\n     *\n     * @default false\n     */\n    @Input()\n    public noOverlap = false;\n\n    /**\n     * @description Emitido quando o painel é aberto pelo usuário.\n     */\n    @Output()\n    public panelOpened = new EventEmitter<void>();\n\n    /**\n     * @description Emitido quando o painel é fechado pelo usuário.\n     */\n    @Output()\n    public panelClosed = new EventEmitter<void>();\n\n    public isOpen = false;\n    public isSlideOver = false;\n    public isAnimating = false;\n    public isContentAnimationDisabled = true;\n\n    private _unsubscribe$ = new Subject<void>();\n\n    @HostListener('window:resize')\n    public onResize(): void {\n        this._checkOverBehavior();\n    }\n\n    public ngOnInit(): void {\n        this._checkOverBehavior();\n        this.slidePanelService\n            .createSlidePanel(this.id)\n            .pipe(takeUntil(this._unsubscribe$))\n            .subscribe(() => {\n                this.isOpen = false;\n            });\n    }\n\n    public ngAfterViewInit(): void {\n        queueMicrotask(() => {\n            if (this.createOpen) {\n                this.isOpen = true;\n            }\n        });\n    }\n\n    public ngAfterViewChecked() {\n        return;\n        // to executed at a safe time prior to control returning to the browser's event loop\n        // queueMicrotask(() => {\n        //     this._calculateSlideHeight();\n        //     this.isContentAnimationDisabled = false;\n        // });\n    }\n\n    public ngOnDestroy(): void {\n        this._unsubscribe$.next();\n        this._unsubscribe$.complete();\n    }\n\n    public onClickButton() {\n        if (this.isAnimating) {\n            return;\n        }\n\n        this.isOpen = !this.isOpen;\n\n        if (this.isOpen) {\n            this.panelOpened.emit();\n        } else {\n            this.panelClosed.emit();\n        }\n    }\n\n    public onContentAnimationStart() {\n        this.isAnimating = true;\n    }\n\n    public onContentAnimationDone() {\n        this.isAnimating = false;\n    }\n\n    private _checkOverBehavior() {\n        this.isSlideOver = window.innerWidth <= SMALL_DEVICE_BREAKPOINT;\n    }\n}\n\n","<div class=\"slide-in-bar\">\n    <div\n        class=\"slide-content\"\n        [ngClass]=\"{\n            'slide-content--closed': !isOpen,\n            'slide-content--over': isSlideOver,\n            'slide-content--no-overlap': noOverlap,\n        }\"\n    >\n        <div\n            #mainContainer\n            class=\"main-container\"\n        >\n            @if (cache) {\n                <div\n                    class=\"content-container\"\n                    [@cacheAnimation]=\"isOpen\"\n                    [@.disabled]=\"isContentAnimationDisabled\"\n                    (@cacheAnimation.start)=\"onContentAnimationStart()\"\n                    (@cacheAnimation.done)=\"onContentAnimationDone()\"\n                >\n                    <ng-container [ngTemplateOutlet]=\"slideContentTemplate\"></ng-container>\n                </div>\n            } @else {\n                @if (isOpen) {\n                    <div\n                        class=\"content-container\"\n                        @cachelessAnimation\n                        [@.disabled]=\"isContentAnimationDisabled\"\n                        (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n                        (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n                    >\n                        <ng-container [ngTemplateOutlet]=\"slideContentTemplate\"></ng-container>\n                    </div>\n                }\n            }\n        </div>\n        <button\n            class=\"button\"\n            [ngClass]=\"isOpen ? closeIcon : openIcon\"\n            (click)=\"onClickButton()\"\n        ></button>\n    </div>\n    <div\n        class=\"side-content\"\n    >\n        <ng-content select=\"[side-content]\"></ng-content>\n    </div>\n</div>\n\n<ng-template #slideContentTemplate>\n    <ng-content select=\"[slide-content]\"></ng-content>\n</ng-template>\n","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { SlideInBarComponent } from \"./slide-in-bar.component\";\nimport { SlideInBarService } from \"./slide-in-bar.service\";\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [SlideInBarComponent],\n    exports: [SlideInBarComponent],\n    providers: [SlideInBarService],\n})\nexport class SlideInBarModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}