import { ReactElement, ReactNode, RefObject } from 'react';
import { AiMarkWithTooltipOrPopoverProps, CheckState } from '../../../types';
import { AddNewItemProps } from '../../../internal/types/addNewItemTypes';
import { MultiSelectFieldChipProps, MultiSelectFieldOption, MultiSelectFieldProps } from '../types';
export type MultiSelectFieldBaseInternalProps = {
    id: string;
    helperUid: string;
    selectedOptions: MultiSelectFieldOption[];
    onSelectedOptionsChange: (options: MultiSelectFieldOption[]) => void;
    displayAs: "popover" | "dialog";
    isDisabledOrReadOnly: boolean;
    disabled?: boolean;
    readOnly?: boolean;
    isHighlighted?: boolean;
    required?: boolean;
    placeholder?: string;
    size?: "small" | "medium" | "large";
    error?: boolean | string | ReactElement | string[];
    hasHelperText: boolean;
    disableClearButton: boolean;
    prefix?: string | ReactElement;
    suffix?: string | ReactElement;
    label: string;
    hideLabel?: boolean;
    hint?: ReactElement | string;
    moreInfo?: ReactNode;
    moreInfoId?: string;
    labelAiMark?: AiMarkWithTooltipOrPopoverProps["aiMark"];
    errorMessages?: string | ReactElement | string[];
    warning?: string | string[];
    description?: ReactElement | string;
    className?: string;
    style?: React.CSSProperties;
    layoutStyles?: React.CSSProperties;
    pinned?: MultiSelectFieldProps["pinned"];
    groupToString?: (groupValue: string | number) => string;
    groupSorter?: (a: string | number, b: string | number) => number;
    virtualize?: boolean;
    options: MultiSelectFieldOption[];
    loading: boolean;
    loadingMore: boolean;
    hasMore: boolean;
    loadOptions: (searchValue: string, opts?: {
        initial?: boolean;
    }) => Promise<void>;
    loadMore: (searchValue: string) => Promise<void>;
    initialLoad: "immediate" | "open";
    initialLoadPerformed: boolean;
    setInitialLoadPerformed: (val: boolean) => void;
    inputWrapperRef: RefObject<HTMLDivElement>;
    selectAll?: {
        label: string;
        checkState: CheckState;
    };
    /** True while a `compute`-driven bulk action's promise is in flight. */
    bulkPending: boolean;
    /** Called when the user activates the select-all or select-filtered row. */
    onBulkActivate: (kind: "selectAll" | "selectFiltered", searchValue: string) => void;
    singleRow?: boolean;
    maxChips?: number;
    getChipProps?: (option: MultiSelectFieldOption) => MultiSelectFieldChipProps;
    handleRemoveOption: (option: {
        id: string | number;
    }) => void;
    handleClear: () => void;
} & AddNewItemProps;
export type MultiSelectFieldComboboxInternalProps = MultiSelectFieldBaseInternalProps & {
    debounceMs: number;
    selectFiltered?: (searchValue: string) => {
        label?: string;
        checkState: CheckState;
    };
    onSearchChange?: (searchValue: string) => void;
};
