import * as _angular_core from '@angular/core';
import { Signal, AfterViewInit } from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { ZEvent } from '@shival99/z-ui/utils';
import { ClassValue } from 'clsx';
import * as class_variance_authority_types from 'class-variance-authority/types';
import { VariantProps } from 'class-variance-authority';

type ZCheckboxType = 'default' | 'group';
type ZCheckboxSize = 'sm' | 'default' | 'lg';
type ZCheckboxOrientation = 'vertical' | 'horizontal';
interface ZCheckboxOption {
    label: string;
    value: string | number;
    disabled?: boolean;
    checked?: boolean;
}
interface ZCheckboxControl {
    checkAll: () => void;
    uncheckAll: () => void;
    toggleAll: () => void;
    isAllChecked: Signal<boolean>;
    isIndeterminate: Signal<boolean>;
}

declare class ZCheckboxComponent implements ControlValueAccessor, AfterViewInit {
    private readonly _zTranslate;
    private readonly _checkboxRef;
    readonly zChange: _angular_core.OutputEmitterRef<boolean>;
    readonly zGroupChange: _angular_core.OutputEmitterRef<(string | number)[]>;
    readonly zOnBlur: _angular_core.OutputEmitterRef<FocusEvent>;
    readonly zOnFocus: _angular_core.OutputEmitterRef<FocusEvent>;
    readonly zControl: _angular_core.OutputEmitterRef<ZCheckboxControl>;
    readonly zEvent: _angular_core.OutputEmitterRef<ZEvent>;
    readonly class: _angular_core.InputSignal<ClassValue>;
    readonly zType: _angular_core.InputSignal<ZCheckboxType>;
    readonly zSize: _angular_core.InputSignal<ZCheckboxSize>;
    readonly zLabel: _angular_core.InputSignal<string>;
    readonly zText: _angular_core.InputSignal<string>;
    readonly zDisabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
    readonly zIndeterminate: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
    readonly zValue: _angular_core.InputSignal<string | number>;
    readonly zOptions: _angular_core.InputSignal<ZCheckboxOption[]>;
    readonly zOrientation: _angular_core.InputSignal<ZCheckboxOrientation>;
    readonly zCheckAll: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
    readonly zCheckAllText: _angular_core.InputSignal<string>;
    readonly zChecked: _angular_core.ModelSignal<boolean>;
    readonly zGroupValue: _angular_core.ModelSignal<(string | number)[]>;
    private readonly _disabled;
    protected readonly isDisabled: _angular_core.Signal<boolean>;
    protected readonly effectiveCheckAllText: _angular_core.Signal<string>;
    protected readonly enabledOptions: _angular_core.Signal<ZCheckboxOption[]>;
    protected readonly isAllChecked: _angular_core.Signal<boolean>;
    protected readonly isNoneChecked: _angular_core.Signal<boolean>;
    protected readonly isIndeterminateState: _angular_core.Signal<boolean>;
    protected readonly hostClasses: _angular_core.Signal<string>;
    protected readonly groupClasses: _angular_core.Signal<string>;
    protected readonly checkboxClasses: _angular_core.Signal<string>;
    protected readonly labelClasses: _angular_core.Signal<string>;
    protected readonly checkboxState: _angular_core.Signal<"indeterminate" | "checked" | "unchecked">;
    protected readonly iconSize: _angular_core.Signal<"12" | "14" | "16">;
    private _onChange;
    private _onTouched;
    ngAfterViewInit(): void;
    writeValue(value: boolean | (string | number)[] | null): void;
    registerOnChange(fn: (value: boolean | (string | number)[]) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    focus(): void;
    blur(): void;
    protected onFocus(event: FocusEvent): void;
    protected onBlur(event: FocusEvent): void;
    protected onCheckboxClick(): void;
    protected onOptionClick(option: ZCheckboxOption): void;
    protected onCheckAllClick(): void;
    protected isOptionChecked(option: ZCheckboxOption): boolean;
    protected getOptionState(option: ZCheckboxOption): string;
    protected getCheckAllState(): string;
    private _checkAllOptions;
    private _uncheckAllOptions;
    private _toggleAllOptions;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZCheckboxComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZCheckboxComponent, "z-checkbox", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zType": { "alias": "zType"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zLabel": { "alias": "zLabel"; "required": false; "isSignal": true; }; "zText": { "alias": "zText"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zIndeterminate": { "alias": "zIndeterminate"; "required": false; "isSignal": true; }; "zValue": { "alias": "zValue"; "required": false; "isSignal": true; }; "zOptions": { "alias": "zOptions"; "required": false; "isSignal": true; }; "zOrientation": { "alias": "zOrientation"; "required": false; "isSignal": true; }; "zCheckAll": { "alias": "zCheckAll"; "required": false; "isSignal": true; }; "zCheckAllText": { "alias": "zCheckAllText"; "required": false; "isSignal": true; }; "zChecked": { "alias": "zChecked"; "required": false; "isSignal": true; }; "zGroupValue": { "alias": "zGroupValue"; "required": false; "isSignal": true; }; }, { "zChange": "zChange"; "zGroupChange": "zGroupChange"; "zOnBlur": "zOnBlur"; "zOnFocus": "zOnFocus"; "zControl": "zControl"; "zEvent": "zEvent"; "zChecked": "zCheckedChange"; "zGroupValue": "zGroupValueChange"; }, never, never, true, never>;
}

declare const zCheckboxVariants: (props?: ({
    zSize?: "default" | "sm" | "lg" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
declare const zCheckboxLabelVariants: (props?: ({
    zSize?: "default" | "sm" | "lg" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
type ZCheckboxVariants = VariantProps<typeof zCheckboxVariants>;

export { ZCheckboxComponent, zCheckboxLabelVariants, zCheckboxVariants };
export type { ZCheckboxControl, ZCheckboxOption, ZCheckboxOrientation, ZCheckboxSize, ZCheckboxType, ZCheckboxVariants };
