import { DataTypes, DelayedExecutorType, IdDefaultType } from "@etsoo/shared";
import React from "react";
import { ListItemButtonProps } from "@mui/material/ListItemButton";
import { ListProps } from "@mui/material/List";
type QueryData = {
    title?: string;
};
/**
 * List chooser button props
 */
export interface ListChooserButtonProps<T extends object, D extends DataTypes.Keys<T>> {
    (id: T[D]): ListItemButtonProps;
}
/**
 * List chooser props
 */
export type ListChooserProps<T extends object, D extends DataTypes.Keys<T>, Q extends object> = ListProps & {
    /**
     * Condition field name
     */
    conditionField?: string;
    /**
     * Condition renderer
     */
    conditionRenderer?: (rq: Partial<Q>, delayed: DelayedExecutorType) => React.ReactNode;
    /**
     * List item renderer
     */
    itemRenderer?: (data: T, props: ListChooserButtonProps<T, D>) => React.ReactNode;
    /**
     * Label field
     */
    labelField?: DataTypes.Keys<T, string> | ((data: T) => string);
    /**
     * Id field
     */
    idField?: D;
    /**
     * Load data callback
     */
    loadData: (rq: Partial<Q>) => PromiseLike<T[] | null | undefined>;
    /**
     * Multiple selected
     */
    multiple?: boolean;
    /**
     * Item onchange callback
     */
    onItemChange: (items: T[], ids: T[D][]) => void;
    /**
     * Title
     */
    title: string;
    /**
     * Double click enabled
     */
    doubleClickEnabled?: boolean;
};
/**
 * List chooser
 * @param props Props
 * @returns Component
 */
export declare function ListChooser<T extends object, D extends DataTypes.Keys<T> = IdDefaultType<T>, Q extends object = QueryData>(props: ListChooserProps<T, D, Q>): import("react/jsx-runtime").JSX.Element;
export {};
