import { RenderProp } from '../util/renderProp';
import { UseSelectProps } from '../list/useSelect';
import { List as CoreList } from '../list';
import { Input } from '../input';
import { Dropdown } from '../dropdown';
import { Button as CoreButton } from '../button';
import { Align } from '../align';
import { Keyed, Key } from '@synnaxlabs/x';
import { ReactElement } from 'react';

export interface ButtonOptionProps<K extends Key = Key, E extends Keyed<K> = Keyed<K>> extends Pick<CoreButton.ButtonProps, "onClick"> {
    key: K;
    selected: boolean;
    entry: E;
    title: E[keyof E];
}
export type ButtonProps<K extends Key = Key, E extends Keyed<K> = Keyed<K>> = Omit<UseSelectProps<K, E>, "data"> & Omit<Align.PackProps, "children" | "onChange"> & {
    data: E[];
    children?: RenderProp<ButtonOptionProps<K, E>>;
    entryRenderKey?: keyof E;
};
export declare const Button: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ children, value, onChange, entryRenderKey, allowNone, allowMultiple, data, replaceOnSingle, ...props }: ButtonProps<K, E>) => JSX.Element;
export interface DropdownButtonButtonProps<K extends Key, E extends Keyed<K>> extends CoreButton.ButtonProps {
    selected: E | null;
    renderKey: keyof E;
    toggle: () => void;
    visible: boolean;
}
export interface DropdownButtonProps<K extends Key, E extends Keyed<K>> extends Omit<Dropdown.DialogProps, "onChange" | "visible" | "children" | "close">, Input.Control<K>, Omit<CoreList.ListProps<K, E>, "children">, Pick<CoreButton.ButtonProps, "disabled"> {
    columns?: Array<CoreList.ColumnSpec<K, E>>;
    children?: RenderProp<DropdownButtonButtonProps<K, E>>;
    entryRenderKey?: keyof E;
    allowNone?: boolean;
    hideColumnHeader?: boolean;
    disabled?: boolean;
    omit?: K[];
}
export declare const BaseButton: ({ selected, renderKey, toggle, visible, children, ...props }: DropdownButtonButtonProps<any, any>) => ReactElement;
export declare const defaultButton: RenderProp<DropdownButtonButtonProps<any, any>>;
export declare const DropdownButton: <K extends Key = Key, E extends Keyed<K> = Keyed<K>>({ data, value, columns, children, entryRenderKey, allowNone, onChange, disabled, hideColumnHeader, ...props }: DropdownButtonProps<K, E>) => ReactElement;
//# sourceMappingURL=Button.d.ts.map