{"version":3,"file":"seniorsistemas-angular-components-checkbox.mjs","sources":["../../projects/angular-components/checkbox/src/lib/checkbox/checkbox.component.ts","../../projects/angular-components/checkbox/src/lib/checkbox/checkbox.component.html","../../projects/angular-components/checkbox/src/seniorsistemas-angular-components-checkbox.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, computed, forwardRef, input, model, output, signal } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n/**\n * @description Componente de caixa de seleção (checkbox) com suporte a três estados:\n * marcado, desmarcado e indeterminado. Implementa {@link ControlValueAccessor} para\n * integração com Reactive Forms e Template-driven Forms do Angular.\n *\n * @example\n * ```html\n * <s-checkbox\n *   formControlName=\"aceito\"\n *   label=\"Aceito os termos de uso\"\n *   [indeterminate]=\"parcialmenteSelecionado\" />\n * ```\n *\n * @category Inputs\n */\n@Component({\n    selector: 's-checkbox',\n    standalone: true,\n    imports: [CommonModule],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => CheckboxComponent),\n            multi: true,\n        },\n    ],\n    templateUrl: './checkbox.component.html',\n})\nexport class CheckboxComponent implements ControlValueAccessor {\n    /** @description Controla o estado desabilitado via two-way binding. @default false */\n    public disabled = model(false);\n    /** @description Valor marcado/desmarcado do checkbox via two-way binding. @default false */\n    public checked = model(false);\n    /** @description Quando `true`, o checkbox inicia no estado indeterminado (traço) até a primeira interação do usuário. @default false */\n    public indeterminate = input(false);\n    /** @description Texto do label exibido ao lado do checkbox. @default '' */\n    public label = input<string>('');\n    /** @description Rótulo acessível para leitores de tela. Opcional, por padrão usa o valor de `label`. */\n    public ariaLabel = input<string | undefined>(undefined);\n    /** @description ID do elemento que descreve o checkbox (para usar `<label for=\"...\">`). Opcional. */\n    public ariaLabelledBy = input<string | undefined>(undefined);\n\n    /**\n     * @description Emitido quando o valor do checkbox é alterado pelo usuário.\n     * Emite o novo valor booleano (`true` para marcado, `false` para desmarcado).\n     */\n    public readonly checkedChange = output<boolean>();\n\n    private _onChange: (value: boolean) => void = () => {};\n    private _onTouched: () => void = () => {};\n    private _hasUserInteracted = signal(false);\n\n    /**\n     * @description Computed que indica se o estado indeterminado deve ser exibido.\n     * Retorna `true` enquanto `indeterminate` for `true` e o usuário não tiver interagido.\n     */\n    public readonly isIndeterminate = computed(() => this.indeterminate() && !this._hasUserInteracted());\n\n    public toggle(): void {\n        if (this.disabled()) {\n            return;\n        }\n\n        if (this.indeterminate() && !this._hasUserInteracted()) {\n            this._hasUserInteracted.set(true);\n            this.checked.set(true);\n            this.emit(true);\n        } else {\n            const newValue = !this.checked();\n            this.checked.set(newValue);\n            this.emit(newValue);\n        }\n    }\n\n    private emit(value: boolean): void {\n        this._onChange(value);\n        this.checkedChange.emit(value);\n    }\n\n    public writeValue(value: any): void {\n        this.checked.set(!!value);\n    }\n\n    public registerOnChange(onChange: (value: boolean) => void): void {\n        this._onChange = onChange;\n    }\n\n    public registerOnTouched(onTouched: () => void): void {\n        this._onTouched = onTouched;\n    }\n\n    public setDisabledState(disabled: boolean): void {\n        this.disabled.set(disabled);\n    }\n\n    public onBlur(): void {\n        this._onTouched();\n    }\n}\n\n","<div\n    class=\"group flex cursor-pointer select-none gap-3 outline-none\"\n    [class.cursor-not-allowed]=\"disabled()\"\n    tabindex=\"0\"\n    role=\"checkbox\"\n    [attr.aria-checked]=\"isIndeterminate() ? 'mixed' : checked()\"\n    [attr.aria-disabled]=\"disabled()\"\n    [attr.aria-label]=\"ariaLabel() || label() || null\"\n    [attr.aria-labelledby]=\"ariaLabelledBy() || null\"\n    (click)=\"toggle()\"\n    (keydown.space)=\"toggle(); $event.preventDefault()\"\n    (blur)=\"onBlur()\"\n>\n    <div\n        class=\"rounded flex h-5 w-5 flex-shrink-0 items-center justify-center border border-grayscale-30\n               transition-all duration-200 hover:border-grayscale-50\n               group-focus-visible:ring-2 group-focus-visible:ring-primary group-focus-visible:ring-offset-1\"\n        [class.bg-primary]=\"checked() || isIndeterminate()\"\n        [class.hover:bg-tarawera-500]=\"checked() || isIndeterminate()\"\n        [class.bg-grayscale-0]=\"!checked() && !isIndeterminate()\"\n        [class.border-primary]=\"checked() || isIndeterminate()\"\n        [class.hover:border-tarawera-500]=\"checked() || isIndeterminate()\"\n        [class.opacity-50]=\"disabled()\"\n    >\n        @if (isIndeterminate()) {\n            <svg\n                class=\"h-3 w-3 text-grayscale-0\"\n                fill=\"none\"\n                stroke=\"white\"\n                stroke-width=\"4\"\n                viewBox=\"0 0 24 24\"\n                aria-hidden=\"true\"\n            >\n                <path d=\"M6 12h12\" />\n            </svg>\n        } @else {\n            @if (checked()) {\n                <svg\n                    class=\"text-white h-3 w-3\"\n                    fill=\"none\"\n                    stroke=\"white\"\n                    stroke-width=\"4\"\n                    stroke-linecap=\"round\"\n                    stroke-linejoin=\"round\"\n                    viewBox=\"0 0 24 24\"\n                    aria-hidden=\"true\"\n                >\n                    <path d=\"M4.5 12.75l5.5 5.5 9.5-9.5\" />\n                </svg>\n            }\n        }\n    </div>\n\n    @if (label()) {\n        <span\n            [class.opacity-50]=\"disabled()\"\n            class=\"text-grayscale-90 ml-2\"\n            aria-hidden=\"true\"\n        >\n            {{ label() }}\n        </span>\n    }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}