import React, { PropsWithChildren } from 'react';
import { TObjectDriller } from './ObjectDriller';
import { FieldStatusFunc } from './FormStatusFunc';
export declare type FormFieldProps<TData, TComponentProps, TFieldData> = TComponentProps extends {} ? {
    defaultValue?: TFieldData;
    getValue: (_: TObjectDriller<NonNullable<TData>>) => TObjectDriller<TFieldData>;
    preprocessForDisplay?: (_: TFieldData | undefined) => TFieldData | JSX.Element | string | undefined;
    parseOnChangeEvent?: (event: React.ChangeEvent<any>, data: TObjectDriller<TData>) => TFieldData;
    status?: FieldStatusFunc<TData, TComponentProps>;
    inputComponent: React.FC<TComponentProps>;
} & /* Include TComponentProps props, except onChange, defaultValue, and status */ Pick<TComponentProps, Exclude<keyof TComponentProps, 'onChange' | 'defaultValue' | 'status'>> : never;
/**
 * Generic form input field component that handles simple use cases,
 * where the data displayed in the field and updated by the user maps
 * directly to the necessary updates to form data state.
 *
 * For complex use cases (e.g. adding or removing array element),
 * custom form field components should be created
 */
export declare const FormField: <TData extends object, TComponentProps extends {}, TFieldData>({ defaultValue, getValue, preprocessForDisplay, parseOnChangeEvent, status, inputComponent: InputComponent, children, ...props }: React.PropsWithChildren<FormFieldProps<TData, TComponentProps, TFieldData>>) => JSX.Element;
