import * as react_jsx_runtime from 'react/jsx-runtime';
import { ReactNode } from 'react';
import { LabelProps } from './Label.js';
import { TileProps } from '../layout-and-navigation/Tile.js';
import { MenuProps, MenuBag } from './Menu.js';
import { UseSearchProps } from '../../hooks/useSearch.js';
import '../../util/PropsWithFunctionChildren.js';
import '../../hooks/usePopoverPosition.js';

type SelectTileProps = TileProps;
declare const SelectTile: ({ className, disabledClassName, title, ...restProps }: SelectTileProps) => react_jsx_runtime.JSX.Element;
type SelectOption<T> = {
    label: ReactNode;
    value: T;
    searchTags?: string[];
    disabled?: boolean;
    className?: string;
};
type SelectBag<T> = MenuBag & {
    selected?: T;
    search: string;
};
type SelectProps<T> = Omit<MenuProps<HTMLButtonElement>, 'trigger' | 'children'> & {
    value?: T;
    label?: LabelProps;
    options: SelectOption<T>[];
    onChange: (value: T) => void;
    hintText?: string;
    selectedDisplayOverwrite?: ReactNode;
    searchOptions?: Omit<UseSearchProps<SelectOption<T>>, 'list' | 'searchMapping'>;
    additionalItems?: (bag: SelectBag<T>) => ReactNode;
    className?: string;
    triggerClassName?: string;
    hintTextClassName?: string;
};
/**
 * A Select Component for selecting form a list of options
 *
 * The State is managed by the parent
 */
declare const Select: <T>({ value, label, options, onChange, hintText, selectedDisplayOverwrite, searchOptions, additionalItems, className, triggerClassName, hintTextClassName, ...menuProps }: SelectProps<T>) => react_jsx_runtime.JSX.Element;
declare const SelectUncontrolled: <T>({ options, onChange, value, hintText, ...props }: SelectProps<T>) => react_jsx_runtime.JSX.Element;

export { Select, type SelectBag, type SelectOption, type SelectProps, SelectTile, type SelectTileProps, SelectUncontrolled };
