import { StatusField } from "../../enums.cjs";
import { FieldProps, FieldType, GenericFieldsBuilder, GetErrors, InitialState, InputPropsField, OnChangeField, OnSetValue, RenderField, TextFieldPropsField, TypeField, Validate, ValidateField, ValidationError } from "../../types.cjs";
import React from "react";

//#region src/inputsTypes/Input/index.d.ts
interface InputProps<Field extends FieldType> extends FieldProps<Field['value'], Field['name'], Field['validations']> {
  type?: TypeField;
}
declare class Input<Field extends FieldType> extends React.Component<InputProps<Field>, {
  type?: TypeField;
}> {
  constructor(props: InputProps<Field>);
  animation: boolean;
  componentDidMount(): void;
  getProps: (props: InputProps<Field>) => {
    render?: RenderField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    fullWidth?: boolean;
    autoComplete?: string;
    InputProps?: InputPropsField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    textFieldProps?: TextFieldPropsField;
    component?: React.ComponentType<FieldProps<Field["value"], Field["name"], Field["validations"]>> | undefined;
    getErrors: () => Promise<GetErrors<Field_1["validations"]> | undefined>;
    hasErrors: () => Promise<boolean>;
    hasValid: () => Promise<boolean>;
    originalProps?: Pick<Validate<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> & {
      readonly name: Field["name"];
      type?: TypeField;
      disabled?: boolean;
      defaultInputValue?: Field["value"] | undefined;
      onChange?: OnChangeField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      onSetValue?: OnSetValue<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      value: Field["value"];
      label?: any;
      validations?: Field["validations"] | undefined;
    } & InitialState & {
      validate?: ValidateField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      render?: RenderField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      InputProps?: InputPropsField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      component?: React.ComponentType<FieldProps<Field["value"], Field["name"], Field["validations"]>> | undefined;
      fullWidth?: boolean;
      errors?: [] | GetErrors<Field["validations"]> | undefined;
      autoComplete?: string;
      textFieldProps?: TextFieldPropsField;
    }, "validate" | "value"> | undefined;
    _validate?: ValidateField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    touched?: boolean;
    validations: Field["validations"];
    markAsTouched: () => void;
    markAsUntouched: () => void;
    setError: (error: ValidationError) => void;
    setErrors: (errors: ValidationError[]) => void;
    fieldsBuilder?: GenericFieldsBuilder;
    type?: TypeField;
    name: Field["name"];
    value: Field["value"];
    defaultInputValue?: Field["value"] | undefined;
    label: any;
    status?: StatusField;
    disabled: boolean;
    errors?: [] | GetErrors<Field["validations"]> | undefined;
    inputRef?: HTMLInputElement | null;
    onChange?: OnChangeField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    onSetValue?: OnSetValue<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    pristine: boolean;
    markAsDirty: () => void;
    markAsPristine: () => void;
  };
  getLastProps: () => {
    render?: RenderField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    fullWidth?: boolean;
    autoComplete?: string;
    InputProps?: InputPropsField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    textFieldProps?: TextFieldPropsField;
    component?: React.ComponentType<FieldProps<Field["value"], Field["name"], Field["validations"]>> | undefined;
    getErrors: () => Promise<GetErrors<Field_1["validations"]> | undefined>;
    hasErrors: () => Promise<boolean>;
    hasValid: () => Promise<boolean>;
    originalProps?: Pick<Validate<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> & {
      readonly name: Field["name"];
      type?: TypeField;
      disabled?: boolean;
      defaultInputValue?: Field["value"] | undefined;
      onChange?: OnChangeField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      onSetValue?: OnSetValue<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      value: Field["value"];
      label?: any;
      validations?: Field["validations"] | undefined;
    } & InitialState & {
      validate?: ValidateField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      render?: RenderField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      InputProps?: InputPropsField<{
        name: Field["name"];
        value: Field["value"];
        label: any;
        validations: Field["validations"];
      }> | undefined;
      component?: React.ComponentType<FieldProps<Field["value"], Field["name"], Field["validations"]>> | undefined;
      fullWidth?: boolean;
      errors?: [] | GetErrors<Field["validations"]> | undefined;
      autoComplete?: string;
      textFieldProps?: TextFieldPropsField;
    }, "validate" | "value"> | undefined;
    _validate?: ValidateField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    touched?: boolean;
    validations: Field["validations"];
    markAsTouched: () => void;
    markAsUntouched: () => void;
    setError: (error: ValidationError) => void;
    setErrors: (errors: ValidationError[]) => void;
    fieldsBuilder?: GenericFieldsBuilder;
    type?: TypeField;
    name: Field["name"];
    value: Field["value"];
    defaultInputValue?: Field["value"] | undefined;
    label: any;
    status?: StatusField;
    disabled: boolean;
    errors?: [] | GetErrors<Field["validations"]> | undefined;
    inputRef?: HTMLInputElement | null;
    onChange?: OnChangeField<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    onSetValue?: OnSetValue<{
      name: Field["name"];
      value: Field["value"];
      label: any;
      validations: Field["validations"];
    }> | undefined;
    pristine: boolean;
    markAsDirty: () => void;
    markAsPristine: () => void;
  };
  render(): React.JSX.Element;
}
//#endregion
export { Input };