{"version":3,"file":"seniorsistemas-angular-components-select-button.mjs","sources":["../../projects/angular-components/select-button/src/lib/select-button/components/select-button-item/select-button-item.component.ts","../../projects/angular-components/select-button/src/lib/select-button/components/select-button-item/select-button-item.component.html","../../projects/angular-components/select-button/src/lib/select-button/select-button.component.ts","../../projects/angular-components/select-button/src/lib/select-button/select-button.component.html","../../projects/angular-components/select-button/src/lib/select-button/select-button.module.ts","../../projects/angular-components/select-button/src/seniorsistemas-angular-components-select-button.ts"],"sourcesContent":["import { Component, Input } from \"@angular/core\";\n\n@Component({\n    selector: \"s-select-button-item\",\n    templateUrl: \"./select-button-item.component.html\",\n    styleUrls: [\"./select-button-item.component.scss\"],\n})\nexport class SelectButtonItemComponent {\n    @Input({ required: true })\n    public label!: string;\n\n    @Input()\n    public active = false;\n\n    @Input()\n    public first = false;\n\n    @Input()\n    public last = false;\n\n    @Input()\n    public disabled = false;\n}\n","<button\n    class=\"select-button-item\"\n    [ngClass]=\"{\n        'select-button-item--active': active,\n        'select-button-item--disabled': disabled,\n        'select-button-item--first': first,\n        'select-button-item--last': last\n    }\">\n    <span class=\"select-button-item__label\">{{ label }}</span>\n</button>","import { Component, EventEmitter, Input, Output, forwardRef } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { SelectButtonItem } from './models/select-button-item';\n\n/**\n * @description Componente de seleção por botões agrupados, onde cada opção é representada\n * visualmente como um botão clicável. Suporta seleção simples e múltipla. Implementa\n * {@link ControlValueAccessor} para integração com formulários Angular.\n *\n * @example\n * ```html\n * <s-select-button\n *   formControlName=\"visualizacao\"\n *   [items]=\"opcoesVisualizacao\"\n *   [multiple]=\"false\"\n *   (itemSelected)=\"onVisualizacaoChange($event)\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-select-button',\n    templateUrl: './select-button.component.html',\n    styleUrls: ['./select-button.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => SelectButtonComponent),\n            multi: true,\n        },\n    ],\n})\nexport class SelectButtonComponent implements ControlValueAccessor {\n    /**\n     * @description Lista de itens exibidos como botões de seleção.\n     * Cada item pode possuir `label`, `value` e `disabled`. Campo obrigatório.\n     */\n    @Input({ required: true })\n    public items!: SelectButtonItem[];\n\n    /**\n     * @description Habilita a seleção de múltiplos itens ao mesmo tempo.\n     * Quando `false`, apenas um item pode estar ativo por vez.\n     *\n     * @default false\n     */\n    @Input()\n    public multiple = false;\n\n    /**\n     * @description Emitido após a seleção de um item, com a lista completa dos itens\n     * atualmente selecionados (array de {@link SelectButtonItem}).\n     */\n    @Output()\n    public itemSelected = new EventEmitter<SelectButtonItem[]>();\n\n    /**\n     * @description Emitido no momento do clique em um item, antes da atualização\n     * do estado de seleção. Útil para side-effects imediatos ao clique.\n     */\n    @Output()\n    public itemClicked = new EventEmitter<SelectButtonItem>();\n\n    public disabled = false;\n    public activeItems = new Set<SelectButtonItem>();\n    public onChange?: (value: SelectButtonItem[]) => void;\n    public onTouched?: (value: SelectButtonItem[]) => void;\n\n    public writeValue(value?: SelectButtonItem | SelectButtonItem[]): void {\n        if (!value) {\n            return;\n        }\n\n        this.activeItems.clear();\n\n        if (Array.isArray(value)) {\n            value.forEach((item: SelectButtonItem) => {\n                this.items.forEach((iItem: SelectButtonItem) => {\n                    if (this._compareItems(item, iItem)) {\n                        this.activeItems.add(iItem);\n                    }\n                });\n            });\n        } else {\n            this.items.forEach((iItem: SelectButtonItem) => {\n                if (this._compareItems(value, iItem)) {\n                    this.activeItems.add(iItem);\n                }\n            });\n        }\n    }\n\n    public registerOnChange(onChange: (value: SelectButtonItem[]) => void): void {\n        this.onChange = onChange;\n    }\n\n    public registerOnTouched(onTouched: (value: SelectButtonItem[]) => void): void {\n        this.onTouched = onTouched;\n    }\n\n    public setDisabledState(disabled: boolean): void {\n        this.disabled = disabled;\n    }\n\n    public onItemSelect(item: SelectButtonItem): void {\n        if (this.disabled || item.disabled) {\n            return;\n        }\n\n        this.itemClicked.emit(item);\n\n        if (!this.multiple) {\n            this.activeItems.clear();\n        }\n        this.activeItems.add(item);\n        this.itemSelected.emit([...this.activeItems]);\n\n        this.onChange?.([...this.activeItems]);\n        this.onTouched?.([...this.activeItems]);\n    }\n\n    private _compareItems(item1: SelectButtonItem, item2: SelectButtonItem): boolean {\n        const _compare = (a: any, b: any): boolean => {\n            if (a === b) {\n                return true;\n            }\n\n            if (\n                a === undefined ||\n                b === undefined ||\n                typeof a !== 'object' ||\n                a === null ||\n                typeof b !== 'object' ||\n                b === null\n            ) {\n                return false;\n            }\n\n            if (Array.isArray(a) !== Array.isArray(b)) {\n                return false;\n            }\n\n            let keysA = Object.keys(a);\n            let keysB = Object.keys(b);\n\n            if (keysA.length !== keysB.length) {\n                return false;\n            }\n\n            for (let key of keysA) {\n                if (!keysB.includes(key) || !_compare(a[key], b[key])) {\n                    return false;\n                }\n            }\n\n            for (let key in a) {\n                if (a.hasOwnProperty(key) !== b.hasOwnProperty(key)) {\n                    return false;\n                }\n            }\n\n            return true;\n        };\n\n        return _compare(item1, item2);\n    }\n}\n\n","<div\n    class=\"select-button\"\n    [ngClass]=\"{ 'select-button--disabled': disabled }\">\n    @for(item of items; track item.value; let i = $index) {\n        <s-select-button-item\n            [label]=\"item.label\"\n            [active]=\"activeItems.has(item)\"\n            [disabled]=\"disabled || (item.disabled ?? false)\"\n            [first]=\"i === 0\"\n            [last]=\"i === items.length - 1\"\n            (click)=\"onItemSelect(item)\">\n        </s-select-button-item>\n    }\n</div>","import { NgModule } from \"@angular/core\";\nimport { CommonModule } from \"@angular/common\";\n\nimport { SelectButtonComponent } from \"./select-button.component\";\nimport { SelectButtonItemComponent } from \"./components/select-button-item/select-button-item.component\";\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [\n        SelectButtonComponent,\n        SelectButtonItemComponent,\n    ],\n    exports: [SelectButtonComponent],\n})\nexport class SelectButtonModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.SelectButtonItemComponent"],"mappings":"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"}