@lobehub/ui
Version:
Lobe UI is an open-source UI component library for building AIGC web apps
65 lines (64 loc) • 2.59 kB
text/typescript
import { IconProps } from "../Icon/type.mjs";
import { MenuCheckboxItemType } from "./checkboxItem.mjs";
import { MenuSwitchItemType } from "./switchItem.mjs";
import { MenuDividerType, MenuItemType, SubMenuType } from "./type.mjs";
import { ComponentPropsWithRef, Key, MouseEventHandler, ReactNode } from "react";
import { MenuSubmenuRoot } from "@base-ui/react/menu";
//#region src/Menu/baseItem.d.ts
/**
* Group type for Base UI driven menus (DropdownMenu / ContextMenu).
* Unlike MenuItemGroupType, this supports checkbox/switch items in children.
*/
interface BaseMenuItemGroupType {
children?: BaseMenuItemType[];
key?: Key;
label?: ReactNode;
type: 'group';
}
/**
* Submenu type for Base UI driven menus (DropdownMenu / ContextMenu).
* Unlike rc-menu's SubMenuType, this maps to @base-ui's Menu.SubmenuRoot + Menu.SubmenuTrigger.
*/
interface BaseSubMenuType {
children?: BaseMenuItemType[];
/** Hover-close delay in ms. Requires `openOnHover`. */
closeDelay?: number;
danger?: boolean;
/** Initial open state when uncontrolled. */
defaultOpen?: boolean;
/** Hover-open delay in ms. Requires `openOnHover`. */
delay?: number;
desc?: ReactNode;
disabled?: boolean;
/** Pinned footer slot, rendered below the scrollable submenu items with a divider border. */
footer?: ReactNode;
/** Pinned header slot, rendered above the scrollable submenu items with a divider border. */
header?: ReactNode;
icon?: IconProps['icon'];
key?: Key;
label?: ReactNode;
/** Click handler on the trigger. */
onClick?: MouseEventHandler<HTMLElement>;
/** Fired when the submenu opens or closes. */
onOpenChange?: (open: boolean, eventDetails: MenuSubmenuRoot.ChangeEventDetails) => void;
/** Controlled open state of the submenu. */
open?: boolean;
/** Open the submenu when the trigger is hovered. */
openOnHover?: boolean;
/**
* Extra DOM props spread onto the trigger element.
* Use for `ref`, `id`, `style`, `data-*`, `aria-*`, mouse/focus events, etc.
*/
triggerProps?: ComponentPropsWithRef<'div'>;
type?: 'submenu';
}
/**
* Base item union for Base UI driven menus (DropdownMenu / ContextMenu).
*
* Note: This intentionally does NOT change `GenericItemType` itself,
* because `GenericItemType` maps to rc-menu/antd Menu item types.
*/
type BaseMenuItemType = MenuItemType | BaseSubMenuType | SubMenuType | BaseMenuItemGroupType | MenuDividerType | MenuCheckboxItemType | MenuSwitchItemType | null;
//#endregion
export { BaseMenuItemGroupType, BaseMenuItemType, BaseSubMenuType };
//# sourceMappingURL=baseItem.d.mts.map