export type EventHandler<T> = (type: keyof ComboboxDispatcher<T>, detail: ComboboxDispatcher<T>[keyof ComboboxDispatcher<T>]) => void;
export interface Props<T> {
    selected: T[] | T;
    multiple: boolean;
    disabled: boolean;
    config?: Config;
    groupBy?: (option: T, index?: number) => string | number;
    searchBy?: SearchBy<T>;
    keyBy?: KeyBy<T>;
    loadOptions?: AsyncOptions<T>;
}
export interface Config {
    ctxKey: string;
}
export type KeyBy<T> = (option: T) => string;
export type SearchBy<T> = (option: T) => string;
export type State = Record<string, boolean>;
export type LoadOptionsParams = {
    search: string;
    skip: number;
    take: number;
    signal: AbortSignal;
};
export type LoadOptions<T> = (params: LoadOptionsParams) => Promise<T[]> | T[];
export type AsyncOptions<T> = {
    callback: LoadOptions<T>;
    pageSize?: number;
    searchDebounce?: number;
};
export type ComboboxDispatcher<T> = {
    blur: unknown;
    select: T[] | T;
    toggle: {
        option: T;
        state: unknown;
    };
};
