import * as _angular_core from '@angular/core';
import { ControlValueAccessor } from '@angular/forms';
import { ZIcon } from '@shival99/z-ui/components/z-icon';
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 ZSwitchSize = 'sm' | 'default' | 'lg';
type ZSwitchMode = 'default' | 'inner';
/** Maximum character length for inner text */
declare const Z_SWITCH_INNER_TEXT_MAX_LENGTH = 8;

declare class ZSwitchComponent implements ControlValueAccessor {
    readonly zChange: _angular_core.OutputEmitterRef<boolean>;
    readonly zOnBlur: _angular_core.OutputEmitterRef<FocusEvent>;
    readonly zOnFocus: _angular_core.OutputEmitterRef<FocusEvent>;
    readonly zEvent: _angular_core.OutputEmitterRef<ZEvent>;
    readonly class: _angular_core.InputSignal<ClassValue>;
    readonly zSwitchClass: _angular_core.InputSignal<ClassValue>;
    readonly zThumbClass: _angular_core.InputSignal<ClassValue>;
    readonly zSize: _angular_core.InputSignal<ZSwitchSize>;
    readonly zMode: _angular_core.InputSignal<ZSwitchMode>;
    readonly zLabel: _angular_core.InputSignal<string>;
    readonly zText: _angular_core.InputSignal<string>;
    readonly zCheckedText: _angular_core.InputSignal<string>;
    readonly zUncheckedText: _angular_core.InputSignal<string>;
    readonly zCheckedIcon: _angular_core.InputSignal<ZIcon | null>;
    readonly zUncheckedIcon: _angular_core.InputSignal<ZIcon | null>;
    readonly zDisabled: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
    readonly zLoading: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
    readonly zTextPosition: _angular_core.InputSignal<"left" | "right">;
    readonly zWave: _angular_core.InputSignalWithTransform<boolean, string | boolean>;
    readonly zChecked: _angular_core.ModelSignal<boolean>;
    protected readonly isInnerMode: _angular_core.Signal<boolean>;
    private readonly _disabled;
    protected readonly isDisabled: _angular_core.Signal<boolean>;
    protected readonly hostClasses: _angular_core.Signal<string>;
    protected readonly switchClasses: _angular_core.Signal<string>;
    protected readonly thumbClasses: _angular_core.Signal<string>;
    protected readonly labelClasses: _angular_core.Signal<string>;
    protected readonly switchState: _angular_core.Signal<"checked" | "unchecked">;
    protected readonly innerLeftClasses: _angular_core.Signal<string>;
    protected readonly innerRightClasses: _angular_core.Signal<string>;
    protected readonly currentThumbIcon: _angular_core.Signal<ZIcon | null>;
    protected readonly displayCheckedText: _angular_core.Signal<string>;
    protected readonly displayUncheckedText: _angular_core.Signal<string>;
    protected readonly loadingIconSize: _angular_core.Signal<"10" | "16" | "12">;
    private _onChange;
    private _onTouched;
    writeValue(value: boolean | null): void;
    registerOnChange(fn: (value: boolean) => void): void;
    registerOnTouched(fn: () => void): void;
    setDisabledState(isDisabled: boolean): void;
    protected onFocus(event: FocusEvent): void;
    protected onBlur(event: FocusEvent): void;
    protected onSwitchClick(event: MouseEvent): void;
    private _triggerWaveEffect;
    static ɵfac: _angular_core.ɵɵFactoryDeclaration<ZSwitchComponent, never>;
    static ɵcmp: _angular_core.ɵɵComponentDeclaration<ZSwitchComponent, "z-switch", never, { "class": { "alias": "class"; "required": false; "isSignal": true; }; "zSwitchClass": { "alias": "zSwitchClass"; "required": false; "isSignal": true; }; "zThumbClass": { "alias": "zThumbClass"; "required": false; "isSignal": true; }; "zSize": { "alias": "zSize"; "required": false; "isSignal": true; }; "zMode": { "alias": "zMode"; "required": false; "isSignal": true; }; "zLabel": { "alias": "zLabel"; "required": false; "isSignal": true; }; "zText": { "alias": "zText"; "required": false; "isSignal": true; }; "zCheckedText": { "alias": "zCheckedText"; "required": false; "isSignal": true; }; "zUncheckedText": { "alias": "zUncheckedText"; "required": false; "isSignal": true; }; "zCheckedIcon": { "alias": "zCheckedIcon"; "required": false; "isSignal": true; }; "zUncheckedIcon": { "alias": "zUncheckedIcon"; "required": false; "isSignal": true; }; "zDisabled": { "alias": "zDisabled"; "required": false; "isSignal": true; }; "zLoading": { "alias": "zLoading"; "required": false; "isSignal": true; }; "zTextPosition": { "alias": "zTextPosition"; "required": false; "isSignal": true; }; "zWave": { "alias": "zWave"; "required": false; "isSignal": true; }; "zChecked": { "alias": "zChecked"; "required": false; "isSignal": true; }; }, { "zChange": "zChange"; "zOnBlur": "zOnBlur"; "zOnFocus": "zOnFocus"; "zEvent": "zEvent"; "zChecked": "zCheckedChange"; }, never, never, true, never>;
}

declare const zSwitchVariants: (props?: ({
    zSize?: "sm" | "default" | "lg" | null | undefined;
    zMode?: "default" | "inner" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
declare const zSwitchThumbVariants: (props?: ({
    zSize?: "sm" | "default" | "lg" | null | undefined;
    zMode?: "default" | "inner" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
declare const zSwitchLabelVariants: (props?: ({
    zSize?: "sm" | "default" | "lg" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
declare const zSwitchInnerLeftVariants: (props?: ({
    zSize?: "sm" | "default" | "lg" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
declare const zSwitchInnerRightVariants: (props?: ({
    zSize?: "sm" | "default" | "lg" | null | undefined;
} & class_variance_authority_types.ClassProp) | undefined) => string;
type ZSwitchVariants = VariantProps<typeof zSwitchVariants>;

export { ZSwitchComponent, Z_SWITCH_INNER_TEXT_MAX_LENGTH, zSwitchInnerLeftVariants, zSwitchInnerRightVariants, zSwitchLabelVariants, zSwitchThumbVariants, zSwitchVariants };
export type { ZSwitchMode, ZSwitchSize, ZSwitchVariants };
