import { TreeNode } from 'treemate';
import { HTMLAttributes, VNode, VNodeChild } from 'vue';
import type { MenuOption, MenuGroupOption, MenuDividerOption, MenuIgnoredOption, MenuRenderOption, MenuNodeProps } from '../../menu/src/interface';
export type Key = string | number;
export type DropdownOption = MenuOption;
export type DropdownGroupOption = MenuGroupOption;
export type DropdownDividerOption = MenuDividerOption;
export type DropdownRenderOption = MenuRenderOption;
export type DropdownMixedOption = DropdownOption | DropdownGroupOption | DropdownDividerOption | DropdownRenderOption;
export type DropdownIgnoredOption = MenuIgnoredOption;
export type DropdownIntersectionOption = DropdownOption & DropdownGroupOption;
export type TmNode = TreeNode;
export type OnUpdateValue = (value: T, option: DropdownOption) => void;
export type OnUpdateKeys = >(keys: T) => void;
export type OnUpdateValueImpl = (value: T, option: DropdownOption) => void;
export type OnUpdateKeysImpl = >(keys: T) => void;
export type RenderLabelImpl = (option: DropdownMixedOption) => VNodeChild;
export type RenderLabel = (option: DropdownIntersectionOption) => VNodeChild;
export type RenderIconImpl = (option: DropdownMixedOption) => VNodeChild;
export type RenderIcon = (option: DropdownIntersectionOption) => VNodeChild;
export type RenderOption = (info: {
node: VNode;
option: DropdownOption & DropdownGroupOption;
}) => VNodeChild;
export type RenderOptionImpl = (info: {
node: VNode;
option: DropdownOption | DropdownGroupOption;
}) => VNodeChild;
export type NodeProps = MenuNodeProps;
export type DropdownMenuProps = (option: DropdownOption | undefined, options: Array) => HTMLAttributes & Record;