import { AsyncTermSearcher, Key, Keyed } from '@synnaxlabs/x';
import { ReactElement, ReactNode } from 'react';
import { Dropdown } from '../dropdown';
import { Input } from '../input';
import { List as CoreList, List } from '../list';
import { UseSelectSingleProps } from '../list/useSelect';
export interface SingleProps<K extends Key, E extends Keyed<K>> extends Omit<UseSelectSingleProps<K, E>, "data" | "allowMultiple">, Omit<Dropdown.DialogProps, "onChange" | "visible" | "children" | "variant" | "close">, Omit<CoreList.ListProps<K, E>, "children">, Pick<Input.TextProps, "variant" | "disabled">, Partial<Pick<CoreList.VirtualCoreProps<K, E>, "itemHeight">>, Pick<CoreList.SearchProps<K, E>, "filter"> {
    entryRenderKey?: keyof E | ((e: E) => string | number);
    columns?: Array<CoreList.ColumnSpec<K, E>>;
    inputProps?: Omit<Input.TextProps, "onChange">;
    searcher?: AsyncTermSearcher<string, K, E>;
    hideColumnHeader?: boolean;
    omit?: Array<K>;
    children?: List.VirtualCoreProps<K, E>["children"];
    dropdownVariant?: Dropdown.Variant;
    dropdownZIndex?: number;
    placeholder?: ReactNode;
    inputPlaceholder?: ReactNode;
    triggerTooltip?: ReactNode;
    actions?: Input.ExtensionProps["children"];
}
/**
 * Allows a user to browse, search for, and select a value from a list of options.
 * It's important to note that Select maintains no internal selection state. The caller
 * must provide the selected value via the `value` prop and handle any changes via the
 * `onChange` prop.
 *
 * @param props - The props for the component. Any additional props will be passed to the
 * underlying input element.
 * @param props.data - The data to be used to populate the select options.
 * @param props.columns - The columns to be used to render the select options in the
 * dropdown. See the {@link ListColumn} type for more details on available options.
 * @param props.entryRenderKey - The option field rendered when selected. Defaults to "key".
 * @param props.location - Whether to render the dropdown above or below the select
 * component. Defaults to "below".
 * @param props.onChange - The callback to be invoked when the selected value changes.
 * @param props.value - The currently selected value.
 */
export declare const Single: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ onChange, value, entryRenderKey, columns, data, emptyContent, inputProps, allowNone, searcher, className, variant, hideColumnHeader, disabled, omit, children, dropdownVariant, placeholder, inputPlaceholder, triggerTooltip, dropdownZIndex, filter, actions, ...props }: SingleProps<K, E>) => ReactElement;
export interface SelectInputProps<K extends Key, E extends Keyed<K>> extends Omit<Input.TextProps, "value" | "onFocus"> {
    entryRenderKey: keyof E | ((e: E) => string | number);
    selected: E | null;
    visible: boolean;
    debounceSearch?: number;
    allowNone?: boolean;
    onFocus: () => void;
    zIndex?: number;
}
export declare const DEFAULT_PLACEHOLDER = "Select";
//# sourceMappingURL=Single.d.ts.map