/// <reference types="lodash" />
import React from 'react';
import { VirtuosoHandle, VirtuosoProps } from 'react-virtuoso';
import { SuperSelectConfig, SuperSelectOption, SuperSelectValue, SuperSelectValuePrimitive } from './SuperSelect.types';
export declare function useSuperSelect({ block, components: customComponents, defaultValue, disabled, draggable, emptyMessage, error, footer, getOptionGroup, getOptionIsBatch, getOptionIsDisabled, getOptionLabel, getOptionValue, onScrollBottom, onOpenChange, header, loading, multiple, onChange, onManualSort, options: sourceOptions, placeholder, preset, presetProps, search, selectionStyle, setOptionGroup, sort, tabIndex, value: value_, }: SuperSelectConfig): {
    config: {
        block: boolean;
        disabled: boolean;
        draggable: boolean;
        emptyMessage: string;
        error: boolean | undefined;
        footer: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
        header: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
        placeholder: string | undefined;
        preset: import("./SuperSelect.types").SuperSelectPreset;
        presetProps: import("./SuperSelect.types").SuperSelectPresetProps | undefined;
        selectionStyle: "checkbox" | "highlight" | "checkmark";
        tabIndex: number;
        loading: boolean;
        multiple: boolean;
    };
    components: {
        Overlay: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<HTMLElement>>;
        SingleTrigger: (props: any) => JSX.Element;
        MultiTrigger: (props: any) => JSX.Element | null;
        TriggerContainer: React.ForwardRefExoticComponent<any> | React.FC<any>;
        Trigger: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<HTMLDivElement>>;
        Indicators: (props: any) => JSX.Element;
        Label: React.ForwardRefExoticComponent<{
            hoverable: boolean;
        } & React.RefAttributes<HTMLDivElement>>;
        Loading: () => JSX.Element;
        ArrowContainer: (props: any) => JSX.Element;
        Arrow: ({ up, down, left, right, width, height, border, }: any) => JSX.Element;
        Clear: () => JSX.Element;
        MultiInputContainer: (props: {
            children?: React.ReactNode;
        }) => JSX.Element;
        MultiInput: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        MultiValue: (props: any) => JSX.Element;
        MultiValueContainer: (props: any) => JSX.Element;
        SearchContainer: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        Search: (props: any) => JSX.Element;
        Header: (props: any) => JSX.Element;
        Footer: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        EmptyMessage: (props: any) => JSX.Element;
        Options: (props: {
            children?: React.ReactNode;
        } & import("../_utils/types").DivAttributes) => JSX.Element;
        Group: (props: {
            children?: React.ReactNode;
        }) => JSX.Element;
        Item: React.ForwardRefExoticComponent<import("./SuperSelect.types").SuperSelectMenuItemProps & React.RefAttributes<HTMLDivElement>>;
        OptionGroupHeader: ({ optgroup }: any) => JSX.Element;
        OptionLabel: ({ option }: any) => JSX.Element;
        OptionContent: ({ option }: any) => JSX.Element;
        DraggableOptionContent: ({ index, option }: any) => JSX.Element;
        DragHandle: (props: any) => JSX.Element;
        CheckboxContainer: (props: any) => JSX.Element;
        Checkbox: (props: any) => JSX.Element;
        CheckmarkContainer: (props: any) => JSX.Element;
        Checkmark: (props: any) => JSX.Element;
    };
    state: {
        activeMenuIndex: number | null;
        activeTokenIndex: number | null;
        isEmpty: () => boolean;
        listContainerHeight: number;
        listId: string;
        maxHeight: number;
        onDragEnd: (result: any) => void;
        onSelect: (option: SuperSelectOption) => void;
        open: boolean;
        options: any[];
        overlayId: string;
        searchValue: string;
        selectedIndex: number;
        selectedLabel: string;
        selectedOption: any;
        setOpen: React.Dispatch<React.SetStateAction<boolean>>;
        setPointer: React.Dispatch<React.SetStateAction<boolean>>;
        setSearchValue: import("lodash").DebouncedFunc<React.Dispatch<React.SetStateAction<string>>>;
        sourceOptions: any[];
        value: SuperSelectValue;
        width: number;
    };
    props: {
        clear: () => {
            'aria-hidden': boolean;
            'aria-label': string;
            onClick(e: React.MouseEvent): void;
        };
        emptyMessage: () => {
            emptyMessage: string;
        };
        footer: () => {
            ref: (el: HTMLElement | null) => void;
            onKeyDown: (e: React.KeyboardEvent) => void;
        };
        header: () => {
            ref: (el: HTMLElement | null) => void;
        };
        item: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
        label: () => {
            $hoverable: boolean;
        };
        menu: () => {
            scrollable: boolean;
            style: {
                height: number;
            };
        };
        multiInput: () => React.AriaAttributes & React.InputHTMLAttributes<HTMLInputElement> & {
            ref: React.Ref<HTMLInputElement>;
        };
        overlay: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
        search: () => {
            'aria-controls': string;
            onChange(value: string): void;
            placeholder: string;
        };
        searchContainer: () => {
            ref: (el: HTMLElement | null) => void;
        };
        tokenClear: (index: number) => {
            onClick(e: React.MouseEvent): void;
        };
        trigger: (userProps?: React.HTMLProps<Element> | undefined) => Record<string, unknown>;
        virtuoso: () => VirtuosoProps<{}, {}>;
    };
    option: {
        group: (option: any) => string;
        isBatch: (option: any) => boolean;
        isSelected: (option: SuperSelectOption) => boolean;
        isDisabled: (option: any) => boolean;
        isOptgroup: (item: any) => item is import("./SuperSelect.types").SuperSelectOptgroup;
        label: (option: any) => string;
        value: (option: any) => SuperSelectValuePrimitive;
    };
    refs: {
        floating: {
            placement: import("@floating-ui/react").Placement;
            strategy: import("@floating-ui/react").Strategy;
            middlewareData: import("@floating-ui/react").MiddlewareData;
            x: number | null;
            y: number | null;
            update: () => void;
            reference: (node: HTMLElement | null) => void;
            floating: (node: HTMLElement | null) => void;
            positionReference: (node: import("@floating-ui/react").ReferenceType | null) => void;
            context: {
                x: number | null;
                y: number | null;
                placement: import("@floating-ui/react").Placement;
                strategy: import("@floating-ui/react").Strategy;
                middlewareData: import("@floating-ui/react").MiddlewareData;
                reference: (node: HTMLElement | null) => void;
                floating: (node: HTMLElement | null) => void;
                update: () => void;
                isPositioned: boolean;
                open: boolean;
                onOpenChange: (open: boolean) => void;
                events: import("@floating-ui/react").FloatingEvents;
                dataRef: React.MutableRefObject<import("@floating-ui/react").ContextData>;
                nodeId: string | undefined;
                floatingId: string;
                refs: import("@floating-ui/react").ExtendedRefs<HTMLElement>;
                elements: import("@floating-ui/react").ExtendedElements<HTMLElement>;
            };
            refs: import("@floating-ui/react").ExtendedRefs<HTMLElement>;
            elements: import("@floating-ui/react").ExtendedElements<HTMLElement>;
            isPositioned: boolean;
        };
        navigationList: React.MutableRefObject<(HTMLElement | null)[]>;
        virtuoso: React.RefObject<VirtuosoHandle>;
    };
};
export declare const SuperSelectContext: React.Context<{
    config: {
        block: boolean;
        disabled: boolean;
        draggable: boolean;
        emptyMessage: string;
        error: boolean | undefined;
        footer: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
        header: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
        placeholder: string | undefined;
        preset: import("./SuperSelect.types").SuperSelectPreset;
        presetProps: import("./SuperSelect.types").SuperSelectPresetProps | undefined;
        selectionStyle: "checkbox" | "highlight" | "checkmark";
        tabIndex: number;
        loading: boolean;
        multiple: boolean;
    };
    components: {
        Overlay: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<HTMLElement>>;
        SingleTrigger: (props: any) => JSX.Element;
        MultiTrigger: (props: any) => JSX.Element | null;
        TriggerContainer: React.ForwardRefExoticComponent<any> | React.FC<any>;
        Trigger: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<HTMLDivElement>>;
        Indicators: (props: any) => JSX.Element;
        Label: React.ForwardRefExoticComponent<{
            hoverable: boolean;
        } & React.RefAttributes<HTMLDivElement>>;
        Loading: () => JSX.Element;
        ArrowContainer: (props: any) => JSX.Element;
        Arrow: ({ up, down, left, right, width, height, border, }: any) => JSX.Element;
        Clear: () => JSX.Element;
        MultiInputContainer: (props: {
            children?: React.ReactNode;
        }) => JSX.Element;
        MultiInput: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        MultiValue: (props: any) => JSX.Element;
        MultiValueContainer: (props: any) => JSX.Element;
        SearchContainer: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        Search: (props: any) => JSX.Element;
        Header: (props: any) => JSX.Element;
        Footer: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        EmptyMessage: (props: any) => JSX.Element;
        Options: (props: {
            children?: React.ReactNode;
        } & import("../_utils/types").DivAttributes) => JSX.Element;
        Group: (props: {
            children?: React.ReactNode;
        }) => JSX.Element;
        Item: React.ForwardRefExoticComponent<import("./SuperSelect.types").SuperSelectMenuItemProps & React.RefAttributes<HTMLDivElement>>;
        OptionGroupHeader: ({ optgroup }: any) => JSX.Element;
        OptionLabel: ({ option }: any) => JSX.Element;
        OptionContent: ({ option }: any) => JSX.Element;
        DraggableOptionContent: ({ index, option }: any) => JSX.Element;
        DragHandle: (props: any) => JSX.Element;
        CheckboxContainer: (props: any) => JSX.Element;
        Checkbox: (props: any) => JSX.Element;
        CheckmarkContainer: (props: any) => JSX.Element;
        Checkmark: (props: any) => JSX.Element;
    };
    state: {
        activeMenuIndex: number | null;
        activeTokenIndex: number | null;
        isEmpty: () => boolean;
        listContainerHeight: number;
        listId: string;
        maxHeight: number;
        onDragEnd: (result: any) => void;
        onSelect: (option: SuperSelectOption) => void;
        open: boolean;
        options: any[];
        overlayId: string;
        searchValue: string;
        selectedIndex: number;
        selectedLabel: string;
        selectedOption: any;
        setOpen: React.Dispatch<React.SetStateAction<boolean>>;
        setPointer: React.Dispatch<React.SetStateAction<boolean>>;
        setSearchValue: import("lodash").DebouncedFunc<React.Dispatch<React.SetStateAction<string>>>;
        sourceOptions: any[];
        value: SuperSelectValue;
        width: number;
    };
    props: {
        clear: () => {
            'aria-hidden': boolean;
            'aria-label': string;
            onClick(e: React.MouseEvent): void;
        };
        emptyMessage: () => {
            emptyMessage: string;
        };
        footer: () => {
            ref: (el: HTMLElement | null) => void;
            onKeyDown: (e: React.KeyboardEvent) => void;
        };
        header: () => {
            ref: (el: HTMLElement | null) => void;
        };
        item: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
        label: () => {
            $hoverable: boolean;
        };
        menu: () => {
            scrollable: boolean;
            style: {
                height: number;
            };
        };
        multiInput: () => React.AriaAttributes & React.InputHTMLAttributes<HTMLInputElement> & {
            ref: React.Ref<HTMLInputElement>;
        };
        overlay: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
        search: () => {
            'aria-controls': string;
            onChange(value: string): void;
            placeholder: string;
        };
        searchContainer: () => {
            ref: (el: HTMLElement | null) => void;
        };
        tokenClear: (index: number) => {
            onClick(e: React.MouseEvent): void;
        };
        trigger: (userProps?: React.HTMLProps<Element> | undefined) => Record<string, unknown>;
        virtuoso: () => VirtuosoProps<{}, {}>;
    };
    option: {
        group: (option: any) => string;
        isBatch: (option: any) => boolean;
        isSelected: (option: SuperSelectOption) => boolean;
        isDisabled: (option: any) => boolean;
        isOptgroup: (item: any) => item is import("./SuperSelect.types").SuperSelectOptgroup;
        label: (option: any) => string;
        value: (option: any) => SuperSelectValuePrimitive;
    };
    refs: {
        floating: {
            placement: import("@floating-ui/react").Placement;
            strategy: import("@floating-ui/react").Strategy;
            middlewareData: import("@floating-ui/react").MiddlewareData;
            x: number | null;
            y: number | null;
            update: () => void;
            reference: (node: HTMLElement | null) => void;
            floating: (node: HTMLElement | null) => void;
            positionReference: (node: import("@floating-ui/react").ReferenceType | null) => void;
            context: {
                x: number | null;
                y: number | null;
                placement: import("@floating-ui/react").Placement;
                strategy: import("@floating-ui/react").Strategy;
                middlewareData: import("@floating-ui/react").MiddlewareData;
                reference: (node: HTMLElement | null) => void;
                floating: (node: HTMLElement | null) => void;
                update: () => void;
                isPositioned: boolean;
                open: boolean;
                onOpenChange: (open: boolean) => void;
                events: import("@floating-ui/react").FloatingEvents;
                dataRef: React.MutableRefObject<import("@floating-ui/react").ContextData>;
                nodeId: string | undefined;
                floatingId: string;
                refs: import("@floating-ui/react").ExtendedRefs<HTMLElement>;
                elements: import("@floating-ui/react").ExtendedElements<HTMLElement>;
            };
            refs: import("@floating-ui/react").ExtendedRefs<HTMLElement>;
            elements: import("@floating-ui/react").ExtendedElements<HTMLElement>;
            isPositioned: boolean;
        };
        navigationList: React.MutableRefObject<(HTMLElement | null)[]>;
        virtuoso: React.RefObject<VirtuosoHandle>;
    };
} | null>;
export declare function useSuperSelectContext(): {
    config: {
        block: boolean;
        disabled: boolean;
        draggable: boolean;
        emptyMessage: string;
        error: boolean | undefined;
        footer: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
        header: React.ReactElement<any, string | React.JSXElementConstructor<any>> | undefined;
        placeholder: string | undefined;
        preset: import("./SuperSelect.types").SuperSelectPreset;
        presetProps: import("./SuperSelect.types").SuperSelectPresetProps | undefined;
        selectionStyle: "checkbox" | "highlight" | "checkmark";
        tabIndex: number;
        loading: boolean;
        multiple: boolean;
    };
    components: {
        Overlay: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<HTMLElement>>;
        SingleTrigger: (props: any) => JSX.Element;
        MultiTrigger: (props: any) => JSX.Element | null;
        TriggerContainer: React.ForwardRefExoticComponent<any> | React.FC<any>;
        Trigger: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<HTMLDivElement>>;
        Indicators: (props: any) => JSX.Element;
        Label: React.ForwardRefExoticComponent<{
            hoverable: boolean;
        } & React.RefAttributes<HTMLDivElement>>;
        Loading: () => JSX.Element;
        ArrowContainer: (props: any) => JSX.Element;
        Arrow: ({ up, down, left, right, width, height, border, }: any) => JSX.Element;
        Clear: () => JSX.Element;
        MultiInputContainer: (props: {
            children?: React.ReactNode;
        }) => JSX.Element;
        MultiInput: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        MultiValue: (props: any) => JSX.Element;
        MultiValueContainer: (props: any) => JSX.Element;
        SearchContainer: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        Search: (props: any) => JSX.Element;
        Header: (props: any) => JSX.Element;
        Footer: React.ForwardRefExoticComponent<Pick<any, string | number | symbol> & React.RefAttributes<unknown>>;
        EmptyMessage: (props: any) => JSX.Element;
        Options: (props: {
            children?: React.ReactNode;
        } & import("../_utils/types").DivAttributes) => JSX.Element;
        Group: (props: {
            children?: React.ReactNode;
        }) => JSX.Element;
        Item: React.ForwardRefExoticComponent<import("./SuperSelect.types").SuperSelectMenuItemProps & React.RefAttributes<HTMLDivElement>>;
        OptionGroupHeader: ({ optgroup }: any) => JSX.Element;
        OptionLabel: ({ option }: any) => JSX.Element;
        OptionContent: ({ option }: any) => JSX.Element;
        DraggableOptionContent: ({ index, option }: any) => JSX.Element;
        DragHandle: (props: any) => JSX.Element;
        CheckboxContainer: (props: any) => JSX.Element;
        Checkbox: (props: any) => JSX.Element;
        CheckmarkContainer: (props: any) => JSX.Element;
        Checkmark: (props: any) => JSX.Element;
    };
    state: {
        activeMenuIndex: number | null;
        activeTokenIndex: number | null;
        isEmpty: () => boolean;
        listContainerHeight: number;
        listId: string;
        maxHeight: number;
        onDragEnd: (result: any) => void;
        onSelect: (option: any) => void;
        open: boolean;
        options: any[];
        overlayId: string;
        searchValue: string;
        selectedIndex: number;
        selectedLabel: string;
        selectedOption: any;
        setOpen: React.Dispatch<React.SetStateAction<boolean>>;
        setPointer: React.Dispatch<React.SetStateAction<boolean>>;
        setSearchValue: import("lodash").DebouncedFunc<React.Dispatch<React.SetStateAction<string>>>;
        sourceOptions: any[];
        value: SuperSelectValue;
        width: number;
    };
    props: {
        clear: () => {
            'aria-hidden': boolean;
            'aria-label': string;
            onClick(e: React.MouseEvent<Element, MouseEvent>): void;
        };
        emptyMessage: () => {
            emptyMessage: string;
        };
        footer: () => {
            ref: (el: HTMLElement | null) => void;
            onKeyDown: (e: React.KeyboardEvent<Element>) => void;
        };
        header: () => {
            ref: (el: HTMLElement | null) => void;
        };
        item: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
        label: () => {
            $hoverable: boolean;
        };
        menu: () => {
            scrollable: boolean;
            style: {
                height: number;
            };
        };
        multiInput: () => React.AriaAttributes & React.InputHTMLAttributes<HTMLInputElement> & {
            ref: React.Ref<HTMLInputElement>;
        };
        overlay: (userProps?: React.HTMLProps<HTMLElement> | undefined) => Record<string, unknown>;
        search: () => {
            'aria-controls': string;
            onChange(value: string): void;
            placeholder: string;
        };
        searchContainer: () => {
            ref: (el: HTMLElement | null) => void;
        };
        tokenClear: (index: number) => {
            onClick(e: React.MouseEvent<Element, MouseEvent>): void;
        };
        trigger: (userProps?: React.HTMLProps<Element> | undefined) => Record<string, unknown>;
        virtuoso: () => VirtuosoProps<{}, {}>;
    };
    option: {
        group: (option: any) => string;
        isBatch: (option: any) => boolean;
        isSelected: (option: any) => boolean;
        isDisabled: (option: any) => boolean;
        isOptgroup: (item: any) => item is import("./SuperSelect.types").SuperSelectOptgroup;
        label: (option: any) => string;
        value: (option: any) => SuperSelectValuePrimitive;
    };
    refs: {
        floating: {
            placement: import("@floating-ui/react").Placement;
            strategy: import("@floating-ui/react").Strategy;
            middlewareData: import("@floating-ui/react").MiddlewareData;
            x: number | null;
            y: number | null;
            update: () => void;
            reference: (node: HTMLElement | null) => void;
            floating: (node: HTMLElement | null) => void;
            positionReference: (node: import("@floating-ui/react").ReferenceType | null) => void;
            context: {
                x: number | null;
                y: number | null;
                placement: import("@floating-ui/react").Placement;
                strategy: import("@floating-ui/react").Strategy;
                middlewareData: import("@floating-ui/react").MiddlewareData;
                reference: (node: HTMLElement | null) => void;
                floating: (node: HTMLElement | null) => void;
                update: () => void;
                isPositioned: boolean;
                open: boolean;
                onOpenChange: (open: boolean) => void;
                events: import("@floating-ui/react").FloatingEvents;
                dataRef: React.MutableRefObject<import("@floating-ui/react").ContextData>;
                nodeId: string | undefined;
                floatingId: string;
                refs: import("@floating-ui/react").ExtendedRefs<HTMLElement>;
                elements: import("@floating-ui/react").ExtendedElements<HTMLElement>;
            };
            refs: import("@floating-ui/react").ExtendedRefs<HTMLElement>;
            elements: import("@floating-ui/react").ExtendedElements<HTMLElement>;
            isPositioned: boolean;
        };
        navigationList: React.MutableRefObject<(HTMLElement | null)[]>;
        virtuoso: React.RefObject<VirtuosoHandle>;
    };
};
