import { DataTypes } from "@etsoo/shared";
import { AutocompleteProps } from "@mui/material/Autocomplete";
import { ChangeEventHandler } from "react";
/**
 * Autocomplete extended props
 */
export type AutocompleteExtendedProps<T extends object, D extends DataTypes.Keys<T>, M extends boolean | undefined = boolean | undefined> = Omit<AutocompleteProps<T, M, false, false>, "renderInput" | "options" | "multiple"> & {
    /**
     * Id field
     */
    idField?: D;
    /**
     * Id value
     */
    idValue?: T[D];
    /**
     * Is the id value a string?
     * @default false
     */
    idIsString?: boolean;
    /**
     * Autocomplete for the input
     */
    inputAutoComplete?: string;
    /**
     * If `true`, the label is displayed in an error state.
     * @default false
     */
    inputError?: boolean;
    /**
     * The helper text content.
     */
    inputHelperText?: React.ReactNode;
    /**
     * If `dense` or `normal`, will adjust vertical spacing of this and contained components.
     * @default 'none'
     */
    inputMargin?: "dense" | "normal" | "none";
    /**
     * Input onChange hanlder
     */
    inputOnChange?: ChangeEventHandler<HTMLInputElement> | undefined;
    /**
     * If `true`, the label will indicate that the `input` is required.
     * @default false
     */
    inputRequired?: boolean;
    /**
     * Set 'data-reset'
     */
    inputReset?: boolean;
    /**
     * The variant to use.
     * @default 'outlined'
     */
    inputVariant?: "standard" | "outlined" | "filled";
    /**
     * Label of the field
     */
    label: string;
    /**
     * Name of the field
     */
    name: string;
    /**
     * Is the field read only?
     */
    readOnly?: boolean;
    /**
     * Is search field?
     */
    search?: boolean;
    /**
     * Value change handler
     * @param value New value
     * @param input Input element
     */
    onValueChange?: (value: T | null, input?: HTMLInputElement | null) => void;
};
