@gravity-ui/uikit
Version:
Gravity UI base styling and components
30 lines (29 loc) • 1.26 kB
TypeScript
import type { MenuItemProps } from "../Menu/index.js";
export type DropdownMenuItemAction<T> = (event: React.MouseEvent<HTMLElement, MouseEvent> | KeyboardEvent, data?: T) => void;
type DropdownMenuItemWithActionProps<T> = {
action: DropdownMenuItemAction<T>;
href?: string;
items?: DropdownMenuItemMixed<T>[];
};
type DropdownMenuItemWithLinkProps<T> = {
action?: DropdownMenuItemAction<T>;
href: string;
items?: DropdownMenuItemMixed<T>[];
};
type DropdownMenuItemWithSubmenuProps<T> = {
action?: DropdownMenuItemAction<T>;
href?: string;
items: DropdownMenuItemMixed<T>[];
};
type DropdownMenuItemRequiredProps<T> = DropdownMenuItemWithActionProps<T> | DropdownMenuItemWithLinkProps<T> | DropdownMenuItemWithSubmenuProps<T>;
export type DropdownMenuItem<T = unknown> = Omit<MenuItemProps, 'onClick' | 'children'> & DropdownMenuItemRequiredProps<T> & {
text?: React.ReactNode;
hidden?: boolean;
};
export type DropdownMenuListItem<T = unknown> = Omit<DropdownMenuItem<T>, 'items' | 'hidden'> & {
items?: DropdownMenuListItem<T>[];
path: number[];
};
export type DropdownMenuItemMixed<T> = DropdownMenuItem<T> | Array<DropdownMenuItem<T>>;
export type DropdownMenuSize = 's' | 'm' | 'l' | 'xl';
export {};