asterui 0.12.43 → 0.12.44

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","sources":["../../src/components/Dropdown.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useRef, useState, useCallback, useEffect } from 'react'\n\n// Types for data-driven items prop\nexport type DropdownTriggerType = 'click' | 'hover' | 'contextMenu'\n\nexport interface DropdownMenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n danger?: boolean\n onClick?: () => void\n children?: DropdownMenuItem[] // For submenus\n}\n\nexport interface DropdownMenuDivider {\n type: 'divider'\n key?: string\n}\n\nexport type DropdownMenuItemType = DropdownMenuItem | DropdownMenuDivider\n\ninterface DropdownContextValue {\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n menuId: string\n triggerId: string\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n registerItem: (index: number, ref: HTMLElement | null, disabled: boolean) => void\n itemCount: number\n setItemCount: (count: number) => void\n disabled: boolean\n arrow: boolean\n closeDropdown: () => void\n}\n\nconst DropdownContext = createContext<DropdownContextValue | undefined>(undefined)\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext)\n if (!context) {\n throw new Error('Dropdown compound components must be used within Dropdown')\n }\n return context\n}\n\nexport interface DropdownProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Trigger element and dropdown content (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: DropdownMenuItemType[]\n /** @deprecated Use trigger={['hover']} instead */\n hover?: boolean\n /** Trigger mode(s) for dropdown */\n trigger?: DropdownTriggerType[]\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean, info?: { source: 'trigger' | 'menu' }) => void\n /** Disable the dropdown */\n disabled?: boolean\n /** Show arrow pointing to trigger */\n arrow?: boolean | { pointAtCenter?: boolean }\n /** Delay before showing dropdown on hover (seconds) */\n mouseEnterDelay?: number\n /** Delay before hiding dropdown on mouse leave (seconds) */\n mouseLeaveDelay?: number\n /** Container for the dropdown menu */\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement\n /** Destroy dropdown when hidden */\n destroyOnHidden?: boolean\n}\n\nexport interface DropdownTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface DropdownMenuProps {\n children?: React.ReactNode\n className?: string\n}\n\nexport interface DropdownItemProps {\n children?: React.ReactNode\n /** Unique key for the item */\n itemKey?: string\n /** Icon to display before label */\n icon?: React.ReactNode\n /** Item label (alternative to children) */\n label?: React.ReactNode\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n danger?: boolean\n className?: string\n _index?: number // Internal prop passed by DropdownMenu\n}\n\nexport interface DropdownSubMenuProps {\n children: React.ReactNode\n /** Unique key for the submenu */\n itemKey?: string\n /** Submenu title/label */\n title: React.ReactNode\n /** Icon to display before title */\n icon?: React.ReactNode\n disabled?: boolean\n className?: string\n}\n\nexport interface DropdownDividerProps {\n className?: string\n}\n\nfunction DropdownRoot({\n children,\n items,\n hover = false,\n trigger = ['click'],\n position = 'bottom',\n align = 'start',\n open: controlledOpen,\n onOpenChange,\n disabled = false,\n arrow = false,\n mouseEnterDelay = 0.15,\n mouseLeaveDelay = 0.1,\n getPopupContainer,\n destroyOnHidden = false,\n className = '',\n ...rest\n}: DropdownProps) {\n const menuId = useId()\n const triggerId = useId()\n const [internalOpen, setInternalOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [itemCount, setItemCount] = useState(0)\n const [shouldRender, setShouldRender] = useState(!destroyOnHidden)\n const itemRefs = useRef<Map<number, { ref: HTMLElement | null; disabled: boolean }>>(new Map())\n const dropdownRef = useRef<HTMLDivElement>(null)\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Normalize trigger - support both hover boolean (deprecated) and trigger array\n const triggers = hover ? ['hover'] : trigger\n\n // Use controlled or uncontrolled open state\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const setIsOpen = useCallback((open: boolean, source: 'trigger' | 'menu' = 'trigger') => {\n if (disabled) return\n if (!isControlled) {\n setInternalOpen(open)\n }\n if (open) {\n setShouldRender(true)\n }\n onOpenChange?.(open, { source })\n }, [disabled, isControlled, onOpenChange])\n\n const closeDropdown = useCallback(() => {\n setIsOpen(false, 'menu')\n setFocusedIndex(-1)\n document.getElementById(triggerId)?.focus()\n }, [setIsOpen, triggerId])\n\n const registerItem = useCallback((index: number, ref: HTMLElement | null, itemDisabled: boolean) => {\n if (ref) {\n itemRefs.current.set(index, { ref, disabled: itemDisabled })\n } else {\n itemRefs.current.delete(index)\n }\n }, [])\n\n // Handle destroyOnHidden\n useEffect(() => {\n if (destroyOnHidden && !isOpen) {\n const timeout = setTimeout(() => setShouldRender(false), 300)\n return () => clearTimeout(timeout)\n }\n }, [isOpen, destroyOnHidden])\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false, 'trigger')\n setFocusedIndex(-1)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setIsOpen])\n\n // Hover handlers with delay\n const handleMouseEnter = useCallback(() => {\n if (!triggers.includes('hover')) return\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n hoverTimeoutRef.current = setTimeout(() => {\n setIsOpen(true, 'trigger')\n }, mouseEnterDelay * 1000)\n }, [triggers, mouseEnterDelay, setIsOpen])\n\n const handleMouseLeave = useCallback(() => {\n if (!triggers.includes('hover')) return\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n hoverTimeoutRef.current = setTimeout(() => {\n setIsOpen(false, 'trigger')\n setFocusedIndex(-1)\n }, mouseLeaveDelay * 1000)\n }, [triggers, mouseLeaveDelay, setIsOpen])\n\n // Context menu handler\n const handleContextMenu = useCallback((event: React.MouseEvent) => {\n if (!triggers.includes('contextMenu')) return\n event.preventDefault()\n setIsOpen(true, 'trigger')\n }, [triggers, setIsOpen])\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n }\n }, [])\n\n const positionClasses: Record<string, string> = {\n top: 'dropdown-top',\n bottom: 'dropdown-bottom',\n left: 'dropdown-left',\n right: 'dropdown-right',\n }\n\n const alignClasses: Record<string, string> = {\n start: '',\n center: 'dropdown-center',\n end: 'dropdown-end',\n }\n\n const showArrow = typeof arrow === 'boolean' ? arrow : !!arrow\n\n const dropdownClasses = [\n 'dropdown',\n positionClasses[position],\n alignClasses[align],\n triggers.includes('hover') && 'dropdown-hover',\n isOpen && 'dropdown-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Render items from data-driven prop\n const renderItems = () => {\n if (!items) return null\n return items.map((item, index) => {\n if ('type' in item && item.type === 'divider') {\n return <DropdownDivider key={item.key || `divider-${index}`} />\n }\n const menuItem = item as DropdownMenuItem\n if (menuItem.children && menuItem.children.length > 0) {\n return (\n <DropdownSubMenu\n key={menuItem.key}\n itemKey={menuItem.key}\n title={menuItem.label}\n icon={menuItem.icon}\n disabled={menuItem.disabled}\n >\n {menuItem.children.map((child) => (\n <DropdownItem\n key={child.key}\n itemKey={child.key}\n icon={child.icon}\n disabled={child.disabled}\n danger={child.danger}\n onClick={child.onClick}\n >\n {child.label}\n </DropdownItem>\n ))}\n </DropdownSubMenu>\n )\n }\n return (\n <DropdownItem\n key={menuItem.key}\n itemKey={menuItem.key}\n icon={menuItem.icon}\n disabled={menuItem.disabled}\n danger={menuItem.danger}\n onClick={menuItem.onClick}\n >\n {menuItem.label}\n </DropdownItem>\n )\n })\n }\n\n // Determine content - either compound children or items-generated menu\n const content = items ? (\n <>\n {React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === DropdownTrigger\n )}\n {(shouldRender || !destroyOnHidden) && (\n <DropdownMenu>{renderItems()}</DropdownMenu>\n )}\n </>\n ) : (\n children\n )\n\n return (\n <DropdownContext.Provider\n value={{\n position,\n align,\n menuId,\n triggerId,\n isOpen,\n setIsOpen,\n focusedIndex,\n setFocusedIndex,\n registerItem,\n itemCount,\n setItemCount,\n disabled,\n arrow: showArrow,\n closeDropdown,\n }}\n >\n <div\n ref={dropdownRef}\n className={dropdownClasses}\n data-state={isOpen ? 'open' : 'closed'}\n aria-disabled={disabled || undefined}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onContextMenu={handleContextMenu}\n {...rest}\n >\n {content}\n </div>\n </DropdownContext.Provider>\n )\n}\n\nfunction DropdownTrigger({ children, className = '' }: DropdownTriggerProps) {\n const { menuId, triggerId, isOpen, setIsOpen, setFocusedIndex, itemCount, disabled } = useDropdownContext()\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(0)\n break\n case 'ArrowUp':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(itemCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const handleClick = () => {\n setIsOpen(!isOpen)\n if (!isOpen) {\n setFocusedIndex(0)\n }\n }\n\n // Clone the child element to add event handlers and ARIA attributes\n const child = React.Children.only(children) as React.ReactElement<\n React.HTMLAttributes<HTMLElement> & {\n onClick?: (e: React.MouseEvent) => void\n onKeyDown?: (e: React.KeyboardEvent) => void\n className?: string\n }\n >\n\n const childProps = child.props\n\n return React.cloneElement(child, {\n id: triggerId,\n tabIndex: disabled ? -1 : 0,\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': isOpen,\n 'aria-controls': menuId,\n onClick: (e: React.MouseEvent) => {\n handleClick()\n childProps.onClick?.(e)\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n handleKeyDown(e)\n childProps.onKeyDown?.(e)\n },\n className: `${childProps.className || ''} ${className}`.trim(),\n })\n}\n\nfunction DropdownMenu({ children, className = '' }: DropdownMenuProps) {\n const { menuId, triggerId, isOpen, setIsOpen, focusedIndex, setFocusedIndex, setItemCount, arrow, position } = useDropdownContext()\n const menuRef = useRef<HTMLUListElement>(null)\n\n // Count children and set item count\n const childArray = React.Children.toArray(children).filter(\n (child) => React.isValidElement(child) && (child.type === DropdownItem)\n )\n\n useEffect(() => {\n setItemCount(childArray.length)\n }, [childArray.length, setItemCount])\n\n // Focus management\n useEffect(() => {\n if (isOpen && focusedIndex >= 0 && menuRef.current) {\n const items = menuRef.current.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n const item = items[focusedIndex] as HTMLElement\n item?.focus()\n }\n }, [isOpen, focusedIndex])\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const enabledItems = childArray.filter(\n (child) => React.isValidElement(child) && !(child.props as DropdownItemProps).disabled\n )\n const enabledCount = enabledItems.length\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setFocusedIndex((focusedIndex + 1) % enabledCount)\n break\n case 'ArrowUp':\n event.preventDefault()\n setFocusedIndex((focusedIndex - 1 + enabledCount) % enabledCount)\n break\n case 'Home':\n event.preventDefault()\n setFocusedIndex(0)\n break\n case 'End':\n event.preventDefault()\n setFocusedIndex(enabledCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n // Return focus to trigger\n document.getElementById(triggerId)?.focus()\n break\n case 'Tab':\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const menuClasses = [\n 'dropdown-content',\n 'menu',\n 'bg-base-100',\n 'rounded-box',\n 'z-50',\n 'shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Clone children to pass index\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child) && child.type === DropdownItem) {\n return React.cloneElement(child as React.ReactElement<any>, { _index: index })\n }\n return child\n })\n\n // Arrow position classes based on menu position\n const arrowPositionClasses: Record<string, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-t-base-100 border-l-transparent border-r-transparent border-b-transparent',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-b-base-100 border-l-transparent border-r-transparent border-t-transparent',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-full border-l-base-100 border-t-transparent border-b-transparent border-r-transparent',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-full border-r-base-100 border-t-transparent border-b-transparent border-l-transparent',\n }\n\n const arrowElement = arrow ? (\n <span\n className={`absolute w-0 h-0 border-8 border-solid ${arrowPositionClasses[position || 'bottom']}`}\n aria-hidden=\"true\"\n />\n ) : null\n\n return (\n <ul\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={`${menuClasses} ${arrow ? 'relative' : ''}`}\n onKeyDown={handleKeyDown}\n >\n {arrowElement}\n {childrenWithIndex}\n </ul>\n )\n}\n\nfunction DropdownItem({\n children,\n itemKey,\n icon,\n label,\n onClick,\n active = false,\n disabled = false,\n danger = false,\n className = '',\n}: DropdownItemProps) {\n const { closeDropdown } = useDropdownContext()\n const itemClasses = [active && 'active', disabled && 'disabled', className].filter(Boolean).join(' ')\n\n const handleClick = () => {\n if (!disabled) {\n onClick?.()\n closeDropdown()\n }\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault()\n handleClick()\n }\n }\n\n const content = label || children\n\n return (\n <li className={itemClasses} role=\"none\" data-key={itemKey}>\n <a\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={danger ? 'text-error' : ''}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {icon && <span className=\"mr-2 inline-flex items-center\">{icon}</span>}\n {content}\n </a>\n </li>\n )\n}\n\nfunction DropdownSubMenu({\n children,\n itemKey,\n title,\n icon,\n disabled = false,\n className = '',\n}: DropdownSubMenuProps) {\n const [isSubOpen, setIsSubOpen] = useState(false)\n const subMenuRef = useRef<HTMLLIElement>(null)\n const summaryRef = useRef<HTMLElement>(null)\n const subMenuListRef = useRef<HTMLUListElement>(null)\n const subMenuId = useId()\n\n const handleMouseEnter = () => {\n if (!disabled) setIsSubOpen(true)\n }\n\n const handleMouseLeave = () => {\n setIsSubOpen(false)\n }\n\n // Focus first item in submenu\n const focusFirstItem = () => {\n setTimeout(() => {\n const firstItem = subMenuListRef.current?.querySelector('[role=\"menuitem\"]:not([aria-disabled=\"true\"])') as HTMLElement\n firstItem?.focus()\n }, 0)\n }\n\n // Keyboard handler for summary (submenu trigger)\n const handleSummaryKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (event.key) {\n case 'ArrowRight':\n case 'Enter':\n case ' ':\n event.preventDefault()\n event.stopPropagation()\n setIsSubOpen(true)\n focusFirstItem()\n break\n case 'ArrowLeft':\n case 'Escape':\n event.preventDefault()\n event.stopPropagation()\n setIsSubOpen(false)\n break\n }\n }\n\n // Keyboard handler for submenu items\n const handleSubMenuKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowLeft':\n case 'Escape':\n event.preventDefault()\n event.stopPropagation()\n setIsSubOpen(false)\n summaryRef.current?.focus()\n break\n case 'ArrowDown':\n event.preventDefault()\n event.stopPropagation()\n const items = subMenuListRef.current?.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n if (items) {\n const currentIndex = Array.from(items).findIndex(item => item === document.activeElement)\n const nextIndex = (currentIndex + 1) % items.length\n ;(items[nextIndex] as HTMLElement)?.focus()\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n event.stopPropagation()\n const itemsUp = subMenuListRef.current?.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n if (itemsUp) {\n const currentIndexUp = Array.from(itemsUp).findIndex(item => item === document.activeElement)\n const prevIndex = (currentIndexUp - 1 + itemsUp.length) % itemsUp.length\n ;(itemsUp[prevIndex] as HTMLElement)?.focus()\n }\n break\n }\n }\n\n const itemClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n return (\n <li\n ref={subMenuRef}\n className={itemClasses}\n role=\"none\"\n data-key={itemKey}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <details open={isSubOpen}>\n <summary\n ref={summaryRef}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-haspopup=\"menu\"\n aria-expanded={isSubOpen}\n aria-controls={subMenuId}\n onKeyDown={handleSummaryKeyDown}\n >\n {icon && <span className=\"mr-2 inline-flex items-center\">{icon}</span>}\n {title}\n </summary>\n <ul\n ref={subMenuListRef}\n id={subMenuId}\n className=\"menu bg-base-100 rounded-box z-50 shadow\"\n role=\"menu\"\n aria-label={typeof title === 'string' ? title : undefined}\n onKeyDown={handleSubMenuKeyDown}\n >\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction DropdownDivider({ className = '' }: DropdownDividerProps) {\n const classes = ['border-base-content/10', className].filter(Boolean).join(' ')\n return (\n <li role=\"separator\" className=\"my-1\">\n <hr className={classes} />\n </li>\n )\n}\n\nexport const Dropdown = Object.assign(DropdownRoot, {\n Trigger: DropdownTrigger,\n Menu: DropdownMenu,\n Item: DropdownItem,\n SubMenu: DropdownSubMenu,\n Divider: DropdownDivider,\n})\n"],"names":["DropdownContext","createContext","useDropdownContext","context","useContext","DropdownRoot","children","items","hover","trigger","position","align","controlledOpen","onOpenChange","disabled","arrow","mouseEnterDelay","mouseLeaveDelay","getPopupContainer","destroyOnHidden","className","rest","menuId","useId","triggerId","internalOpen","setInternalOpen","useState","focusedIndex","setFocusedIndex","itemCount","setItemCount","shouldRender","setShouldRender","itemRefs","useRef","dropdownRef","hoverTimeoutRef","triggers","isControlled","isOpen","setIsOpen","useCallback","open","source","closeDropdown","registerItem","index","ref","itemDisabled","useEffect","timeout","handleClickOutside","event","handleMouseEnter","handleMouseLeave","handleContextMenu","positionClasses","alignClasses","showArrow","dropdownClasses","renderItems","item","DropdownDivider","menuItem","jsx","DropdownSubMenu","child","DropdownItem","content","jsxs","Fragment","React","DropdownTrigger","DropdownMenu","handleKeyDown","handleClick","childProps","e","menuRef","childArray","enabledCount","menuClasses","childrenWithIndex","arrowElement","itemKey","icon","label","onClick","active","danger","itemClasses","title","isSubOpen","setIsSubOpen","subMenuRef","summaryRef","subMenuListRef","subMenuId","focusFirstItem","handleSummaryKeyDown","handleSubMenuKeyDown","nextIndex","itemsUp","prevIndex","classes","Dropdown"],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.js","sources":["../../src/components/Dropdown.tsx"],"sourcesContent":["import React, { createContext, useContext, useId, useRef, useState, useCallback, useEffect } from 'react'\n\n// Types for data-driven items prop\nexport type DropdownTriggerType = 'click' | 'hover' | 'contextMenu'\n\nexport interface DropdownMenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n danger?: boolean\n onClick?: () => void\n children?: DropdownMenuItem[] // For submenus\n}\n\nexport interface DropdownMenuDivider {\n type: 'divider'\n key?: string\n}\n\nexport type DropdownMenuItemType = DropdownMenuItem | DropdownMenuDivider\n\ninterface DropdownContextValue {\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n menuId: string\n triggerId: string\n isOpen: boolean\n setIsOpen: (open: boolean) => void\n focusedIndex: number\n setFocusedIndex: (index: number) => void\n registerItem: (index: number, ref: HTMLElement | null, disabled: boolean) => void\n itemCount: number\n setItemCount: (count: number) => void\n disabled: boolean\n arrow: boolean\n closeDropdown: () => void\n}\n\nconst DropdownContext = createContext<DropdownContextValue | undefined>(undefined)\n\nfunction useDropdownContext() {\n const context = useContext(DropdownContext)\n if (!context) {\n throw new Error('Dropdown compound components must be used within Dropdown')\n }\n return context\n}\n\nexport interface DropdownProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Trigger element and dropdown content (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: DropdownMenuItemType[]\n /** @deprecated Use trigger={['hover']} instead */\n hover?: boolean\n /** Trigger mode(s) for dropdown */\n trigger?: DropdownTriggerType[]\n position?: 'top' | 'bottom' | 'left' | 'right'\n align?: 'start' | 'center' | 'end'\n /** Controlled open state */\n open?: boolean\n /** Callback when open state changes */\n onOpenChange?: (open: boolean, info?: { source: 'trigger' | 'menu' }) => void\n /** Disable the dropdown */\n disabled?: boolean\n /** Show arrow pointing to trigger */\n arrow?: boolean | { pointAtCenter?: boolean }\n /** Delay before showing dropdown on hover (seconds) */\n mouseEnterDelay?: number\n /** Delay before hiding dropdown on mouse leave (seconds) */\n mouseLeaveDelay?: number\n /** Container for the dropdown menu */\n getPopupContainer?: (triggerNode: HTMLElement) => HTMLElement\n /** Destroy dropdown when hidden */\n destroyOnHidden?: boolean\n}\n\nexport interface DropdownTriggerProps {\n children: React.ReactNode\n className?: string\n}\n\nexport interface DropdownMenuProps {\n children?: React.ReactNode\n className?: string\n}\n\nexport interface DropdownItemProps {\n children?: React.ReactNode\n /** Icon to display before label */\n icon?: React.ReactNode\n /** Item label (alternative to children) */\n label?: React.ReactNode\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n danger?: boolean\n className?: string\n /** @internal */\n _index?: number\n /** @internal */\n _key?: string\n}\n\nexport interface DropdownSubMenuProps {\n children: React.ReactNode\n /** Submenu title/label */\n title: React.ReactNode\n /** Icon to display before title */\n icon?: React.ReactNode\n disabled?: boolean\n className?: string\n /** @internal */\n _key?: string\n}\n\nexport interface DropdownDividerProps {\n className?: string\n}\n\nfunction DropdownRoot({\n children,\n items,\n hover = false,\n trigger = ['click'],\n position = 'bottom',\n align = 'start',\n open: controlledOpen,\n onOpenChange,\n disabled = false,\n arrow = false,\n mouseEnterDelay = 0.15,\n mouseLeaveDelay = 0.1,\n getPopupContainer,\n destroyOnHidden = false,\n className = '',\n ...rest\n}: DropdownProps) {\n const menuId = useId()\n const triggerId = useId()\n const [internalOpen, setInternalOpen] = useState(false)\n const [focusedIndex, setFocusedIndex] = useState(-1)\n const [itemCount, setItemCount] = useState(0)\n const [shouldRender, setShouldRender] = useState(!destroyOnHidden)\n const itemRefs = useRef<Map<number, { ref: HTMLElement | null; disabled: boolean }>>(new Map())\n const dropdownRef = useRef<HTMLDivElement>(null)\n const hoverTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Normalize trigger - support both hover boolean (deprecated) and trigger array\n const triggers = hover ? ['hover'] : trigger\n\n // Use controlled or uncontrolled open state\n const isControlled = controlledOpen !== undefined\n const isOpen = isControlled ? controlledOpen : internalOpen\n\n const setIsOpen = useCallback((open: boolean, source: 'trigger' | 'menu' = 'trigger') => {\n if (disabled) return\n if (!isControlled) {\n setInternalOpen(open)\n }\n if (open) {\n setShouldRender(true)\n }\n onOpenChange?.(open, { source })\n }, [disabled, isControlled, onOpenChange])\n\n const closeDropdown = useCallback(() => {\n setIsOpen(false, 'menu')\n setFocusedIndex(-1)\n document.getElementById(triggerId)?.focus()\n }, [setIsOpen, triggerId])\n\n const registerItem = useCallback((index: number, ref: HTMLElement | null, itemDisabled: boolean) => {\n if (ref) {\n itemRefs.current.set(index, { ref, disabled: itemDisabled })\n } else {\n itemRefs.current.delete(index)\n }\n }, [])\n\n // Handle destroyOnHidden\n useEffect(() => {\n if (destroyOnHidden && !isOpen) {\n const timeout = setTimeout(() => setShouldRender(false), 300)\n return () => clearTimeout(timeout)\n }\n }, [isOpen, destroyOnHidden])\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false, 'trigger')\n setFocusedIndex(-1)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen, setIsOpen])\n\n // Hover handlers with delay\n const handleMouseEnter = useCallback(() => {\n if (!triggers.includes('hover')) return\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n hoverTimeoutRef.current = setTimeout(() => {\n setIsOpen(true, 'trigger')\n }, mouseEnterDelay * 1000)\n }, [triggers, mouseEnterDelay, setIsOpen])\n\n const handleMouseLeave = useCallback(() => {\n if (!triggers.includes('hover')) return\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n hoverTimeoutRef.current = setTimeout(() => {\n setIsOpen(false, 'trigger')\n setFocusedIndex(-1)\n }, mouseLeaveDelay * 1000)\n }, [triggers, mouseLeaveDelay, setIsOpen])\n\n // Context menu handler\n const handleContextMenu = useCallback((event: React.MouseEvent) => {\n if (!triggers.includes('contextMenu')) return\n event.preventDefault()\n setIsOpen(true, 'trigger')\n }, [triggers, setIsOpen])\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (hoverTimeoutRef.current) {\n clearTimeout(hoverTimeoutRef.current)\n }\n }\n }, [])\n\n const positionClasses: Record<string, string> = {\n top: 'dropdown-top',\n bottom: 'dropdown-bottom',\n left: 'dropdown-left',\n right: 'dropdown-right',\n }\n\n const alignClasses: Record<string, string> = {\n start: '',\n center: 'dropdown-center',\n end: 'dropdown-end',\n }\n\n const showArrow = typeof arrow === 'boolean' ? arrow : !!arrow\n\n const dropdownClasses = [\n 'dropdown',\n positionClasses[position],\n alignClasses[align],\n triggers.includes('hover') && 'dropdown-hover',\n isOpen && 'dropdown-open',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Render items from data-driven prop\n const renderItems = () => {\n if (!items) return null\n return items.map((item, index) => {\n if ('type' in item && item.type === 'divider') {\n return <DropdownDivider key={item.key || `divider-${index}`} />\n }\n const menuItem = item as DropdownMenuItem\n if (menuItem.children && menuItem.children.length > 0) {\n return (\n <DropdownSubMenu\n key={menuItem.key}\n title={menuItem.label}\n icon={menuItem.icon}\n disabled={menuItem.disabled}\n >\n {menuItem.children.map((child) => (\n <DropdownItem\n key={child.key}\n icon={child.icon}\n disabled={child.disabled}\n danger={child.danger}\n onClick={child.onClick}\n >\n {child.label}\n </DropdownItem>\n ))}\n </DropdownSubMenu>\n )\n }\n return (\n <DropdownItem\n key={menuItem.key}\n icon={menuItem.icon}\n disabled={menuItem.disabled}\n danger={menuItem.danger}\n onClick={menuItem.onClick}\n >\n {menuItem.label}\n </DropdownItem>\n )\n })\n }\n\n // Determine content - either compound children or items-generated menu\n const content = items ? (\n <>\n {React.Children.toArray(children).find(\n (child) => React.isValidElement(child) && child.type === DropdownTrigger\n )}\n {(shouldRender || !destroyOnHidden) && (\n <DropdownMenu>{renderItems()}</DropdownMenu>\n )}\n </>\n ) : (\n children\n )\n\n return (\n <DropdownContext.Provider\n value={{\n position,\n align,\n menuId,\n triggerId,\n isOpen,\n setIsOpen,\n focusedIndex,\n setFocusedIndex,\n registerItem,\n itemCount,\n setItemCount,\n disabled,\n arrow: showArrow,\n closeDropdown,\n }}\n >\n <div\n ref={dropdownRef}\n className={dropdownClasses}\n data-state={isOpen ? 'open' : 'closed'}\n aria-disabled={disabled || undefined}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n onContextMenu={handleContextMenu}\n {...rest}\n >\n {content}\n </div>\n </DropdownContext.Provider>\n )\n}\n\nfunction DropdownTrigger({ children, className = '' }: DropdownTriggerProps) {\n const { menuId, triggerId, isOpen, setIsOpen, setFocusedIndex, itemCount, disabled } = useDropdownContext()\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'Enter':\n case ' ':\n case 'ArrowDown':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(0)\n break\n case 'ArrowUp':\n event.preventDefault()\n setIsOpen(true)\n setFocusedIndex(itemCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const handleClick = () => {\n setIsOpen(!isOpen)\n if (!isOpen) {\n setFocusedIndex(0)\n }\n }\n\n // Clone the child element to add event handlers and ARIA attributes\n const child = React.Children.only(children) as React.ReactElement<\n React.HTMLAttributes<HTMLElement> & {\n onClick?: (e: React.MouseEvent) => void\n onKeyDown?: (e: React.KeyboardEvent) => void\n className?: string\n }\n >\n\n const childProps = child.props\n\n return React.cloneElement(child, {\n id: triggerId,\n tabIndex: disabled ? -1 : 0,\n 'aria-haspopup': 'menu' as const,\n 'aria-expanded': isOpen,\n 'aria-controls': menuId,\n onClick: (e: React.MouseEvent) => {\n handleClick()\n childProps.onClick?.(e)\n },\n onKeyDown: (e: React.KeyboardEvent) => {\n handleKeyDown(e)\n childProps.onKeyDown?.(e)\n },\n className: `${childProps.className || ''} ${className}`.trim(),\n })\n}\n\nfunction DropdownMenu({ children, className = '' }: DropdownMenuProps) {\n const { menuId, triggerId, isOpen, setIsOpen, focusedIndex, setFocusedIndex, setItemCount, arrow, position } = useDropdownContext()\n const menuRef = useRef<HTMLUListElement>(null)\n\n // Count children and set item count\n const childArray = React.Children.toArray(children).filter(\n (child) => React.isValidElement(child) && (child.type === DropdownItem)\n )\n\n useEffect(() => {\n setItemCount(childArray.length)\n }, [childArray.length, setItemCount])\n\n // Focus management\n useEffect(() => {\n if (isOpen && focusedIndex >= 0 && menuRef.current) {\n const items = menuRef.current.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n const item = items[focusedIndex] as HTMLElement\n item?.focus()\n }\n }, [isOpen, focusedIndex])\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n const enabledItems = childArray.filter(\n (child) => React.isValidElement(child) && !(child.props as DropdownItemProps).disabled\n )\n const enabledCount = enabledItems.length\n\n switch (event.key) {\n case 'ArrowDown':\n event.preventDefault()\n setFocusedIndex((focusedIndex + 1) % enabledCount)\n break\n case 'ArrowUp':\n event.preventDefault()\n setFocusedIndex((focusedIndex - 1 + enabledCount) % enabledCount)\n break\n case 'Home':\n event.preventDefault()\n setFocusedIndex(0)\n break\n case 'End':\n event.preventDefault()\n setFocusedIndex(enabledCount - 1)\n break\n case 'Escape':\n event.preventDefault()\n setIsOpen(false)\n setFocusedIndex(-1)\n // Return focus to trigger\n document.getElementById(triggerId)?.focus()\n break\n case 'Tab':\n setIsOpen(false)\n setFocusedIndex(-1)\n break\n }\n }\n\n const menuClasses = [\n 'dropdown-content',\n 'menu',\n 'bg-base-100',\n 'rounded-box',\n 'z-50',\n 'shadow',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Clone children to pass index and extract key\n const childrenWithIndex = React.Children.map(children, (child, index) => {\n if (React.isValidElement(child)) {\n const childKey = child.key != null ? String(child.key) : undefined\n if (child.type === DropdownItem) {\n return React.cloneElement(child as React.ReactElement<any>, { _index: index, _key: childKey })\n }\n if (child.type === DropdownSubMenu) {\n return React.cloneElement(child as React.ReactElement<any>, { _key: childKey })\n }\n }\n return child\n })\n\n // Arrow position classes based on menu position\n const arrowPositionClasses: Record<string, string> = {\n top: 'bottom-0 left-1/2 -translate-x-1/2 translate-y-full border-t-base-100 border-l-transparent border-r-transparent border-b-transparent',\n bottom: 'top-0 left-1/2 -translate-x-1/2 -translate-y-full border-b-base-100 border-l-transparent border-r-transparent border-t-transparent',\n left: 'right-0 top-1/2 -translate-y-1/2 translate-x-full border-l-base-100 border-t-transparent border-b-transparent border-r-transparent',\n right: 'left-0 top-1/2 -translate-y-1/2 -translate-x-full border-r-base-100 border-t-transparent border-b-transparent border-l-transparent',\n }\n\n const arrowElement = arrow ? (\n <span\n className={`absolute w-0 h-0 border-8 border-solid ${arrowPositionClasses[position || 'bottom']}`}\n aria-hidden=\"true\"\n />\n ) : null\n\n return (\n <ul\n ref={menuRef}\n id={menuId}\n role=\"menu\"\n aria-labelledby={triggerId}\n tabIndex={-1}\n className={`${menuClasses} ${arrow ? 'relative' : ''}`}\n onKeyDown={handleKeyDown}\n >\n {arrowElement}\n {childrenWithIndex}\n </ul>\n )\n}\n\nfunction DropdownItem({\n children,\n icon,\n label,\n onClick,\n active = false,\n disabled = false,\n danger = false,\n className = '',\n _key,\n}: DropdownItemProps) {\n const { closeDropdown } = useDropdownContext()\n const itemClasses = [active && 'active', disabled && 'disabled', className].filter(Boolean).join(' ')\n\n const handleClick = () => {\n if (!disabled) {\n onClick?.()\n closeDropdown()\n }\n }\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if ((event.key === 'Enter' || event.key === ' ') && !disabled) {\n event.preventDefault()\n handleClick()\n }\n }\n\n const content = label || children\n\n return (\n <li className={itemClasses} role=\"none\" data-key={_key}>\n <a\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n className={danger ? 'text-error' : ''}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n >\n {icon && <span className=\"mr-2 inline-flex items-center\">{icon}</span>}\n {content}\n </a>\n </li>\n )\n}\n\nfunction DropdownSubMenu({\n children,\n title,\n icon,\n disabled = false,\n className = '',\n _key,\n}: DropdownSubMenuProps) {\n const [isSubOpen, setIsSubOpen] = useState(false)\n const subMenuRef = useRef<HTMLLIElement>(null)\n const summaryRef = useRef<HTMLElement>(null)\n const subMenuListRef = useRef<HTMLUListElement>(null)\n const subMenuId = useId()\n\n const handleMouseEnter = () => {\n if (!disabled) setIsSubOpen(true)\n }\n\n const handleMouseLeave = () => {\n setIsSubOpen(false)\n }\n\n // Focus first item in submenu\n const focusFirstItem = () => {\n setTimeout(() => {\n const firstItem = subMenuListRef.current?.querySelector('[role=\"menuitem\"]:not([aria-disabled=\"true\"])') as HTMLElement\n firstItem?.focus()\n }, 0)\n }\n\n // Keyboard handler for summary (submenu trigger)\n const handleSummaryKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return\n\n switch (event.key) {\n case 'ArrowRight':\n case 'Enter':\n case ' ':\n event.preventDefault()\n event.stopPropagation()\n setIsSubOpen(true)\n focusFirstItem()\n break\n case 'ArrowLeft':\n case 'Escape':\n event.preventDefault()\n event.stopPropagation()\n setIsSubOpen(false)\n break\n }\n }\n\n // Keyboard handler for submenu items\n const handleSubMenuKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowLeft':\n case 'Escape':\n event.preventDefault()\n event.stopPropagation()\n setIsSubOpen(false)\n summaryRef.current?.focus()\n break\n case 'ArrowDown':\n event.preventDefault()\n event.stopPropagation()\n const items = subMenuListRef.current?.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n if (items) {\n const currentIndex = Array.from(items).findIndex(item => item === document.activeElement)\n const nextIndex = (currentIndex + 1) % items.length\n ;(items[nextIndex] as HTMLElement)?.focus()\n }\n break\n case 'ArrowUp':\n event.preventDefault()\n event.stopPropagation()\n const itemsUp = subMenuListRef.current?.querySelectorAll('[role=\"menuitem\"]:not([aria-disabled=\"true\"])')\n if (itemsUp) {\n const currentIndexUp = Array.from(itemsUp).findIndex(item => item === document.activeElement)\n const prevIndex = (currentIndexUp - 1 + itemsUp.length) % itemsUp.length\n ;(itemsUp[prevIndex] as HTMLElement)?.focus()\n }\n break\n }\n }\n\n const itemClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n return (\n <li\n ref={subMenuRef}\n className={itemClasses}\n role=\"none\"\n data-key={_key}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <details open={isSubOpen}>\n <summary\n ref={summaryRef}\n role=\"menuitem\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-haspopup=\"menu\"\n aria-expanded={isSubOpen}\n aria-controls={subMenuId}\n onKeyDown={handleSummaryKeyDown}\n >\n {icon && <span className=\"mr-2 inline-flex items-center\">{icon}</span>}\n {title}\n </summary>\n <ul\n ref={subMenuListRef}\n id={subMenuId}\n className=\"menu bg-base-100 rounded-box z-50 shadow\"\n role=\"menu\"\n aria-label={typeof title === 'string' ? title : undefined}\n onKeyDown={handleSubMenuKeyDown}\n >\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction DropdownDivider({ className = '' }: DropdownDividerProps) {\n const classes = ['border-base-content/10', className].filter(Boolean).join(' ')\n return (\n <li role=\"separator\" className=\"my-1\">\n <hr className={classes} />\n </li>\n )\n}\n\nexport const Dropdown = Object.assign(DropdownRoot, {\n Trigger: DropdownTrigger,\n Menu: DropdownMenu,\n Item: DropdownItem,\n SubMenu: DropdownSubMenu,\n Divider: DropdownDivider,\n})\n"],"names":["DropdownContext","createContext","useDropdownContext","context","useContext","DropdownRoot","children","items","hover","trigger","position","align","controlledOpen","onOpenChange","disabled","arrow","mouseEnterDelay","mouseLeaveDelay","getPopupContainer","destroyOnHidden","className","rest","menuId","useId","triggerId","internalOpen","setInternalOpen","useState","focusedIndex","setFocusedIndex","itemCount","setItemCount","shouldRender","setShouldRender","itemRefs","useRef","dropdownRef","hoverTimeoutRef","triggers","isControlled","isOpen","setIsOpen","useCallback","open","source","closeDropdown","registerItem","index","ref","itemDisabled","useEffect","timeout","handleClickOutside","event","handleMouseEnter","handleMouseLeave","handleContextMenu","positionClasses","alignClasses","showArrow","dropdownClasses","renderItems","item","DropdownDivider","menuItem","jsx","DropdownSubMenu","child","DropdownItem","content","jsxs","Fragment","React","DropdownTrigger","DropdownMenu","handleKeyDown","handleClick","childProps","e","menuRef","childArray","enabledCount","menuClasses","childrenWithIndex","childKey","arrowElement","icon","label","onClick","active","danger","_key","itemClasses","title","isSubOpen","setIsSubOpen","subMenuRef","summaryRef","subMenuListRef","subMenuId","focusFirstItem","handleSummaryKeyDown","handleSubMenuKeyDown","nextIndex","itemsUp","prevIndex","classes","Dropdown"],"mappings":";;AAuCA,MAAMA,IAAkBC,GAAgD,MAAS;AAEjF,SAASC,IAAqB;AAC5B,QAAMC,IAAUC,GAAWJ,CAAe;AAC1C,MAAI,CAACG;AACH,UAAM,IAAI,MAAM,2DAA2D;AAE7E,SAAOA;AACT;AA0EA,SAASE,GAAa;AAAA,EACpB,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,SAAAC,IAAU,CAAC,OAAO;AAAA,EAClB,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,MAAMC;AAAA,EACN,cAAAC;AAAA,EACA,UAAAC,IAAW;AAAA,EACX,OAAAC,IAAQ;AAAA,EACR,iBAAAC,IAAkB;AAAA,EAClB,iBAAAC,IAAkB;AAAA,EAClB,mBAAAC;AAAA,EACA,iBAAAC,IAAkB;AAAA,EAClB,WAAAC,IAAY;AAAA,EACZ,GAAGC;AACL,GAAkB;AAChB,QAAMC,IAASC,EAAA,GACTC,IAAYD,EAAA,GACZ,CAACE,GAAcC,CAAe,IAAIC,EAAS,EAAK,GAChD,CAACC,GAAcC,CAAe,IAAIF,EAAS,EAAE,GAC7C,CAACG,GAAWC,CAAY,IAAIJ,EAAS,CAAC,GACtC,CAACK,GAAcC,CAAe,IAAIN,EAAS,CAACR,CAAe,GAC3De,IAAWC,EAAoE,oBAAI,KAAK,GACxFC,IAAcD,EAAuB,IAAI,GACzCE,IAAkBF,EAA6C,IAAI,GAGnEG,IAAW9B,IAAQ,CAAC,OAAO,IAAIC,GAG/B8B,IAAe3B,MAAmB,QAClC4B,IAASD,IAAe3B,IAAiBa,GAEzCgB,IAAYC,EAAY,CAACC,GAAeC,IAA6B,cAAc;AACvF,IAAI9B,MACCyB,KACHb,EAAgBiB,CAAI,GAElBA,KACFV,EAAgB,EAAI,GAEtBpB,IAAe8B,GAAM,EAAE,QAAAC,GAAQ;AAAA,EACjC,GAAG,CAAC9B,GAAUyB,GAAc1B,CAAY,CAAC,GAEnCgC,IAAgBH,EAAY,MAAM;AACtC,IAAAD,EAAU,IAAO,MAAM,GACvBZ,EAAgB,EAAE,GAClB,SAAS,eAAeL,CAAS,GAAG,MAAA;AAAA,EACtC,GAAG,CAACiB,GAAWjB,CAAS,CAAC,GAEnBsB,IAAeJ,EAAY,CAACK,GAAeC,GAAyBC,MAA0B;AAClG,IAAID,IACFd,EAAS,QAAQ,IAAIa,GAAO,EAAE,KAAAC,GAAK,UAAUC,GAAc,IAE3Df,EAAS,QAAQ,OAAOa,CAAK;AAAA,EAEjC,GAAG,CAAA,CAAE;AAGL,EAAAG,EAAU,MAAM;AACd,QAAI/B,KAAmB,CAACqB,GAAQ;AAC9B,YAAMW,IAAU,WAAW,MAAMlB,EAAgB,EAAK,GAAG,GAAG;AAC5D,aAAO,MAAM,aAAakB,CAAO;AAAA,IACnC;AAAA,EACF,GAAG,CAACX,GAAQrB,CAAe,CAAC,GAG5B+B,EAAU,MAAM;AACd,UAAME,IAAqB,CAACC,MAAsB;AAChD,MAAIjB,EAAY,WAAW,CAACA,EAAY,QAAQ,SAASiB,EAAM,MAAc,MAC3EZ,EAAU,IAAO,SAAS,GAC1BZ,EAAgB,EAAE;AAAA,IAEtB;AAEA,QAAIW;AACF,sBAAS,iBAAiB,aAAaY,CAAkB,GAClD,MAAM,SAAS,oBAAoB,aAAaA,CAAkB;AAAA,EAE7E,GAAG,CAACZ,GAAQC,CAAS,CAAC;AAGtB,QAAMa,KAAmBZ,EAAY,MAAM;AACzC,IAAKJ,EAAS,SAAS,OAAO,MAC1BD,EAAgB,WAClB,aAAaA,EAAgB,OAAO,GAEtCA,EAAgB,UAAU,WAAW,MAAM;AACzC,MAAAI,EAAU,IAAM,SAAS;AAAA,IAC3B,GAAGzB,IAAkB,GAAI;AAAA,EAC3B,GAAG,CAACsB,GAAUtB,GAAiByB,CAAS,CAAC,GAEnCc,KAAmBb,EAAY,MAAM;AACzC,IAAKJ,EAAS,SAAS,OAAO,MAC1BD,EAAgB,WAClB,aAAaA,EAAgB,OAAO,GAEtCA,EAAgB,UAAU,WAAW,MAAM;AACzC,MAAAI,EAAU,IAAO,SAAS,GAC1BZ,EAAgB,EAAE;AAAA,IACpB,GAAGZ,IAAkB,GAAI;AAAA,EAC3B,GAAG,CAACqB,GAAUrB,GAAiBwB,CAAS,CAAC,GAGnCe,KAAoBd,EAAY,CAACW,MAA4B;AACjE,IAAKf,EAAS,SAAS,aAAa,MACpCe,EAAM,eAAA,GACNZ,EAAU,IAAM,SAAS;AAAA,EAC3B,GAAG,CAACH,GAAUG,CAAS,CAAC;AAGxB,EAAAS,EAAU,MACD,MAAM;AACX,IAAIb,EAAgB,WAClB,aAAaA,EAAgB,OAAO;AAAA,EAExC,GACC,CAAA,CAAE;AAEL,QAAMoB,KAA0C;AAAA,IAC9C,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,EAAA,GAGHC,KAAuC;AAAA,IAC3C,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK;AAAA,EAAA,GAGDC,KAAY,OAAO5C,KAAU,YAAYA,IAAQ,CAAC,CAACA,GAEnD6C,KAAkB;AAAA,IACtB;AAAA,IACAH,GAAgB/C,CAAQ;AAAA,IACxBgD,GAAa/C,CAAK;AAAA,IAClB2B,EAAS,SAAS,OAAO,KAAK;AAAA,IAC9BE,KAAU;AAAA,IACVpB;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGLyC,KAAc,MACbtD,IACEA,EAAM,IAAI,CAACuD,GAAMf,MAAU;AAChC,QAAI,UAAUe,KAAQA,EAAK,SAAS;AAClC,+BAAQC,GAAA,IAAqBD,EAAK,OAAO,WAAWf,CAAK,EAAI;AAE/D,UAAMiB,IAAWF;AACjB,WAAIE,EAAS,YAAYA,EAAS,SAAS,SAAS,IAEhD,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QAEC,OAAOF,EAAS;AAAA,QAChB,MAAMA,EAAS;AAAA,QACf,UAAUA,EAAS;AAAA,QAElB,UAAAA,EAAS,SAAS,IAAI,CAACG,MACtB,gBAAAF;AAAA,UAACG;AAAA,UAAA;AAAA,YAEC,MAAMD,EAAM;AAAA,YACZ,UAAUA,EAAM;AAAA,YAChB,QAAQA,EAAM;AAAA,YACd,SAASA,EAAM;AAAA,YAEd,UAAAA,EAAM;AAAA,UAAA;AAAA,UANFA,EAAM;AAAA,QAAA,CAQd;AAAA,MAAA;AAAA,MAfIH,EAAS;AAAA,IAAA,IAoBlB,gBAAAC;AAAA,MAACG;AAAA,MAAA;AAAA,QAEC,MAAMJ,EAAS;AAAA,QACf,UAAUA,EAAS;AAAA,QACnB,QAAQA,EAAS;AAAA,QACjB,SAASA,EAAS;AAAA,QAEjB,UAAAA,EAAS;AAAA,MAAA;AAAA,MANLA,EAAS;AAAA,IAAA;AAAA,EASpB,CAAC,IAvCkB,MA2CfK,KAAU9D,IACd,gBAAA+D,EAAAC,IAAA,EACG,UAAA;AAAA,IAAAC,EAAM,SAAS,QAAQlE,CAAQ,EAAE;AAAA,MAChC,CAAC6D,MAAUK,EAAM,eAAeL,CAAK,KAAKA,EAAM,SAASM;AAAA,IAAA;AAAA,KAEzDzC,KAAgB,CAACb,MACjB,gBAAA8C,EAACS,GAAA,EAAc,eAAY,CAAE;AAAA,EAAA,EAAA,CAEjC,IAEApE;AAGF,SACE,gBAAA2D;AAAA,IAACjE,EAAgB;AAAA,IAAhB;AAAA,MACC,OAAO;AAAA,QACL,UAAAU;AAAA,QACA,OAAAC;AAAA,QACA,QAAAW;AAAA,QACA,WAAAE;AAAA,QACA,QAAAgB;AAAA,QACA,WAAAC;AAAA,QACA,cAAAb;AAAA,QACA,iBAAAC;AAAA,QACA,cAAAiB;AAAA,QACA,WAAAhB;AAAA,QACA,cAAAC;AAAA,QACA,UAAAjB;AAAA,QACA,OAAO6C;AAAA,QACP,eAAAd;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAoB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK7B;AAAA,UACL,WAAWwB;AAAA,UACX,cAAYpB,IAAS,SAAS;AAAA,UAC9B,iBAAe1B,KAAY;AAAA,UAC3B,cAAcwC;AAAA,UACd,cAAcC;AAAA,UACd,eAAeC;AAAA,UACd,GAAGnC;AAAA,UAEH,UAAAgD;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;AAEA,SAASI,EAAgB,EAAE,UAAAnE,GAAU,WAAAc,IAAY,MAA4B;AAC3E,QAAM,EAAE,QAAAE,GAAQ,WAAAE,GAAW,QAAAgB,GAAQ,WAAAC,GAAW,iBAAAZ,GAAiB,WAAAC,GAAW,UAAAhB,EAAA,IAAaZ,EAAA,GAEjFyE,IAAgB,CAACtB,MAA+B;AACpD,YAAQA,EAAM,KAAA;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,QAAAA,EAAM,eAAA,GACNZ,EAAU,EAAI,GACdZ,EAAgB,CAAC;AACjB;AAAA,MACF,KAAK;AACH,QAAAwB,EAAM,eAAA,GACNZ,EAAU,EAAI,GACdZ,EAAgBC,IAAY,CAAC;AAC7B;AAAA,MACF,KAAK;AACH,QAAAuB,EAAM,eAAA,GACNZ,EAAU,EAAK,GACfZ,EAAgB,EAAE;AAClB;AAAA,IAAA;AAAA,EAEN,GAEM+C,IAAc,MAAM;AACxB,IAAAnC,EAAU,CAACD,CAAM,GACZA,KACHX,EAAgB,CAAC;AAAA,EAErB,GAGMsC,IAAQK,EAAM,SAAS,KAAKlE,CAAQ,GAQpCuE,IAAaV,EAAM;AAEzB,SAAOK,EAAM,aAAaL,GAAO;AAAA,IAC/B,IAAI3C;AAAA,IACJ,UAAUV,IAAW,KAAK;AAAA,IAC1B,iBAAiB;AAAA,IACjB,iBAAiB0B;AAAA,IACjB,iBAAiBlB;AAAA,IACjB,SAAS,CAACwD,MAAwB;AAChC,MAAAF,EAAA,GACAC,EAAW,UAAUC,CAAC;AAAA,IACxB;AAAA,IACA,WAAW,CAACA,MAA2B;AACrC,MAAAH,EAAcG,CAAC,GACfD,EAAW,YAAYC,CAAC;AAAA,IAC1B;AAAA,IACA,WAAW,GAAGD,EAAW,aAAa,EAAE,IAAIzD,CAAS,GAAG,KAAA;AAAA,EAAK,CAC9D;AACH;AAEA,SAASsD,EAAa,EAAE,UAAApE,GAAU,WAAAc,IAAY,MAAyB;AACrE,QAAM,EAAE,QAAAE,GAAQ,WAAAE,GAAW,QAAAgB,GAAQ,WAAAC,GAAW,cAAAb,GAAc,iBAAAC,GAAiB,cAAAE,GAAc,OAAAhB,GAAO,UAAAL,EAAA,IAAaR,EAAA,GACzG6E,IAAU5C,EAAyB,IAAI,GAGvC6C,IAAaR,EAAM,SAAS,QAAQlE,CAAQ,EAAE;AAAA,IAClD,CAAC6D,MAAUK,EAAM,eAAeL,CAAK,KAAMA,EAAM,SAASC;AAAA,EAAA;AAG5D,EAAAlB,EAAU,MAAM;AACd,IAAAnB,EAAaiD,EAAW,MAAM;AAAA,EAChC,GAAG,CAACA,EAAW,QAAQjD,CAAY,CAAC,GAGpCmB,EAAU,MAAM;AACd,IAAIV,KAAUZ,KAAgB,KAAKmD,EAAQ,WAC3BA,EAAQ,QAAQ,iBAAiB,+CAA+C,EAC3EnD,CAAY,GACzB,MAAA;AAAA,EAEV,GAAG,CAACY,GAAQZ,CAAY,CAAC;AAEzB,QAAM+C,IAAgB,CAACtB,MAA+B;AAIpD,UAAM4B,IAHeD,EAAW;AAAA,MAC9B,CAACb,MAAUK,EAAM,eAAeL,CAAK,KAAK,CAAEA,EAAM,MAA4B;AAAA,IAAA,EAE9C;AAElC,YAAQd,EAAM,KAAA;AAAA,MACZ,KAAK;AACH,QAAAA,EAAM,eAAA,GACNxB,GAAiBD,IAAe,KAAKqD,CAAY;AACjD;AAAA,MACF,KAAK;AACH,QAAA5B,EAAM,eAAA,GACNxB,GAAiBD,IAAe,IAAIqD,KAAgBA,CAAY;AAChE;AAAA,MACF,KAAK;AACH,QAAA5B,EAAM,eAAA,GACNxB,EAAgB,CAAC;AACjB;AAAA,MACF,KAAK;AACH,QAAAwB,EAAM,eAAA,GACNxB,EAAgBoD,IAAe,CAAC;AAChC;AAAA,MACF,KAAK;AACH,QAAA5B,EAAM,eAAA,GACNZ,EAAU,EAAK,GACfZ,EAAgB,EAAE,GAElB,SAAS,eAAeL,CAAS,GAAG,MAAA;AACpC;AAAA,MACF,KAAK;AACH,QAAAiB,EAAU,EAAK,GACfZ,EAAgB,EAAE;AAClB;AAAA,IAAA;AAAA,EAEN,GAEMqD,IAAc;AAAA,IAClB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA9D;AAAA,EAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGL+D,IAAoBX,EAAM,SAAS,IAAIlE,GAAU,CAAC6D,GAAOpB,MAAU;AACvE,QAAIyB,EAAM,eAAeL,CAAK,GAAG;AAC/B,YAAMiB,IAAWjB,EAAM,OAAO,OAAO,OAAOA,EAAM,GAAG,IAAI;AACzD,UAAIA,EAAM,SAASC;AACjB,eAAOI,EAAM,aAAaL,GAAkC,EAAE,QAAQpB,GAAO,MAAMqC,GAAU;AAE/F,UAAIjB,EAAM,SAASD;AACjB,eAAOM,EAAM,aAAaL,GAAkC,EAAE,MAAMiB,GAAU;AAAA,IAElF;AACA,WAAOjB;AAAA,EACT,CAAC,GAUKkB,IAAetE,IACnB,gBAAAkD;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW,0CATsC;AAAA,QACnD,KAAK;AAAA,QACL,QAAQ;AAAA,QACR,MAAM;AAAA,QACN,OAAO;AAAA,MAAA,EAKqEvD,KAAY,QAAQ,CAAC;AAAA,MAC/F,eAAY;AAAA,IAAA;AAAA,EAAA,IAEZ;AAEJ,SACE,gBAAA4D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAKS;AAAA,MACL,IAAIzD;AAAA,MACJ,MAAK;AAAA,MACL,mBAAiBE;AAAA,MACjB,UAAU;AAAA,MACV,WAAW,GAAG0D,CAAW,IAAInE,IAAQ,aAAa,EAAE;AAAA,MACpD,WAAW4D;AAAA,MAEV,UAAA;AAAA,QAAAU;AAAA,QACAF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAEA,SAASf,EAAa;AAAA,EACpB,UAAA9D;AAAA,EACA,MAAAgF;AAAA,EACA,OAAAC;AAAA,EACA,SAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,UAAA3E,IAAW;AAAA,EACX,QAAA4E,IAAS;AAAA,EACT,WAAAtE,IAAY;AAAA,EACZ,MAAAuE;AACF,GAAsB;AACpB,QAAM,EAAE,eAAA9C,EAAA,IAAkB3C,EAAA,GACpB0F,IAAc,CAACH,KAAU,UAAU3E,KAAY,YAAYM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAE9FwD,IAAc,MAAM;AACxB,IAAK9D,MACH0E,IAAA,GACA3C,EAAA;AAAA,EAEJ;AAWA,2BACG,MAAA,EAAG,WAAW+C,GAAa,MAAK,QAAO,YAAUD,GAChD,UAAA,gBAAArB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,UAAUxD,IAAW,KAAK;AAAA,MAC1B,iBAAeA,KAAY;AAAA,MAC3B,WAAW4E,IAAS,eAAe;AAAA,MACnC,SAASd;AAAA,MACT,WAjBgB,CAACvB,MAA+B;AACpD,SAAKA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,QAAQ,CAACvC,MACnDuC,EAAM,eAAA,GACNuB,EAAA;AAAA,MAEJ;AAAA,MAcO,UAAA;AAAA,QAAAU,KAAQ,gBAAArB,EAAC,QAAA,EAAK,WAAU,iCAAiC,UAAAqB,GAAK;AAAA,QAZrDC,KAASjF;AAAA,MAalB;AAAA,IAAA;AAAA,EAAA,GAEL;AAEJ;AAEA,SAAS4D,EAAgB;AAAA,EACvB,UAAA5D;AAAA,EACA,OAAAuF;AAAA,EACA,MAAAP;AAAA,EACA,UAAAxE,IAAW;AAAA,EACX,WAAAM,IAAY;AAAA,EACZ,MAAAuE;AACF,GAAyB;AACvB,QAAM,CAACG,GAAWC,CAAY,IAAIpE,EAAS,EAAK,GAC1CqE,IAAa7D,EAAsB,IAAI,GACvC8D,IAAa9D,EAAoB,IAAI,GACrC+D,IAAiB/D,EAAyB,IAAI,GAC9CgE,IAAY5E,EAAA,GAEZ+B,IAAmB,MAAM;AAC7B,IAAKxC,KAAUiF,EAAa,EAAI;AAAA,EAClC,GAEMxC,IAAmB,MAAM;AAC7B,IAAAwC,EAAa,EAAK;AAAA,EACpB,GAGMK,IAAiB,MAAM;AAC3B,eAAW,MAAM;AAEf,MADkBF,EAAe,SAAS,cAAc,+CAA+C,GAC5F,MAAA;AAAA,IACb,GAAG,CAAC;AAAA,EACN,GAGMG,IAAuB,CAAChD,MAA+B;AAC3D,QAAI,CAAAvC;AAEJ,cAAQuC,EAAM,KAAA;AAAA,QACZ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,UAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACN0C,EAAa,EAAI,GACjBK,EAAA;AACA;AAAA,QACF,KAAK;AAAA,QACL,KAAK;AACH,UAAA/C,EAAM,eAAA,GACNA,EAAM,gBAAA,GACN0C,EAAa,EAAK;AAClB;AAAA,MAAA;AAAA,EAEN,GAGMO,IAAuB,CAACjD,MAA+B;AAC3D,YAAQA,EAAM,KAAA;AAAA,MACZ,KAAK;AAAA,MACL,KAAK;AACH,QAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA,GACN0C,EAAa,EAAK,GAClBE,EAAW,SAAS,MAAA;AACpB;AAAA,MACF,KAAK;AACH,QAAA5C,EAAM,eAAA,GACNA,EAAM,gBAAA;AACN,cAAM9C,IAAQ2F,EAAe,SAAS,iBAAiB,+CAA+C;AACtG,YAAI3F,GAAO;AAET,gBAAMgG,KADe,MAAM,KAAKhG,CAAK,EAAE,UAAU,CAAAuD,MAAQA,MAAS,SAAS,aAAa,IACtD,KAAKvD,EAAM;AAC3C,UAAAA,EAAMgG,CAAS,GAAmB,MAAA;AAAA,QACtC;AACA;AAAA,MACF,KAAK;AACH,QAAAlD,EAAM,eAAA,GACNA,EAAM,gBAAA;AACN,cAAMmD,IAAUN,EAAe,SAAS,iBAAiB,+CAA+C;AACxG,YAAIM,GAAS;AAEX,gBAAMC,KADiB,MAAM,KAAKD,CAAO,EAAE,UAAU,CAAA1C,MAAQA,MAAS,SAAS,aAAa,IACxD,IAAI0C,EAAQ,UAAUA,EAAQ;AAChE,UAAAA,EAAQC,CAAS,GAAmB,MAAA;AAAA,QACxC;AACA;AAAA,IAAA;AAAA,EAEN,GAEMb,IAAc,CAAC9E,KAAY,YAAYM,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAEhF,SACE,gBAAA6C;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAK+B;AAAA,MACL,WAAWJ;AAAA,MACX,MAAK;AAAA,MACL,YAAUD;AAAA,MACV,cAAcrC;AAAA,MACd,cAAcC;AAAA,MAEd,UAAA,gBAAAe,EAAC,WAAA,EAAQ,MAAMwB,GACb,UAAA;AAAA,QAAA,gBAAAxB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAK2B;AAAA,YACL,MAAK;AAAA,YACL,UAAUnF,IAAW,KAAK;AAAA,YAC1B,iBAAeA,KAAY;AAAA,YAC3B,iBAAc;AAAA,YACd,iBAAegF;AAAA,YACf,iBAAeK;AAAA,YACf,WAAWE;AAAA,YAEV,UAAA;AAAA,cAAAf,KAAQ,gBAAArB,EAAC,QAAA,EAAK,WAAU,iCAAiC,UAAAqB,GAAK;AAAA,cAC9DO;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAA5B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAKiC;AAAA,YACL,IAAIC;AAAA,YACJ,WAAU;AAAA,YACV,MAAK;AAAA,YACL,cAAY,OAAON,KAAU,WAAWA,IAAQ;AAAA,YAChD,WAAWS;AAAA,YAEV,UAAAhG;AAAA,UAAA;AAAA,QAAA;AAAA,MACH,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;AAEA,SAASyD,EAAgB,EAAE,WAAA3C,IAAY,MAA4B;AACjE,QAAMsF,IAAU,CAAC,0BAA0BtF,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC9E,SACE,gBAAA6C,EAAC,MAAA,EAAG,MAAK,aAAY,WAAU,QAC7B,UAAA,gBAAAA,EAAC,MAAA,EAAG,WAAWyC,EAAA,CAAS,EAAA,CAC1B;AAEJ;AAEO,MAAMC,KAAW,OAAO,OAAOtG,IAAc;AAAA,EAClD,SAASoE;AAAA,EACT,MAAMC;AAAA,EACN,MAAMN;AAAA,EACN,SAASF;AAAA,EACT,SAASH;AACX,CAAC;"}
@@ -34,22 +34,24 @@ export interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>,
34
34
  }
35
35
  export interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {
36
36
  children: React.ReactNode;
37
- itemKey?: string;
38
37
  icon?: React.ReactNode;
39
38
  disabled?: boolean;
40
39
  onClick?: () => void;
41
- /** @deprecated Use itemKey and selectedKeys instead */
40
+ /** @deprecated Use key and selectedKeys instead */
42
41
  active?: boolean;
42
+ /** @internal */
43
+ _key?: string;
43
44
  }
44
45
  export interface MenuSubMenuProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {
45
46
  children: React.ReactNode;
46
- itemKey: string;
47
47
  /** Submenu label */
48
48
  label?: React.ReactNode;
49
49
  /** Submenu title (alias for label) */
50
50
  title?: React.ReactNode;
51
51
  icon?: React.ReactNode;
52
52
  disabled?: boolean;
53
+ /** @internal */
54
+ _key?: string;
53
55
  }
54
56
  export interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {
55
57
  children: React.ReactNode;
@@ -57,8 +59,8 @@ export interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {
57
59
  export interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {
58
60
  }
59
61
  declare function MenuRoot({ children, items, mode, size, selectedKeys: controlledSelectedKeys, defaultSelectedKeys, openKeys: controlledOpenKeys, defaultOpenKeys, onSelect, onOpenChange, className, ...rest }: MenuProps): import("react/jsx-runtime").JSX.Element;
60
- declare function MenuItem({ children, itemKey, icon, disabled, onClick, active, className, ...rest }: MenuItemProps): import("react/jsx-runtime").JSX.Element;
61
- declare function MenuSubMenu({ children, itemKey, label, title, icon, disabled, className, ...rest }: MenuSubMenuProps): import("react/jsx-runtime").JSX.Element;
62
+ declare function MenuItem({ children, icon, disabled, onClick, active, className, _key, ...rest }: MenuItemProps): import("react/jsx-runtime").JSX.Element;
63
+ declare function MenuSubMenu({ children, label, title, icon, disabled, className, _key, ...rest }: MenuSubMenuProps): import("react/jsx-runtime").JSX.Element;
62
64
  declare function MenuTitle({ children, className, ...rest }: MenuTitleProps): import("react/jsx-runtime").JSX.Element;
63
65
  declare function MenuDivider({ className, ...rest }: MenuDividerProps): import("react/jsx-runtime").JSX.Element;
64
66
  export declare const Menu: typeof MenuRoot & {
@@ -1,156 +1,163 @@
1
- import { jsx as l, jsxs as b } from "react/jsx-runtime";
2
- import { useState as C, useCallback as M, createContext as V, useId as q, useContext as N } from "react";
3
- const y = V(null);
4
- function A() {
5
- const e = N(y);
1
+ import { jsx as n, jsxs as b } from "react/jsx-runtime";
2
+ import g, { useState as j, useCallback as S, createContext as q, useId as A, useContext as k } from "react";
3
+ const M = q(null);
4
+ function F() {
5
+ const e = k(M);
6
6
  if (!e)
7
7
  throw new Error("Menu components must be used within a Menu");
8
8
  return e;
9
9
  }
10
- function j(e, n, s, a, o) {
11
- return e.divider ? /* @__PURE__ */ l(S, {}, e.key) : e.title ? /* @__PURE__ */ l(K, { children: e.label }, e.key) : e.children && e.children.length > 0 ? /* @__PURE__ */ l(I, { itemKey: e.key, label: e.label, icon: e.icon, disabled: e.disabled, children: e.children.map((i) => j(i)) }, e.key) : /* @__PURE__ */ l(k, { itemKey: e.key, icon: e.icon, disabled: e.disabled, children: e.label }, e.key);
10
+ function I(e, t, l, a, r) {
11
+ return e.divider ? /* @__PURE__ */ n(O, {}, e.key) : e.title ? /* @__PURE__ */ n(T, { children: e.label }, e.key) : e.children && e.children.length > 0 ? /* @__PURE__ */ n(N, { _key: e.key, label: e.label, icon: e.icon, disabled: e.disabled, children: e.children.map((m) => I(m)) }, e.key) : /* @__PURE__ */ n(K, { _key: e.key, icon: e.icon, disabled: e.disabled, children: e.label }, e.key);
12
12
  }
13
- function F({
13
+ function G({
14
14
  children: e,
15
- items: n,
16
- mode: s = "vertical",
15
+ items: t,
16
+ mode: l = "vertical",
17
17
  size: a,
18
- selectedKeys: o,
19
- defaultSelectedKeys: i = [],
20
- openKeys: d,
21
- defaultOpenKeys: m = [],
22
- onSelect: r,
23
- onOpenChange: t,
24
- className: c = "",
25
- ...p
18
+ selectedKeys: r,
19
+ defaultSelectedKeys: m = [],
20
+ openKeys: s,
21
+ defaultOpenKeys: p = [],
22
+ onSelect: i,
23
+ onOpenChange: o,
24
+ className: d = "",
25
+ ...f
26
26
  }) {
27
- const [x, v] = C(i), [f, T] = C(m), O = o ?? x, h = d ?? f, B = M(
28
- (u) => {
29
- o === void 0 && v([u]), r?.(u);
27
+ const [v, x] = j(m), [h, B] = j(p), w = r ?? v, y = s ?? h, D = S(
28
+ (c) => {
29
+ r === void 0 && x([c]), i?.(c);
30
30
  },
31
- [o, r]
32
- ), w = M(
33
- (u) => {
34
- const g = h.includes(u) ? h.filter((R) => R !== u) : [...h, u];
35
- d === void 0 && T(g), t?.(g);
31
+ [r, i]
32
+ ), E = S(
33
+ (c) => {
34
+ const u = y.includes(c) ? y.filter((C) => C !== c) : [...y, c];
35
+ s === void 0 && B(u), o?.(u);
36
36
  },
37
- [h, d, t]
38
- ), D = {
37
+ [y, s, o]
38
+ ), z = {
39
39
  vertical: "menu-vertical",
40
40
  horizontal: "menu-horizontal",
41
41
  inline: "menu-vertical"
42
- }, z = {
42
+ }, R = {
43
43
  xs: "menu-xs",
44
44
  sm: "menu-sm",
45
45
  md: "menu-md",
46
46
  lg: "menu-lg",
47
47
  xl: "menu-xl"
48
- }, E = ["menu", D[s], a && z[a], c].filter(Boolean).join(" "), L = {
49
- mode: s,
50
- selectedKeys: O,
51
- openKeys: h,
52
- onSelect: B,
53
- onToggleOpen: w
54
- }, P = n && n.length > 0 ? n.map((u) => j(u)) : e;
55
- return /* @__PURE__ */ l(y.Provider, { value: L, children: /* @__PURE__ */ l("ul", { className: E, ...p, children: P }) });
48
+ }, V = ["menu", z[l], a && R[a], d].filter(Boolean).join(" "), L = {
49
+ mode: l,
50
+ selectedKeys: w,
51
+ openKeys: y,
52
+ onSelect: D,
53
+ onToggleOpen: E
54
+ }, P = (c) => g.Children.map(c, (u) => {
55
+ if (g.isValidElement(u)) {
56
+ const C = u.key != null ? String(u.key) : void 0;
57
+ if (u.type === K || u.type === N)
58
+ return g.cloneElement(u, { _key: C });
59
+ }
60
+ return u;
61
+ }), W = t && t.length > 0 ? t.map((c) => I(c)) : P(e);
62
+ return /* @__PURE__ */ n(M.Provider, { value: L, children: /* @__PURE__ */ n("ul", { className: V, ...f, children: W }) });
56
63
  }
57
- function k({
64
+ function K({
58
65
  children: e,
59
- itemKey: n,
60
- icon: s,
61
- disabled: a = !1,
62
- onClick: o,
63
- active: i,
64
- className: d = "",
65
- ...m
66
+ icon: t,
67
+ disabled: l = !1,
68
+ onClick: a,
69
+ active: r,
70
+ className: m = "",
71
+ _key: s,
72
+ ...p
66
73
  }) {
67
- const r = N(y), t = n && r ? r.selectedKeys.includes(n) : i, c = () => {
68
- a || (n && r && r.onSelect(n), o?.());
69
- }, p = [
70
- t && "active bg-primary text-primary-content",
71
- a && "disabled",
72
- d
74
+ const i = k(M), o = s && i ? i.selectedKeys.includes(s) : r, d = () => {
75
+ l || (s && i && i.onSelect(s), a?.());
76
+ }, f = [
77
+ o && "active bg-primary text-primary-content",
78
+ l && "disabled",
79
+ m
73
80
  ].filter(Boolean).join(" ");
74
- return /* @__PURE__ */ l("li", { children: /* @__PURE__ */ b(
81
+ return /* @__PURE__ */ n("li", { children: /* @__PURE__ */ b(
75
82
  "a",
76
83
  {
77
- className: p,
78
- onClick: c,
79
- "aria-disabled": a,
84
+ className: f,
85
+ onClick: d,
86
+ "aria-disabled": l,
80
87
  role: "menuitem",
81
- "data-state": t ? "active" : "inactive",
82
- ...m,
88
+ "data-state": o ? "active" : "inactive",
89
+ ...p,
83
90
  children: [
84
- s && /* @__PURE__ */ l("span", { className: "menu-icon", children: s }),
91
+ t && /* @__PURE__ */ n("span", { className: "menu-icon", children: t }),
85
92
  e
86
93
  ]
87
94
  }
88
95
  ) });
89
96
  }
90
- function I({
97
+ function N({
91
98
  children: e,
92
- itemKey: n,
93
- label: s,
94
- title: a,
95
- icon: o,
96
- disabled: i = !1,
97
- className: d = "",
98
- ...m
99
+ label: t,
100
+ title: l,
101
+ icon: a,
102
+ disabled: r = !1,
103
+ className: m = "",
104
+ _key: s,
105
+ ...p
99
106
  }) {
100
- const r = A(), t = r.openKeys.includes(n), c = q(), p = s ?? a, x = () => {
101
- i || r.onToggleOpen(n);
102
- }, v = [i && "disabled", d].filter(Boolean).join(" ");
103
- return r.mode === "inline" ? /* @__PURE__ */ l("li", { className: v, "data-state": t ? "open" : "closed", ...m, children: /* @__PURE__ */ b("details", { open: t, children: [
107
+ const i = F(), o = s ? i.openKeys.includes(s) : !1, d = A(), f = t ?? l, v = () => {
108
+ r || !s || i.onToggleOpen(s);
109
+ }, x = [r && "disabled", m].filter(Boolean).join(" ");
110
+ return i.mode === "inline" ? /* @__PURE__ */ n("li", { className: x, "data-state": o ? "open" : "closed", ...p, children: /* @__PURE__ */ b("details", { open: o, children: [
104
111
  /* @__PURE__ */ b(
105
112
  "summary",
106
113
  {
107
- onClick: (f) => {
108
- f.preventDefault(), x();
114
+ onClick: (h) => {
115
+ h.preventDefault(), v();
109
116
  },
110
- "aria-expanded": t,
111
- "aria-controls": c,
112
- "aria-disabled": i,
117
+ "aria-expanded": o,
118
+ "aria-controls": d,
119
+ "aria-disabled": r,
113
120
  children: [
114
- o && /* @__PURE__ */ l("span", { className: "menu-icon", children: o }),
115
- p
121
+ a && /* @__PURE__ */ n("span", { className: "menu-icon", children: a }),
122
+ f
116
123
  ]
117
124
  }
118
125
  ),
119
- /* @__PURE__ */ l("ul", { id: c, role: "menu", children: e })
120
- ] }) }) : /* @__PURE__ */ l("li", { className: v, "data-state": t ? "open" : "closed", ...m, children: /* @__PURE__ */ b("details", { open: t, children: [
126
+ /* @__PURE__ */ n("ul", { id: d, role: "menu", children: e })
127
+ ] }) }) : /* @__PURE__ */ n("li", { className: x, "data-state": o ? "open" : "closed", ...p, children: /* @__PURE__ */ b("details", { open: o, children: [
121
128
  /* @__PURE__ */ b(
122
129
  "summary",
123
130
  {
124
- onClick: (f) => {
125
- f.preventDefault(), x();
131
+ onClick: (h) => {
132
+ h.preventDefault(), v();
126
133
  },
127
- "aria-expanded": t,
128
- "aria-controls": c,
129
- "aria-disabled": i,
134
+ "aria-expanded": o,
135
+ "aria-controls": d,
136
+ "aria-disabled": r,
130
137
  children: [
131
- o && /* @__PURE__ */ l("span", { className: "menu-icon", children: o }),
132
- p
138
+ a && /* @__PURE__ */ n("span", { className: "menu-icon", children: a }),
139
+ f
133
140
  ]
134
141
  }
135
142
  ),
136
- /* @__PURE__ */ l("ul", { id: c, role: "menu", children: e })
143
+ /* @__PURE__ */ n("ul", { id: d, role: "menu", children: e })
137
144
  ] }) });
138
145
  }
139
- function K({ children: e, className: n = "", ...s }) {
140
- const a = ["menu-title", n].filter(Boolean).join(" ");
141
- return /* @__PURE__ */ l("li", { className: a, ...s, children: e });
146
+ function T({ children: e, className: t = "", ...l }) {
147
+ const a = ["menu-title", t].filter(Boolean).join(" ");
148
+ return /* @__PURE__ */ n("li", { className: a, ...l, children: e });
142
149
  }
143
- function S({ className: e = "", ...n }) {
144
- const s = ["border-t border-base-300 my-1", e].filter(Boolean).join(" ");
145
- return /* @__PURE__ */ l("li", { className: s, role: "separator", ...n });
150
+ function O({ className: e = "", ...t }) {
151
+ const l = ["border-t border-base-300 my-1", e].filter(Boolean).join(" ");
152
+ return /* @__PURE__ */ n("li", { className: l, role: "separator", ...t });
146
153
  }
147
- const J = Object.assign(F, {
148
- Item: k,
149
- SubMenu: I,
150
- Title: K,
151
- Divider: S
154
+ const Q = Object.assign(G, {
155
+ Item: K,
156
+ SubMenu: N,
157
+ Title: T,
158
+ Divider: O
152
159
  });
153
160
  export {
154
- J as Menu
161
+ Q as Menu
155
162
  };
156
163
  //# sourceMappingURL=Menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","sources":["../../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\nexport type MenuSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface MenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n children?: MenuItem[]\n divider?: boolean\n title?: boolean // For section titles\n}\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Menu items (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: MenuItem[]\n /** Menu display mode */\n mode?: MenuMode\n /** Menu size */\n size?: MenuSize\n /** Controlled selected keys */\n selectedKeys?: string[]\n /** Default selected keys (uncontrolled) */\n defaultSelectedKeys?: string[]\n /** Controlled open submenu keys */\n openKeys?: string[]\n /** Default open submenu keys (uncontrolled) */\n defaultOpenKeys?: string[]\n /** Callback when item is selected */\n onSelect?: (key: string) => void\n /** Callback when submenu open state changes */\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n itemKey?: string\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use itemKey and selectedKeys instead */\n active?: boolean\n}\n\nexport interface MenuSubMenuProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {\n children: React.ReactNode\n itemKey: string\n /** Submenu label */\n label?: React.ReactNode\n /** Submenu title (alias for label) */\n title?: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\n// Internal component for rendering data-driven menu items\nfunction renderMenuItem(item: MenuItem, onSelect: (key: string) => void, selectedKeys: string[], openKeys: string[], onToggleOpen: (key: string) => void): React.ReactNode {\n if (item.divider) {\n return <MenuDivider key={item.key} />\n }\n\n if (item.title) {\n return <MenuTitle key={item.key}>{item.label}</MenuTitle>\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <MenuSubMenu key={item.key} itemKey={item.key} label={item.label} icon={item.icon} disabled={item.disabled}>\n {item.children.map((child) => renderMenuItem(child, onSelect, selectedKeys, openKeys, onToggleOpen))}\n </MenuSubMenu>\n )\n }\n\n return (\n <MenuItem key={item.key} itemKey={item.key} icon={item.icon} disabled={item.disabled}>\n {item.label}\n </MenuItem>\n )\n}\n\nfunction MenuRoot({\n children,\n items,\n mode = 'vertical',\n size,\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: 'menu-vertical',\n horizontal: 'menu-horizontal',\n inline: 'menu-vertical',\n }\n\n const sizeClasses: Record<MenuSize, string> = {\n xs: 'menu-xs',\n sm: 'menu-sm',\n md: 'menu-md',\n lg: 'menu-lg',\n xl: 'menu-xl',\n }\n\n const menuClasses = ['menu', modeClasses[mode], size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n const contextValue = {\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }\n\n // Render data-driven items if provided\n const content = items && items.length > 0\n ? items.map((item) => renderMenuItem(item, handleSelect, selectedKeys, openKeys, handleToggleOpen))\n : children\n\n return (\n <MenuContext.Provider value={contextValue}>\n <ul className={menuClasses} {...rest}>{content}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n itemKey,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = itemKey && context ? context.selectedKeys.includes(itemKey) : active\n\n const handleClick = () => {\n if (disabled) return\n if (itemKey && context) {\n context.onSelect(itemKey)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n itemKey,\n label,\n title,\n icon,\n disabled = false,\n className = '',\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = context.openKeys.includes(itemKey)\n const submenuId = useId()\n\n // Support both label and title (title as alias for backwards compatibility)\n const displayLabel = label ?? title\n\n const handleToggle = () => {\n if (disabled) return\n context.onToggleOpen(itemKey)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = ['menu-title', className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["MenuContext","createContext","useMenuContext","context","useContext","renderMenuItem","item","onSelect","selectedKeys","openKeys","onToggleOpen","jsx","MenuDivider","MenuTitle","MenuSubMenu","child","MenuItem","MenuRoot","children","items","mode","size","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","modeClasses","sizeClasses","menuClasses","contextValue","content","itemKey","icon","disabled","onClick","active","isSelected","handleClick","itemClasses","jsxs","label","title","isOpen","submenuId","useId","displayLabel","handleToggle","submenuClasses","e","titleClasses","dividerClasses","Menu"],"mappings":"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"}
1
+ {"version":3,"file":"Menu.js","sources":["../../src/components/Menu.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useId } from 'react'\n\nexport type MenuMode = 'vertical' | 'horizontal' | 'inline'\nexport type MenuSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n\nexport interface MenuItem {\n key: string\n label: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n children?: MenuItem[]\n divider?: boolean\n title?: boolean // For section titles\n}\n\nexport interface MenuProps extends Omit<React.HTMLAttributes<HTMLUListElement>, 'onSelect'> {\n /** Menu items (compound pattern) */\n children?: React.ReactNode\n /** Menu items (data-driven pattern) */\n items?: MenuItem[]\n /** Menu display mode */\n mode?: MenuMode\n /** Menu size */\n size?: MenuSize\n /** Controlled selected keys */\n selectedKeys?: string[]\n /** Default selected keys (uncontrolled) */\n defaultSelectedKeys?: string[]\n /** Controlled open submenu keys */\n openKeys?: string[]\n /** Default open submenu keys (uncontrolled) */\n defaultOpenKeys?: string[]\n /** Callback when item is selected */\n onSelect?: (key: string) => void\n /** Callback when submenu open state changes */\n onOpenChange?: (openKeys: string[]) => void\n}\n\nexport interface MenuItemProps extends Omit<React.HTMLAttributes<HTMLAnchorElement>, 'onClick'> {\n children: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n onClick?: () => void\n /** @deprecated Use key and selectedKeys instead */\n active?: boolean\n /** @internal */\n _key?: string\n}\n\nexport interface MenuSubMenuProps extends Omit<React.HTMLAttributes<HTMLLIElement>, 'title'> {\n children: React.ReactNode\n /** Submenu label */\n label?: React.ReactNode\n /** Submenu title (alias for label) */\n title?: React.ReactNode\n icon?: React.ReactNode\n disabled?: boolean\n /** @internal */\n _key?: string\n}\n\nexport interface MenuTitleProps extends React.HTMLAttributes<HTMLLIElement> {\n children: React.ReactNode\n}\n\nexport interface MenuDividerProps extends React.HTMLAttributes<HTMLLIElement> {}\n\ninterface MenuContextValue {\n mode: MenuMode\n selectedKeys: string[]\n openKeys: string[]\n onSelect: (key: string) => void\n onToggleOpen: (key: string) => void\n}\n\nconst MenuContext = createContext<MenuContextValue | null>(null)\n\nfunction useMenuContext() {\n const context = useContext(MenuContext)\n if (!context) {\n throw new Error('Menu components must be used within a Menu')\n }\n return context\n}\n\n// Internal component for rendering data-driven menu items\nfunction renderMenuItem(item: MenuItem, onSelect: (key: string) => void, selectedKeys: string[], openKeys: string[], onToggleOpen: (key: string) => void): React.ReactNode {\n if (item.divider) {\n return <MenuDivider key={item.key} />\n }\n\n if (item.title) {\n return <MenuTitle key={item.key}>{item.label}</MenuTitle>\n }\n\n if (item.children && item.children.length > 0) {\n return (\n <MenuSubMenu key={item.key} _key={item.key} label={item.label} icon={item.icon} disabled={item.disabled}>\n {item.children.map((child) => renderMenuItem(child, onSelect, selectedKeys, openKeys, onToggleOpen))}\n </MenuSubMenu>\n )\n }\n\n return (\n <MenuItem key={item.key} _key={item.key} icon={item.icon} disabled={item.disabled}>\n {item.label}\n </MenuItem>\n )\n}\n\nfunction MenuRoot({\n children,\n items,\n mode = 'vertical',\n size,\n selectedKeys: controlledSelectedKeys,\n defaultSelectedKeys = [],\n openKeys: controlledOpenKeys,\n defaultOpenKeys = [],\n onSelect,\n onOpenChange,\n className = '',\n ...rest\n}: MenuProps) {\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<string[]>(defaultSelectedKeys)\n const [internalOpenKeys, setInternalOpenKeys] = useState<string[]>(defaultOpenKeys)\n\n const selectedKeys = controlledSelectedKeys ?? internalSelectedKeys\n const openKeys = controlledOpenKeys ?? internalOpenKeys\n\n const handleSelect = useCallback(\n (key: string) => {\n if (controlledSelectedKeys === undefined) {\n setInternalSelectedKeys([key])\n }\n onSelect?.(key)\n },\n [controlledSelectedKeys, onSelect]\n )\n\n const handleToggleOpen = useCallback(\n (key: string) => {\n const newOpenKeys = openKeys.includes(key)\n ? openKeys.filter((k) => k !== key)\n : [...openKeys, key]\n\n if (controlledOpenKeys === undefined) {\n setInternalOpenKeys(newOpenKeys)\n }\n onOpenChange?.(newOpenKeys)\n },\n [openKeys, controlledOpenKeys, onOpenChange]\n )\n\n const modeClasses: Record<MenuMode, string> = {\n vertical: 'menu-vertical',\n horizontal: 'menu-horizontal',\n inline: 'menu-vertical',\n }\n\n const sizeClasses: Record<MenuSize, string> = {\n xs: 'menu-xs',\n sm: 'menu-sm',\n md: 'menu-md',\n lg: 'menu-lg',\n xl: 'menu-xl',\n }\n\n const menuClasses = ['menu', modeClasses[mode], size && sizeClasses[size], className].filter(Boolean).join(' ')\n\n const contextValue = {\n mode,\n selectedKeys,\n openKeys,\n onSelect: handleSelect,\n onToggleOpen: handleToggleOpen,\n }\n\n // Clone children to extract keys\n const cloneChildrenWithKeys = (children: React.ReactNode): React.ReactNode => {\n return React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const childKey = child.key != null ? String(child.key) : undefined\n if (child.type === MenuItem || child.type === MenuSubMenu) {\n return React.cloneElement(child as React.ReactElement<any>, { _key: childKey })\n }\n }\n return child\n })\n }\n\n // Render data-driven items if provided\n const content = items && items.length > 0\n ? items.map((item) => renderMenuItem(item, handleSelect, selectedKeys, openKeys, handleToggleOpen))\n : cloneChildrenWithKeys(children)\n\n return (\n <MenuContext.Provider value={contextValue}>\n <ul className={menuClasses} {...rest}>{content}</ul>\n </MenuContext.Provider>\n )\n}\n\nfunction MenuItem({\n children,\n icon,\n disabled = false,\n onClick,\n active,\n className = '',\n _key,\n ...rest\n}: MenuItemProps) {\n const context = useContext(MenuContext)\n\n // Support both old active prop and new key-based selection\n const isSelected = _key && context ? context.selectedKeys.includes(_key) : active\n\n const handleClick = () => {\n if (disabled) return\n if (_key && context) {\n context.onSelect(_key)\n }\n onClick?.()\n }\n\n const itemClasses = [\n isSelected && 'active bg-primary text-primary-content',\n disabled && 'disabled',\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n return (\n <li>\n <a\n className={itemClasses}\n onClick={handleClick}\n aria-disabled={disabled}\n role=\"menuitem\"\n data-state={isSelected ? 'active' : 'inactive'}\n {...rest}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {children}\n </a>\n </li>\n )\n}\n\nfunction MenuSubMenu({\n children,\n label,\n title,\n icon,\n disabled = false,\n className = '',\n _key,\n ...rest\n}: MenuSubMenuProps) {\n const context = useMenuContext()\n const isOpen = _key ? context.openKeys.includes(_key) : false\n const submenuId = useId()\n\n // Support both label and title (title as alias for backwards compatibility)\n const displayLabel = label ?? title\n\n const handleToggle = () => {\n if (disabled || !_key) return\n context.onToggleOpen(_key)\n }\n\n const submenuClasses = [disabled && 'disabled', className].filter(Boolean).join(' ')\n\n // For inline mode, use collapsible details/summary\n if (context.mode === 'inline') {\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n }\n\n // For vertical/horizontal, use nested menu (dropdown style)\n return (\n <li className={submenuClasses} data-state={isOpen ? 'open' : 'closed'} {...rest}>\n <details open={isOpen}>\n <summary\n onClick={(e) => {\n e.preventDefault()\n handleToggle()\n }}\n aria-expanded={isOpen}\n aria-controls={submenuId}\n aria-disabled={disabled}\n >\n {icon && <span className=\"menu-icon\">{icon}</span>}\n {displayLabel}\n </summary>\n <ul id={submenuId} role=\"menu\">\n {children}\n </ul>\n </details>\n </li>\n )\n}\n\nfunction MenuTitle({ children, className = '', ...rest }: MenuTitleProps) {\n const titleClasses = ['menu-title', className].filter(Boolean).join(' ')\n\n return <li className={titleClasses} {...rest}>{children}</li>\n}\n\nfunction MenuDivider({ className = '', ...rest }: MenuDividerProps) {\n const dividerClasses = ['border-t border-base-300 my-1', className].filter(Boolean).join(' ')\n\n return <li className={dividerClasses} role=\"separator\" {...rest} />\n}\n\nexport const Menu = Object.assign(MenuRoot, {\n Item: MenuItem,\n SubMenu: MenuSubMenu,\n Title: MenuTitle,\n Divider: MenuDivider,\n})\n"],"names":["MenuContext","createContext","useMenuContext","context","useContext","renderMenuItem","item","onSelect","selectedKeys","openKeys","onToggleOpen","jsx","MenuDivider","MenuTitle","MenuSubMenu","child","MenuItem","MenuRoot","children","items","mode","size","controlledSelectedKeys","defaultSelectedKeys","controlledOpenKeys","defaultOpenKeys","onOpenChange","className","rest","internalSelectedKeys","setInternalSelectedKeys","useState","internalOpenKeys","setInternalOpenKeys","handleSelect","useCallback","key","handleToggleOpen","newOpenKeys","k","modeClasses","sizeClasses","menuClasses","contextValue","cloneChildrenWithKeys","React","childKey","content","icon","disabled","onClick","active","_key","isSelected","handleClick","itemClasses","jsxs","label","title","isOpen","submenuId","useId","displayLabel","handleToggle","submenuClasses","e","titleClasses","dividerClasses","Menu"],"mappings":"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"}
@@ -30,8 +30,6 @@ export interface TabsProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'o
30
30
  export interface TabPanelProps {
31
31
  /** Tab button label */
32
32
  tab: React.ReactNode;
33
- /** Unique identifier for the tab */
34
- tabKey: string;
35
33
  /** Disable the tab */
36
34
  disabled?: boolean;
37
35
  /** Tab panel content */