import type React from 'react';
import type { VirtuosoHandle } from 'react-virtuoso';
import type * as defaultComponents from './SuperSelect.components';
import type { isOptgroupSymbol } from './SuperSelect.constants';
export interface TokenNavigationProps {
    activeIndex?: number | null;
    enabled?: boolean;
    onChange?: (value: SuperSelectValue) => void;
    onNavigate?: (index: number | null) => void;
    value?: SuperSelectValue;
}
export interface KeyboardSelectionProps {
    enabled?: boolean;
    onSelect?: () => void;
}
export declare type SuperSelectValuePrimitive = boolean | string | number;
export declare type SuperSelectValue = SuperSelectValuePrimitive | Array<SuperSelectValuePrimitive> | null;
export declare type SuperSelectOption = any;
export declare type SuperSelectPreset = '' | 'pill' | 'filter' | 'contacts';
export declare type SuperSelectResult = {
    destination?: {
        index: number;
    } | null;
    source: {
        index: number;
    };
};
export interface SuperSelectPresetProps {
    filter?: {
        filterName?: string;
    };
    pill?: {};
    contacts?: {};
    ''?: {};
}
export interface SuperSelectConfig {
    block?: boolean;
    components?: Partial<typeof defaultComponents>;
    defaultValue?: SuperSelectValue;
    disabled?: boolean;
    draggable?: boolean;
    emptyMessage?: string;
    selectAllEnabled?: boolean;
    error?: boolean;
    footer?: React.ReactElement;
    getOptionGroup?: (option: SuperSelectOption) => string;
    getOptionIsBatch?: (option: SuperSelectOption) => boolean;
    getOptionIsDisabled?: (option: SuperSelectOption) => boolean;
    getOptionIsPartiallySelected?: (option: SuperSelectOption) => boolean;
    getOptionIsSelected?: (option: SuperSelectOption) => boolean;
    getOptionLabel?: (option: SuperSelectOption) => string;
    getOptionValue?: (option: SuperSelectOption) => SuperSelectValuePrimitive;
    header?: React.ReactElement;
    loading?: boolean;
    multiple?: boolean;
    onChange?: (value: SuperSelectValue) => void;
    onManualSort?: (options: SuperSelectOption[]) => void;
    /**
     * Callback function triggered when the "Select All" functionality is used in a multi-select SuperSelect.
     *
     * This prop is only relevant when `multiple={true}` and `selectAllEnabled={true}`. The callback is invoked
     * when users interact with a select all option in the select list that allows them to
     * select or deselect all available options at once.
     *
     * @param selectedOptions - An array of all options that would be selected when "Select All" is triggered.
     *                         This includes all selectable options (excluding disabled options) that are
     *                         currently visible and available for selection.
     *
     * @remarks
     * - Only called when the component is in multi-select mode (`multiple={true}`)
     * - Requires `selectAllEnabled={true}` to show the select-all UI
     * - Disabled options are automatically excluded from the selectedOptions array
     * - Allows additional customization of select-all behavior if needed by implementing custom logic within the callback
     *
     * @see {@link selectAllEnabled} - Enable the select-all functionality
     * @see {@link multiple} - Enable multi-select mode
     * @see {@link getOptionIsDisabled} - Function to determine if options are disabled
     */
    onSelectAll?: (selectedOptions: SuperSelectOption[]) => void;
    onScrollBottom?: () => void;
    onOpenChange?: (open: boolean) => void;
    options?: SuperSelectOption[];
    placeholder?: string;
    preset?: SuperSelectPreset;
    presetProps?: SuperSelectPresetProps;
    search?: boolean;
    selectionStyle?: 'highlight' | 'checkbox' | 'checkmark';
    setOptionGroup?: (option: SuperSelectOption, group: string) => SuperSelectOption;
    sort?: boolean;
    tabIndex?: number;
    value?: SuperSelectValue;
    overlayMatchesTriggerWidth?: boolean;
    'aria-label'?: string;
}
export declare type SuperSelectProps = SuperSelectConfig;
export interface SuperSelectApi {
    config: {
        block: boolean;
        disabled: boolean;
        draggable: boolean;
        emptyMessage: string;
        error?: boolean;
        footer?: React.ReactElement;
        header?: React.ReactElement;
        placeholder?: string;
        preset: SuperSelectPreset;
        presetProps?: any;
        selectionStyle: 'highlight' | 'token' | 'checkbox' | 'checkmark';
        tabIndex: number;
        loading: boolean;
        multiple: boolean;
        selectAllEnabled: boolean;
    };
    components: typeof defaultComponents;
    state: {
        activeMenuIndex: number | null;
        activeTokenIndex: number | null;
        isEmpty: () => boolean;
        isSelectAllActive: boolean;
        listContainerHeight: number;
        listId: string;
        maxHeight: number;
        onDragEnd: (result: SuperSelectResult) => void;
        onSelect: (option: SuperSelectOption) => void;
        onSelectAll?: (selectedOptions: SuperSelectOption[]) => void;
        open: boolean;
        options: SuperSelectOption[];
        overlayId: string;
        searchValue: string;
        selectAllOption: SuperSelectOption;
        selectedIndex: number | null;
        selectedLabel: string;
        selectedOption: SuperSelectOption | null;
        setOpen: (open: boolean) => void;
        setPointer: any;
        setActiveMenuIndex: (index: number | null) => void;
        setSearchValue: ((value: string) => void) & {
            cancel: () => void;
        };
        sourceOptions: SuperSelectOption[];
        value: SuperSelectValue;
        width: number;
    };
    props: {
        clear: () => Record<string, any>;
        emptyMessage: () => Record<string, any>;
        footer: () => Record<string, any>;
        header: () => Record<string, any>;
        item: (...args: any[]) => Record<string, any>;
        label: () => Record<string, any>;
        menu: () => Record<string, any>;
        multiInput: () => Record<string, any>;
        overlay: () => Record<string, any>;
        search: () => Record<string, any>;
        searchContainer: () => Record<string, any>;
        tokenClear: (index: number) => Record<string, any>;
        trigger: () => Record<string, any>;
        virtuoso: () => Record<string, any>;
    };
    option: {
        group: (option: SuperSelectOption) => string;
        isBatch: (option: SuperSelectOption) => boolean;
        isPartiallySelected: (option: SuperSelectOption) => boolean;
        isSelected: (option: SuperSelectOption) => boolean;
        isDisabled: (option: SuperSelectOption) => boolean;
        isOptgroup: (option: SuperSelectOption) => boolean;
        isOptSelectAll: (option: SuperSelectOption) => boolean;
        label: (option: SuperSelectOption) => string;
        selectAll: {
            isSelectAllPartiallySelected: (options: SuperSelectOption[]) => boolean;
            isSelectAllSelected: (options: SuperSelectOption[]) => boolean;
        };
        value: (option: SuperSelectOption) => SuperSelectValuePrimitive;
    };
    refs: {
        floating: any;
        navigationList: any;
        virtuoso: React.RefObject<VirtuosoHandle>;
    };
}
export interface SuperSelectTriggerProps {
    block?: boolean;
    disabled?: boolean;
    error?: boolean;
    loading?: boolean;
    placeholder?: string;
    search?: boolean;
    tabIndex?: number;
}
export interface SuperSelectOptgroup {
    label: string;
    id: string;
    [isOptgroupSymbol]: true;
}
export interface SuperSelectMenuItemProps extends React.HTMLAttributes<HTMLDivElement> {
    isDragging?: boolean;
    'data-known-size'?: number;
    'data-index': number;
}
