mui-nav-menu
Version:
Navigation menu component based on material ui
60 lines (59 loc) • 1.54 kB
TypeScript
import { ComponentType, HTMLAttributeAnchorTarget } from "react";
export type MenuMode = "inline" | "vertical" | "horizontal";
export type TriggerType = "hover" | "click";
type RouteLink = string;
type ExternalLink = {
url: string;
target?: HTMLAttributeAnchorTarget;
};
export type MenuLink = RouteLink | ExternalLink;
export type MenuItemContentProps = {
nodeId: string;
isSelected: boolean;
itemProps: {
textClasses: string;
label: string;
};
};
export type MenuItemType = {
type?: "item";
id: string;
label: string;
icon?: React.ReactNode;
link?: MenuLink;
linkComponent?: React.ElementType;
disabled?: boolean;
Content?: ComponentType<MenuItemContentProps>;
renderContent?: (itemData: MenuItemContentProps) => React.ReactNode;
};
export type SubMenuType = Omit<MenuItemType, "type"> & {
children?: ItemType[];
};
export interface MenuItemGroupType {
type: "group";
id?: string;
label: string;
children?: ItemType[];
}
export type MenuDividerType = {
type: "divider";
};
export type ItemType = MenuItemType | MenuItemGroupType | MenuDividerType;
export type CheckSelectedFn = (item: MenuItemType) => boolean;
export type InlineIndent = {
base: number;
step: number;
};
export type ItemViewData = {
id: string;
label: string;
parentId: string;
disabled?: boolean;
hasChildren?: boolean;
index?: number;
link?: MenuLink;
};
export type MenuViewNodeMap = {
[menuId: string]: ItemViewData;
};
export {};