{"version":3,"file":"seniorsistemas-angular-components-accordion.mjs","sources":["../../projects/angular-components/accordion/src/lib/accordion/components/accordion-panel/accordion-panel.component.ts","../../projects/angular-components/accordion/src/lib/accordion/components/accordion-panel/accordion-panel.component.html","../../projects/angular-components/accordion/src/lib/accordion/accordion.component.ts","../../projects/angular-components/accordion/src/lib/accordion/accordion.component.html","../../projects/angular-components/accordion/src/lib/accordion/accordion.module.ts","../../projects/angular-components/accordion/src/seniorsistemas-angular-components-accordion.ts"],"sourcesContent":["import { AfterViewInit, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\r\nimport { trigger, style, animate, transition, state } from '@angular/animations';\r\n\r\nimport { UntypedFormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { AccordionButtonSettings, ValidationMessageIconColor } from '../../models/accordion-button-settings';\r\nimport { BadgeColors, BadgeComponent } from '@seniorsistemas/angular-components/badge';\r\nimport { TooltipDirective } from '@seniorsistemas/angular-components/tooltip';\r\nimport { NgClass, NgTemplateOutlet } from '@angular/common';\r\nimport { SwitchComponent } from '@seniorsistemas/angular-components/switch';\r\n\r\nlet nextPanelId = 0;\r\n\r\n/**\r\n * @description Painel individual do {@link AccordionComponent}. Gerencia o estado de\r\n * abertura/fechamento com animação, podendo conter um switch de controle via `switchControl`,\r\n * botões de ação configuráveis e uma mensagem de validação com ícone.\r\n *\r\n * @example\r\n * ```html\r\n * <s-accordion-panel\r\n *   header=\"Configurações\"\r\n *   [disabled]=\"false\"\r\n *   (panelOpened)=\"onOpen()\"\r\n *   (panelClosed)=\"onClose()\">\r\n *   <p>Conteúdo do painel</p>\r\n * </s-accordion-panel>\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n    selector: 's-accordion-panel',\r\n    templateUrl: './accordion-panel.component.html',\r\n    animations: [\r\n        trigger('cachelessAnimation', [\r\n            transition(':enter', [style({ height: '0' }), animate('200ms linear', style({ height: '*' }))]),\r\n            transition(':leave', [style({ height: '*' }), animate('200ms linear', style({ height: '0' }))]),\r\n        ]),\r\n        trigger('cacheAnimation', [\r\n            state('true', style({ height: '*' })),\r\n            state('false', style({ height: '0px' })),\r\n            transition('* => *', animate('200ms')),\r\n        ]),\r\n    ],\r\n    standalone: true,\r\n    imports: [\r\n        TooltipDirective,\r\n        BadgeComponent,\r\n        NgClass,\r\n        SwitchComponent,\r\n        FormsModule,\r\n        ReactiveFormsModule,\r\n        NgTemplateOutlet,\r\n    ],\r\n})\r\nexport class AccordionPanelComponent implements OnChanges, AfterViewInit {\r\n    /**\r\n     * @description Título exibido no cabeçalho do painel. Campo obrigatório.\r\n     */\r\n    @Input({ required: true })\r\n    public header!: string;\r\n\r\n    /**\r\n     * @description Cria um componente Badge ao lado dos botões de ação no cabeçalho do painel.\r\n     * O objeto de configuração deve conter o texto e a cor do badge.\r\n     */\r\n    @Input()\r\n    public badgeConfig?: { text: string; color: BadgeColors };\r\n\r\n    /**\r\n     * @description Lista de botões de ação exibidos no cabeçalho do painel,\r\n     * à direita do título. Cada item define ícone, tooltip e callback de clique.\r\n     */\r\n    @Input()\r\n    public buttons?: AccordionButtonSettings[];\r\n\r\n    /**\r\n     * @description Desabilita a interação do usuário com o painel, impedindo abertura e fechamento.\r\n     *\r\n     * @default false\r\n     */\r\n    @Input()\r\n    public disabled = false;\r\n\r\n    /**\r\n     * @description `FormControl` vinculado a um switch exibido no cabeçalho do painel.\r\n     * Permite habilitar/desabilitar o conteúdo do painel via toggle.\r\n     */\r\n    @Input()\r\n    public switchControl?: UntypedFormControl;\r\n\r\n    /**\r\n     * @description Mensagem de validação exibida abaixo do cabeçalho, acompanhada de um ícone.\r\n     * Útil para indicar erros ou alertas relacionados ao conteúdo do painel.\r\n     */\r\n    @Input()\r\n    public validationMessage?: string;\r\n\r\n    /**\r\n     * @description Mantém o conteúdo do painel no DOM mesmo quando fechado (modo cache).\r\n     * Útil para preservar o estado de componentes internos ao reabrir o painel.\r\n     *\r\n     * @default false\r\n     */\r\n    @Input()\r\n    public cache = false;\r\n\r\n    /**\r\n     * @description Classe do ícone exibido ao lado da mensagem de validação.\r\n     *\r\n     * @default 'fas fa-exclamation-circle'\r\n     */\r\n    @Input() validationMessageIcon = 'fas fa-exclamation-circle';\r\n\r\n    /**\r\n     * @description Cor do ícone da mensagem de validação.\r\n     *\r\n     * @default 'Red'\r\n     */\r\n    @Input() validationMessageIconColor: ValidationMessageIconColor = 'Red';\r\n\r\n    /**\r\n     * @description Emitido quando o painel é aberto pelo usuário.\r\n     */\r\n    @Output()\r\n    public panelOpened = new EventEmitter<void>();\r\n\r\n    /**\r\n     * @description Emitido quando o painel é fechado pelo usuário.\r\n     */\r\n    @Output()\r\n    public panelClosed = new EventEmitter<void>();\r\n\r\n    public isAnimating = false;\r\n    public isContentAnimationDisabled = true;\r\n    public readonly panelId = nextPanelId++;\r\n\r\n    private _isOpen = false;\r\n\r\n    public get isOpen() {\r\n        return this._isOpen;\r\n    }\r\n\r\n    public set isOpen(isOpen: boolean) {\r\n        this._isOpen = isOpen;\r\n    }\r\n\r\n    public ngOnChanges(changes: SimpleChanges): void {\r\n        if ('disabled' in changes && this.switchControl) {\r\n            if (changes['disabled'].currentValue) {\r\n                this.switchControl.disable({ emitEvent: false });\r\n            } else {\r\n                this.switchControl.enable({ emitEvent: false });\r\n            }\r\n        }\r\n\r\n        if ('switch' in changes && 'switchControl' in changes) {\r\n            throw new Error(\"You can't set switch and switchControl together.\");\r\n        }\r\n    }\r\n\r\n    public ngAfterViewInit(): void {\r\n        // to executed at a safe time prior to control returning to the browser's event loop\r\n        queueMicrotask(() => {\r\n            this.isContentAnimationDisabled = false;\r\n        });\r\n    }\r\n\r\n    public onIconButtonsClick(event: Event, callback: VoidFunction) {\r\n        if (this.disabled) {\r\n            return;\r\n        }\r\n\r\n        event.stopPropagation();\r\n        callback();\r\n    }\r\n\r\n    public onTabClick() {\r\n        if (this.disabled || this.isAnimating) {\r\n            return;\r\n        }\r\n        this.isOpen = !this.isOpen;\r\n        this._emitPanelEvent();\r\n    }\r\n\r\n    public onHeaderKeydown(event: KeyboardEvent): void {\r\n        if (event.key === 'Enter' || event.key === ' ') {\r\n            event.preventDefault();\r\n            this.onTabClick();\r\n        }\r\n    }\r\n\r\n    public onContentAnimationStart() {\r\n        this.isAnimating = true;\r\n    }\r\n\r\n    public onContentAnimationDone() {\r\n        this.isAnimating = false;\r\n\r\n        this._emitPanelEvent();\r\n    }\r\n\r\n    private _emitPanelEvent() {\r\n        if (this.isOpen) {\r\n            this.panelOpened.emit();\r\n        } else {\r\n            this.panelClosed.emit();\r\n        }\r\n    }\r\n}\r\n","<div\n    class=\"accordion-panel border-b border-grayscale-30\"\n    [class.accordion-panel--open]=\"isOpen\"\n    [class.accordion-panel--disabled]=\"disabled\"\n>\n    <div\n        class=\"header flex select-none items-center justify-between border-grayscale-30 bg-grayscale-0 p-4\"\n        [class.bg-grayscale-10]=\"isOpen\"\n        [class.border-b]=\"isOpen\"\n        [class.cursor-pointer]=\"!disabled\"\n        [class.cursor-auto]=\"disabled\"\n    >\n        <div\n            class=\"header__trigger flex items-center flex-1 flex-nowrap focus-visible:outline focus-visible:outline-2 focus-visible:outline-primary focus-visible:[outline-offset:-2px]\"\n            [class.cursor-pointer]=\"!disabled\"\n            [class.cursor-auto]=\"disabled\"\n            role=\"button\"\n            [tabindex]=\"disabled ? -1 : 0\"\n            [attr.aria-expanded]=\"isOpen\"\n            [attr.aria-controls]=\"'accordion-panel-content-' + panelId\"\n            [attr.aria-disabled]=\"disabled\"\n            (click)=\"onTabClick()\"\n            (keydown)=\"onHeaderKeydown($event)\"\n        >\n            <span\n                class=\"icon fas text-base mr-3\"\n                [class.fa-minus]=\"isOpen\"\n                [class.fa-plus]=\"!isOpen\"\n                [class.text-grayscale-90]=\"!disabled\"\n                [class.text-grayscale-30]=\"disabled\"\n                aria-hidden=\"true\"\n            >\n            </span>\n            @if (validationMessage) {\n                <span\n                    class=\"exclamation-icon text-base mr-3\"\n                    [class]=\"validationMessageIcon\"\n                    [sTooltip]=\"validationMessage\"\n                    [class.exclamation-icon-red]=\"validationMessageIconColor === 'Red'\"\n                    [class.text-criticality-red]=\"validationMessageIconColor === 'Red'\"\n                    [class.exclamation-icon-orange]=\"validationMessageIconColor === 'Orange'\"\n                    [class.text-criticality-orange]=\"validationMessageIconColor === 'Orange'\"\n                    [class.exclamation-icon-yellow]=\"validationMessageIconColor === 'Yellow'\"\n                    [class.text-criticality-yellow]=\"validationMessageIconColor === 'Yellow'\"\n                    [class.exclamation-icon-green]=\"validationMessageIconColor === 'Green'\"\n                    [class.text-criticality-green]=\"validationMessageIconColor === 'Green'\"\n                    [class.exclamation-icon-blue]=\"validationMessageIconColor === 'Blue'\"\n                    [class.text-primary]=\"validationMessageIconColor === 'Blue'\"\n                    [class.opacity-50]=\"disabled\"\n                    aria-hidden=\"true\"\n                >\n                </span>\n            }\n            <span\n                class=\"title font-open-sans text-sm font-bold uppercase leading-normal\"\n                [class.text-grayscale-30]=\"disabled\"\n                [id]=\"'accordion-panel-header-' + panelId\"\n                >{{ header }}</span\n            >\n        </div>\n        <div class=\"header__controls flex items-center ml-4\">\n            @if (badgeConfig) {\n                <s-badge\n                    [color]=\"badgeConfig.color\"\n                    [text]=\"badgeConfig.text\"\n                ></s-badge>\n            }\n\n            @for (button of buttons; track button.icon) {\n                <button\n                    class=\"icon-button text-base ml-3 p-1 border-0 bg-transparent\"\n                    [class.text-grayscale-90]=\"!disabled\"\n                    [class.text-grayscale-30]=\"disabled\"\n                    [class.cursor-pointer]=\"!disabled\"\n                    [class.cursor-auto]=\"disabled\"\n                    [ngClass]=\"button.icon\"\n                    [attr.aria-label]=\"button.label\"\n                    (click)=\"onIconButtonsClick($event, button.onClick)\"\n                ></button>\n            }\n\n            @if (switchControl) {\n                <s-switch\n                    class=\"switch pl-4\"\n                    [formControl]=\"switchControl\"\n                    (click)=\"$event.stopPropagation()\"\n                >\n                </s-switch>\n            }\n        </div>\n    </div>\n\n    @if (cache) {\n        <div\n            class=\"content bg-grayscale-0 overflow-hidden\"\n            role=\"region\"\n            [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n            [id]=\"'accordion-panel-content-' + panelId\"\n            [@cacheAnimation]=\"isOpen\"\n            [@.disabled]=\"isContentAnimationDisabled\"\n            (@cacheAnimation.start)=\"onContentAnimationStart()\"\n            (@cacheAnimation.done)=\"onContentAnimationDone()\"\n        >\n            <div class=\"content-container m-5\">\n                <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n            </div>\n        </div>\n    } @else {\n        @if (isOpen) {\n            <div\n                class=\"content bg-grayscale-0 overflow-hidden\"\n                role=\"region\"\n                [attr.aria-labelledby]=\"'accordion-panel-header-' + panelId\"\n                [id]=\"'accordion-panel-content-' + panelId\"\n                @cachelessAnimation\n                [@.disabled]=\"isContentAnimationDisabled\"\n                (@cachelessAnimation.start)=\"onContentAnimationStart()\"\n                (@cachelessAnimation.done)=\"onContentAnimationDone()\"\n            >\n                <div class=\"content-container m-5\">\n                    <ng-container [ngTemplateOutlet]=\"panelContent\"></ng-container>\n                </div>\n            </div>\n        }\n    }\n</div>\n\n<ng-template #panelContent>\n    <ng-content></ng-content>\n</ng-template>\n","import {\r\n    AfterContentInit,\r\n    OnChanges,\r\n    Component,\r\n    ContentChildren,\r\n    Input,\r\n    QueryList,\r\n    SimpleChanges,\r\n    OnDestroy,\r\n} from '@angular/core';\r\n\r\nimport { AccordionPanelComponent } from './components/accordion-panel/accordion-panel.component';\r\nimport { Subject, Subscription } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\n\r\n/**\r\n * @description Componente de acordeão que gerencia a abertura e o fechamento de painéis\r\n * {@link AccordionPanelComponent}. Suporta modo de painel único (apenas um aberto por vez)\r\n * ou modo múltiplo (vários painéis abertos simultaneamente), configurável via input `multiple`.\r\n *\r\n * @example\r\n * ```html\r\n * <s-accordion [multiple]=\"false\" [activeIndex]=\"0\">\r\n *   <s-accordion-panel header=\"Seção 1\">Conteúdo 1</s-accordion-panel>\r\n *   <s-accordion-panel header=\"Seção 2\">Conteúdo 2</s-accordion-panel>\r\n * </s-accordion>\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Component({\r\n    selector: 's-accordion',\r\n    templateUrl: './accordion.component.html',\r\n    standalone: true,\r\n})\r\nexport class AccordionComponent implements AfterContentInit, OnChanges, OnDestroy {\r\n    /**\r\n     * @description Índice (ou lista de índices) do(s) painel(is) que devem iniciar abertos.\r\n     * Aceita um número para painel único ou um array de números para o modo múltiplo.\r\n     */\r\n    @Input()\r\n    public activeIndex?: number | number[];\r\n\r\n    /**\r\n     * @description Permite que múltiplos painéis estejam abertos ao mesmo tempo.\r\n     * Quando `false`, abrir um painel fecha automaticamente o anterior.\r\n     *\r\n     * @default false\r\n     */\r\n    @Input()\r\n    public multiple = false;\r\n\r\n    @ContentChildren(AccordionPanelComponent)\r\n    public panelsComponents?: QueryList<AccordionPanelComponent>;\r\n\r\n    private readonly _unsubscribe$ = new Subject<void>();\r\n    private _panels: AccordionPanelComponent[] = [];\r\n    private _openSubs: Subscription[] = [];\r\n\r\n    public ngAfterContentInit(): void {\r\n        if (this.panelsComponents) {\r\n            this._panels = this.panelsComponents?.toArray();\r\n        }\r\n\r\n        this._openSubs = Array.from({ length: this._panels.length });\r\n\r\n        this._setBehavior(this.multiple);\r\n        this._setupTabs();\r\n    }\r\n\r\n    public ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['multiple']) {\r\n            this._setBehavior(changes['multiple'].currentValue);\r\n        }\r\n    }\r\n\r\n    public ngOnDestroy(): void {\r\n        this._unsubscribe$.next();\r\n        this._unsubscribe$.complete();\r\n    }\r\n\r\n    private _setupTabs(): void {\r\n        if (this._panels?.length) {\r\n            if (this.activeIndex !== undefined && this.activeIndex !== null) {\r\n                const activeTabs = Array.isArray(this.activeIndex)\r\n                    ? this._panels.filter((_, index) => (this.activeIndex as number[]).includes(index))\r\n                    : [this._panels[this.activeIndex]];\r\n\r\n                if (activeTabs.length === 0) {\r\n                    throw new Error('activeIndex does not represent any panel.');\r\n                }\r\n\r\n                for (const activeTab of activeTabs) {\r\n                    if (!activeTab.disabled) {\r\n                        activeTab.isOpen = true;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    }\r\n\r\n    private _closeOtherTabs(exception: number) {\r\n        this._panels.forEach((panel, index) => {\r\n            if (index !== exception) {\r\n                panel.isOpen = false;\r\n            }\r\n        });\r\n    }\r\n\r\n    private _setBehavior(multiple: boolean): void {\r\n        if (multiple) {\r\n            this._enableMultiplePanelBehavior();\r\n        } else {\r\n            this._enableSinglePanelBehavior();\r\n        }\r\n    }\r\n\r\n    private _enableSinglePanelBehavior() {\r\n        this._panels.forEach((panel, index) => {\r\n            this._openSubs[index] = panel.panelOpened.pipe(takeUntil(this._unsubscribe$)).subscribe(() => {\r\n                this._closeOtherTabs(index);\r\n            });\r\n        });\r\n    }\r\n\r\n    private _enableMultiplePanelBehavior() {\r\n        this._panels.forEach((_, index) => {\r\n            if (this._openSubs[index]) {\r\n                this._openSubs[index].unsubscribe();\r\n            }\r\n        });\r\n    }\r\n}\r\n","<div class=\"accordion border border-grayscale-30 rounded-xbig overflow-hidden\">\n    <ng-content></ng-content>\n</div>\n","import { NgModule } from '@angular/core';\r\n\r\nimport { AccordionComponent } from './accordion.component';\r\nimport { AccordionPanelComponent } from './components/accordion-panel/accordion-panel.component';\r\n\r\n@NgModule({\r\n    imports: [AccordionComponent, AccordionPanelComponent],\r\n    exports: [AccordionComponent, AccordionPanelComponent],\r\n})\r\nexport class AccordionModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}