import React from 'react';
import { maskArray } from 'react-text-mask';
import { FieldGroupContextProps } from './field-context';
import { ComboFieldProps } from './components/combo-field';
import { ToggleFeldProps } from './components/toggle-field';
declare type PipeFunction = ((conformedValue: string, config: any) => string | false | {
    value: string;
    indexesOfPipedChars: number[];
}) | undefined;
declare type FieldMask = boolean | (string | RegExp)[] | ((value: string) => maskArray);
export declare type onFieldChangeFunction = (event: React.ChangeEvent<HTMLInputElement>, id: string, invalidMessage: string) => void;
export interface InternalFieldProps {
    isRequired?: boolean;
    validator?: (value: string, isRequired?: boolean) => string | undefined;
    id: string;
    label?: string;
    value?: string | number | string[];
    placeholder?: string;
    placeholderChar?: string;
    parser?: PipeFunction;
    keepCharPosition?: boolean;
    useGuide?: boolean;
    onChange?: onFieldChangeFunction;
}
export interface FieldProps extends InternalFieldProps {
    mask?: FieldMask;
    type?: string;
}
export interface TextAreaProps extends InternalFieldProps {
    maxChars?: number;
    isTextArea: boolean;
}
declare type GeneralThemeProps = FieldProps | TextAreaProps;
interface OverlayProp {
    overlayMessage?: string;
}
interface FieldState extends OverlayProp {
    value?: string | number | string[];
    isInvalid?: string;
    touched: boolean;
}
interface InputProps extends OverlayProp {
    isInvalid: boolean;
    maxChars?: boolean;
    isTextArea?: boolean;
}
export declare const StyledInput: import("styled-components").StyledComponent<"div", import("@monstrosity/types/theme").Theme, InputProps, never>;
export declare class MaskedField extends React.Component<GeneralThemeProps, FieldState> {
    constructor(props: FieldProps);
    static contextType: React.Context<FieldGroupContextProps>;
    render(): JSX.Element;
    renderCounter: (value?: string | number | string[] | undefined) => JSX.Element | undefined;
    onTextAreaReceivedPaste: (event: React.ClipboardEvent<HTMLTextAreaElement>) => void;
    renderInput: (onChangeExecutor: (event: React.ChangeEvent<HTMLInputElement>) => void, value: string | number | string[] | undefined) => JSX.Element;
    onChangeConvertor: (event: React.ChangeEvent<HTMLTextAreaElement>, onChangeExecutor: (event: React.ChangeEvent<HTMLInputElement>) => void) => void;
    onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
    onFocus: () => void;
    renderLabel: () => JSX.Element | null;
}
export declare const PhoneField: (props: FieldProps) => JSX.Element;
export declare const EmailField: (props: FieldProps) => JSX.Element;
export declare const CurrencyField: (props: FieldProps) => JSX.Element;
export declare const PercentageField: (props: FieldProps) => JSX.Element;
export declare const Field: (props: GeneralThemeProps) => JSX.Element;
export declare const PasswordField: (props: GeneralThemeProps) => JSX.Element;
export declare const ComboField: (props: ComboFieldProps) => JSX.Element;
export declare const ToggleField: (props: ToggleFeldProps) => JSX.Element;
export { Masks } from './components/masks';
