import React, { CSSProperties } from 'react';
import { Offset, Placement } from '@parlor/common/components/popup';
import { SelectorBoxProps } from '@parlor/ui/selector-box';
export type OptionsSelectItem = Record<string, any> & {
    color?: string;
    id: string;
    nextChildList?: string;
};
export declare enum SelectActionType {
    Add = "add",
    Remove = "remove",
    Select = "select"
}
export type SelectProps<T extends OptionsSelectItem> = {
    /**
     * custom trigger element
     */
    CustomTrigger?: ({ getOptionsLabel, placeholder, selectedItem, }: Pick<SelectProps<T>, 'getOptionsLabel' | 'placeholder'> & {
        isOpen: boolean;
        selectedItem: T;
    }) => JSX.Element;
    /**
     * Select custom element.
     */
    children?: JSX.Element | ((o: {
        addItem(item: T, e: React.BaseSyntheticEvent): void;
        isMultiple: boolean;
        selectItem(item: T, e: React.BaseSyntheticEvent): void;
        selectedItem: T;
        selectedItems: T[];
    }) => JSX.Element);
    /**
     * classNames for select
     */
    classNames?: {
        menuListWrapper?: string;
        selectContainer?: string;
        selectWrapper?: string;
    };
    /**
     * Selected item additional props.
     */
    customSelectedItemProps?: (item?: T) => SelectorBoxProps;
    /**
     * menu content row
     */
    defaultState?: boolean;
    /**
     * Select default value.
     */
    defaultValue?: T | T[];
    /**
     * Select disabled.
     */
    disabled?: boolean;
    /**
     * empty block
     */
    emptyBlock?: JSX.Element | null;
    /**
     * Select variant for search property selector.
     */
    fieldWrapperVariant?: 'inlineSpace' | 'inlinePacked' | 'stacked';
    /**
     * menu footer
     */
    footer?: JSX.Element | null;
    getHighlightComponent?: (item: T) => string;
    getOptionsComponent?: (item: T) => string | React.ReactNode;
    /**
     * Select get option icon property
     */
    getOptionsIcon?: (item: T) => JSX.Element;
    /**
     * Select get option property
     */
    getOptionsLabel: (item: T) => string;
    /**
     * idx (index) prop when using an array of items that will update individually.
     * See QueryBuilder for example of this
     */
    idx?: string | null;
    /**
     * Props for Infinite Scroll Component
     */
    infiniteScrollProps?: {
        count?: number;
        hasMore: boolean;
        onLoadMore: () => Promise<unknown> | unknown;
        token?: string;
    };
    /**isHide menu hides deopdown */
    isHideMenu?: boolean;
    /**Hides Plus button. */
    isHidePlusButton?: boolean;
    /**
     *  Dropdown list loading
     */
    isLoading?: boolean;
    /**
     * Ignore selection item in UI
     */
    isParentSelectItem?: (item: T) => boolean;
    /**
     * isPlaceholderChangable default is true, if false prevent changing placeholder
     */
    isPlaceholderChangable?: boolean;
    /**
     * Changes styling for Query Builder
     */
    isQueryBuilder?: boolean;
    /**
     * Select dropdown is searchable.
     */
    isSearchable?: boolean;
    /**
     * Select dropdown label.
     */
    label?: string;
    /**
     * Select label for (search property selector) variant.
     */
    multiSelectLabel?: string;
    /**
     * Select on change return (select current value).
     * By passing an id Prop, onChange will run with that id.
     */
    onChange?: (newValue: T | T[], id?: string) => void;
    /**
     * Select handle closing.
     */
    onClose?: () => void;
    /**
     * Select handle opening.
     */
    onOpen?: () => void;
    /**
     * Select on search.
     */
    onSearch?: (value: string) => void;
    /**
     * Select on select return (action type, current item, event).
     */
    onSelect?: (type: SelectActionType, value: T, e: React.BaseSyntheticEvent) => void;
    onUpdateParents?: (currentList: T | undefined, parents: T[]) => void;
    /**
     * Select options.
     */
    options?: T[];
    parents?: T[];
    /**
     * Select placeholder.
     */
    placeholder?: string;
    /**
     * placement placement for popper
     */
    placement?: Placement;
    /**
     * popupOffset pupup offset
     */
    popupOffset?: Offset;
    /**
     * element to be render in
     */
    portalElement?: HTMLElement;
    /**
     * searchValue -- value used for search
     */
    searchValue?: string;
    /**
     * Whether or not to show the footer
     */
    showFooter?: boolean;
    /**
     * Whether or not to show the header
     */
    showHeader?: boolean;
    /**Sticky Item at top of list */
    stickyItem?: JSX.Element;
    /**
     * inline styles to overwrite the selectWrapperContainer.
     */
    style?: CSSProperties;
    /**
     * Select value.
     */
    value?: T | T[];
    /**
     * Select variant.
     */
    variant?: 'selectInput' | 'propertySelector' | 'colorPicker' | 'searchPropertySelector' | 'eventSelector' | 'segmentOrSignalSelector' | 'queryBuilderSelector' | 'queryBuilderSearchPropertySelector' | 'queryBuilderScoreValueSelector' | 'custom';
};
export declare const Select: React.ForwardRefExoticComponent<SelectProps<OptionsSelectItem> & React.RefAttributes<HTMLSelectElement>>;
