'use client'; import * as Ariakit from '@ariakit/react'; import classnames from 'classnames'; import React from 'react'; export interface MdMenuItemOption { id: string; label: string; icon?: React.ReactNode; disabled?: boolean; onClick?: () => void; } export interface MdMenuGroupOption { id: string; heading?: string; items: MdMenuItemOption[]; } export interface MdMenuProps { trigger: React.ReactElement; groups: MdMenuGroupOption[]; size?: 'small' | 'default' | 'large'; showDividers?: boolean; placement?: 'top' | 'bottom' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end'; menuClassName?: string; gutter?: number; unmountOnHide?: boolean; } export const MdMenu: React.FC = ({ trigger, groups, size = 'default', showDividers = false, placement = 'bottom-start', menuClassName = '', gutter = 4, unmountOnHide, }: MdMenuProps) => { const menuClassNames = classnames( 'md-menu', { 'md-menu--small': size === 'small', 'md-menu--large': size === 'large', }, menuClassName, ); return ( {groups.map((group, groupIndex) => { return ( {showDividers && groupIndex > 0 && ( )} {group.heading && ( {group.heading} )} {group.items.map((item) => { return ( {item.icon && ( )} {item.label} ); })} ); })} ); }; export default MdMenu;