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