@yamada-ui/menu 1.5.2-dev-20241213204523 → 1.5.2-dev-20241213213653
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.
- package/dist/{chunk-6HK6THLX.mjs → chunk-6PJHU6VG.mjs} +2 -2
 - package/dist/{chunk-SWY6VV4V.mjs → chunk-AGHG37SL.mjs} +2 -2
 - package/dist/{chunk-72J22E3I.mjs → chunk-DAEXVQLG.mjs} +10 -10
 - package/dist/chunk-DAEXVQLG.mjs.map +1 -0
 - package/dist/{chunk-KGWPKJI2.mjs → chunk-H662AKOV.mjs} +3 -3
 - package/dist/{chunk-3YBMMWDY.mjs → chunk-HWUNOGPF.mjs} +2 -2
 - package/dist/{chunk-HAW3H5KJ.mjs → chunk-IWH3B4PS.mjs} +1 -1
 - package/dist/chunk-IWH3B4PS.mjs.map +1 -0
 - package/dist/{chunk-VPMWBZWN.mjs → chunk-JQCTT4C2.mjs} +11 -11
 - package/dist/chunk-JQCTT4C2.mjs.map +1 -0
 - package/dist/{chunk-OP45KQJ6.mjs → chunk-JTGSHZXB.mjs} +15 -15
 - package/dist/chunk-JTGSHZXB.mjs.map +1 -0
 - package/dist/{chunk-X5YYJEDZ.mjs → chunk-TFGPDF5W.mjs} +36 -23
 - package/dist/chunk-TFGPDF5W.mjs.map +1 -0
 - package/dist/{chunk-XZJXCEI7.mjs → chunk-VDTE5ERA.mjs} +2 -2
 - package/dist/{chunk-4MJ2ZBIB.mjs → chunk-ZG5BKE24.mjs} +2 -2
 - package/dist/context-menu-trigger.js.map +1 -1
 - package/dist/context-menu-trigger.mjs +2 -2
 - package/dist/context-menu.js +13 -13
 - package/dist/context-menu.js.map +1 -1
 - package/dist/context-menu.mjs +3 -3
 - package/dist/index.js +61 -48
 - package/dist/index.js.map +1 -1
 - package/dist/index.mjs +11 -11
 - package/dist/menu-button.js +41 -28
 - package/dist/menu-button.js.map +1 -1
 - package/dist/menu-button.mjs +3 -3
 - package/dist/menu-context.d.mts +2 -2
 - package/dist/menu-context.d.ts +2 -2
 - package/dist/menu-context.js.map +1 -1
 - package/dist/menu-context.mjs +1 -1
 - package/dist/menu-divider.js.map +1 -1
 - package/dist/menu-divider.mjs +2 -2
 - package/dist/menu-group.js.map +1 -1
 - package/dist/menu-group.mjs +2 -2
 - package/dist/menu-item.d.mts +24 -0
 - package/dist/menu-item.d.ts +24 -0
 - package/dist/menu-item.js +34 -21
 - package/dist/menu-item.js.map +1 -1
 - package/dist/menu-item.mjs +2 -2
 - package/dist/menu-list.js.map +1 -1
 - package/dist/menu-list.mjs +2 -2
 - package/dist/menu-option-group.js +41 -28
 - package/dist/menu-option-group.js.map +1 -1
 - package/dist/menu-option-group.mjs +4 -4
 - package/dist/menu-separator.js.map +1 -1
 - package/dist/menu-separator.mjs +2 -2
 - package/dist/menu.js +13 -13
 - package/dist/menu.js.map +1 -1
 - package/dist/menu.mjs +2 -2
 - package/package.json +11 -11
 - package/dist/chunk-72J22E3I.mjs.map +0 -1
 - package/dist/chunk-HAW3H5KJ.mjs.map +0 -1
 - package/dist/chunk-OP45KQJ6.mjs.map +0 -1
 - package/dist/chunk-VPMWBZWN.mjs.map +0 -1
 - package/dist/chunk-X5YYJEDZ.mjs.map +0 -1
 - /package/dist/{chunk-6HK6THLX.mjs.map → chunk-6PJHU6VG.mjs.map} +0 -0
 - /package/dist/{chunk-SWY6VV4V.mjs.map → chunk-AGHG37SL.mjs.map} +0 -0
 - /package/dist/{chunk-KGWPKJI2.mjs.map → chunk-H662AKOV.mjs.map} +0 -0
 - /package/dist/{chunk-3YBMMWDY.mjs.map → chunk-HWUNOGPF.mjs.map} +0 -0
 - /package/dist/{chunk-XZJXCEI7.mjs.map → chunk-VDTE5ERA.mjs.map} +0 -0
 - /package/dist/{chunk-4MJ2ZBIB.mjs.map → chunk-ZG5BKE24.mjs.map} +0 -0
 
    
        package/dist/menu-button.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-button.tsx","../src/menu-context.ts","../src/menu-item.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport type { KeyboardEvent, ReactNode } from \"react\"\nimport type { MenuIconProps } from \"./menu-item\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { ChevronIcon } from \"@yamada-ui/icon\"\nimport { PopoverTrigger } from \"@yamada-ui/popover\"\nimport {\n  assignRef,\n  cx,\n  dataAttr,\n  funcAll,\n  handlerAll,\n  mergeRefs,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useId, useMemo } from \"react\"\nimport { useMenu, useUpstreamMenuItem } from \"./menu-context\"\nimport { MenuIcon } from \"./menu-item\"\n\nexport interface MenuButtonProps extends HTMLUIProps<\"button\"> {}\n\nexport const MenuButton = forwardRef<MenuButtonProps, \"button\">(\n  ({ id, as, className, children, ...rest }, ref) => {\n    const { onKeyDownRef, onUpstreamRestoreFocus } = useUpstreamMenuItem() ?? {}\n    const {\n      buttonRef,\n      isOpen,\n      onClose,\n      onFocusFirstItem,\n      onFocusLastItem,\n      onOpen,\n    } = useMenu()\n    const uuid = useId()\n\n    id ??= uuid\n\n    const onKeyDown = useCallback(\n      (ev: KeyboardEvent) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function } = {\n          ArrowDown: funcAll(onOpen, onFocusFirstItem),\n          ArrowUp: funcAll(onOpen, onFocusLastItem),\n          Enter: funcAll(onOpen, onFocusFirstItem),\n          Space: funcAll(onOpen, onFocusFirstItem),\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n\n        action()\n      },\n      [onFocusFirstItem, onFocusLastItem, onOpen],\n    )\n\n    const onItemKeyDown = useCallback(\n      (ev: KeyboardEvent<HTMLDivElement>) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function | undefined } = {\n          ArrowLeft: isOpen\n            ? funcAll(onUpstreamRestoreFocus, onClose)\n            : undefined,\n          ArrowRight: !isOpen ? funcAll(onOpen, onFocusFirstItem) : undefined,\n          Enter: !isOpen ? funcAll(onOpen, onFocusFirstItem) : undefined,\n          Space: !isOpen ? funcAll(onOpen, onFocusFirstItem) : undefined,\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n\n        action()\n      },\n      [isOpen, onOpen, onFocusFirstItem, onUpstreamRestoreFocus, onClose],\n    )\n\n    assignRef(onKeyDownRef, onItemKeyDown)\n\n    const Component = useMemo(() => (as ? ui(as) : Button), [as])\n\n    return (\n      <PopoverTrigger>\n        <Component\n          id={id}\n          ref={mergeRefs(buttonRef, ref)}\n          className={cx(\"ui-menu\", className)}\n          aria-haspopup=\"menu\"\n          {...rest}\n          data-active={dataAttr(isOpen)}\n          onKeyDown={handlerAll(rest.onKeyDown, onKeyDown)}\n        >\n          {children}\n        </Component>\n      </PopoverTrigger>\n    )\n  },\n)\n\nMenuButton.displayName = \"MenuButton\"\nMenuButton.__ui__ = \"MenuButton\"\n\nconst Button = forwardRef<MenuButtonProps, \"button\">((rest, ref) => {\n  const { styles } = useMenu()\n\n  const css: CSSUIObject = {\n    alignItems: \"center\",\n    appearance: \"none\",\n    display: \"inline-flex\",\n    outline: 0,\n    ...styles.button,\n  }\n\n  return <ui.button ref={ref} __css={css} {...rest} />\n})\n\nexport interface MenuItemButtonProps extends MenuButtonProps {\n  icon?: ReactNode\n  iconProps?: MenuIconProps\n  innerProps?: HTMLUIProps<\"span\">\n}\n\nexport const MenuItemButton = forwardRef<MenuItemButtonProps, \"button\">(\n  ({ className, children, icon, iconProps, innerProps, ...rest }, ref) => {\n    return (\n      <MenuButton\n        ref={ref}\n        className={cx(\"ui-menu__item-button\", className)}\n        flex=\"1\"\n        {...rest}\n      >\n        <ui.span as=\"span\" flex=\"1\" {...innerProps}>\n          {children}\n        </ui.span>\n\n        <MenuIcon {...iconProps}>\n          {icon ?? <ChevronIcon fontSize=\"1.5em\" transform=\"rotate(-90deg)\" />}\n        </MenuIcon>\n      </MenuButton>\n    )\n  },\n)\n\nMenuItemButton.displayName = \"MenuItemButton\"\nMenuItemButton.__ui__ = \"MenuItemButton\"\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  isNested: boolean\n  isOpen: boolean\n  menuRef: RefObject<HTMLDivElement>\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n","import type { CSSUIObject, FC, HTMLUIProps } from \"@yamada-ui/core\"\nimport type {\n  KeyboardEvent,\n  KeyboardEventHandler,\n  MouseEvent,\n  ReactElement,\n} from \"react\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport {\n  cx,\n  dataAttr,\n  funcAll,\n  handlerAll,\n  isActiveElement,\n  isHTMLElement,\n  mergeRefs,\n  useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useId, useRef, useState } from \"react\"\nimport {\n  UpstreamMenuItemProvider,\n  useMenu,\n  useMenuDescendant,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nconst isTargetMenuItem = (target: EventTarget | null) => {\n  return (\n    isHTMLElement(target) &&\n    !!target.getAttribute(\"role\")?.startsWith(\"menuitem\")\n  )\n}\n\ninterface MenuItemOptions {\n  /**\n   * If `true`, the list element will be closed when selected.\n   *\n   * @default false\n   */\n  closeOnSelect?: boolean\n  /**\n   * Right-aligned label text content, useful for displaying hotkeys.\n   */\n  command?: string\n  /**\n   * The menu item icon to use.\n   */\n  icon?: ReactElement\n  /**\n   * If `true`, the menu item will be disabled.\n   *\n   * @default false\n   */\n  isDisabled?: boolean\n  /**\n   * If `true`, the menu item will be focusable.\n   *\n   * @default false\n   */\n  isFocusable?: boolean\n}\n\nexport interface MenuItemProps extends HTMLUIProps, MenuItemOptions {}\n\nexport const MenuItem = forwardRef<MenuItemProps, \"div\">(\n  (\n    {\n      id,\n      className,\n      children,\n      closeOnSelect: customCloseOnSelect,\n      command,\n      icon,\n      isDisabled,\n      isFocusable,\n      ...props\n    },\n    ref,\n  ) => {\n    const {\n      closeOnSelect,\n      focusedIndex,\n      isNested,\n      isOpen,\n      menuRef,\n      requestAnimationFrameId,\n      setFocusedIndex,\n      styles,\n      onClose,\n      onUpstreamClose,\n    } = useMenu()\n    const { onUpstreamRestoreFocus } = useUpstreamMenuItem() ?? {}\n    const [isDownstreamOpen, setDownstreamOpen] = useState<boolean>(false)\n    const uuid = useId()\n    const itemRef = useRef<HTMLDivElement>(null)\n    const hasDownstreamRef = useRef<boolean>(false)\n    const onKeyDownRef = useRef<KeyboardEventHandler<HTMLDivElement>>(\n      () => void 0,\n    )\n\n    id ??= uuid\n\n    const trulyDisabled = isDisabled && !isFocusable\n    const type = itemRef.current?.getAttribute(\"type\")\n    const role = !!type\n      ? type === \"checkbox\"\n        ? \"menuitemcheckbox\"\n        : \"menuitemradio\"\n      : \"menuitem\"\n\n    const { index, register } = useMenuDescendant({ disabled: trulyDisabled })\n\n    const isFocused = index === focusedIndex\n\n    const onMouseOver = useCallback(() => {\n      if (isDisabled) return\n\n      setFocusedIndex(index)\n    }, [index, isDisabled, setFocusedIndex])\n\n    const onMouseLeave = useCallback(() => {\n      if (isDisabled) return\n\n      setFocusedIndex(-1)\n    }, [setFocusedIndex, isDisabled])\n\n    const onClick = useCallback(\n      (ev: MouseEvent<HTMLDivElement>) => {\n        if (!isTargetMenuItem(ev.currentTarget)) return\n\n        const hasDownstream = hasDownstreamRef.current\n\n        if (customCloseOnSelect ?? (!hasDownstream && closeOnSelect)) {\n          onClose()\n          onUpstreamClose?.()\n        }\n      },\n      [customCloseOnSelect, closeOnSelect, onClose, onUpstreamClose],\n    )\n\n    const onFocus = useCallback(() => {\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onRestoreFocus = useCallback(() => {\n      itemRef.current?.focus()\n\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onKeyDown = useCallback(\n      (ev: KeyboardEvent<HTMLDivElement>) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function | undefined } = {\n          ArrowLeft: isNested\n            ? funcAll(onUpstreamRestoreFocus, onClose)\n            : undefined,\n          Space: !hasDownstreamRef.current\n            ? funcAll(onUpstreamClose, onClose)\n            : undefined,\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n        ev.stopPropagation()\n\n        action()\n      },\n      [isNested, onUpstreamRestoreFocus, onClose, onUpstreamClose],\n    )\n\n    const rest = useClickable<HTMLDivElement>({\n      clickOnSpace: false,\n      focusOnClick: false,\n      ...props,\n      ref: mergeRefs(register, itemRef, ref),\n      isDisabled,\n      isFocusable,\n      onClick: handlerAll(props.onClick, onClick),\n      onFocus: handlerAll(props.onFocus, onFocus),\n      onKeyDown: handlerAll(props.onKeyDown, onKeyDown, onKeyDownRef.current),\n      onMouseLeave: handlerAll(props.onMouseLeave, onMouseLeave),\n      onMouseOver: handlerAll(props.onMouseOver, onMouseOver),\n    })\n\n    useUpdateEffect(() => {\n      if (!isOpen) return\n\n      const id = requestAnimationFrameId.current\n\n      if (isFocused && !trulyDisabled && itemRef.current) {\n        if (id) cancelAnimationFrame(id)\n\n        requestAnimationFrameId.current = requestAnimationFrame(() => {\n          itemRef.current?.focus({ preventScroll: true })\n\n          requestAnimationFrameId.current = null\n        })\n      } else if (menuRef.current && !isActiveElement(menuRef.current)) {\n        menuRef.current.focus({ preventScroll: true })\n      }\n\n      return () => {\n        if (id) cancelAnimationFrame(id)\n      }\n    }, [isFocused, trulyDisabled, menuRef, isOpen])\n\n    children =\n      icon || command ? (\n        <ui.span style={{ flex: 1 }}>{children}</ui.span>\n      ) : (\n        children\n      )\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      color: \"inherit\",\n      display: \"flex\",\n      flex: \"0 0 auto\",\n      gap: \"0.75rem\",\n      outline: 0,\n      textAlign: \"start\",\n      textDecoration: \"none\",\n      userSelect: \"none\",\n      width: \"100%\",\n      ...styles.item,\n    }\n\n    return (\n      <UpstreamMenuItemProvider\n        value={{\n          hasDownstreamRef,\n          setDownstreamOpen,\n          onKeyDownRef,\n          onUpstreamRestoreFocus: onRestoreFocus,\n        }}\n      >\n        <ui.div\n          id={id}\n          className={cx(\"ui-menu__item\", className)}\n          data-focus={dataAttr(isDownstreamOpen)}\n          __css={css}\n          {...rest}\n          role={role}\n          tabIndex={!isDownstreamOpen && isFocused ? 0 : -1}\n        >\n          {icon ? <MenuIcon>{icon}</MenuIcon> : null}\n          {children}\n          {command ? <MenuCommand>{command}</MenuCommand> : null}\n        </ui.div>\n      </UpstreamMenuItemProvider>\n    )\n  },\n)\n\nMenuItem.displayName = \"MenuItem\"\nMenuItem.__ui__ = \"MenuItem\"\n\ninterface MenuOptionItemOptions {\n  /**\n   * The type of the menu option item.\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * The menu option item icon to use.\n   */\n  icon?: null | ReactElement\n  /**\n   * If `true`, the checkbox or radio will be checked.\n   *\n   * @default false\n   */\n  isChecked?: boolean\n  /**\n   * The value of the menu option item.\n   */\n  value?: string\n}\n\nexport interface MenuOptionItemProps\n  extends Omit<MenuItemProps, \"command\" | \"icon\" | \"value\">,\n    MenuOptionItemOptions {}\n\nexport const MenuOptionItem = forwardRef<MenuOptionItemProps, \"button\">(\n  (\n    { className, children, closeOnSelect = false, icon, isChecked, ...rest },\n    ref,\n  ) => {\n    return (\n      <MenuItem\n        ref={ref}\n        className={cx(\"ui-menu__item--option\", className)}\n        aria-checked={isChecked}\n        closeOnSelect={closeOnSelect}\n        {...rest}\n      >\n        {icon !== null ? (\n          <MenuIcon opacity={isChecked ? 1 : 0}>\n            {icon || <CheckIcon />}\n          </MenuIcon>\n        ) : null}\n        {children}\n      </MenuItem>\n    )\n  },\n)\n\nMenuOptionItem.displayName = \"MenuOptionItem\"\nMenuOptionItem.__ui__ = \"MenuOptionItem\"\n\nexport interface MenuIconProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuIcon = forwardRef<MenuIconProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      display: \"inline-flex\",\n      flexShrink: 0,\n      fontSize: \"0.85em\",\n      justifyContent: \"center\",\n      ...styles.icon,\n    }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__icon\", className)}\n        aria-hidden\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuIcon.displayName = \"MenuIcon\"\nMenuIcon.__ui__ = \"MenuIcon\"\n\nexport interface MenuCommandProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuCommand = forwardRef<MenuCommandProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = { ...styles.command }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__command\", className)}\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuCommand.displayName = \"MenuCommand\"\nMenuCommand.__ui__ = \"MenuCommand\"\n\nconst CheckIcon: FC = () => (\n  <svg height=\"1em\" viewBox=\"0 0 14 14\" width=\"1em\">\n    <polygon\n      fill=\"currentColor\"\n      points=\"5.5 11.9993304 14 3.49933039 12.5 2 5.5 8.99933039 1.5 4.9968652 0 6.49933039\"\n    />\n  </svg>\n)\n"],"mappings":"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","names":["import_core","import_utils","import_react","import_utils","_a","id","import_jsx_runtime"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu-button.tsx","../src/menu-context.ts","../src/menu-item.tsx"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport type { KeyboardEvent, ReactNode } from \"react\"\nimport type { MenuIconProps } from \"./menu-item\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { ChevronIcon } from \"@yamada-ui/icon\"\nimport { PopoverTrigger } from \"@yamada-ui/popover\"\nimport {\n  assignRef,\n  cx,\n  dataAttr,\n  funcAll,\n  handlerAll,\n  mergeRefs,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useId, useMemo } from \"react\"\nimport { useMenu, useUpstreamMenuItem } from \"./menu-context\"\nimport { MenuIcon } from \"./menu-item\"\n\nexport interface MenuButtonProps extends HTMLUIProps<\"button\"> {}\n\nexport const MenuButton = forwardRef<MenuButtonProps, \"button\">(\n  ({ id, as, className, children, ...rest }, ref) => {\n    const { onKeyDownRef, onUpstreamRestoreFocus } = useUpstreamMenuItem() ?? {}\n    const {\n      buttonRef,\n      open,\n      onClose,\n      onFocusFirstItem,\n      onFocusLastItem,\n      onOpen,\n    } = useMenu()\n    const uuid = useId()\n\n    id ??= uuid\n\n    const onKeyDown = useCallback(\n      (ev: KeyboardEvent) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function } = {\n          ArrowDown: funcAll(onOpen, onFocusFirstItem),\n          ArrowUp: funcAll(onOpen, onFocusLastItem),\n          Enter: funcAll(onOpen, onFocusFirstItem),\n          Space: funcAll(onOpen, onFocusFirstItem),\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n\n        action()\n      },\n      [onFocusFirstItem, onFocusLastItem, onOpen],\n    )\n\n    const onItemKeyDown = useCallback(\n      (ev: KeyboardEvent<HTMLDivElement>) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function | undefined } = {\n          ArrowLeft: open\n            ? funcAll(onUpstreamRestoreFocus, onClose)\n            : undefined,\n          ArrowRight: !open ? funcAll(onOpen, onFocusFirstItem) : undefined,\n          Enter: !open ? funcAll(onOpen, onFocusFirstItem) : undefined,\n          Space: !open ? funcAll(onOpen, onFocusFirstItem) : undefined,\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n\n        action()\n      },\n      [open, onOpen, onFocusFirstItem, onUpstreamRestoreFocus, onClose],\n    )\n\n    assignRef(onKeyDownRef, onItemKeyDown)\n\n    const Component = useMemo(() => (as ? ui(as) : Button), [as])\n\n    return (\n      <PopoverTrigger>\n        <Component\n          id={id}\n          ref={mergeRefs(buttonRef, ref)}\n          className={cx(\"ui-menu\", className)}\n          aria-haspopup=\"menu\"\n          {...rest}\n          data-active={dataAttr(open)}\n          onKeyDown={handlerAll(rest.onKeyDown, onKeyDown)}\n        >\n          {children}\n        </Component>\n      </PopoverTrigger>\n    )\n  },\n)\n\nMenuButton.displayName = \"MenuButton\"\nMenuButton.__ui__ = \"MenuButton\"\n\nconst Button = forwardRef<MenuButtonProps, \"button\">((rest, ref) => {\n  const { styles } = useMenu()\n\n  const css: CSSUIObject = {\n    alignItems: \"center\",\n    appearance: \"none\",\n    display: \"inline-flex\",\n    outline: 0,\n    ...styles.button,\n  }\n\n  return <ui.button ref={ref} __css={css} {...rest} />\n})\n\nexport interface MenuItemButtonProps extends MenuButtonProps {\n  icon?: ReactNode\n  iconProps?: MenuIconProps\n  innerProps?: HTMLUIProps<\"span\">\n}\n\nexport const MenuItemButton = forwardRef<MenuItemButtonProps, \"button\">(\n  ({ className, children, icon, iconProps, innerProps, ...rest }, ref) => {\n    return (\n      <MenuButton\n        ref={ref}\n        className={cx(\"ui-menu__item-button\", className)}\n        flex=\"1\"\n        {...rest}\n      >\n        <ui.span as=\"span\" flex=\"1\" {...innerProps}>\n          {children}\n        </ui.span>\n\n        <MenuIcon {...iconProps}>\n          {icon ?? <ChevronIcon fontSize=\"1.5em\" transform=\"rotate(-90deg)\" />}\n        </MenuIcon>\n      </MenuButton>\n    )\n  },\n)\n\nMenuItemButton.displayName = \"MenuItemButton\"\nMenuItemButton.__ui__ = \"MenuItemButton\"\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  menuRef: RefObject<HTMLDivElement>\n  nested: boolean\n  open: boolean\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n","import type { CSSUIObject, FC, HTMLUIProps } from \"@yamada-ui/core\"\nimport type {\n  KeyboardEvent,\n  KeyboardEventHandler,\n  MouseEvent,\n  ReactElement,\n} from \"react\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport {\n  cx,\n  dataAttr,\n  funcAll,\n  handlerAll,\n  isActiveElement,\n  isHTMLElement,\n  mergeRefs,\n  useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useId, useRef, useState } from \"react\"\nimport {\n  UpstreamMenuItemProvider,\n  useMenu,\n  useMenuDescendant,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nconst isTargetMenuItem = (target: EventTarget | null) => {\n  return (\n    isHTMLElement(target) &&\n    !!target.getAttribute(\"role\")?.startsWith(\"menuitem\")\n  )\n}\n\ninterface MenuItemOptions {\n  /**\n   * If `true`, the list element will be closed when selected.\n   *\n   * @default false\n   */\n  closeOnSelect?: boolean\n  /**\n   * Right-aligned label text content, useful for displaying hotkeys.\n   */\n  command?: string\n  /**\n   * If `true`, the menu item will be disabled.\n   *\n   * @default false\n   */\n  disabled?: boolean\n  /**\n   * If `true`, the menu item will be focusable.\n   *\n   * @default false\n   */\n  focusable?: boolean\n  /**\n   * The menu item icon to use.\n   */\n  icon?: ReactElement\n  /**\n   * If `true`, the menu item will be disabled.\n   *\n   * @default false\n   *\n   * @deprecated Use `disabled` instead.\n   */\n  isDisabled?: boolean\n  /**\n   * If `true`, the menu item will be focusable.\n   *\n   * @default false\n   *\n   * @deprecated Use `focusable` instead.\n   */\n  isFocusable?: boolean\n}\n\nexport interface MenuItemProps extends HTMLUIProps, MenuItemOptions {}\n\nexport const MenuItem = forwardRef<MenuItemProps, \"div\">(\n  (\n    {\n      id,\n      className,\n      children,\n      closeOnSelect: customCloseOnSelect,\n      command,\n      disabled,\n      focusable,\n      icon,\n      isDisabled,\n      isFocusable,\n      ...props\n    },\n    ref,\n  ) => {\n    disabled ??= isDisabled\n    focusable ??= isFocusable\n\n    const {\n      closeOnSelect,\n      focusedIndex,\n      menuRef,\n      nested,\n      open,\n      requestAnimationFrameId,\n      setFocusedIndex,\n      styles,\n      onClose,\n      onUpstreamClose,\n    } = useMenu()\n    const { onUpstreamRestoreFocus } = useUpstreamMenuItem() ?? {}\n    const [downstreamOpen, setDownstreamOpen] = useState<boolean>(false)\n    const uuid = useId()\n    const itemRef = useRef<HTMLDivElement>(null)\n    const hasDownstreamRef = useRef<boolean>(false)\n    const onKeyDownRef = useRef<KeyboardEventHandler<HTMLDivElement>>(\n      () => void 0,\n    )\n\n    id ??= uuid\n\n    const trulyDisabled = disabled && !focusable\n    const type = itemRef.current?.getAttribute(\"type\")\n    const role = !!type\n      ? type === \"checkbox\"\n        ? \"menuitemcheckbox\"\n        : \"menuitemradio\"\n      : \"menuitem\"\n\n    const { index, register } = useMenuDescendant({ disabled: trulyDisabled })\n\n    const focused = index === focusedIndex\n\n    const onMouseOver = useCallback(() => {\n      if (disabled) return\n\n      setFocusedIndex(index)\n    }, [index, disabled, setFocusedIndex])\n\n    const onMouseLeave = useCallback(() => {\n      if (disabled) return\n\n      setFocusedIndex(-1)\n    }, [setFocusedIndex, disabled])\n\n    const onClick = useCallback(\n      (ev: MouseEvent<HTMLDivElement>) => {\n        if (!isTargetMenuItem(ev.currentTarget)) return\n\n        const hasDownstream = hasDownstreamRef.current\n\n        if (customCloseOnSelect ?? (!hasDownstream && closeOnSelect)) {\n          onClose()\n          onUpstreamClose?.()\n        }\n      },\n      [customCloseOnSelect, closeOnSelect, onClose, onUpstreamClose],\n    )\n\n    const onFocus = useCallback(() => {\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onRestoreFocus = useCallback(() => {\n      itemRef.current?.focus()\n\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onKeyDown = useCallback(\n      (ev: KeyboardEvent<HTMLDivElement>) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function | undefined } = {\n          ArrowLeft: nested\n            ? funcAll(onUpstreamRestoreFocus, onClose)\n            : undefined,\n          Space: !hasDownstreamRef.current\n            ? funcAll(onUpstreamClose, onClose)\n            : undefined,\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n        ev.stopPropagation()\n\n        action()\n      },\n      [nested, onUpstreamRestoreFocus, onClose, onUpstreamClose],\n    )\n\n    const rest = useClickable<HTMLDivElement>({\n      clickOnSpace: false,\n      focusOnClick: false,\n      ...props,\n      ref: mergeRefs(register, itemRef, ref),\n      disabled,\n      focusable,\n      onClick: handlerAll(props.onClick, onClick),\n      onFocus: handlerAll(props.onFocus, onFocus),\n      onKeyDown: handlerAll(props.onKeyDown, onKeyDown, onKeyDownRef.current),\n      onMouseLeave: handlerAll(props.onMouseLeave, onMouseLeave),\n      onMouseOver: handlerAll(props.onMouseOver, onMouseOver),\n    })\n\n    useUpdateEffect(() => {\n      if (!open) return\n\n      const id = requestAnimationFrameId.current\n\n      if (focused && !trulyDisabled && itemRef.current) {\n        if (id) cancelAnimationFrame(id)\n\n        requestAnimationFrameId.current = requestAnimationFrame(() => {\n          itemRef.current?.focus({ preventScroll: true })\n\n          requestAnimationFrameId.current = null\n        })\n      } else if (menuRef.current && !isActiveElement(menuRef.current)) {\n        menuRef.current.focus({ preventScroll: true })\n      }\n\n      return () => {\n        if (id) cancelAnimationFrame(id)\n      }\n    }, [focused, trulyDisabled, menuRef, open])\n\n    children =\n      icon || command ? (\n        <ui.span style={{ flex: 1 }}>{children}</ui.span>\n      ) : (\n        children\n      )\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      color: \"inherit\",\n      display: \"flex\",\n      flex: \"0 0 auto\",\n      gap: \"0.75rem\",\n      outline: 0,\n      textAlign: \"start\",\n      textDecoration: \"none\",\n      userSelect: \"none\",\n      width: \"100%\",\n      ...styles.item,\n    }\n\n    return (\n      <UpstreamMenuItemProvider\n        value={{\n          hasDownstreamRef,\n          setDownstreamOpen,\n          onKeyDownRef,\n          onUpstreamRestoreFocus: onRestoreFocus,\n        }}\n      >\n        <ui.div\n          id={id}\n          className={cx(\"ui-menu__item\", className)}\n          data-focus={dataAttr(downstreamOpen)}\n          __css={css}\n          {...rest}\n          role={role}\n          tabIndex={!downstreamOpen && focused ? 0 : -1}\n        >\n          {icon ? <MenuIcon>{icon}</MenuIcon> : null}\n          {children}\n          {command ? <MenuCommand>{command}</MenuCommand> : null}\n        </ui.div>\n      </UpstreamMenuItemProvider>\n    )\n  },\n)\n\nMenuItem.displayName = \"MenuItem\"\nMenuItem.__ui__ = \"MenuItem\"\n\ninterface MenuOptionItemOptions {\n  /**\n   * The type of the menu option item.\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * If `true`, the checkbox or radio will be checked.\n   *\n   * @default false\n   */\n  checked?: boolean\n  /**\n   * The menu option item icon to use.\n   */\n  icon?: null | ReactElement\n  /**\n   * If `true`, the checkbox or radio will be checked.\n   *\n   * @default false\n   *\n   * @deprecated Use `checked` instead.\n   */\n  isChecked?: boolean\n  /**\n   * The value of the menu option item.\n   */\n  value?: string\n}\n\nexport interface MenuOptionItemProps\n  extends Omit<MenuItemProps, \"command\" | \"icon\" | \"value\">,\n    MenuOptionItemOptions {}\n\nexport const MenuOptionItem = forwardRef<MenuOptionItemProps, \"button\">(\n  (\n    {\n      className,\n      checked,\n      children,\n      closeOnSelect = false,\n      icon,\n      isChecked,\n      ...rest\n    },\n    ref,\n  ) => {\n    checked ??= isChecked\n\n    return (\n      <MenuItem\n        ref={ref}\n        className={cx(\"ui-menu__item--option\", className)}\n        aria-checked={checked}\n        closeOnSelect={closeOnSelect}\n        {...rest}\n      >\n        {icon !== null ? (\n          <MenuIcon opacity={checked ? 1 : 0}>{icon || <CheckIcon />}</MenuIcon>\n        ) : null}\n        {children}\n      </MenuItem>\n    )\n  },\n)\n\nMenuOptionItem.displayName = \"MenuOptionItem\"\nMenuOptionItem.__ui__ = \"MenuOptionItem\"\n\nexport interface MenuIconProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuIcon = forwardRef<MenuIconProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      display: \"inline-flex\",\n      flexShrink: 0,\n      fontSize: \"0.85em\",\n      justifyContent: \"center\",\n      ...styles.icon,\n    }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__icon\", className)}\n        aria-hidden\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuIcon.displayName = \"MenuIcon\"\nMenuIcon.__ui__ = \"MenuIcon\"\n\nexport interface MenuCommandProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuCommand = forwardRef<MenuCommandProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = { ...styles.command }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__command\", className)}\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuCommand.displayName = \"MenuCommand\"\nMenuCommand.__ui__ = \"MenuCommand\"\n\nconst CheckIcon: FC = () => (\n  <svg height=\"1em\" viewBox=\"0 0 14 14\" width=\"1em\">\n    <polygon\n      fill=\"currentColor\"\n      points=\"5.5 11.9993304 14 3.49933039 12.5 2 5.5 8.99933039 1.5 4.9968652 0 6.49933039\"\n    />\n  </svg>\n)\n"],"mappings":"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","names":["import_core","import_utils","import_react","import_utils","_a","id","import_jsx_runtime"]}
         
     | 
    
        package/dist/menu-button.mjs
    CHANGED
    
    | 
         @@ -2,9 +2,9 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            import {
         
     | 
| 
       3 
3 
     | 
    
         
             
              MenuButton,
         
     | 
| 
       4 
4 
     | 
    
         
             
              MenuItemButton
         
     | 
| 
       5 
     | 
    
         
            -
            } from "./chunk- 
     | 
| 
       6 
     | 
    
         
            -
            import "./chunk- 
     | 
| 
       7 
     | 
    
         
            -
            import "./chunk- 
     | 
| 
      
 5 
     | 
    
         
            +
            } from "./chunk-DAEXVQLG.mjs";
         
     | 
| 
      
 6 
     | 
    
         
            +
            import "./chunk-TFGPDF5W.mjs";
         
     | 
| 
      
 7 
     | 
    
         
            +
            import "./chunk-IWH3B4PS.mjs";
         
     | 
| 
       8 
8 
     | 
    
         
             
            export {
         
     | 
| 
       9 
9 
     | 
    
         
             
              MenuButton,
         
     | 
| 
       10 
10 
     | 
    
         
             
              MenuItemButton
         
     | 
    
        package/dist/menu-context.d.mts
    CHANGED
    
    | 
         @@ -117,9 +117,9 @@ declare const useMenuDescendantsContext: () => { 
     | 
|
| 
       117 
117 
     | 
    
         
             
            interface MenuContext extends MenuOptions {
         
     | 
| 
       118 
118 
     | 
    
         
             
                buttonRef: RefObject<HTMLButtonElement>;
         
     | 
| 
       119 
119 
     | 
    
         
             
                focusedIndex: number;
         
     | 
| 
       120 
     | 
    
         
            -
                isNested: boolean;
         
     | 
| 
       121 
     | 
    
         
            -
                isOpen: boolean;
         
     | 
| 
       122 
120 
     | 
    
         
             
                menuRef: RefObject<HTMLDivElement>;
         
     | 
| 
      
 121 
     | 
    
         
            +
                nested: boolean;
         
     | 
| 
      
 122 
     | 
    
         
            +
                open: boolean;
         
     | 
| 
       123 
123 
     | 
    
         
             
                requestAnimationFrameId: MutableRefObject<null | number>;
         
     | 
| 
       124 
124 
     | 
    
         
             
                setFocusedIndex: Dispatch<SetStateAction<number>>;
         
     | 
| 
       125 
125 
     | 
    
         
             
                styles: {
         
     | 
    
        package/dist/menu-context.d.ts
    CHANGED
    
    | 
         @@ -117,9 +117,9 @@ declare const useMenuDescendantsContext: () => { 
     | 
|
| 
       117 
117 
     | 
    
         
             
            interface MenuContext extends MenuOptions {
         
     | 
| 
       118 
118 
     | 
    
         
             
                buttonRef: RefObject<HTMLButtonElement>;
         
     | 
| 
       119 
119 
     | 
    
         
             
                focusedIndex: number;
         
     | 
| 
       120 
     | 
    
         
            -
                isNested: boolean;
         
     | 
| 
       121 
     | 
    
         
            -
                isOpen: boolean;
         
     | 
| 
       122 
120 
     | 
    
         
             
                menuRef: RefObject<HTMLDivElement>;
         
     | 
| 
      
 121 
     | 
    
         
            +
                nested: boolean;
         
     | 
| 
      
 122 
     | 
    
         
            +
                open: boolean;
         
     | 
| 
       123 
123 
     | 
    
         
             
                requestAnimationFrameId: MutableRefObject<null | number>;
         
     | 
| 
       124 
124 
     | 
    
         
             
                setFocusedIndex: Dispatch<SetStateAction<number>>;
         
     | 
| 
       125 
125 
     | 
    
         
             
                styles: {
         
     | 
    
        package/dist/menu-context.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n   
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  menuRef: RefObject<HTMLDivElement>\n  nested: boolean\n  open: boolean\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AASA,4BAAiC;AACjC,mBAA8B;AAEvB,IAAM;AAAA,EACX;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,uBAAuB;AACzB,QAAI,wCAAiB;AAkBd,IAAM,CAAC,cAAc,OAAO,QAAI,4BAA2B;AAAA,EAChE,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;AAMM,IAAM,CAAC,qBAAqB,cAAc,QAC/C,4BAAkC;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AAQI,IAAM,CAAC,sBAAsB,eAAe,QACjD,4BAAmC;AAAA,EACjC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AASI,IAAM,CAAC,0BAA0B,mBAAmB,QACzD,4BAAuC;AAAA,EACrC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;","names":[]}
         
     | 
    
        package/dist/menu-context.mjs
    CHANGED
    
    
    
        package/dist/menu-divider.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-divider.tsx","../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { cx } from \"@yamada-ui/utils\"\nimport { useMenu } from \"./menu-context\"\n\n/**\n * @deprecated Use `MenuSeparatorProps` instead.\n */\nexport interface MenuDividerProps extends HTMLUIProps<\"hr\"> {}\n\n/**\n * @deprecated Use `MenuSeparator` instead.\n */\nexport const MenuDivider = forwardRef<MenuDividerProps, \"hr\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = { ...styles.divider }\n\n    return (\n      <ui.hr\n        ref={ref}\n        className={cx(\"ui-menu__divider\", className)}\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuDivider.displayName = \"MenuDivider\"\nMenuDivider.__ui__ = \"MenuDivider\"\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n   
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu-divider.tsx","../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { cx } from \"@yamada-ui/utils\"\nimport { useMenu } from \"./menu-context\"\n\n/**\n * @deprecated Use `MenuSeparatorProps` instead.\n */\nexport interface MenuDividerProps extends HTMLUIProps<\"hr\"> {}\n\n/**\n * @deprecated Use `MenuSeparator` instead.\n */\nexport const MenuDivider = forwardRef<MenuDividerProps, \"hr\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = { ...styles.divider }\n\n    return (\n      <ui.hr\n        ref={ref}\n        className={cx(\"ui-menu__divider\", className)}\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuDivider.displayName = \"MenuDivider\"\nMenuDivider.__ui__ = \"MenuDivider\"\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  menuRef: RefObject<HTMLDivElement>\n  nested: boolean\n  open: boolean\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA+B;AAC/B,IAAAA,gBAAmB;;;ACOnB,4BAAiC;AACjC,mBAA8B;AAEvB,IAAM;AAAA,EACX;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,uBAAuB;AACzB,QAAI,wCAAiB;AAkBd,IAAM,CAAC,cAAc,OAAO,QAAI,4BAA2B;AAAA,EAChE,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;AAMM,IAAM,CAAC,qBAAqB,cAAc,QAC/C,4BAAkC;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AAQI,IAAM,CAAC,sBAAsB,eAAe,QACjD,4BAAmC;AAAA,EACjC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AASI,IAAM,CAAC,0BAA0B,mBAAmB,QACzD,4BAAuC;AAAA,EACrC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;;;ADrDG;AAPC,IAAM,kBAAc;AAAA,EACzB,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ;AAC/B,UAAM,EAAE,OAAO,IAAI,QAAQ;AAE3B,UAAM,MAAmB,EAAE,GAAG,OAAO,QAAQ;AAE7C,WACE;AAAA,MAAC,eAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,eAAW,kBAAG,oBAAoB,SAAS;AAAA,QAC3C,OAAO;AAAA,QACN,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;AAC1B,YAAY,SAAS;","names":["import_utils"]}
         
     | 
    
        package/dist/menu-divider.mjs
    CHANGED
    
    
    
        package/dist/menu-group.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-group.tsx","../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { cx } from \"@yamada-ui/utils\"\nimport { useId } from \"react\"\nimport { useMenu } from \"./menu-context\"\n\nexport interface MenuGroupProps extends HTMLUIProps {\n  /**\n   * The label of the group.\n   */\n  label?: string\n  /**\n   * Props for menu group element.\n   */\n  labelProps?: HTMLUIProps<\"header\">\n}\n\nexport const MenuGroup = forwardRef<MenuGroupProps, \"div\">(\n  ({ className, children, label, labelProps, ...rest }, ref) => {\n    const { styles } = useMenu()\n    const id = useId()\n    const labelId = labelProps?.id ?? id\n\n    const css: CSSUIObject = { ...styles.group }\n\n    return (\n      <ui.section\n        ref={ref}\n        className={cx(\"ui-menu__item\", \"ui-menu__item--group\", className)}\n        aria-labelledby={labelId}\n        role=\"group\"\n        __css={css}\n        {...rest}\n      >\n        {label ? (\n          <ui.header\n            className={cx(\"ui-menu__item--group-label\")}\n            role=\"presentation\"\n            __css={styles.groupLabel}\n            {...labelProps}\n            id={labelId}\n          >\n            {label}\n          </ui.header>\n        ) : null}\n\n        <ui.div className=\"ui-menu__item__group\">{children}</ui.div>\n      </ui.section>\n    )\n  },\n)\n\nMenuGroup.displayName = \"MenuGroup\"\nMenuGroup.__ui__ = \"MenuGroup\"\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n   
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu-group.tsx","../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject, HTMLUIProps } from \"@yamada-ui/core\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { cx } from \"@yamada-ui/utils\"\nimport { useId } from \"react\"\nimport { useMenu } from \"./menu-context\"\n\nexport interface MenuGroupProps extends HTMLUIProps {\n  /**\n   * The label of the group.\n   */\n  label?: string\n  /**\n   * Props for menu group element.\n   */\n  labelProps?: HTMLUIProps<\"header\">\n}\n\nexport const MenuGroup = forwardRef<MenuGroupProps, \"div\">(\n  ({ className, children, label, labelProps, ...rest }, ref) => {\n    const { styles } = useMenu()\n    const id = useId()\n    const labelId = labelProps?.id ?? id\n\n    const css: CSSUIObject = { ...styles.group }\n\n    return (\n      <ui.section\n        ref={ref}\n        className={cx(\"ui-menu__item\", \"ui-menu__item--group\", className)}\n        aria-labelledby={labelId}\n        role=\"group\"\n        __css={css}\n        {...rest}\n      >\n        {label ? (\n          <ui.header\n            className={cx(\"ui-menu__item--group-label\")}\n            role=\"presentation\"\n            __css={styles.groupLabel}\n            {...labelProps}\n            id={labelId}\n          >\n            {label}\n          </ui.header>\n        ) : null}\n\n        <ui.div className=\"ui-menu__item__group\">{children}</ui.div>\n      </ui.section>\n    )\n  },\n)\n\nMenuGroup.displayName = \"MenuGroup\"\nMenuGroup.__ui__ = \"MenuGroup\"\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  menuRef: RefObject<HTMLDivElement>\n  nested: boolean\n  open: boolean\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAA+B;AAC/B,IAAAA,gBAAmB;AACnB,mBAAsB;;;ACMtB,4BAAiC;AACjC,mBAA8B;AAEvB,IAAM;AAAA,EACX;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,uBAAuB;AACzB,QAAI,wCAAiB;AAkBd,IAAM,CAAC,cAAc,OAAO,QAAI,4BAA2B;AAAA,EAChE,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;AAMM,IAAM,CAAC,qBAAqB,cAAc,QAC/C,4BAAkC;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AAQI,IAAM,CAAC,sBAAsB,eAAe,QACjD,4BAAmC;AAAA,EACjC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AASI,IAAM,CAAC,0BAA0B,mBAAmB,QACzD,4BAAuC;AAAA,EACrC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;;;AD/CG;AATC,IAAM,gBAAY;AAAA,EACvB,CAAC,EAAE,WAAW,UAAU,OAAO,YAAY,GAAG,KAAK,GAAG,QAAQ;AAlBhE;AAmBI,UAAM,EAAE,OAAO,IAAI,QAAQ;AAC3B,UAAM,SAAK,oBAAM;AACjB,UAAM,WAAU,8CAAY,OAAZ,YAAkB;AAElC,UAAM,MAAmB,EAAE,GAAG,OAAO,MAAM;AAE3C,WACE;AAAA,MAAC,eAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,eAAW,kBAAG,iBAAiB,wBAAwB,SAAS;AAAA,QAChE,mBAAiB;AAAA,QACjB,MAAK;AAAA,QACL,OAAO;AAAA,QACN,GAAG;AAAA,QAEH;AAAA,kBACC;AAAA,YAAC,eAAG;AAAA,YAAH;AAAA,cACC,eAAW,kBAAG,4BAA4B;AAAA,cAC1C,MAAK;AAAA,cACL,OAAO,OAAO;AAAA,cACb,GAAG;AAAA,cACJ,IAAI;AAAA,cAEH;AAAA;AAAA,UACH,IACE;AAAA,UAEJ,4CAAC,eAAG,KAAH,EAAO,WAAU,wBAAwB,UAAS;AAAA;AAAA;AAAA,IACrD;AAAA,EAEJ;AACF;AAEA,UAAU,cAAc;AACxB,UAAU,SAAS;","names":["import_utils"]}
         
     | 
    
        package/dist/menu-group.mjs
    CHANGED
    
    
    
        package/dist/menu-item.d.mts
    CHANGED
    
    | 
         @@ -13,6 +13,18 @@ interface MenuItemOptions { 
     | 
|
| 
       13 
13 
     | 
    
         
             
                 * Right-aligned label text content, useful for displaying hotkeys.
         
     | 
| 
       14 
14 
     | 
    
         
             
                 */
         
     | 
| 
       15 
15 
     | 
    
         
             
                command?: string;
         
     | 
| 
      
 16 
     | 
    
         
            +
                /**
         
     | 
| 
      
 17 
     | 
    
         
            +
                 * If `true`, the menu item will be disabled.
         
     | 
| 
      
 18 
     | 
    
         
            +
                 *
         
     | 
| 
      
 19 
     | 
    
         
            +
                 * @default false
         
     | 
| 
      
 20 
     | 
    
         
            +
                 */
         
     | 
| 
      
 21 
     | 
    
         
            +
                disabled?: boolean;
         
     | 
| 
      
 22 
     | 
    
         
            +
                /**
         
     | 
| 
      
 23 
     | 
    
         
            +
                 * If `true`, the menu item will be focusable.
         
     | 
| 
      
 24 
     | 
    
         
            +
                 *
         
     | 
| 
      
 25 
     | 
    
         
            +
                 * @default false
         
     | 
| 
      
 26 
     | 
    
         
            +
                 */
         
     | 
| 
      
 27 
     | 
    
         
            +
                focusable?: boolean;
         
     | 
| 
       16 
28 
     | 
    
         
             
                /**
         
     | 
| 
       17 
29 
     | 
    
         
             
                 * The menu item icon to use.
         
     | 
| 
       18 
30 
     | 
    
         
             
                 */
         
     | 
| 
         @@ -21,12 +33,16 @@ interface MenuItemOptions { 
     | 
|
| 
       21 
33 
     | 
    
         
             
                 * If `true`, the menu item will be disabled.
         
     | 
| 
       22 
34 
     | 
    
         
             
                 *
         
     | 
| 
       23 
35 
     | 
    
         
             
                 * @default false
         
     | 
| 
      
 36 
     | 
    
         
            +
                 *
         
     | 
| 
      
 37 
     | 
    
         
            +
                 * @deprecated Use `disabled` instead.
         
     | 
| 
       24 
38 
     | 
    
         
             
                 */
         
     | 
| 
       25 
39 
     | 
    
         
             
                isDisabled?: boolean;
         
     | 
| 
       26 
40 
     | 
    
         
             
                /**
         
     | 
| 
       27 
41 
     | 
    
         
             
                 * If `true`, the menu item will be focusable.
         
     | 
| 
       28 
42 
     | 
    
         
             
                 *
         
     | 
| 
       29 
43 
     | 
    
         
             
                 * @default false
         
     | 
| 
      
 44 
     | 
    
         
            +
                 *
         
     | 
| 
      
 45 
     | 
    
         
            +
                 * @deprecated Use `focusable` instead.
         
     | 
| 
       30 
46 
     | 
    
         
             
                 */
         
     | 
| 
       31 
47 
     | 
    
         
             
                isFocusable?: boolean;
         
     | 
| 
       32 
48 
     | 
    
         
             
            }
         
     | 
| 
         @@ -38,6 +54,12 @@ interface MenuOptionItemOptions { 
     | 
|
| 
       38 
54 
     | 
    
         
             
                 * The type of the menu option item.
         
     | 
| 
       39 
55 
     | 
    
         
             
                 */
         
     | 
| 
       40 
56 
     | 
    
         
             
                type?: "checkbox" | "radio";
         
     | 
| 
      
 57 
     | 
    
         
            +
                /**
         
     | 
| 
      
 58 
     | 
    
         
            +
                 * If `true`, the checkbox or radio will be checked.
         
     | 
| 
      
 59 
     | 
    
         
            +
                 *
         
     | 
| 
      
 60 
     | 
    
         
            +
                 * @default false
         
     | 
| 
      
 61 
     | 
    
         
            +
                 */
         
     | 
| 
      
 62 
     | 
    
         
            +
                checked?: boolean;
         
     | 
| 
       41 
63 
     | 
    
         
             
                /**
         
     | 
| 
       42 
64 
     | 
    
         
             
                 * The menu option item icon to use.
         
     | 
| 
       43 
65 
     | 
    
         
             
                 */
         
     | 
| 
         @@ -46,6 +68,8 @@ interface MenuOptionItemOptions { 
     | 
|
| 
       46 
68 
     | 
    
         
             
                 * If `true`, the checkbox or radio will be checked.
         
     | 
| 
       47 
69 
     | 
    
         
             
                 *
         
     | 
| 
       48 
70 
     | 
    
         
             
                 * @default false
         
     | 
| 
      
 71 
     | 
    
         
            +
                 *
         
     | 
| 
      
 72 
     | 
    
         
            +
                 * @deprecated Use `checked` instead.
         
     | 
| 
       49 
73 
     | 
    
         
             
                 */
         
     | 
| 
       50 
74 
     | 
    
         
             
                isChecked?: boolean;
         
     | 
| 
       51 
75 
     | 
    
         
             
                /**
         
     | 
    
        package/dist/menu-item.d.ts
    CHANGED
    
    | 
         @@ -13,6 +13,18 @@ interface MenuItemOptions { 
     | 
|
| 
       13 
13 
     | 
    
         
             
                 * Right-aligned label text content, useful for displaying hotkeys.
         
     | 
| 
       14 
14 
     | 
    
         
             
                 */
         
     | 
| 
       15 
15 
     | 
    
         
             
                command?: string;
         
     | 
| 
      
 16 
     | 
    
         
            +
                /**
         
     | 
| 
      
 17 
     | 
    
         
            +
                 * If `true`, the menu item will be disabled.
         
     | 
| 
      
 18 
     | 
    
         
            +
                 *
         
     | 
| 
      
 19 
     | 
    
         
            +
                 * @default false
         
     | 
| 
      
 20 
     | 
    
         
            +
                 */
         
     | 
| 
      
 21 
     | 
    
         
            +
                disabled?: boolean;
         
     | 
| 
      
 22 
     | 
    
         
            +
                /**
         
     | 
| 
      
 23 
     | 
    
         
            +
                 * If `true`, the menu item will be focusable.
         
     | 
| 
      
 24 
     | 
    
         
            +
                 *
         
     | 
| 
      
 25 
     | 
    
         
            +
                 * @default false
         
     | 
| 
      
 26 
     | 
    
         
            +
                 */
         
     | 
| 
      
 27 
     | 
    
         
            +
                focusable?: boolean;
         
     | 
| 
       16 
28 
     | 
    
         
             
                /**
         
     | 
| 
       17 
29 
     | 
    
         
             
                 * The menu item icon to use.
         
     | 
| 
       18 
30 
     | 
    
         
             
                 */
         
     | 
| 
         @@ -21,12 +33,16 @@ interface MenuItemOptions { 
     | 
|
| 
       21 
33 
     | 
    
         
             
                 * If `true`, the menu item will be disabled.
         
     | 
| 
       22 
34 
     | 
    
         
             
                 *
         
     | 
| 
       23 
35 
     | 
    
         
             
                 * @default false
         
     | 
| 
      
 36 
     | 
    
         
            +
                 *
         
     | 
| 
      
 37 
     | 
    
         
            +
                 * @deprecated Use `disabled` instead.
         
     | 
| 
       24 
38 
     | 
    
         
             
                 */
         
     | 
| 
       25 
39 
     | 
    
         
             
                isDisabled?: boolean;
         
     | 
| 
       26 
40 
     | 
    
         
             
                /**
         
     | 
| 
       27 
41 
     | 
    
         
             
                 * If `true`, the menu item will be focusable.
         
     | 
| 
       28 
42 
     | 
    
         
             
                 *
         
     | 
| 
       29 
43 
     | 
    
         
             
                 * @default false
         
     | 
| 
      
 44 
     | 
    
         
            +
                 *
         
     | 
| 
      
 45 
     | 
    
         
            +
                 * @deprecated Use `focusable` instead.
         
     | 
| 
       30 
46 
     | 
    
         
             
                 */
         
     | 
| 
       31 
47 
     | 
    
         
             
                isFocusable?: boolean;
         
     | 
| 
       32 
48 
     | 
    
         
             
            }
         
     | 
| 
         @@ -38,6 +54,12 @@ interface MenuOptionItemOptions { 
     | 
|
| 
       38 
54 
     | 
    
         
             
                 * The type of the menu option item.
         
     | 
| 
       39 
55 
     | 
    
         
             
                 */
         
     | 
| 
       40 
56 
     | 
    
         
             
                type?: "checkbox" | "radio";
         
     | 
| 
      
 57 
     | 
    
         
            +
                /**
         
     | 
| 
      
 58 
     | 
    
         
            +
                 * If `true`, the checkbox or radio will be checked.
         
     | 
| 
      
 59 
     | 
    
         
            +
                 *
         
     | 
| 
      
 60 
     | 
    
         
            +
                 * @default false
         
     | 
| 
      
 61 
     | 
    
         
            +
                 */
         
     | 
| 
      
 62 
     | 
    
         
            +
                checked?: boolean;
         
     | 
| 
       41 
63 
     | 
    
         
             
                /**
         
     | 
| 
       42 
64 
     | 
    
         
             
                 * The menu option item icon to use.
         
     | 
| 
       43 
65 
     | 
    
         
             
                 */
         
     | 
| 
         @@ -46,6 +68,8 @@ interface MenuOptionItemOptions { 
     | 
|
| 
       46 
68 
     | 
    
         
             
                 * If `true`, the checkbox or radio will be checked.
         
     | 
| 
       47 
69 
     | 
    
         
             
                 *
         
     | 
| 
       48 
70 
     | 
    
         
             
                 * @default false
         
     | 
| 
      
 71 
     | 
    
         
            +
                 *
         
     | 
| 
      
 72 
     | 
    
         
            +
                 * @deprecated Use `checked` instead.
         
     | 
| 
       49 
73 
     | 
    
         
             
                 */
         
     | 
| 
       50 
74 
     | 
    
         
             
                isChecked?: boolean;
         
     | 
| 
       51 
75 
     | 
    
         
             
                /**
         
     | 
    
        package/dist/menu-item.js
    CHANGED
    
    | 
         @@ -71,18 +71,22 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       71 
71 
     | 
    
         
             
                children,
         
     | 
| 
       72 
72 
     | 
    
         
             
                closeOnSelect: customCloseOnSelect,
         
     | 
| 
       73 
73 
     | 
    
         
             
                command,
         
     | 
| 
      
 74 
     | 
    
         
            +
                disabled,
         
     | 
| 
      
 75 
     | 
    
         
            +
                focusable,
         
     | 
| 
       74 
76 
     | 
    
         
             
                icon,
         
     | 
| 
       75 
77 
     | 
    
         
             
                isDisabled,
         
     | 
| 
       76 
78 
     | 
    
         
             
                isFocusable,
         
     | 
| 
       77 
79 
     | 
    
         
             
                ...props
         
     | 
| 
       78 
80 
     | 
    
         
             
              }, ref) => {
         
     | 
| 
       79 
81 
     | 
    
         
             
                var _a, _b;
         
     | 
| 
      
 82 
     | 
    
         
            +
                disabled != null ? disabled : disabled = isDisabled;
         
     | 
| 
      
 83 
     | 
    
         
            +
                focusable != null ? focusable : focusable = isFocusable;
         
     | 
| 
       80 
84 
     | 
    
         
             
                const {
         
     | 
| 
       81 
85 
     | 
    
         
             
                  closeOnSelect,
         
     | 
| 
       82 
86 
     | 
    
         
             
                  focusedIndex,
         
     | 
| 
       83 
     | 
    
         
            -
                  isNested,
         
     | 
| 
       84 
     | 
    
         
            -
                  isOpen,
         
     | 
| 
       85 
87 
     | 
    
         
             
                  menuRef,
         
     | 
| 
      
 88 
     | 
    
         
            +
                  nested,
         
     | 
| 
      
 89 
     | 
    
         
            +
                  open,
         
     | 
| 
       86 
90 
     | 
    
         
             
                  requestAnimationFrameId,
         
     | 
| 
       87 
91 
     | 
    
         
             
                  setFocusedIndex,
         
     | 
| 
       88 
92 
     | 
    
         
             
                  styles,
         
     | 
| 
         @@ -90,7 +94,7 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       90 
94 
     | 
    
         
             
                  onUpstreamClose
         
     | 
| 
       91 
95 
     | 
    
         
             
                } = useMenu();
         
     | 
| 
       92 
96 
     | 
    
         
             
                const { onUpstreamRestoreFocus } = (_a = useUpstreamMenuItem()) != null ? _a : {};
         
     | 
| 
       93 
     | 
    
         
            -
                const [ 
     | 
| 
      
 97 
     | 
    
         
            +
                const [downstreamOpen, setDownstreamOpen] = (0, import_react.useState)(false);
         
     | 
| 
       94 
98 
     | 
    
         
             
                const uuid = (0, import_react.useId)();
         
     | 
| 
       95 
99 
     | 
    
         
             
                const itemRef = (0, import_react.useRef)(null);
         
     | 
| 
       96 
100 
     | 
    
         
             
                const hasDownstreamRef = (0, import_react.useRef)(false);
         
     | 
| 
         @@ -98,19 +102,19 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       98 
102 
     | 
    
         
             
                  () => void 0
         
     | 
| 
       99 
103 
     | 
    
         
             
                );
         
     | 
| 
       100 
104 
     | 
    
         
             
                id != null ? id : id = uuid;
         
     | 
| 
       101 
     | 
    
         
            -
                const trulyDisabled =  
     | 
| 
      
 105 
     | 
    
         
            +
                const trulyDisabled = disabled && !focusable;
         
     | 
| 
       102 
106 
     | 
    
         
             
                const type = (_b = itemRef.current) == null ? void 0 : _b.getAttribute("type");
         
     | 
| 
       103 
107 
     | 
    
         
             
                const role = !!type ? type === "checkbox" ? "menuitemcheckbox" : "menuitemradio" : "menuitem";
         
     | 
| 
       104 
108 
     | 
    
         
             
                const { index, register } = useMenuDescendant({ disabled: trulyDisabled });
         
     | 
| 
       105 
     | 
    
         
            -
                const  
     | 
| 
      
 109 
     | 
    
         
            +
                const focused = index === focusedIndex;
         
     | 
| 
       106 
110 
     | 
    
         
             
                const onMouseOver = (0, import_react.useCallback)(() => {
         
     | 
| 
       107 
     | 
    
         
            -
                  if ( 
     | 
| 
      
 111 
     | 
    
         
            +
                  if (disabled) return;
         
     | 
| 
       108 
112 
     | 
    
         
             
                  setFocusedIndex(index);
         
     | 
| 
       109 
     | 
    
         
            -
                }, [index,  
     | 
| 
      
 113 
     | 
    
         
            +
                }, [index, disabled, setFocusedIndex]);
         
     | 
| 
       110 
114 
     | 
    
         
             
                const onMouseLeave = (0, import_react.useCallback)(() => {
         
     | 
| 
       111 
     | 
    
         
            -
                  if ( 
     | 
| 
      
 115 
     | 
    
         
            +
                  if (disabled) return;
         
     | 
| 
       112 
116 
     | 
    
         
             
                  setFocusedIndex(-1);
         
     | 
| 
       113 
     | 
    
         
            -
                }, [setFocusedIndex,  
     | 
| 
      
 117 
     | 
    
         
            +
                }, [setFocusedIndex, disabled]);
         
     | 
| 
       114 
118 
     | 
    
         
             
                const onClick = (0, import_react.useCallback)(
         
     | 
| 
       115 
119 
     | 
    
         
             
                  (ev) => {
         
     | 
| 
       116 
120 
     | 
    
         
             
                    if (!isTargetMenuItem(ev.currentTarget)) return;
         
     | 
| 
         @@ -134,7 +138,7 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       134 
138 
     | 
    
         
             
                  (ev) => {
         
     | 
| 
       135 
139 
     | 
    
         
             
                    if (ev.key === " ") ev.key = ev.code;
         
     | 
| 
       136 
140 
     | 
    
         
             
                    const actions = {
         
     | 
| 
       137 
     | 
    
         
            -
                      ArrowLeft:  
     | 
| 
      
 141 
     | 
    
         
            +
                      ArrowLeft: nested ? (0, import_utils2.funcAll)(onUpstreamRestoreFocus, onClose) : void 0,
         
     | 
| 
       138 
142 
     | 
    
         
             
                      Space: !hasDownstreamRef.current ? (0, import_utils2.funcAll)(onUpstreamClose, onClose) : void 0
         
     | 
| 
       139 
143 
     | 
    
         
             
                    };
         
     | 
| 
       140 
144 
     | 
    
         
             
                    const action = actions[ev.key];
         
     | 
| 
         @@ -143,15 +147,15 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       143 
147 
     | 
    
         
             
                    ev.stopPropagation();
         
     | 
| 
       144 
148 
     | 
    
         
             
                    action();
         
     | 
| 
       145 
149 
     | 
    
         
             
                  },
         
     | 
| 
       146 
     | 
    
         
            -
                  [ 
     | 
| 
      
 150 
     | 
    
         
            +
                  [nested, onUpstreamRestoreFocus, onClose, onUpstreamClose]
         
     | 
| 
       147 
151 
     | 
    
         
             
                );
         
     | 
| 
       148 
152 
     | 
    
         
             
                const rest = (0, import_use_clickable.useClickable)({
         
     | 
| 
       149 
153 
     | 
    
         
             
                  clickOnSpace: false,
         
     | 
| 
       150 
154 
     | 
    
         
             
                  focusOnClick: false,
         
     | 
| 
       151 
155 
     | 
    
         
             
                  ...props,
         
     | 
| 
       152 
156 
     | 
    
         
             
                  ref: (0, import_utils2.mergeRefs)(register, itemRef, ref),
         
     | 
| 
       153 
     | 
    
         
            -
                   
     | 
| 
       154 
     | 
    
         
            -
                   
     | 
| 
      
 157 
     | 
    
         
            +
                  disabled,
         
     | 
| 
      
 158 
     | 
    
         
            +
                  focusable,
         
     | 
| 
       155 
159 
     | 
    
         
             
                  onClick: (0, import_utils2.handlerAll)(props.onClick, onClick),
         
     | 
| 
       156 
160 
     | 
    
         
             
                  onFocus: (0, import_utils2.handlerAll)(props.onFocus, onFocus),
         
     | 
| 
       157 
161 
     | 
    
         
             
                  onKeyDown: (0, import_utils2.handlerAll)(props.onKeyDown, onKeyDown, onKeyDownRef.current),
         
     | 
| 
         @@ -159,9 +163,9 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       159 
163 
     | 
    
         
             
                  onMouseOver: (0, import_utils2.handlerAll)(props.onMouseOver, onMouseOver)
         
     | 
| 
       160 
164 
     | 
    
         
             
                });
         
     | 
| 
       161 
165 
     | 
    
         
             
                (0, import_utils2.useUpdateEffect)(() => {
         
     | 
| 
       162 
     | 
    
         
            -
                  if (! 
     | 
| 
      
 166 
     | 
    
         
            +
                  if (!open) return;
         
     | 
| 
       163 
167 
     | 
    
         
             
                  const id2 = requestAnimationFrameId.current;
         
     | 
| 
       164 
     | 
    
         
            -
                  if ( 
     | 
| 
      
 168 
     | 
    
         
            +
                  if (focused && !trulyDisabled && itemRef.current) {
         
     | 
| 
       165 
169 
     | 
    
         
             
                    if (id2) cancelAnimationFrame(id2);
         
     | 
| 
       166 
170 
     | 
    
         
             
                    requestAnimationFrameId.current = requestAnimationFrame(() => {
         
     | 
| 
       167 
171 
     | 
    
         
             
                      var _a2;
         
     | 
| 
         @@ -174,7 +178,7 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       174 
178 
     | 
    
         
             
                  return () => {
         
     | 
| 
       175 
179 
     | 
    
         
             
                    if (id2) cancelAnimationFrame(id2);
         
     | 
| 
       176 
180 
     | 
    
         
             
                  };
         
     | 
| 
       177 
     | 
    
         
            -
                }, [ 
     | 
| 
      
 181 
     | 
    
         
            +
                }, [focused, trulyDisabled, menuRef, open]);
         
     | 
| 
       178 
182 
     | 
    
         
             
                children = icon || command ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_core.ui.span, { style: { flex: 1 }, children }) : children;
         
     | 
| 
       179 
183 
     | 
    
         
             
                const css = {
         
     | 
| 
       180 
184 
     | 
    
         
             
                  alignItems: "center",
         
     | 
| 
         @@ -203,11 +207,11 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       203 
207 
     | 
    
         
             
                      {
         
     | 
| 
       204 
208 
     | 
    
         
             
                        id,
         
     | 
| 
       205 
209 
     | 
    
         
             
                        className: (0, import_utils2.cx)("ui-menu__item", className),
         
     | 
| 
       206 
     | 
    
         
            -
                        "data-focus": (0, import_utils2.dataAttr)( 
     | 
| 
      
 210 
     | 
    
         
            +
                        "data-focus": (0, import_utils2.dataAttr)(downstreamOpen),
         
     | 
| 
       207 
211 
     | 
    
         
             
                        __css: css,
         
     | 
| 
       208 
212 
     | 
    
         
             
                        ...rest,
         
     | 
| 
       209 
213 
     | 
    
         
             
                        role,
         
     | 
| 
       210 
     | 
    
         
            -
                        tabIndex: ! 
     | 
| 
      
 214 
     | 
    
         
            +
                        tabIndex: !downstreamOpen && focused ? 0 : -1,
         
     | 
| 
       211 
215 
     | 
    
         
             
                        children: [
         
     | 
| 
       212 
216 
     | 
    
         
             
                          icon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MenuIcon, { children: icon }) : null,
         
     | 
| 
       213 
217 
     | 
    
         
             
                          children,
         
     | 
| 
         @@ -222,17 +226,26 @@ var MenuItem = (0, import_core.forwardRef)( 
     | 
|
| 
       222 
226 
     | 
    
         
             
            MenuItem.displayName = "MenuItem";
         
     | 
| 
       223 
227 
     | 
    
         
             
            MenuItem.__ui__ = "MenuItem";
         
     | 
| 
       224 
228 
     | 
    
         
             
            var MenuOptionItem = (0, import_core.forwardRef)(
         
     | 
| 
       225 
     | 
    
         
            -
              ({ 
     | 
| 
      
 229 
     | 
    
         
            +
              ({
         
     | 
| 
      
 230 
     | 
    
         
            +
                className,
         
     | 
| 
      
 231 
     | 
    
         
            +
                checked,
         
     | 
| 
      
 232 
     | 
    
         
            +
                children,
         
     | 
| 
      
 233 
     | 
    
         
            +
                closeOnSelect = false,
         
     | 
| 
      
 234 
     | 
    
         
            +
                icon,
         
     | 
| 
      
 235 
     | 
    
         
            +
                isChecked,
         
     | 
| 
      
 236 
     | 
    
         
            +
                ...rest
         
     | 
| 
      
 237 
     | 
    
         
            +
              }, ref) => {
         
     | 
| 
      
 238 
     | 
    
         
            +
                checked != null ? checked : checked = isChecked;
         
     | 
| 
       226 
239 
     | 
    
         
             
                return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
         
     | 
| 
       227 
240 
     | 
    
         
             
                  MenuItem,
         
     | 
| 
       228 
241 
     | 
    
         
             
                  {
         
     | 
| 
       229 
242 
     | 
    
         
             
                    ref,
         
     | 
| 
       230 
243 
     | 
    
         
             
                    className: (0, import_utils2.cx)("ui-menu__item--option", className),
         
     | 
| 
       231 
     | 
    
         
            -
                    "aria-checked":  
     | 
| 
      
 244 
     | 
    
         
            +
                    "aria-checked": checked,
         
     | 
| 
       232 
245 
     | 
    
         
             
                    closeOnSelect,
         
     | 
| 
       233 
246 
     | 
    
         
             
                    ...rest,
         
     | 
| 
       234 
247 
     | 
    
         
             
                    children: [
         
     | 
| 
       235 
     | 
    
         
            -
                      icon !== null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MenuIcon, { opacity:  
     | 
| 
      
 248 
     | 
    
         
            +
                      icon !== null ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MenuIcon, { opacity: checked ? 1 : 0, children: icon || /* @__PURE__ */ (0, import_jsx_runtime.jsx)(CheckIcon, {}) }) : null,
         
     | 
| 
       236 
249 
     | 
    
         
             
                      children
         
     | 
| 
       237 
250 
     | 
    
         
             
                    ]
         
     | 
| 
       238 
251 
     | 
    
         
             
                  }
         
     | 
    
        package/dist/menu-item.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-item.tsx","../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject, FC, HTMLUIProps } from \"@yamada-ui/core\"\nimport type {\n  KeyboardEvent,\n  KeyboardEventHandler,\n  MouseEvent,\n  ReactElement,\n} from \"react\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport {\n  cx,\n  dataAttr,\n  funcAll,\n  handlerAll,\n  isActiveElement,\n  isHTMLElement,\n  mergeRefs,\n  useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useId, useRef, useState } from \"react\"\nimport {\n  UpstreamMenuItemProvider,\n  useMenu,\n  useMenuDescendant,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nconst isTargetMenuItem = (target: EventTarget | null) => {\n  return (\n    isHTMLElement(target) &&\n    !!target.getAttribute(\"role\")?.startsWith(\"menuitem\")\n  )\n}\n\ninterface MenuItemOptions {\n  /**\n   * If `true`, the list element will be closed when selected.\n   *\n   * @default false\n   */\n  closeOnSelect?: boolean\n  /**\n   * Right-aligned label text content, useful for displaying hotkeys.\n   */\n  command?: string\n  /**\n   * The menu item icon to use.\n   */\n  icon?: ReactElement\n  /**\n   * If `true`, the menu item will be disabled.\n   *\n   * @default false\n   */\n  isDisabled?: boolean\n  /**\n   * If `true`, the menu item will be focusable.\n   *\n   * @default false\n   */\n  isFocusable?: boolean\n}\n\nexport interface MenuItemProps extends HTMLUIProps, MenuItemOptions {}\n\nexport const MenuItem = forwardRef<MenuItemProps, \"div\">(\n  (\n    {\n      id,\n      className,\n      children,\n      closeOnSelect: customCloseOnSelect,\n      command,\n      icon,\n      isDisabled,\n      isFocusable,\n      ...props\n    },\n    ref,\n  ) => {\n    const {\n      closeOnSelect,\n      focusedIndex,\n      isNested,\n      isOpen,\n      menuRef,\n      requestAnimationFrameId,\n      setFocusedIndex,\n      styles,\n      onClose,\n      onUpstreamClose,\n    } = useMenu()\n    const { onUpstreamRestoreFocus } = useUpstreamMenuItem() ?? {}\n    const [isDownstreamOpen, setDownstreamOpen] = useState<boolean>(false)\n    const uuid = useId()\n    const itemRef = useRef<HTMLDivElement>(null)\n    const hasDownstreamRef = useRef<boolean>(false)\n    const onKeyDownRef = useRef<KeyboardEventHandler<HTMLDivElement>>(\n      () => void 0,\n    )\n\n    id ??= uuid\n\n    const trulyDisabled = isDisabled && !isFocusable\n    const type = itemRef.current?.getAttribute(\"type\")\n    const role = !!type\n      ? type === \"checkbox\"\n        ? \"menuitemcheckbox\"\n        : \"menuitemradio\"\n      : \"menuitem\"\n\n    const { index, register } = useMenuDescendant({ disabled: trulyDisabled })\n\n    const isFocused = index === focusedIndex\n\n    const onMouseOver = useCallback(() => {\n      if (isDisabled) return\n\n      setFocusedIndex(index)\n    }, [index, isDisabled, setFocusedIndex])\n\n    const onMouseLeave = useCallback(() => {\n      if (isDisabled) return\n\n      setFocusedIndex(-1)\n    }, [setFocusedIndex, isDisabled])\n\n    const onClick = useCallback(\n      (ev: MouseEvent<HTMLDivElement>) => {\n        if (!isTargetMenuItem(ev.currentTarget)) return\n\n        const hasDownstream = hasDownstreamRef.current\n\n        if (customCloseOnSelect ?? (!hasDownstream && closeOnSelect)) {\n          onClose()\n          onUpstreamClose?.()\n        }\n      },\n      [customCloseOnSelect, closeOnSelect, onClose, onUpstreamClose],\n    )\n\n    const onFocus = useCallback(() => {\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onRestoreFocus = useCallback(() => {\n      itemRef.current?.focus()\n\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onKeyDown = useCallback(\n      (ev: KeyboardEvent<HTMLDivElement>) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function | undefined } = {\n          ArrowLeft: isNested\n            ? funcAll(onUpstreamRestoreFocus, onClose)\n            : undefined,\n          Space: !hasDownstreamRef.current\n            ? funcAll(onUpstreamClose, onClose)\n            : undefined,\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n        ev.stopPropagation()\n\n        action()\n      },\n      [isNested, onUpstreamRestoreFocus, onClose, onUpstreamClose],\n    )\n\n    const rest = useClickable<HTMLDivElement>({\n      clickOnSpace: false,\n      focusOnClick: false,\n      ...props,\n      ref: mergeRefs(register, itemRef, ref),\n      isDisabled,\n      isFocusable,\n      onClick: handlerAll(props.onClick, onClick),\n      onFocus: handlerAll(props.onFocus, onFocus),\n      onKeyDown: handlerAll(props.onKeyDown, onKeyDown, onKeyDownRef.current),\n      onMouseLeave: handlerAll(props.onMouseLeave, onMouseLeave),\n      onMouseOver: handlerAll(props.onMouseOver, onMouseOver),\n    })\n\n    useUpdateEffect(() => {\n      if (!isOpen) return\n\n      const id = requestAnimationFrameId.current\n\n      if (isFocused && !trulyDisabled && itemRef.current) {\n        if (id) cancelAnimationFrame(id)\n\n        requestAnimationFrameId.current = requestAnimationFrame(() => {\n          itemRef.current?.focus({ preventScroll: true })\n\n          requestAnimationFrameId.current = null\n        })\n      } else if (menuRef.current && !isActiveElement(menuRef.current)) {\n        menuRef.current.focus({ preventScroll: true })\n      }\n\n      return () => {\n        if (id) cancelAnimationFrame(id)\n      }\n    }, [isFocused, trulyDisabled, menuRef, isOpen])\n\n    children =\n      icon || command ? (\n        <ui.span style={{ flex: 1 }}>{children}</ui.span>\n      ) : (\n        children\n      )\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      color: \"inherit\",\n      display: \"flex\",\n      flex: \"0 0 auto\",\n      gap: \"0.75rem\",\n      outline: 0,\n      textAlign: \"start\",\n      textDecoration: \"none\",\n      userSelect: \"none\",\n      width: \"100%\",\n      ...styles.item,\n    }\n\n    return (\n      <UpstreamMenuItemProvider\n        value={{\n          hasDownstreamRef,\n          setDownstreamOpen,\n          onKeyDownRef,\n          onUpstreamRestoreFocus: onRestoreFocus,\n        }}\n      >\n        <ui.div\n          id={id}\n          className={cx(\"ui-menu__item\", className)}\n          data-focus={dataAttr(isDownstreamOpen)}\n          __css={css}\n          {...rest}\n          role={role}\n          tabIndex={!isDownstreamOpen && isFocused ? 0 : -1}\n        >\n          {icon ? <MenuIcon>{icon}</MenuIcon> : null}\n          {children}\n          {command ? <MenuCommand>{command}</MenuCommand> : null}\n        </ui.div>\n      </UpstreamMenuItemProvider>\n    )\n  },\n)\n\nMenuItem.displayName = \"MenuItem\"\nMenuItem.__ui__ = \"MenuItem\"\n\ninterface MenuOptionItemOptions {\n  /**\n   * The type of the menu option item.\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * The menu option item icon to use.\n   */\n  icon?: null | ReactElement\n  /**\n   * If `true`, the checkbox or radio will be checked.\n   *\n   * @default false\n   */\n  isChecked?: boolean\n  /**\n   * The value of the menu option item.\n   */\n  value?: string\n}\n\nexport interface MenuOptionItemProps\n  extends Omit<MenuItemProps, \"command\" | \"icon\" | \"value\">,\n    MenuOptionItemOptions {}\n\nexport const MenuOptionItem = forwardRef<MenuOptionItemProps, \"button\">(\n  (\n    { className, children, closeOnSelect = false, icon, isChecked, ...rest },\n    ref,\n  ) => {\n    return (\n      <MenuItem\n        ref={ref}\n        className={cx(\"ui-menu__item--option\", className)}\n        aria-checked={isChecked}\n        closeOnSelect={closeOnSelect}\n        {...rest}\n      >\n        {icon !== null ? (\n          <MenuIcon opacity={isChecked ? 1 : 0}>\n            {icon || <CheckIcon />}\n          </MenuIcon>\n        ) : null}\n        {children}\n      </MenuItem>\n    )\n  },\n)\n\nMenuOptionItem.displayName = \"MenuOptionItem\"\nMenuOptionItem.__ui__ = \"MenuOptionItem\"\n\nexport interface MenuIconProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuIcon = forwardRef<MenuIconProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      display: \"inline-flex\",\n      flexShrink: 0,\n      fontSize: \"0.85em\",\n      justifyContent: \"center\",\n      ...styles.icon,\n    }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__icon\", className)}\n        aria-hidden\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuIcon.displayName = \"MenuIcon\"\nMenuIcon.__ui__ = \"MenuIcon\"\n\nexport interface MenuCommandProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuCommand = forwardRef<MenuCommandProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = { ...styles.command }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__command\", className)}\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuCommand.displayName = \"MenuCommand\"\nMenuCommand.__ui__ = \"MenuCommand\"\n\nconst CheckIcon: FC = () => (\n  <svg height=\"1em\" viewBox=\"0 0 14 14\" width=\"1em\">\n    <polygon\n      fill=\"currentColor\"\n      points=\"5.5 11.9993304 14 3.49933039 12.5 2 5.5 8.99933039 1.5 4.9968652 0 6.49933039\"\n    />\n  </svg>\n)\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  isNested: boolean\n  isOpen: boolean\n  menuRef: RefObject<HTMLDivElement>\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n"],"mappings":"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","names":["import_utils","_a","id"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu-item.tsx","../src/menu-context.ts"],"sourcesContent":["import type { CSSUIObject, FC, HTMLUIProps } from \"@yamada-ui/core\"\nimport type {\n  KeyboardEvent,\n  KeyboardEventHandler,\n  MouseEvent,\n  ReactElement,\n} from \"react\"\nimport { forwardRef, ui } from \"@yamada-ui/core\"\nimport { useClickable } from \"@yamada-ui/use-clickable\"\nimport {\n  cx,\n  dataAttr,\n  funcAll,\n  handlerAll,\n  isActiveElement,\n  isHTMLElement,\n  mergeRefs,\n  useUpdateEffect,\n} from \"@yamada-ui/utils\"\nimport { useCallback, useId, useRef, useState } from \"react\"\nimport {\n  UpstreamMenuItemProvider,\n  useMenu,\n  useMenuDescendant,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nconst isTargetMenuItem = (target: EventTarget | null) => {\n  return (\n    isHTMLElement(target) &&\n    !!target.getAttribute(\"role\")?.startsWith(\"menuitem\")\n  )\n}\n\ninterface MenuItemOptions {\n  /**\n   * If `true`, the list element will be closed when selected.\n   *\n   * @default false\n   */\n  closeOnSelect?: boolean\n  /**\n   * Right-aligned label text content, useful for displaying hotkeys.\n   */\n  command?: string\n  /**\n   * If `true`, the menu item will be disabled.\n   *\n   * @default false\n   */\n  disabled?: boolean\n  /**\n   * If `true`, the menu item will be focusable.\n   *\n   * @default false\n   */\n  focusable?: boolean\n  /**\n   * The menu item icon to use.\n   */\n  icon?: ReactElement\n  /**\n   * If `true`, the menu item will be disabled.\n   *\n   * @default false\n   *\n   * @deprecated Use `disabled` instead.\n   */\n  isDisabled?: boolean\n  /**\n   * If `true`, the menu item will be focusable.\n   *\n   * @default false\n   *\n   * @deprecated Use `focusable` instead.\n   */\n  isFocusable?: boolean\n}\n\nexport interface MenuItemProps extends HTMLUIProps, MenuItemOptions {}\n\nexport const MenuItem = forwardRef<MenuItemProps, \"div\">(\n  (\n    {\n      id,\n      className,\n      children,\n      closeOnSelect: customCloseOnSelect,\n      command,\n      disabled,\n      focusable,\n      icon,\n      isDisabled,\n      isFocusable,\n      ...props\n    },\n    ref,\n  ) => {\n    disabled ??= isDisabled\n    focusable ??= isFocusable\n\n    const {\n      closeOnSelect,\n      focusedIndex,\n      menuRef,\n      nested,\n      open,\n      requestAnimationFrameId,\n      setFocusedIndex,\n      styles,\n      onClose,\n      onUpstreamClose,\n    } = useMenu()\n    const { onUpstreamRestoreFocus } = useUpstreamMenuItem() ?? {}\n    const [downstreamOpen, setDownstreamOpen] = useState<boolean>(false)\n    const uuid = useId()\n    const itemRef = useRef<HTMLDivElement>(null)\n    const hasDownstreamRef = useRef<boolean>(false)\n    const onKeyDownRef = useRef<KeyboardEventHandler<HTMLDivElement>>(\n      () => void 0,\n    )\n\n    id ??= uuid\n\n    const trulyDisabled = disabled && !focusable\n    const type = itemRef.current?.getAttribute(\"type\")\n    const role = !!type\n      ? type === \"checkbox\"\n        ? \"menuitemcheckbox\"\n        : \"menuitemradio\"\n      : \"menuitem\"\n\n    const { index, register } = useMenuDescendant({ disabled: trulyDisabled })\n\n    const focused = index === focusedIndex\n\n    const onMouseOver = useCallback(() => {\n      if (disabled) return\n\n      setFocusedIndex(index)\n    }, [index, disabled, setFocusedIndex])\n\n    const onMouseLeave = useCallback(() => {\n      if (disabled) return\n\n      setFocusedIndex(-1)\n    }, [setFocusedIndex, disabled])\n\n    const onClick = useCallback(\n      (ev: MouseEvent<HTMLDivElement>) => {\n        if (!isTargetMenuItem(ev.currentTarget)) return\n\n        const hasDownstream = hasDownstreamRef.current\n\n        if (customCloseOnSelect ?? (!hasDownstream && closeOnSelect)) {\n          onClose()\n          onUpstreamClose?.()\n        }\n      },\n      [customCloseOnSelect, closeOnSelect, onClose, onUpstreamClose],\n    )\n\n    const onFocus = useCallback(() => {\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onRestoreFocus = useCallback(() => {\n      itemRef.current?.focus()\n\n      setFocusedIndex(index)\n    }, [setFocusedIndex, index])\n\n    const onKeyDown = useCallback(\n      (ev: KeyboardEvent<HTMLDivElement>) => {\n        if (ev.key === \" \") ev.key = ev.code\n\n        const actions: { [key: string]: Function | undefined } = {\n          ArrowLeft: nested\n            ? funcAll(onUpstreamRestoreFocus, onClose)\n            : undefined,\n          Space: !hasDownstreamRef.current\n            ? funcAll(onUpstreamClose, onClose)\n            : undefined,\n        }\n\n        const action = actions[ev.key]\n\n        if (!action) return\n\n        ev.preventDefault()\n        ev.stopPropagation()\n\n        action()\n      },\n      [nested, onUpstreamRestoreFocus, onClose, onUpstreamClose],\n    )\n\n    const rest = useClickable<HTMLDivElement>({\n      clickOnSpace: false,\n      focusOnClick: false,\n      ...props,\n      ref: mergeRefs(register, itemRef, ref),\n      disabled,\n      focusable,\n      onClick: handlerAll(props.onClick, onClick),\n      onFocus: handlerAll(props.onFocus, onFocus),\n      onKeyDown: handlerAll(props.onKeyDown, onKeyDown, onKeyDownRef.current),\n      onMouseLeave: handlerAll(props.onMouseLeave, onMouseLeave),\n      onMouseOver: handlerAll(props.onMouseOver, onMouseOver),\n    })\n\n    useUpdateEffect(() => {\n      if (!open) return\n\n      const id = requestAnimationFrameId.current\n\n      if (focused && !trulyDisabled && itemRef.current) {\n        if (id) cancelAnimationFrame(id)\n\n        requestAnimationFrameId.current = requestAnimationFrame(() => {\n          itemRef.current?.focus({ preventScroll: true })\n\n          requestAnimationFrameId.current = null\n        })\n      } else if (menuRef.current && !isActiveElement(menuRef.current)) {\n        menuRef.current.focus({ preventScroll: true })\n      }\n\n      return () => {\n        if (id) cancelAnimationFrame(id)\n      }\n    }, [focused, trulyDisabled, menuRef, open])\n\n    children =\n      icon || command ? (\n        <ui.span style={{ flex: 1 }}>{children}</ui.span>\n      ) : (\n        children\n      )\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      color: \"inherit\",\n      display: \"flex\",\n      flex: \"0 0 auto\",\n      gap: \"0.75rem\",\n      outline: 0,\n      textAlign: \"start\",\n      textDecoration: \"none\",\n      userSelect: \"none\",\n      width: \"100%\",\n      ...styles.item,\n    }\n\n    return (\n      <UpstreamMenuItemProvider\n        value={{\n          hasDownstreamRef,\n          setDownstreamOpen,\n          onKeyDownRef,\n          onUpstreamRestoreFocus: onRestoreFocus,\n        }}\n      >\n        <ui.div\n          id={id}\n          className={cx(\"ui-menu__item\", className)}\n          data-focus={dataAttr(downstreamOpen)}\n          __css={css}\n          {...rest}\n          role={role}\n          tabIndex={!downstreamOpen && focused ? 0 : -1}\n        >\n          {icon ? <MenuIcon>{icon}</MenuIcon> : null}\n          {children}\n          {command ? <MenuCommand>{command}</MenuCommand> : null}\n        </ui.div>\n      </UpstreamMenuItemProvider>\n    )\n  },\n)\n\nMenuItem.displayName = \"MenuItem\"\nMenuItem.__ui__ = \"MenuItem\"\n\ninterface MenuOptionItemOptions {\n  /**\n   * The type of the menu option item.\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * If `true`, the checkbox or radio will be checked.\n   *\n   * @default false\n   */\n  checked?: boolean\n  /**\n   * The menu option item icon to use.\n   */\n  icon?: null | ReactElement\n  /**\n   * If `true`, the checkbox or radio will be checked.\n   *\n   * @default false\n   *\n   * @deprecated Use `checked` instead.\n   */\n  isChecked?: boolean\n  /**\n   * The value of the menu option item.\n   */\n  value?: string\n}\n\nexport interface MenuOptionItemProps\n  extends Omit<MenuItemProps, \"command\" | \"icon\" | \"value\">,\n    MenuOptionItemOptions {}\n\nexport const MenuOptionItem = forwardRef<MenuOptionItemProps, \"button\">(\n  (\n    {\n      className,\n      checked,\n      children,\n      closeOnSelect = false,\n      icon,\n      isChecked,\n      ...rest\n    },\n    ref,\n  ) => {\n    checked ??= isChecked\n\n    return (\n      <MenuItem\n        ref={ref}\n        className={cx(\"ui-menu__item--option\", className)}\n        aria-checked={checked}\n        closeOnSelect={closeOnSelect}\n        {...rest}\n      >\n        {icon !== null ? (\n          <MenuIcon opacity={checked ? 1 : 0}>{icon || <CheckIcon />}</MenuIcon>\n        ) : null}\n        {children}\n      </MenuItem>\n    )\n  },\n)\n\nMenuOptionItem.displayName = \"MenuOptionItem\"\nMenuOptionItem.__ui__ = \"MenuOptionItem\"\n\nexport interface MenuIconProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuIcon = forwardRef<MenuIconProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = {\n      alignItems: \"center\",\n      display: \"inline-flex\",\n      flexShrink: 0,\n      fontSize: \"0.85em\",\n      justifyContent: \"center\",\n      ...styles.icon,\n    }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__icon\", className)}\n        aria-hidden\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuIcon.displayName = \"MenuIcon\"\nMenuIcon.__ui__ = \"MenuIcon\"\n\nexport interface MenuCommandProps extends HTMLUIProps<\"span\"> {}\n\nexport const MenuCommand = forwardRef<MenuCommandProps, \"span\">(\n  ({ className, ...rest }, ref) => {\n    const { styles } = useMenu()\n\n    const css: CSSUIObject = { ...styles.command }\n\n    return (\n      <ui.span\n        ref={ref}\n        className={cx(\"ui-menu__item__command\", className)}\n        __css={css}\n        {...rest}\n      />\n    )\n  },\n)\n\nMenuCommand.displayName = \"MenuCommand\"\nMenuCommand.__ui__ = \"MenuCommand\"\n\nconst CheckIcon: FC = () => (\n  <svg height=\"1em\" viewBox=\"0 0 14 14\" width=\"1em\">\n    <polygon\n      fill=\"currentColor\"\n      points=\"5.5 11.9993304 14 3.49933039 12.5 2 5.5 8.99933039 1.5 4.9968652 0 6.49933039\"\n    />\n  </svg>\n)\n","import type { CSSUIObject } from \"@yamada-ui/core\"\nimport type {\n  Dispatch,\n  KeyboardEventHandler,\n  MutableRefObject,\n  RefObject,\n  SetStateAction,\n} from \"react\"\nimport type { MenuOptions } from \"./menu\"\nimport { createDescendant } from \"@yamada-ui/use-descendant\"\nimport { createContext } from \"@yamada-ui/utils\"\n\nexport const {\n  DescendantsContextProvider,\n  useDescendant: useMenuDescendant,\n  useDescendants,\n  useDescendantsContext: useMenuDescendantsContext,\n} = createDescendant()\n\ninterface MenuContext extends MenuOptions {\n  buttonRef: RefObject<HTMLButtonElement>\n  focusedIndex: number\n  menuRef: RefObject<HTMLDivElement>\n  nested: boolean\n  open: boolean\n  requestAnimationFrameId: MutableRefObject<null | number>\n  setFocusedIndex: Dispatch<SetStateAction<number>>\n  styles: { [key: string]: CSSUIObject | undefined }\n  onClose: () => void\n  onFocusFirstItem: () => void\n  onFocusLastItem: () => void\n  onOpen: () => void\n  onUpstreamClose?: () => void\n}\n\nexport const [MenuProvider, useMenu] = createContext<MenuContext>({\n  name: \"MenuContext\",\n  errorMessage: `useMenu returned is 'undefined'. Seems you forgot to wrap the components in \"<Menu />\"`,\n})\n\ninterface ContextMenuContext {\n  styles: { [key: string]: CSSUIObject | undefined }\n}\n\nexport const [ContextMenuProvider, useContextMenu] =\n  createContext<ContextMenuContext>({\n    name: \"ContextMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuContext {\n  relatedRef: RefObject<HTMLElement>\n  onDownstreamCloseMapRef: MutableRefObject<Map<string, () => void>>\n  onUpstreamClose: () => void\n}\n\nexport const [UpstreamMenuProvider, useUpstreamMenu] =\n  createContext<UpstreamMenuContext>({\n    name: \"UpstreamMenuContext\",\n    strict: false,\n  })\n\ninterface UpstreamMenuItemContext {\n  hasDownstreamRef: MutableRefObject<boolean>\n  setDownstreamOpen: Dispatch<SetStateAction<boolean>>\n  onKeyDownRef: RefObject<KeyboardEventHandler<HTMLDivElement>>\n  onUpstreamRestoreFocus: () => void\n}\n\nexport const [UpstreamMenuItemProvider, useUpstreamMenuItem] =\n  createContext<UpstreamMenuItemContext>({\n    name: \"UpstreamMenuItemContext\",\n    strict: false,\n  })\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,kBAA+B;AAC/B,2BAA6B;AAC7B,IAAAA,gBASO;AACP,mBAAqD;;;ACVrD,4BAAiC;AACjC,mBAA8B;AAEvB,IAAM;AAAA,EACX;AAAA,EACA,eAAe;AAAA,EACf;AAAA,EACA,uBAAuB;AACzB,QAAI,wCAAiB;AAkBd,IAAM,CAAC,cAAc,OAAO,QAAI,4BAA2B;AAAA,EAChE,MAAM;AAAA,EACN,cAAc;AAChB,CAAC;AAMM,IAAM,CAAC,qBAAqB,cAAc,QAC/C,4BAAkC;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AAQI,IAAM,CAAC,sBAAsB,eAAe,QACjD,4BAAmC;AAAA,EACjC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;AASI,IAAM,CAAC,0BAA0B,mBAAmB,QACzD,4BAAuC;AAAA,EACrC,MAAM;AAAA,EACN,QAAQ;AACV,CAAC;;;ADkKK;AAhNR,IAAM,mBAAmB,CAAC,WAA+B;AA3BzD;AA4BE,aACE,6BAAc,MAAM,KACpB,CAAC,GAAC,YAAO,aAAa,MAAM,MAA1B,mBAA6B,WAAW;AAE9C;AAiDO,IAAM,eAAW;AAAA,EACtB,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AAjGP;AAkGI,6CAAa;AACb,gDAAc;AAEd,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI,QAAQ;AACZ,UAAM,EAAE,uBAAuB,KAAI,yBAAoB,MAApB,YAAyB,CAAC;AAC7D,UAAM,CAAC,gBAAgB,iBAAiB,QAAI,uBAAkB,KAAK;AACnE,UAAM,WAAO,oBAAM;AACnB,UAAM,cAAU,qBAAuB,IAAI;AAC3C,UAAM,uBAAmB,qBAAgB,KAAK;AAC9C,UAAM,mBAAe;AAAA,MACnB,MAAM;AAAA,IACR;AAEA,2BAAO;AAEP,UAAM,gBAAgB,YAAY,CAAC;AACnC,UAAM,QAAO,aAAQ,YAAR,mBAAiB,aAAa;AAC3C,UAAM,OAAO,CAAC,CAAC,OACX,SAAS,aACP,qBACA,kBACF;AAEJ,UAAM,EAAE,OAAO,SAAS,IAAI,kBAAkB,EAAE,UAAU,cAAc,CAAC;AAEzE,UAAM,UAAU,UAAU;AAE1B,UAAM,kBAAc,0BAAY,MAAM;AACpC,UAAI,SAAU;AAEd,sBAAgB,KAAK;AAAA,IACvB,GAAG,CAAC,OAAO,UAAU,eAAe,CAAC;AAErC,UAAM,mBAAe,0BAAY,MAAM;AACrC,UAAI,SAAU;AAEd,sBAAgB,EAAE;AAAA,IACpB,GAAG,CAAC,iBAAiB,QAAQ,CAAC;AAE9B,UAAM,cAAU;AAAA,MACd,CAAC,OAAmC;AAClC,YAAI,CAAC,iBAAiB,GAAG,aAAa,EAAG;AAEzC,cAAM,gBAAgB,iBAAiB;AAEvC,YAAI,oDAAwB,CAAC,iBAAiB,eAAgB;AAC5D,kBAAQ;AACR;AAAA,QACF;AAAA,MACF;AAAA,MACA,CAAC,qBAAqB,eAAe,SAAS,eAAe;AAAA,IAC/D;AAEA,UAAM,cAAU,0BAAY,MAAM;AAChC,sBAAgB,KAAK;AAAA,IACvB,GAAG,CAAC,iBAAiB,KAAK,CAAC;AAE3B,UAAM,qBAAiB,0BAAY,MAAM;AAtK7C,UAAAC;AAuKM,OAAAA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB;AAEjB,sBAAgB,KAAK;AAAA,IACvB,GAAG,CAAC,iBAAiB,KAAK,CAAC;AAE3B,UAAM,gBAAY;AAAA,MAChB,CAAC,OAAsC;AACrC,YAAI,GAAG,QAAQ,IAAK,IAAG,MAAM,GAAG;AAEhC,cAAM,UAAmD;AAAA,UACvD,WAAW,aACP,uBAAQ,wBAAwB,OAAO,IACvC;AAAA,UACJ,OAAO,CAAC,iBAAiB,cACrB,uBAAQ,iBAAiB,OAAO,IAChC;AAAA,QACN;AAEA,cAAM,SAAS,QAAQ,GAAG,GAAG;AAE7B,YAAI,CAAC,OAAQ;AAEb,WAAG,eAAe;AAClB,WAAG,gBAAgB;AAEnB,eAAO;AAAA,MACT;AAAA,MACA,CAAC,QAAQ,wBAAwB,SAAS,eAAe;AAAA,IAC3D;AAEA,UAAM,WAAO,mCAA6B;AAAA,MACxC,cAAc;AAAA,MACd,cAAc;AAAA,MACd,GAAG;AAAA,MACH,SAAK,yBAAU,UAAU,SAAS,GAAG;AAAA,MACrC;AAAA,MACA;AAAA,MACA,aAAS,0BAAW,MAAM,SAAS,OAAO;AAAA,MAC1C,aAAS,0BAAW,MAAM,SAAS,OAAO;AAAA,MAC1C,eAAW,0BAAW,MAAM,WAAW,WAAW,aAAa,OAAO;AAAA,MACtE,kBAAc,0BAAW,MAAM,cAAc,YAAY;AAAA,MACzD,iBAAa,0BAAW,MAAM,aAAa,WAAW;AAAA,IACxD,CAAC;AAED,uCAAgB,MAAM;AACpB,UAAI,CAAC,KAAM;AAEX,YAAMC,MAAK,wBAAwB;AAEnC,UAAI,WAAW,CAAC,iBAAiB,QAAQ,SAAS;AAChD,YAAIA,IAAI,sBAAqBA,GAAE;AAE/B,gCAAwB,UAAU,sBAAsB,MAAM;AA3NtE,cAAAD;AA4NU,WAAAA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,MAAM,EAAE,eAAe,KAAK;AAE7C,kCAAwB,UAAU;AAAA,QACpC,CAAC;AAAA,MACH,WAAW,QAAQ,WAAW,KAAC,+BAAgB,QAAQ,OAAO,GAAG;AAC/D,gBAAQ,QAAQ,MAAM,EAAE,eAAe,KAAK,CAAC;AAAA,MAC/C;AAEA,aAAO,MAAM;AACX,YAAIC,IAAI,sBAAqBA,GAAE;AAAA,MACjC;AAAA,IACF,GAAG,CAAC,SAAS,eAAe,SAAS,IAAI,CAAC;AAE1C,eACE,QAAQ,UACN,4CAAC,eAAG,MAAH,EAAQ,OAAO,EAAE,MAAM,EAAE,GAAI,UAAS,IAEvC;AAGJ,UAAM,MAAmB;AAAA,MACvB,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,MACT,MAAM;AAAA,MACN,KAAK;AAAA,MACL,SAAS;AAAA,MACT,WAAW;AAAA,MACX,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,OAAO;AAAA,MACP,GAAG,OAAO;AAAA,IACZ;AAEA,WACE;AAAA,MAAC;AAAA;AAAA,QACC,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA,wBAAwB;AAAA,QAC1B;AAAA,QAEA;AAAA,UAAC,eAAG;AAAA,UAAH;AAAA,YACC;AAAA,YACA,eAAW,kBAAG,iBAAiB,SAAS;AAAA,YACxC,kBAAY,wBAAS,cAAc;AAAA,YACnC,OAAO;AAAA,YACN,GAAG;AAAA,YACJ;AAAA,YACA,UAAU,CAAC,kBAAkB,UAAU,IAAI;AAAA,YAE1C;AAAA,qBAAO,4CAAC,YAAU,gBAAK,IAAc;AAAA,cACrC;AAAA,cACA,UAAU,4CAAC,eAAa,mBAAQ,IAAiB;AAAA;AAAA;AAAA,QACpD;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;AACvB,SAAS,SAAS;AAmCX,IAAM,qBAAiB;AAAA,EAC5B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,0CAAY;AAEZ,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAW,kBAAG,yBAAyB,SAAS;AAAA,QAChD,gBAAc;AAAA,QACd;AAAA,QACC,GAAG;AAAA,QAEH;AAAA,mBAAS,OACR,4CAAC,YAAS,SAAS,UAAU,IAAI,GAAI,kBAAQ,4CAAC,aAAU,GAAG,IACzD;AAAA,UACH;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;AAC7B,eAAe,SAAS;AAIjB,IAAM,eAAW;AAAA,EACtB,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ;AAC/B,UAAM,EAAE,OAAO,IAAI,QAAQ;AAE3B,UAAM,MAAmB;AAAA,MACvB,YAAY;AAAA,MACZ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,gBAAgB;AAAA,MAChB,GAAG,OAAO;AAAA,IACZ;AAEA,WACE;AAAA,MAAC,eAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,eAAW,kBAAG,uBAAuB,SAAS;AAAA,QAC9C,eAAW;AAAA,QACX,OAAO;AAAA,QACN,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;AACvB,SAAS,SAAS;AAIX,IAAM,kBAAc;AAAA,EACzB,CAAC,EAAE,WAAW,GAAG,KAAK,GAAG,QAAQ;AAC/B,UAAM,EAAE,OAAO,IAAI,QAAQ;AAE3B,UAAM,MAAmB,EAAE,GAAG,OAAO,QAAQ;AAE7C,WACE;AAAA,MAAC,eAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,eAAW,kBAAG,0BAA0B,SAAS;AAAA,QACjD,OAAO;AAAA,QACN,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;AAC1B,YAAY,SAAS;AAErB,IAAM,YAAgB,MACpB,4CAAC,SAAI,QAAO,OAAM,SAAQ,aAAY,OAAM,OAC1C;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,QAAO;AAAA;AACT,GACF;","names":["import_utils","_a","id"]}
         
     |