import { TreeNode } from 'treemate';
import { VNodeChild, HTMLAttributes } from 'vue';
import { MenuOption, MenuGroupOption } from '../../menu/src/interface';
export declare type Key = string | number;
export declare type DropdownOptionProps = HTMLAttributes;
export declare type DropdownOption = MenuOption & {
    props?: HTMLAttributes;
};
export declare type DropdownGroupOption = MenuGroupOption & {
    props?: HTMLAttributes;
};
export interface DropdownIgnoredOption {
    key?: Key;
    type: 'render' | 'divider';
    props?: HTMLAttributes;
    render?: () => VNodeChild;
    [key: string]: unknown;
}
export declare type DropdownMixedOption = DropdownOption | DropdownGroupOption | DropdownIgnoredOption;
export declare type DropdownIntersectionOption = DropdownOption & DropdownGroupOption & DropdownIgnoredOption;
export interface DropdownRenderOption {
    key?: Key;
    type: 'render';
    props?: HTMLAttributes;
    render?: () => VNodeChild;
    [key: string]: unknown;
}
export interface DropdownDividerOption {
    key?: Key;
    type: 'divider';
    [key: string]: unknown;
}
export declare type TmNode = TreeNode<DropdownOption, DropdownGroupOption, DropdownIgnoredOption>;
export declare type OnUpdateValue = <T extends string & number & (string | number)>(value: T, option: DropdownOption) => void;
export declare type OnUpdateKeys = <T extends string[] & number[] & Array<string | number>>(keys: T) => void;
export declare type OnUpdateValueImpl = <T extends string | number | (string | number)>(value: T, option: DropdownOption) => void;
export declare type OnUpdateKeysImpl = <T extends string[] | number[] | Array<string | number>>(keys: T) => void;
export declare type RenderLabelImpl = (option: DropdownMixedOption) => VNodeChild;
export declare type RenderLabel = (option: DropdownIntersectionOption) => VNodeChild;
export declare type RenderIconImpl = (option: DropdownMixedOption) => VNodeChild;
export declare type RenderIcon = (option: DropdownIntersectionOption) => VNodeChild;
