import type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react';
import { DefaultAttributes } from '../types';
export declare type Variant = 'small' | 'medium' | 'large';
export declare type InputType = 'text' | 'email' | 'password' | 'tel' | 'search';
export declare type Value = string | number | symbol;
export declare type SelectOption<V extends Value = Value> = DefaultAttributes & {
    value: V;
    label: string;
    dataTestId?: string;
    altText?: string;
    isDisabled?: boolean;
    isHidden?: boolean;
};
export declare type InputProps = {
    variant?: Variant;
    disabled?: boolean;
    hasError?: boolean;
    hasFocus?: boolean;
    hasPrefix?: boolean;
    hasSuffix?: boolean;
    hasLabel?: boolean;
    height?: string;
};
export declare type FieldProps = DefaultAttributes & {
    id?: string;
    name?: string;
    label?: string;
    required?: boolean;
    placeholder?: string;
    hasError?: boolean;
    errorText?: string;
    assistText?: ReactNode;
    optionalText?: string;
    value?: Value;
    disabled?: boolean;
    minChar?: number;
    maxChar?: number;
    showCharCount?: boolean;
    autoComplete?: boolean;
    touched?: boolean;
};
export declare type TextFieldProps = DefaultAttributes & {
    variant?: Variant;
    type?: InputType;
    prefix?: ReactNode;
    suffix?: ReactNode;
    width?: string;
    onSuffixClick?: (event: React.MouseEvent<HTMLElement>) => void;
    onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
    onKeyUp?: (event: React.KeyboardEvent<HTMLInputElement>) => void;
    onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;
    onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;
    onPaste?: (event: React.ClipboardEvent<HTMLInputElement>) => void;
};
export declare type TextAreaProps = DefaultAttributes & {
    variant?: Variant;
    width?: string;
    onChange: (event: React.ChangeEvent<HTMLTextAreaElement>) => void;
    onKeyUp?: (event: React.KeyboardEvent<HTMLTextAreaElement>) => void;
    onBlur?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
    onFocus?: (event: React.FocusEvent<HTMLTextAreaElement>) => void;
};
export declare type DropdownBaseProps<V extends Value> = DefaultAttributes & {
    variant: Variant;
    id?: string;
    name?: string;
    label?: string;
    required?: boolean;
    placeholder?: string;
    hasError?: boolean;
    errorText?: string;
    assistText?: ReactNode;
    optionalText?: string;
    prefix?: ReactNode;
    width?: string;
    options: SelectOption<V>[];
    disabled?: boolean;
    maxHeight?: number;
    onOpen?: () => void;
    onClose?: () => void;
    onBlur?: () => void;
    onFocus?: () => void;
    touched?: boolean;
    noMargin?: boolean;
};
export declare type DropdownDefaultProps<V extends Value> = DropdownBaseProps<V> & {
    multivalue?: false;
    value: SelectOption<V>;
    onChange: (v: SelectOption<V>) => void;
};
export declare type DropdownMultiValueProps<V extends Value> = DropdownBaseProps<V> & {
    multivalue: true;
    value: SelectOption<V>[];
    onChange: (v: SelectOption<V>[]) => void;
};
export declare type DropdownProps<V extends Value> = DropdownDefaultProps<V> | DropdownMultiValueProps<V>;
export declare type MultiValueDropdownProps<V extends Value> = Omit<DropdownBaseProps<V>, 'value' | 'onChange'> & {
    values: SelectOption<V>[];
    onChange: (v: SelectOption<V>[]) => void;
};
export declare type SearchableDropdownProps<V extends Value> = DefaultAttributes & {
    variant: Variant;
    value: SelectOption<V> | null;
    options: SelectOption<V>[];
    onChange: (opt: SelectOption<V> | null) => void;
    noResultsText: string;
    debounceDelay?: number;
    name?: string;
    label?: string;
    required?: boolean;
    optionalText?: string;
    errorText?: string;
    assistText?: ReactNode;
    id?: string;
    width?: string;
    className?: string;
    placeholder?: string;
    hasError?: boolean;
    disabled?: boolean;
    maxHeight?: number;
    onOpen?: () => void;
    onClose?: () => void;
    onBlur?: () => void;
    onFocus?: () => void;
    onTextChange?: (text: string) => void;
    touched?: boolean;
};
export declare type CheckRadioGroupOrientation = 'row' | 'column';
export declare type CheckRadioButtonProps = DefaultAttributes & {
    value: string | number;
    name: string;
    label?: string;
    checked?: boolean;
    onChange: (event: ChangeEvent<HTMLInputElement>) => void;
    disabled?: boolean;
    id?: string;
    hasError?: boolean;
    errorText?: string;
    assistText?: string;
    tabIndex?: number;
};
export declare type CheckboxButtonProps = CheckRadioButtonProps & {
    indeterminate?: boolean;
};
export declare type CheckRadioProps = DefaultAttributes & InputHTMLAttributes<HTMLInputElement> & Pick<CheckRadioButtonProps, 'id' | 'name' | 'label' | 'value' | 'onChange' | 'disabled' | 'hasError'>;
export declare type CheckboxProps = CheckRadioProps & {
    indeterminate?: boolean;
};
export declare type CheckRadioCssProps = Pick<CheckRadioButtonProps, 'hasError'>;
export declare type CheckRadioOptionsProps = DefaultAttributes & {
    value: string | number;
    label: string;
    id?: string;
    disabled?: boolean;
    hasError?: boolean;
    indeterminate?: boolean;
    checked?: boolean;
};
export declare type CheckRadioGroupProps = DefaultAttributes & {
    name: string;
    onChange: (event: ChangeEvent<HTMLInputElement>) => void;
    orientation?: CheckRadioGroupOrientation;
    value?: string | number | boolean;
    id?: string;
    options: CheckRadioOptionsProps[];
    groupLabel?: string;
    hasError?: boolean;
    errorText?: string;
    assistText?: string;
    disabled?: boolean;
};
export declare type CheckRadioGroupCSSProps = Pick<CheckRadioGroupProps, 'orientation'>;
