{"version":3,"file":"seniorsistemas-angular-components-checkbox-list.mjs","sources":["../../projects/angular-components/checkbox-list/src/lib/checkbox-list/checkbox-list.component.ts","../../projects/angular-components/checkbox-list/src/lib/checkbox-list/checkbox-list.component.html","../../projects/angular-components/checkbox-list/src/lib/checkbox-list/checkbox-list.module.ts","../../projects/angular-components/checkbox-list/src/seniorsistemas-angular-components-checkbox-list.ts"],"sourcesContent":["import { Component, forwardRef, Input } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\nimport { CheckboxListData } from './models/checkbox-list-data';\nimport { CheckboxListChildren, CheckboxListState } from './models/checkbox-list-state';\n\n/**\n * @description Componente de lista de checkboxes hierárquica, com suporte a estados\n * pai/filho e indeterminado. Ao marcar/desmarcar o item pai, todos os filhos são\n * afetados, e o estado do pai é calculado automaticamente com base nos filhos.\n * Implementa {@link ControlValueAccessor} para uso em formulários Angular.\n *\n * @example\n * ```html\n * <s-checkbox-list\n *   formControlName=\"permissoes\"\n *   [data]=\"estruturaPermissoes\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-checkbox-list',\n    templateUrl: './checkbox-list.component.html',\n    styleUrls: ['./checkbox-list.component.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => CheckboxListComponent),\n            multi: true,\n        },\n    ],\n})\nexport class CheckboxListComponent implements ControlValueAccessor {\n    /**\n     * @description Estrutura de dados que define o item raiz e seus filhos.\n     * Cada `CheckboxListData` pode conter o label, estado inicial e uma lista de filhos recursiva.\n     * Campo obrigatório.\n     */\n    @Input({ required: true })\n    public data!: CheckboxListData;\n\n    public state: CheckboxListState = {\n        checked: false,\n        indeterminate: false,\n        children: {},\n    };\n\n    private _onChange: (value: CheckboxListState) => void = () => {};\n    private _onTouched: () => void = () => {};\n\n    public writeValue(value: CheckboxListState): void {\n        if (value) {\n            this.state = value;\n        } else {\n            this.state = {\n                checked: false,\n                indeterminate: false,\n                disabled: false,\n                children: this._initializeChildren(this.data),\n            };\n        }\n    }\n\n    public get renderType() {\n        return this.data.renderType ?? 'inline';\n    }\n\n    public registerOnChange(onChange: (value: CheckboxListState) => void): void {\n        this._onChange = onChange;\n    }\n\n    public registerOnTouched(onTouched: () => void): void {\n        this._onTouched = onTouched;\n    }\n\n    private _initializeChildren(item: CheckboxListData): CheckboxListChildren {\n        const childrenState: CheckboxListChildren = {};\n        if (item.children) {\n            item.children.forEach((child) => {\n                childrenState[child.label] = {\n                    checked: false,\n                    indeterminate: false,\n                    children: this._initializeChildren(child),\n                };\n            });\n        }\n        return childrenState;\n    }\n\n    public getCheckboxState(item: CheckboxListChildren | undefined, label: string) {\n        if (item) {\n            return item[label];\n        } else {\n            return {};\n        }\n    }\n\n    public updateParent(): void {\n        const _getProperty = (obj: CheckboxListChildren | undefined, field: string) => {\n            if (obj) {\n                return obj[field];\n            } else {\n                return null;\n            }\n        };\n        if (this.data.children && this.data.children.length > 0) {\n            const allChecked = this.data.children.every(\n                (child) => _getProperty(this.state.children, child.label)?.checked,\n            );\n            const someChecked = this.data.children.some(\n                (child) =>\n                    _getProperty(this.state.children, child.label)?.checked ||\n                    _getProperty(this.state.children, child.label)?.indeterminate,\n            );\n            this.state.checked = allChecked;\n            this.state.indeterminate = !allChecked && someChecked;\n        }\n        this._onChange(this.state);\n        this._onTouched();\n    }\n\n    public onCheckboxChange(): void {\n        if (this.state.disabled) {\n            return;\n        }\n\n        this.state.checked = !this.state.checked;\n        this.state.indeterminate = false;\n        this._toggleChildrenCheck(this.data, this.state, this.state.checked);\n        this._onChange(this.state);\n        this._onTouched();\n    }\n\n    private _toggleChildrenCheck(item: CheckboxListData, state: CheckboxListState, checked: boolean): void {\n        if (item.children?.length) {\n            item.children.forEach((child) => {\n                if (state.children && !state.children[child.label]) {\n                    state.children[child.label] = {\n                        checked: false,\n                        indeterminate: false,\n                        children: this._initializeChildren(child),\n                    };\n                }\n                if (state.children) {\n                    state.children[child.label].checked = checked;\n                    state.children[child.label].indeterminate = false;\n                }\n                if (child.children && state.children) {\n                    this._toggleChildrenCheck(child, state.children[child.label], checked);\n                }\n            });\n        }\n    }\n}\n\n","<div class=\"checkbox\">\n    <label>\n        <div\n            class=\"checkbox-wrapper\"\n            [class.checkbox-wrapper--disabled]=\"state.disabled\"\n            [class.checkbox-wrapper-inline]=\"renderType === 'inline'\"\n            [class.checkbox-wrapper-block]=\"renderType === 'block'\"\n        >\n            <input\n                type=\"checkbox\"\n                class=\"checkbox-input\"\n                [disabled]=\"state.disabled\"\n                [ngClass]=\"{\n                    'checkbox-input--checked': state.checked,\n                    'checkbox-input--indeterminate': state.indeterminate,\n                }\"\n                (change)=\"onCheckboxChange()\"\n                [attr.aria-checked]=\"state.indeterminate ? 'mixed' : state.checked\"\n                [attr.aria-disabled]=\"state.disabled\"\n            />\n            {{ data.label }}\n        </div>\n    </label>\n    <div\n        *ngIf=\"data.children && data.children.length\"\n        class=\"checkbox-children\"\n    >\n        <s-checkbox-list\n            *ngFor=\"let child of data.children\"\n            [data]=\"child\"\n            [ngModel]=\"getCheckboxState(state.children, child.label)\"\n            (ngModelChange)=\"updateParent()\"\n        >\n        </s-checkbox-list>\n    </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport { CheckboxListComponent } from './checkbox-list.component';\n\n@NgModule({\n    imports: [CommonModule, FormsModule],\n    declarations: [CheckboxListComponent],\n    exports: [CheckboxListComponent],\n})\nexport class CheckboxListModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}