@yamada-ui/menu 1.5.2-dev-20241214144625 → 1.5.2-dev-20241215203956
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-DAEXVQLG.mjs → chunk-3UTYG3XF.mjs} +2 -2
 - package/dist/{chunk-H662AKOV.mjs → chunk-7QXZH2EN.mjs} +2 -2
 - package/dist/{chunk-JTGSHZXB.mjs → chunk-BIEYDHFO.mjs} +7 -14
 - package/dist/chunk-BIEYDHFO.mjs.map +1 -0
 - package/dist/{chunk-TFGPDF5W.mjs → chunk-D2UJVOJ7.mjs} +20 -23
 - package/dist/chunk-D2UJVOJ7.mjs.map +1 -0
 - package/dist/{chunk-JQCTT4C2.mjs → chunk-PHY5XCWA.mjs} +2 -2
 - package/dist/context-menu.js +6 -13
 - package/dist/context-menu.js.map +1 -1
 - package/dist/context-menu.mjs +2 -2
 - package/dist/index.js +25 -35
 - package/dist/index.js.map +1 -1
 - package/dist/index.mjs +5 -5
 - package/dist/menu-button.js +19 -22
 - package/dist/menu-button.js.map +1 -1
 - package/dist/menu-button.mjs +2 -2
 - package/dist/menu-item.js +19 -22
 - package/dist/menu-item.js.map +1 -1
 - package/dist/menu-item.mjs +1 -1
 - package/dist/menu-option-group.js +19 -22
 - package/dist/menu-option-group.js.map +1 -1
 - package/dist/menu-option-group.mjs +2 -2
 - package/dist/menu.js +6 -13
 - package/dist/menu.js.map +1 -1
 - package/dist/menu.mjs +1 -1
 - package/package.json +11 -11
 - package/dist/chunk-JTGSHZXB.mjs.map +0 -1
 - package/dist/chunk-TFGPDF5W.mjs.map +0 -1
 - /package/dist/{chunk-DAEXVQLG.mjs.map → chunk-3UTYG3XF.mjs.map} +0 -0
 - /package/dist/{chunk-H662AKOV.mjs.map → chunk-7QXZH2EN.mjs.map} +0 -0
 - /package/dist/{chunk-JQCTT4C2.mjs.map → chunk-PHY5XCWA.mjs.map} +0 -0
 
    
        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   * 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":"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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      isDisabled,\n      disabled = isDisabled,\n      isFocusable,\n      focusable = isFocusable,\n      icon,\n      ...props\n    },\n    ref,\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    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    const { index, register } = useMenuDescendant({ disabled: trulyDisabled })\n    const focused = index === focusedIndex\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    id ??= uuid\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    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      isChecked,\n      checked = isChecked,\n      children,\n      closeOnSelect = false,\n      icon,\n      ...rest\n    },\n    ref,\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;;;ADyKK;AAvNR,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,WAAW;AAAA,IACX;AAAA,IACA,YAAY;AAAA,IACZ;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AAjGP;AAkGI,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;AACA,UAAM,gBAAgB,YAAY,CAAC;AACnC,UAAM,QAAO,aAAQ,YAAR,mBAAiB,aAAa;AAC3C,UAAM,OAAO,CAAC,CAAC,OACX,SAAS,aACP,qBACA,kBACF;AACJ,UAAM,EAAE,OAAO,SAAS,IAAI,kBAAkB,EAAE,UAAU,cAAc,CAAC;AACzE,UAAM,UAAU,UAAU;AAC1B,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,2BAAO;AAEP,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;AA7K7C,UAAAC;AA8KM,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;AAlOtE,cAAAD;AAmOU,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,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,UAAU;AAAA,IACV;AAAA,IACA,gBAAgB;AAAA,IAChB;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AACH,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"]}
         
     | 
    
        package/dist/menu-item.mjs
    CHANGED
    
    
| 
         @@ -115,16 +115,14 @@ var MenuItem = (0, import_core2.forwardRef)( 
     | 
|
| 
       115 
115 
     | 
    
         
             
                children,
         
     | 
| 
       116 
116 
     | 
    
         
             
                closeOnSelect: customCloseOnSelect,
         
     | 
| 
       117 
117 
     | 
    
         
             
                command,
         
     | 
| 
       118 
     | 
    
         
            -
                disabled,
         
     | 
| 
       119 
     | 
    
         
            -
                focusable,
         
     | 
| 
       120 
     | 
    
         
            -
                icon,
         
     | 
| 
       121 
118 
     | 
    
         
             
                isDisabled,
         
     | 
| 
      
 119 
     | 
    
         
            +
                disabled = isDisabled,
         
     | 
| 
       122 
120 
     | 
    
         
             
                isFocusable,
         
     | 
| 
      
 121 
     | 
    
         
            +
                focusable = isFocusable,
         
     | 
| 
      
 122 
     | 
    
         
            +
                icon,
         
     | 
| 
       123 
123 
     | 
    
         
             
                ...props
         
     | 
| 
       124 
124 
     | 
    
         
             
              }, ref) => {
         
     | 
| 
       125 
125 
     | 
    
         
             
                var _a, _b;
         
     | 
| 
       126 
     | 
    
         
            -
                disabled != null ? disabled : disabled = isDisabled;
         
     | 
| 
       127 
     | 
    
         
            -
                focusable != null ? focusable : focusable = isFocusable;
         
     | 
| 
       128 
126 
     | 
    
         
             
                const {
         
     | 
| 
       129 
127 
     | 
    
         
             
                  closeOnSelect,
         
     | 
| 
       130 
128 
     | 
    
         
             
                  focusedIndex,
         
     | 
| 
         @@ -145,12 +143,25 @@ var MenuItem = (0, import_core2.forwardRef)( 
     | 
|
| 
       145 
143 
     | 
    
         
             
                const onKeyDownRef = (0, import_react2.useRef)(
         
     | 
| 
       146 
144 
     | 
    
         
             
                  () => void 0
         
     | 
| 
       147 
145 
     | 
    
         
             
                );
         
     | 
| 
       148 
     | 
    
         
            -
                id != null ? id : id = uuid;
         
     | 
| 
       149 
146 
     | 
    
         
             
                const trulyDisabled = disabled && !focusable;
         
     | 
| 
       150 
147 
     | 
    
         
             
                const type = (_b = itemRef.current) == null ? void 0 : _b.getAttribute("type");
         
     | 
| 
       151 
148 
     | 
    
         
             
                const role = !!type ? type === "checkbox" ? "menuitemcheckbox" : "menuitemradio" : "menuitem";
         
     | 
| 
       152 
149 
     | 
    
         
             
                const { index, register } = useMenuDescendant({ disabled: trulyDisabled });
         
     | 
| 
       153 
150 
     | 
    
         
             
                const focused = index === focusedIndex;
         
     | 
| 
      
 151 
     | 
    
         
            +
                const css = {
         
     | 
| 
      
 152 
     | 
    
         
            +
                  alignItems: "center",
         
     | 
| 
      
 153 
     | 
    
         
            +
                  color: "inherit",
         
     | 
| 
      
 154 
     | 
    
         
            +
                  display: "flex",
         
     | 
| 
      
 155 
     | 
    
         
            +
                  flex: "0 0 auto",
         
     | 
| 
      
 156 
     | 
    
         
            +
                  gap: "0.75rem",
         
     | 
| 
      
 157 
     | 
    
         
            +
                  outline: 0,
         
     | 
| 
      
 158 
     | 
    
         
            +
                  textAlign: "start",
         
     | 
| 
      
 159 
     | 
    
         
            +
                  textDecoration: "none",
         
     | 
| 
      
 160 
     | 
    
         
            +
                  userSelect: "none",
         
     | 
| 
      
 161 
     | 
    
         
            +
                  width: "100%",
         
     | 
| 
      
 162 
     | 
    
         
            +
                  ...styles.item
         
     | 
| 
      
 163 
     | 
    
         
            +
                };
         
     | 
| 
      
 164 
     | 
    
         
            +
                id != null ? id : id = uuid;
         
     | 
| 
       154 
165 
     | 
    
         
             
                const onMouseOver = (0, import_react2.useCallback)(() => {
         
     | 
| 
       155 
166 
     | 
    
         
             
                  if (disabled) return;
         
     | 
| 
       156 
167 
     | 
    
         
             
                  setFocusedIndex(index);
         
     | 
| 
         @@ -224,19 +235,6 @@ var MenuItem = (0, import_core2.forwardRef)( 
     | 
|
| 
       224 
235 
     | 
    
         
             
                  };
         
     | 
| 
       225 
236 
     | 
    
         
             
                }, [focused, trulyDisabled, menuRef, open]);
         
     | 
| 
       226 
237 
     | 
    
         
             
                children = icon || command ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_core2.ui.span, { style: { flex: 1 }, children }) : children;
         
     | 
| 
       227 
     | 
    
         
            -
                const css = {
         
     | 
| 
       228 
     | 
    
         
            -
                  alignItems: "center",
         
     | 
| 
       229 
     | 
    
         
            -
                  color: "inherit",
         
     | 
| 
       230 
     | 
    
         
            -
                  display: "flex",
         
     | 
| 
       231 
     | 
    
         
            -
                  flex: "0 0 auto",
         
     | 
| 
       232 
     | 
    
         
            -
                  gap: "0.75rem",
         
     | 
| 
       233 
     | 
    
         
            -
                  outline: 0,
         
     | 
| 
       234 
     | 
    
         
            -
                  textAlign: "start",
         
     | 
| 
       235 
     | 
    
         
            -
                  textDecoration: "none",
         
     | 
| 
       236 
     | 
    
         
            -
                  userSelect: "none",
         
     | 
| 
       237 
     | 
    
         
            -
                  width: "100%",
         
     | 
| 
       238 
     | 
    
         
            -
                  ...styles.item
         
     | 
| 
       239 
     | 
    
         
            -
                };
         
     | 
| 
       240 
238 
     | 
    
         
             
                return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
         
     | 
| 
       241 
239 
     | 
    
         
             
                  UpstreamMenuItemProvider,
         
     | 
| 
       242 
240 
     | 
    
         
             
                  {
         
     | 
| 
         @@ -272,14 +270,13 @@ MenuItem.__ui__ = "MenuItem"; 
     | 
|
| 
       272 
270 
     | 
    
         
             
            var MenuOptionItem = (0, import_core2.forwardRef)(
         
     | 
| 
       273 
271 
     | 
    
         
             
              ({
         
     | 
| 
       274 
272 
     | 
    
         
             
                className,
         
     | 
| 
       275 
     | 
    
         
            -
                 
     | 
| 
      
 273 
     | 
    
         
            +
                isChecked,
         
     | 
| 
      
 274 
     | 
    
         
            +
                checked = isChecked,
         
     | 
| 
       276 
275 
     | 
    
         
             
                children,
         
     | 
| 
       277 
276 
     | 
    
         
             
                closeOnSelect = false,
         
     | 
| 
       278 
277 
     | 
    
         
             
                icon,
         
     | 
| 
       279 
     | 
    
         
            -
                isChecked,
         
     | 
| 
       280 
278 
     | 
    
         
             
                ...rest
         
     | 
| 
       281 
279 
     | 
    
         
             
              }, ref) => {
         
     | 
| 
       282 
     | 
    
         
            -
                checked != null ? checked : checked = isChecked;
         
     | 
| 
       283 
280 
     | 
    
         
             
                return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
         
     | 
| 
       284 
281 
     | 
    
         
             
                  MenuItem,
         
     | 
| 
       285 
282 
     | 
    
         
             
                  {
         
     | 
| 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-option-group.tsx","../src/menu-group.tsx","../src/menu-context.ts","../src/menu-item.tsx"],"sourcesContent":["import type { ComponentArgs } from \"@yamada-ui/core\"\nimport type { ForwardedRef, ReactElement, RefAttributes } from \"react\"\nimport type { MenuGroupProps } from \"./menu-group\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { cx, getValidChildren, isArray, isString } from \"@yamada-ui/utils\"\nimport { cloneElement, forwardRef, useCallback } from \"react\"\nimport { MenuGroup } from \"./menu-group\"\nimport { MenuOptionItem } from \"./menu-item\"\n\ninterface MenuOptionGroupOptions<Y extends string | string[] = string> {\n  /**\n   * The type of the menu option group.\n   *\n   * @default 'checkbox'\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * The initial value of the menu item group.\n   */\n  defaultValue?: Y\n  /**\n   * The value of the menu item group.\n   */\n  value?: Y\n  /**\n   * The callback fired when any children checkbox is checked or unchecked.\n   */\n  onChange?: (value: Y) => void\n}\n\nexport interface MenuOptionGroupProps<Y extends string | string[] = string>\n  extends Omit<MenuGroupProps, keyof MenuOptionGroupOptions>,\n    MenuOptionGroupOptions<Y> {}\n\nexport const MenuOptionGroup = forwardRef(\n  <Y extends string | string[] = string>(\n    {\n      type,\n      className,\n      children,\n      defaultValue,\n      value: valueProp,\n      onChange: onChangeProp,\n      ...rest\n    }: MenuOptionGroupProps<Y>,\n    ref: ForwardedRef<HTMLDivElement>,\n  ) => {\n    const radio = type === \"radio\"\n\n    defaultValue ??= (radio ? \"\" : []) as Y\n\n    const [value, setValue] = useControllableState({\n      defaultValue,\n      value: valueProp,\n      onChange: onChangeProp,\n    })\n\n    const onChange = useCallback(\n      (selectedValue: string) => {\n        if (radio && isString(value)) setValue(selectedValue as Y)\n\n        if (!radio && isArray(value)) {\n          const nextValue = value.includes(selectedValue)\n            ? value.filter((item) => item !== selectedValue)\n            : value.concat(selectedValue)\n\n          setValue(nextValue as Y)\n        }\n      },\n      [radio, value, setValue],\n    )\n\n    const validChildren = getValidChildren(children)\n\n    const cloneChildren = validChildren.map((child) => {\n      if (child.type !== MenuOptionItem) return child\n\n      const onClick = (ev: MouseEvent) => {\n        onChange(child.props.value)\n        child.props.onClick?.(ev)\n      }\n\n      const checked =\n        !radio && isArray(value)\n          ? value.includes(child.props.value)\n          : child.props.value === value\n\n      return cloneElement(child, { type, checked, onClick })\n    })\n\n    return (\n      <MenuGroup\n        ref={ref}\n        className={cx(\"ui-menu__item--group--option\", className)}\n        {...rest}\n      >\n        {cloneChildren}\n      </MenuGroup>\n    )\n  },\n) as {\n  <Y extends string | string[] = string>(\n    props: MenuOptionGroupProps<Y> & RefAttributes<HTMLDivElement>,\n  ): ReactElement\n} & ComponentArgs\n\nMenuOptionGroup.displayName = \"MenuOptionGroup\"\nMenuOptionGroup.__ui__ = \"MenuOptionGroup\"\n","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","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_utils","import_react","import_utils","import_core","import_utils","import_react","import_jsx_runtime","_a","id","import_jsx_runtime"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu-option-group.tsx","../src/menu-group.tsx","../src/menu-context.ts","../src/menu-item.tsx"],"sourcesContent":["import type { ComponentArgs } from \"@yamada-ui/core\"\nimport type { ForwardedRef, ReactElement, RefAttributes } from \"react\"\nimport type { MenuGroupProps } from \"./menu-group\"\nimport { useControllableState } from \"@yamada-ui/use-controllable-state\"\nimport { cx, getValidChildren, isArray, isString } from \"@yamada-ui/utils\"\nimport { cloneElement, forwardRef, useCallback } from \"react\"\nimport { MenuGroup } from \"./menu-group\"\nimport { MenuOptionItem } from \"./menu-item\"\n\ninterface MenuOptionGroupOptions<Y extends string | string[] = string> {\n  /**\n   * The type of the menu option group.\n   *\n   * @default 'checkbox'\n   */\n  type?: \"checkbox\" | \"radio\"\n  /**\n   * The initial value of the menu item group.\n   */\n  defaultValue?: Y\n  /**\n   * The value of the menu item group.\n   */\n  value?: Y\n  /**\n   * The callback fired when any children checkbox is checked or unchecked.\n   */\n  onChange?: (value: Y) => void\n}\n\nexport interface MenuOptionGroupProps<Y extends string | string[] = string>\n  extends Omit<MenuGroupProps, keyof MenuOptionGroupOptions>,\n    MenuOptionGroupOptions<Y> {}\n\nexport const MenuOptionGroup = forwardRef(\n  <Y extends string | string[] = string>(\n    {\n      type,\n      className,\n      children,\n      defaultValue,\n      value: valueProp,\n      onChange: onChangeProp,\n      ...rest\n    }: MenuOptionGroupProps<Y>,\n    ref: ForwardedRef<HTMLDivElement>,\n  ) => {\n    const radio = type === \"radio\"\n\n    defaultValue ??= (radio ? \"\" : []) as Y\n\n    const [value, setValue] = useControllableState({\n      defaultValue,\n      value: valueProp,\n      onChange: onChangeProp,\n    })\n\n    const onChange = useCallback(\n      (selectedValue: string) => {\n        if (radio && isString(value)) setValue(selectedValue as Y)\n\n        if (!radio && isArray(value)) {\n          const nextValue = value.includes(selectedValue)\n            ? value.filter((item) => item !== selectedValue)\n            : value.concat(selectedValue)\n\n          setValue(nextValue as Y)\n        }\n      },\n      [radio, value, setValue],\n    )\n\n    const validChildren = getValidChildren(children)\n\n    const cloneChildren = validChildren.map((child) => {\n      if (child.type !== MenuOptionItem) return child\n\n      const onClick = (ev: MouseEvent) => {\n        onChange(child.props.value)\n        child.props.onClick?.(ev)\n      }\n\n      const checked =\n        !radio && isArray(value)\n          ? value.includes(child.props.value)\n          : child.props.value === value\n\n      return cloneElement(child, { type, checked, onClick })\n    })\n\n    return (\n      <MenuGroup\n        ref={ref}\n        className={cx(\"ui-menu__item--group--option\", className)}\n        {...rest}\n      >\n        {cloneChildren}\n      </MenuGroup>\n    )\n  },\n) as {\n  <Y extends string | string[] = string>(\n    props: MenuOptionGroupProps<Y> & RefAttributes<HTMLDivElement>,\n  ): ReactElement\n} & ComponentArgs\n\nMenuOptionGroup.displayName = \"MenuOptionGroup\"\nMenuOptionGroup.__ui__ = \"MenuOptionGroup\"\n","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","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      isDisabled,\n      disabled = isDisabled,\n      isFocusable,\n      focusable = isFocusable,\n      icon,\n      ...props\n    },\n    ref,\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    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    const { index, register } = useMenuDescendant({ disabled: trulyDisabled })\n    const focused = index === focusedIndex\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    id ??= uuid\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    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      isChecked,\n      checked = isChecked,\n      children,\n      closeOnSelect = false,\n      icon,\n      ...rest\n    },\n    ref,\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_utils","import_react","import_utils","import_core","import_utils","import_react","import_jsx_runtime","_a","id","import_jsx_runtime"]}
         
     | 
| 
         @@ -1,9 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            "use client"
         
     | 
| 
       2 
2 
     | 
    
         
             
            import {
         
     | 
| 
       3 
3 
     | 
    
         
             
              MenuOptionGroup
         
     | 
| 
       4 
     | 
    
         
            -
            } from "./chunk- 
     | 
| 
      
 4 
     | 
    
         
            +
            } from "./chunk-PHY5XCWA.mjs";
         
     | 
| 
       5 
5 
     | 
    
         
             
            import "./chunk-AGHG37SL.mjs";
         
     | 
| 
       6 
     | 
    
         
            -
            import "./chunk- 
     | 
| 
      
 6 
     | 
    
         
            +
            import "./chunk-D2UJVOJ7.mjs";
         
     | 
| 
       7 
7 
     | 
    
         
             
            import "./chunk-IWH3B4PS.mjs";
         
     | 
| 
       8 
8 
     | 
    
         
             
            export {
         
     | 
| 
       9 
9 
     | 
    
         
             
              MenuOptionGroup
         
     | 
    
        package/dist/menu.js
    CHANGED
    
    | 
         @@ -65,27 +65,20 @@ var Menu = (props) => { 
     | 
|
| 
       65 
65 
     | 
    
         
             
                isProcessSkip: !!contextMenuStyles,
         
     | 
| 
       66 
66 
     | 
    
         
             
                styles: contextMenuStyles
         
     | 
| 
       67 
67 
     | 
    
         
             
              });
         
     | 
| 
       68 
     | 
    
         
            -
               
     | 
| 
       69 
     | 
    
         
            -
             
     | 
| 
      
 68 
     | 
    
         
            +
              const { relatedRef, onDownstreamCloseMapRef, onUpstreamClose } = (_b = useUpstreamMenu()) != null ? _b : {};
         
     | 
| 
      
 69 
     | 
    
         
            +
              const nested = !!relatedRef;
         
     | 
| 
      
 70 
     | 
    
         
            +
              const {
         
     | 
| 
      
 71 
     | 
    
         
            +
                closeOnBlur = !nested,
         
     | 
| 
       70 
72 
     | 
    
         
             
                closeOnSelect = true,
         
     | 
| 
       71 
73 
     | 
    
         
             
                duration = 0.2,
         
     | 
| 
       72 
74 
     | 
    
         
             
                initialFocusRef,
         
     | 
| 
       73 
     | 
    
         
            -
                offset,
         
     | 
| 
       74 
     | 
    
         
            -
                placement,
         
     | 
| 
      
 75 
     | 
    
         
            +
                offset = nested ? [-8, 8] : void 0,
         
     | 
| 
      
 76 
     | 
    
         
            +
                placement = nested ? "right-start" : "bottom-start",
         
     | 
| 
       75 
77 
     | 
    
         
             
                onClose: onCloseProp,
         
     | 
| 
       76 
78 
     | 
    
         
             
                onOpen: onOpenProp,
         
     | 
| 
       77 
79 
     | 
    
         
             
                ...rest
         
     | 
| 
       78 
80 
     | 
    
         
             
              } = (0, import_core.omitThemeProps)(mergedProps);
         
     | 
| 
       79 
     | 
    
         
            -
              const { relatedRef, onDownstreamCloseMapRef, onUpstreamClose } = (_b = useUpstreamMenu()) != null ? _b : {};
         
     | 
| 
       80 
81 
     | 
    
         
             
              const { hasDownstreamRef, setDownstreamOpen } = (_c = useUpstreamMenuItem()) != null ? _c : {};
         
     | 
| 
       81 
     | 
    
         
            -
              const nested = !!relatedRef;
         
     | 
| 
       82 
     | 
    
         
            -
              if (nested) {
         
     | 
| 
       83 
     | 
    
         
            -
                placement != null ? placement : placement = "right-start";
         
     | 
| 
       84 
     | 
    
         
            -
                offset != null ? offset : offset = [-8, 8];
         
     | 
| 
       85 
     | 
    
         
            -
                closeOnBlur != null ? closeOnBlur : closeOnBlur = false;
         
     | 
| 
       86 
     | 
    
         
            -
              } else {
         
     | 
| 
       87 
     | 
    
         
            -
                placement != null ? placement : placement = "bottom-start";
         
     | 
| 
       88 
     | 
    
         
            -
              }
         
     | 
| 
       89 
82 
     | 
    
         
             
              const descendants = useDescendants();
         
     | 
| 
       90 
83 
     | 
    
         
             
              const [focusedIndex, setFocusedIndex] = (0, import_react.useState)(-1);
         
     | 
| 
       91 
84 
     | 
    
         
             
              const menuRef = (0, import_react.useRef)(null);
         
     | 
    
        package/dist/menu.js.map
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu.tsx","../src/menu-context.ts"],"sourcesContent":["import type { FC, ThemeProps } from \"@yamada-ui/core\"\nimport type { PopoverProps } from \"@yamada-ui/popover\"\nimport { omitThemeProps, useComponentMultiStyle } from \"@yamada-ui/core\"\nimport { Popover } from \"@yamada-ui/popover\"\nimport { useDisclosure } from \"@yamada-ui/use-disclosure\"\nimport { funcAll, useUnmountEffect, useUpdateEffect } from \"@yamada-ui/utils\"\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\"\nimport {\n  DescendantsContextProvider,\n  MenuProvider,\n  UpstreamMenuProvider,\n  useContextMenu,\n  useDescendants,\n  useUpstreamMenu,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nexport interface MenuOptions {\n  /**\n   * If `true`, the list element will be closed when value is selected.\n   *\n   * @default true\n   */\n  closeOnSelect?: boolean\n}\n\nexport interface MenuProps\n  extends ThemeProps<\"Menu\">,\n    Omit<PopoverProps, \"closeOnButton\" | \"relatedRef\">,\n    MenuOptions {}\n\n/**\n * `Menu` is a component that displays a common dropdown menu.\n *\n * @see Docs https://yamada-ui.com/components/overlay/menu\n */\nexport const Menu: FC<MenuProps> = (props) => {\n  const { styles: contextMenuStyles } = useContextMenu() ?? {}\n  const [styles, mergedProps] = useComponentMultiStyle(\"Menu\", props, {\n    isProcessSkip: !!contextMenuStyles,\n    styles: contextMenuStyles,\n  })\n  let {\n    closeOnBlur,\n    closeOnSelect = true,\n    duration = 0.2,\n    initialFocusRef,\n    offset,\n    placement,\n    onClose: onCloseProp,\n    onOpen: onOpenProp,\n    ...rest\n  } = omitThemeProps(mergedProps)\n  const { relatedRef, onDownstreamCloseMapRef, onUpstreamClose } =\n    useUpstreamMenu() ?? {}\n  const { hasDownstreamRef, setDownstreamOpen } = useUpstreamMenuItem() ?? {}\n  const nested = !!relatedRef\n\n  if (nested) {\n    placement ??= \"right-start\"\n    offset ??= [-8, 8]\n    closeOnBlur ??= false\n  } else {\n    placement ??= \"bottom-start\"\n  }\n\n  const descendants = useDescendants()\n\n  const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n\n  const menuRef = useRef<HTMLDivElement>(null)\n  const buttonRef = useRef<HTMLButtonElement>(null)\n  const timeoutIds = useRef<Set<any>>(new Set([]))\n  const requestAnimationFrameId = useRef<null | number>(null)\n  const onCloseMapRef = useRef<Map<string, () => void>>(new Map())\n\n  const onFocusMenu = useCallback(() => {\n    requestAnimationFrame(() =>\n      menuRef.current?.focus({ preventScroll: false }),\n    )\n  }, [])\n\n  const onFocusFirstItem = useCallback(() => {\n    const id = setTimeout(() => {\n      if (initialFocusRef) return\n\n      const first = descendants.enabledFirstValue()\n\n      if (first) setFocusedIndex(first.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, initialFocusRef])\n\n  const onFocusLastItem = useCallback(() => {\n    const id = setTimeout(() => {\n      if (initialFocusRef) return\n\n      const last = descendants.enabledLastValue()\n\n      if (last) setFocusedIndex(last.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, initialFocusRef])\n\n  const onOpenInternal = useCallback(() => {\n    onOpenProp?.()\n\n    if (!nested) onFocusMenu()\n  }, [onOpenProp, nested, onFocusMenu])\n\n  const onCloseInternal = useCallback(() => {\n    onCloseProp?.()\n\n    for (const onClose of onCloseMapRef.current.values()) {\n      onClose()\n    }\n  }, [onCloseProp])\n\n  const id = useId()\n  const { open, onClose, onOpen } = useDisclosure({\n    ...props,\n    onClose: onCloseInternal,\n    onOpen: onOpenInternal,\n  })\n\n  useEffect(() => {\n    const onCloseMap = onDownstreamCloseMapRef?.current\n\n    onCloseMap?.set(id, onClose)\n\n    return () => {\n      onCloseMap?.delete(id)\n    }\n  }, [id, onClose, onDownstreamCloseMapRef])\n\n  useEffect(() => {\n    if (setDownstreamOpen) setDownstreamOpen(open)\n  }, [setDownstreamOpen, open])\n\n  useEffect(() => {\n    if (hasDownstreamRef) hasDownstreamRef.current = true\n\n    return () => {\n      if (hasDownstreamRef) hasDownstreamRef.current = false\n    }\n  })\n\n  useUpdateEffect(() => {\n    if (!open) setFocusedIndex(-1)\n  }, [open])\n\n  useUnmountEffect(() => {\n    timeoutIds.current.forEach((id) => clearTimeout(id))\n    timeoutIds.current.clear()\n  })\n\n  return (\n    <DescendantsContextProvider value={descendants}>\n      <UpstreamMenuProvider\n        value={{\n          relatedRef: menuRef,\n          onDownstreamCloseMapRef: onCloseMapRef,\n          onUpstreamClose: funcAll(onUpstreamClose, onClose),\n        }}\n      >\n        <MenuProvider\n          value={{\n            buttonRef,\n            closeOnSelect,\n            focusedIndex,\n            menuRef,\n            nested,\n            open,\n            requestAnimationFrameId,\n            setFocusedIndex,\n            styles,\n            onClose,\n            onFocusFirstItem,\n            onFocusLastItem,\n            onOpen,\n            onUpstreamClose,\n          }}\n        >\n          <Popover\n            {...{\n              trigger: nested ? \"hover\" : \"click\",\n              ...rest,\n              closeOnBlur,\n              closeOnButton: false,\n              duration,\n              initialFocusRef,\n              offset,\n              open,\n              placement,\n              relatedRef,\n              onClose,\n              onOpen,\n            }}\n          />\n        </MenuProvider>\n      </UpstreamMenuProvider>\n    </DescendantsContextProvider>\n  )\n}\n\nMenu.__ui__ = \"Menu\"\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;AAEA,kBAAuD;AACvD,qBAAwB;AACxB,4BAA8B;AAC9B,IAAAA,gBAA2D;AAC3D,mBAAgE;;;ACGhE,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;;;ADgHO;AArJH,IAAM,OAAsB,CAAC,UAAU;AApC9C;AAqCE,QAAM,EAAE,QAAQ,kBAAkB,KAAI,oBAAe,MAAf,YAAoB,CAAC;AAC3D,QAAM,CAAC,QAAQ,WAAW,QAAI,oCAAuB,QAAQ,OAAO;AAAA,IAClE,eAAe,CAAC,CAAC;AAAA,IACjB,QAAQ;AAAA,EACV,CAAC;AACD,MAAI;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,GAAG;AAAA,EACL,QAAI,4BAAe,WAAW;AAC9B,QAAM,EAAE,YAAY,yBAAyB,gBAAgB,KAC3D,qBAAgB,MAAhB,YAAqB,CAAC;AACxB,QAAM,EAAE,kBAAkB,kBAAkB,KAAI,yBAAoB,MAApB,YAAyB,CAAC;AAC1E,QAAM,SAAS,CAAC,CAAC;AAEjB,MAAI,QAAQ;AACV,gDAAc;AACd,uCAAW,CAAC,IAAI,CAAC;AACjB,sDAAgB;AAAA,EAClB,OAAO;AACL,gDAAc;AAAA,EAChB;AAEA,QAAM,cAAc,eAAe;AAEnC,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAiB,EAAE;AAE3D,QAAM,cAAU,qBAAuB,IAAI;AAC3C,QAAM,gBAAY,qBAA0B,IAAI;AAChD,QAAM,iBAAa,qBAAiB,oBAAI,IAAI,CAAC,CAAC,CAAC;AAC/C,QAAM,8BAA0B,qBAAsB,IAAI;AAC1D,QAAM,oBAAgB,qBAAgC,oBAAI,IAAI,CAAC;AAE/D,QAAM,kBAAc,0BAAY,MAAM;AACpC;AAAA,MAAsB,MAAG;AA7E7B,YAAAC;AA8EM,gBAAAA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,MAAM,EAAE,eAAe,MAAM;AAAA;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAmB,0BAAY,MAAM;AACzC,UAAMC,MAAK,WAAW,MAAM;AAC1B,UAAI,gBAAiB;AAErB,YAAM,QAAQ,YAAY,kBAAkB;AAE5C,UAAI,MAAO,iBAAgB,MAAM,KAAK;AAAA,IACxC,CAAC;AAED,eAAW,QAAQ,IAAIA,GAAE;AAAA,EAC3B,GAAG,CAAC,aAAa,eAAe,CAAC;AAEjC,QAAM,sBAAkB,0BAAY,MAAM;AACxC,UAAMA,MAAK,WAAW,MAAM;AAC1B,UAAI,gBAAiB;AAErB,YAAM,OAAO,YAAY,iBAAiB;AAE1C,UAAI,KAAM,iBAAgB,KAAK,KAAK;AAAA,IACtC,CAAC;AAED,eAAW,QAAQ,IAAIA,GAAE;AAAA,EAC3B,GAAG,CAAC,aAAa,eAAe,CAAC;AAEjC,QAAM,qBAAiB,0BAAY,MAAM;AACvC;AAEA,QAAI,CAAC,OAAQ,aAAY;AAAA,EAC3B,GAAG,CAAC,YAAY,QAAQ,WAAW,CAAC;AAEpC,QAAM,sBAAkB,0BAAY,MAAM;AACxC;AAEA,eAAWC,YAAW,cAAc,QAAQ,OAAO,GAAG;AACpD,MAAAA,SAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,SAAK,oBAAM;AACjB,QAAM,EAAE,MAAM,SAAS,OAAO,QAAI,qCAAc;AAAA,IAC9C,GAAG;AAAA,IACH,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AAED,8BAAU,MAAM;AACd,UAAM,aAAa,mEAAyB;AAE5C,6CAAY,IAAI,IAAI;AAEpB,WAAO,MAAM;AACX,+CAAY,OAAO;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,IAAI,SAAS,uBAAuB,CAAC;AAEzC,8BAAU,MAAM;AACd,QAAI,kBAAmB,mBAAkB,IAAI;AAAA,EAC/C,GAAG,CAAC,mBAAmB,IAAI,CAAC;AAE5B,8BAAU,MAAM;AACd,QAAI,iBAAkB,kBAAiB,UAAU;AAEjD,WAAO,MAAM;AACX,UAAI,iBAAkB,kBAAiB,UAAU;AAAA,IACnD;AAAA,EACF,CAAC;AAED,qCAAgB,MAAM;AACpB,QAAI,CAAC,KAAM,iBAAgB,EAAE;AAAA,EAC/B,GAAG,CAAC,IAAI,CAAC;AAET,sCAAiB,MAAM;AACrB,eAAW,QAAQ,QAAQ,CAACD,QAAO,aAAaA,GAAE,CAAC;AACnD,eAAW,QAAQ,MAAM;AAAA,EAC3B,CAAC;AAED,SACE,4CAAC,8BAA2B,OAAO,aACjC;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,yBAAyB;AAAA,QACzB,qBAAiB,uBAAQ,iBAAiB,OAAO;AAAA,MACnD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,gBACF,SAAS,SAAS,UAAU;AAAA,gBAC5B,GAAG;AAAA,gBACH;AAAA,gBACA,eAAe;AAAA,gBACf;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,KAAK,SAAS;","names":["import_utils","_a","id","onClose"]}
         
     | 
| 
      
 1 
     | 
    
         
            +
            {"version":3,"sources":["../src/menu.tsx","../src/menu-context.ts"],"sourcesContent":["import type { FC, ThemeProps } from \"@yamada-ui/core\"\nimport type { PopoverProps } from \"@yamada-ui/popover\"\nimport { omitThemeProps, useComponentMultiStyle } from \"@yamada-ui/core\"\nimport { Popover } from \"@yamada-ui/popover\"\nimport { useDisclosure } from \"@yamada-ui/use-disclosure\"\nimport { funcAll, useUnmountEffect, useUpdateEffect } from \"@yamada-ui/utils\"\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\"\nimport {\n  DescendantsContextProvider,\n  MenuProvider,\n  UpstreamMenuProvider,\n  useContextMenu,\n  useDescendants,\n  useUpstreamMenu,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nexport interface MenuOptions {\n  /**\n   * If `true`, the list element will be closed when value is selected.\n   *\n   * @default true\n   */\n  closeOnSelect?: boolean\n}\n\nexport interface MenuProps\n  extends ThemeProps<\"Menu\">,\n    Omit<PopoverProps, \"closeOnButton\" | \"relatedRef\">,\n    MenuOptions {}\n\n/**\n * `Menu` is a component that displays a common dropdown menu.\n *\n * @see Docs https://yamada-ui.com/components/overlay/menu\n */\nexport const Menu: FC<MenuProps> = (props) => {\n  const { styles: contextMenuStyles } = useContextMenu() ?? {}\n  const [styles, mergedProps] = useComponentMultiStyle(\"Menu\", props, {\n    isProcessSkip: !!contextMenuStyles,\n    styles: contextMenuStyles,\n  })\n  const { relatedRef, onDownstreamCloseMapRef, onUpstreamClose } =\n    useUpstreamMenu() ?? {}\n  const nested = !!relatedRef\n  const {\n    closeOnBlur = !nested,\n    closeOnSelect = true,\n    duration = 0.2,\n    initialFocusRef,\n    offset = nested ? [-8, 8] : undefined,\n    placement = nested ? \"right-start\" : \"bottom-start\",\n    onClose: onCloseProp,\n    onOpen: onOpenProp,\n    ...rest\n  } = omitThemeProps(mergedProps)\n  const { hasDownstreamRef, setDownstreamOpen } = useUpstreamMenuItem() ?? {}\n  const descendants = useDescendants()\n  const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n  const menuRef = useRef<HTMLDivElement>(null)\n  const buttonRef = useRef<HTMLButtonElement>(null)\n  const timeoutIds = useRef<Set<any>>(new Set([]))\n  const requestAnimationFrameId = useRef<null | number>(null)\n  const onCloseMapRef = useRef<Map<string, () => void>>(new Map())\n\n  const onFocusMenu = useCallback(() => {\n    requestAnimationFrame(() =>\n      menuRef.current?.focus({ preventScroll: false }),\n    )\n  }, [])\n\n  const onFocusFirstItem = useCallback(() => {\n    const id = setTimeout(() => {\n      if (initialFocusRef) return\n\n      const first = descendants.enabledFirstValue()\n\n      if (first) setFocusedIndex(first.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, initialFocusRef])\n\n  const onFocusLastItem = useCallback(() => {\n    const id = setTimeout(() => {\n      if (initialFocusRef) return\n\n      const last = descendants.enabledLastValue()\n\n      if (last) setFocusedIndex(last.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, initialFocusRef])\n\n  const onOpenInternal = useCallback(() => {\n    onOpenProp?.()\n\n    if (!nested) onFocusMenu()\n  }, [onOpenProp, nested, onFocusMenu])\n\n  const onCloseInternal = useCallback(() => {\n    onCloseProp?.()\n\n    for (const onClose of onCloseMapRef.current.values()) {\n      onClose()\n    }\n  }, [onCloseProp])\n\n  const id = useId()\n  const { open, onClose, onOpen } = useDisclosure({\n    ...props,\n    onClose: onCloseInternal,\n    onOpen: onOpenInternal,\n  })\n\n  useEffect(() => {\n    const onCloseMap = onDownstreamCloseMapRef?.current\n\n    onCloseMap?.set(id, onClose)\n\n    return () => {\n      onCloseMap?.delete(id)\n    }\n  }, [id, onClose, onDownstreamCloseMapRef])\n\n  useEffect(() => {\n    if (setDownstreamOpen) setDownstreamOpen(open)\n  }, [setDownstreamOpen, open])\n\n  useEffect(() => {\n    if (hasDownstreamRef) hasDownstreamRef.current = true\n\n    return () => {\n      if (hasDownstreamRef) hasDownstreamRef.current = false\n    }\n  })\n\n  useUpdateEffect(() => {\n    if (!open) setFocusedIndex(-1)\n  }, [open])\n\n  useUnmountEffect(() => {\n    timeoutIds.current.forEach((id) => clearTimeout(id))\n    timeoutIds.current.clear()\n  })\n\n  return (\n    <DescendantsContextProvider value={descendants}>\n      <UpstreamMenuProvider\n        value={{\n          relatedRef: menuRef,\n          onDownstreamCloseMapRef: onCloseMapRef,\n          onUpstreamClose: funcAll(onUpstreamClose, onClose),\n        }}\n      >\n        <MenuProvider\n          value={{\n            buttonRef,\n            closeOnSelect,\n            focusedIndex,\n            menuRef,\n            nested,\n            open,\n            requestAnimationFrameId,\n            setFocusedIndex,\n            styles,\n            onClose,\n            onFocusFirstItem,\n            onFocusLastItem,\n            onOpen,\n            onUpstreamClose,\n          }}\n        >\n          <Popover\n            {...{\n              trigger: nested ? \"hover\" : \"click\",\n              ...rest,\n              closeOnBlur,\n              closeOnButton: false,\n              duration,\n              initialFocusRef,\n              offset,\n              open,\n              placement,\n              relatedRef,\n              onClose,\n              onOpen,\n            }}\n          />\n        </MenuProvider>\n      </UpstreamMenuProvider>\n    </DescendantsContextProvider>\n  )\n}\n\nMenu.__ui__ = \"Menu\"\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;AAEA,kBAAuD;AACvD,qBAAwB;AACxB,4BAA8B;AAC9B,IAAAA,gBAA2D;AAC3D,mBAAgE;;;ACGhE,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;;;ADqGO;AA1IH,IAAM,OAAsB,CAAC,UAAU;AApC9C;AAqCE,QAAM,EAAE,QAAQ,kBAAkB,KAAI,oBAAe,MAAf,YAAoB,CAAC;AAC3D,QAAM,CAAC,QAAQ,WAAW,QAAI,oCAAuB,QAAQ,OAAO;AAAA,IAClE,eAAe,CAAC,CAAC;AAAA,IACjB,QAAQ;AAAA,EACV,CAAC;AACD,QAAM,EAAE,YAAY,yBAAyB,gBAAgB,KAC3D,qBAAgB,MAAhB,YAAqB,CAAC;AACxB,QAAM,SAAS,CAAC,CAAC;AACjB,QAAM;AAAA,IACJ,cAAc,CAAC;AAAA,IACf,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX;AAAA,IACA,SAAS,SAAS,CAAC,IAAI,CAAC,IAAI;AAAA,IAC5B,YAAY,SAAS,gBAAgB;AAAA,IACrC,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,GAAG;AAAA,EACL,QAAI,4BAAe,WAAW;AAC9B,QAAM,EAAE,kBAAkB,kBAAkB,KAAI,yBAAoB,MAApB,YAAyB,CAAC;AAC1E,QAAM,cAAc,eAAe;AACnC,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAiB,EAAE;AAC3D,QAAM,cAAU,qBAAuB,IAAI;AAC3C,QAAM,gBAAY,qBAA0B,IAAI;AAChD,QAAM,iBAAa,qBAAiB,oBAAI,IAAI,CAAC,CAAC,CAAC;AAC/C,QAAM,8BAA0B,qBAAsB,IAAI;AAC1D,QAAM,oBAAgB,qBAAgC,oBAAI,IAAI,CAAC;AAE/D,QAAM,kBAAc,0BAAY,MAAM;AACpC;AAAA,MAAsB,MAAG;AAlE7B,YAAAC;AAmEM,gBAAAA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB,MAAM,EAAE,eAAe,MAAM;AAAA;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,uBAAmB,0BAAY,MAAM;AACzC,UAAMC,MAAK,WAAW,MAAM;AAC1B,UAAI,gBAAiB;AAErB,YAAM,QAAQ,YAAY,kBAAkB;AAE5C,UAAI,MAAO,iBAAgB,MAAM,KAAK;AAAA,IACxC,CAAC;AAED,eAAW,QAAQ,IAAIA,GAAE;AAAA,EAC3B,GAAG,CAAC,aAAa,eAAe,CAAC;AAEjC,QAAM,sBAAkB,0BAAY,MAAM;AACxC,UAAMA,MAAK,WAAW,MAAM;AAC1B,UAAI,gBAAiB;AAErB,YAAM,OAAO,YAAY,iBAAiB;AAE1C,UAAI,KAAM,iBAAgB,KAAK,KAAK;AAAA,IACtC,CAAC;AAED,eAAW,QAAQ,IAAIA,GAAE;AAAA,EAC3B,GAAG,CAAC,aAAa,eAAe,CAAC;AAEjC,QAAM,qBAAiB,0BAAY,MAAM;AACvC;AAEA,QAAI,CAAC,OAAQ,aAAY;AAAA,EAC3B,GAAG,CAAC,YAAY,QAAQ,WAAW,CAAC;AAEpC,QAAM,sBAAkB,0BAAY,MAAM;AACxC;AAEA,eAAWC,YAAW,cAAc,QAAQ,OAAO,GAAG;AACpD,MAAAA,SAAQ;AAAA,IACV;AAAA,EACF,GAAG,CAAC,WAAW,CAAC;AAEhB,QAAM,SAAK,oBAAM;AACjB,QAAM,EAAE,MAAM,SAAS,OAAO,QAAI,qCAAc;AAAA,IAC9C,GAAG;AAAA,IACH,SAAS;AAAA,IACT,QAAQ;AAAA,EACV,CAAC;AAED,8BAAU,MAAM;AACd,UAAM,aAAa,mEAAyB;AAE5C,6CAAY,IAAI,IAAI;AAEpB,WAAO,MAAM;AACX,+CAAY,OAAO;AAAA,IACrB;AAAA,EACF,GAAG,CAAC,IAAI,SAAS,uBAAuB,CAAC;AAEzC,8BAAU,MAAM;AACd,QAAI,kBAAmB,mBAAkB,IAAI;AAAA,EAC/C,GAAG,CAAC,mBAAmB,IAAI,CAAC;AAE5B,8BAAU,MAAM;AACd,QAAI,iBAAkB,kBAAiB,UAAU;AAEjD,WAAO,MAAM;AACX,UAAI,iBAAkB,kBAAiB,UAAU;AAAA,IACnD;AAAA,EACF,CAAC;AAED,qCAAgB,MAAM;AACpB,QAAI,CAAC,KAAM,iBAAgB,EAAE;AAAA,EAC/B,GAAG,CAAC,IAAI,CAAC;AAET,sCAAiB,MAAM;AACrB,eAAW,QAAQ,QAAQ,CAACD,QAAO,aAAaA,GAAE,CAAC;AACnD,eAAW,QAAQ,MAAM;AAAA,EAC3B,CAAC;AAED,SACE,4CAAC,8BAA2B,OAAO,aACjC;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,yBAAyB;AAAA,QACzB,qBAAiB,uBAAQ,iBAAiB,OAAO;AAAA,MACnD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACE,GAAG;AAAA,gBACF,SAAS,SAAS,UAAU;AAAA,gBAC5B,GAAG;AAAA,gBACH;AAAA,gBACA,eAAe;AAAA,gBACf;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,gBACA;AAAA,cACF;AAAA;AAAA,UACF;AAAA;AAAA,MACF;AAAA;AAAA,EACF,GACF;AAEJ;AAEA,KAAK,SAAS;","names":["import_utils","_a","id","onClose"]}
         
     | 
    
        package/dist/menu.mjs
    CHANGED
    
    
    
        package/package.json
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            {
         
     | 
| 
       2 
2 
     | 
    
         
             
              "name": "@yamada-ui/menu",
         
     | 
| 
       3 
     | 
    
         
            -
              "version": "1.5.2-dev- 
     | 
| 
      
 3 
     | 
    
         
            +
              "version": "1.5.2-dev-20241215203956",
         
     | 
| 
       4 
4 
     | 
    
         
             
              "description": "Yamada UI menu component",
         
     | 
| 
       5 
5 
     | 
    
         
             
              "keywords": [
         
     | 
| 
       6 
6 
     | 
    
         
             
                "yamada",
         
     | 
| 
         @@ -36,16 +36,16 @@ 
     | 
|
| 
       36 
36 
     | 
    
         
             
                "url": "https://github.com/yamada-ui/yamada-ui/issues"
         
     | 
| 
       37 
37 
     | 
    
         
             
              },
         
     | 
| 
       38 
38 
     | 
    
         
             
              "dependencies": {
         
     | 
| 
       39 
     | 
    
         
            -
                "@yamada-ui/core": "1.16.2-dev- 
     | 
| 
       40 
     | 
    
         
            -
                "@yamada-ui/icon": "1.1.17-dev- 
     | 
| 
       41 
     | 
    
         
            -
                "@yamada-ui/motion": "2.2.12-dev- 
     | 
| 
       42 
     | 
    
         
            -
                "@yamada-ui/popover": "1.4.7-dev- 
     | 
| 
       43 
     | 
    
         
            -
                "@yamada-ui/transitions": "1.1.15-dev- 
     | 
| 
       44 
     | 
    
         
            -
                "@yamada-ui/use-clickable": "1.2.17-dev- 
     | 
| 
       45 
     | 
    
         
            -
                "@yamada-ui/use-controllable-state": "1.0.26-dev- 
     | 
| 
       46 
     | 
    
         
            -
                "@yamada-ui/use-descendant": "1.0.28-dev- 
     | 
| 
       47 
     | 
    
         
            -
                "@yamada-ui/use-disclosure": "1.1.3-dev- 
     | 
| 
       48 
     | 
    
         
            -
                "@yamada-ui/utils": "1.6.2-dev- 
     | 
| 
      
 39 
     | 
    
         
            +
                "@yamada-ui/core": "1.16.2-dev-20241215203956",
         
     | 
| 
      
 40 
     | 
    
         
            +
                "@yamada-ui/icon": "1.1.17-dev-20241215203956",
         
     | 
| 
      
 41 
     | 
    
         
            +
                "@yamada-ui/motion": "2.2.12-dev-20241215203956",
         
     | 
| 
      
 42 
     | 
    
         
            +
                "@yamada-ui/popover": "1.4.7-dev-20241215203956",
         
     | 
| 
      
 43 
     | 
    
         
            +
                "@yamada-ui/transitions": "1.1.15-dev-20241215203956",
         
     | 
| 
      
 44 
     | 
    
         
            +
                "@yamada-ui/use-clickable": "1.2.17-dev-20241215203956",
         
     | 
| 
      
 45 
     | 
    
         
            +
                "@yamada-ui/use-controllable-state": "1.0.26-dev-20241215203956",
         
     | 
| 
      
 46 
     | 
    
         
            +
                "@yamada-ui/use-descendant": "1.0.28-dev-20241215203956",
         
     | 
| 
      
 47 
     | 
    
         
            +
                "@yamada-ui/use-disclosure": "1.1.3-dev-20241215203956",
         
     | 
| 
      
 48 
     | 
    
         
            +
                "@yamada-ui/utils": "1.6.2-dev-20241215203956"
         
     | 
| 
       49 
49 
     | 
    
         
             
              },
         
     | 
| 
       50 
50 
     | 
    
         
             
              "devDependencies": {
         
     | 
| 
       51 
51 
     | 
    
         
             
                "clean-package": "2.2.0",
         
     | 
| 
         @@ -1 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu.tsx"],"sourcesContent":["import type { FC, ThemeProps } from \"@yamada-ui/core\"\nimport type { PopoverProps } from \"@yamada-ui/popover\"\nimport { omitThemeProps, useComponentMultiStyle } from \"@yamada-ui/core\"\nimport { Popover } from \"@yamada-ui/popover\"\nimport { useDisclosure } from \"@yamada-ui/use-disclosure\"\nimport { funcAll, useUnmountEffect, useUpdateEffect } from \"@yamada-ui/utils\"\nimport { useCallback, useEffect, useId, useRef, useState } from \"react\"\nimport {\n  DescendantsContextProvider,\n  MenuProvider,\n  UpstreamMenuProvider,\n  useContextMenu,\n  useDescendants,\n  useUpstreamMenu,\n  useUpstreamMenuItem,\n} from \"./menu-context\"\n\nexport interface MenuOptions {\n  /**\n   * If `true`, the list element will be closed when value is selected.\n   *\n   * @default true\n   */\n  closeOnSelect?: boolean\n}\n\nexport interface MenuProps\n  extends ThemeProps<\"Menu\">,\n    Omit<PopoverProps, \"closeOnButton\" | \"relatedRef\">,\n    MenuOptions {}\n\n/**\n * `Menu` is a component that displays a common dropdown menu.\n *\n * @see Docs https://yamada-ui.com/components/overlay/menu\n */\nexport const Menu: FC<MenuProps> = (props) => {\n  const { styles: contextMenuStyles } = useContextMenu() ?? {}\n  const [styles, mergedProps] = useComponentMultiStyle(\"Menu\", props, {\n    isProcessSkip: !!contextMenuStyles,\n    styles: contextMenuStyles,\n  })\n  let {\n    closeOnBlur,\n    closeOnSelect = true,\n    duration = 0.2,\n    initialFocusRef,\n    offset,\n    placement,\n    onClose: onCloseProp,\n    onOpen: onOpenProp,\n    ...rest\n  } = omitThemeProps(mergedProps)\n  const { relatedRef, onDownstreamCloseMapRef, onUpstreamClose } =\n    useUpstreamMenu() ?? {}\n  const { hasDownstreamRef, setDownstreamOpen } = useUpstreamMenuItem() ?? {}\n  const nested = !!relatedRef\n\n  if (nested) {\n    placement ??= \"right-start\"\n    offset ??= [-8, 8]\n    closeOnBlur ??= false\n  } else {\n    placement ??= \"bottom-start\"\n  }\n\n  const descendants = useDescendants()\n\n  const [focusedIndex, setFocusedIndex] = useState<number>(-1)\n\n  const menuRef = useRef<HTMLDivElement>(null)\n  const buttonRef = useRef<HTMLButtonElement>(null)\n  const timeoutIds = useRef<Set<any>>(new Set([]))\n  const requestAnimationFrameId = useRef<null | number>(null)\n  const onCloseMapRef = useRef<Map<string, () => void>>(new Map())\n\n  const onFocusMenu = useCallback(() => {\n    requestAnimationFrame(() =>\n      menuRef.current?.focus({ preventScroll: false }),\n    )\n  }, [])\n\n  const onFocusFirstItem = useCallback(() => {\n    const id = setTimeout(() => {\n      if (initialFocusRef) return\n\n      const first = descendants.enabledFirstValue()\n\n      if (first) setFocusedIndex(first.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, initialFocusRef])\n\n  const onFocusLastItem = useCallback(() => {\n    const id = setTimeout(() => {\n      if (initialFocusRef) return\n\n      const last = descendants.enabledLastValue()\n\n      if (last) setFocusedIndex(last.index)\n    })\n\n    timeoutIds.current.add(id)\n  }, [descendants, initialFocusRef])\n\n  const onOpenInternal = useCallback(() => {\n    onOpenProp?.()\n\n    if (!nested) onFocusMenu()\n  }, [onOpenProp, nested, onFocusMenu])\n\n  const onCloseInternal = useCallback(() => {\n    onCloseProp?.()\n\n    for (const onClose of onCloseMapRef.current.values()) {\n      onClose()\n    }\n  }, [onCloseProp])\n\n  const id = useId()\n  const { open, onClose, onOpen } = useDisclosure({\n    ...props,\n    onClose: onCloseInternal,\n    onOpen: onOpenInternal,\n  })\n\n  useEffect(() => {\n    const onCloseMap = onDownstreamCloseMapRef?.current\n\n    onCloseMap?.set(id, onClose)\n\n    return () => {\n      onCloseMap?.delete(id)\n    }\n  }, [id, onClose, onDownstreamCloseMapRef])\n\n  useEffect(() => {\n    if (setDownstreamOpen) setDownstreamOpen(open)\n  }, [setDownstreamOpen, open])\n\n  useEffect(() => {\n    if (hasDownstreamRef) hasDownstreamRef.current = true\n\n    return () => {\n      if (hasDownstreamRef) hasDownstreamRef.current = false\n    }\n  })\n\n  useUpdateEffect(() => {\n    if (!open) setFocusedIndex(-1)\n  }, [open])\n\n  useUnmountEffect(() => {\n    timeoutIds.current.forEach((id) => clearTimeout(id))\n    timeoutIds.current.clear()\n  })\n\n  return (\n    <DescendantsContextProvider value={descendants}>\n      <UpstreamMenuProvider\n        value={{\n          relatedRef: menuRef,\n          onDownstreamCloseMapRef: onCloseMapRef,\n          onUpstreamClose: funcAll(onUpstreamClose, onClose),\n        }}\n      >\n        <MenuProvider\n          value={{\n            buttonRef,\n            closeOnSelect,\n            focusedIndex,\n            menuRef,\n            nested,\n            open,\n            requestAnimationFrameId,\n            setFocusedIndex,\n            styles,\n            onClose,\n            onFocusFirstItem,\n            onFocusLastItem,\n            onOpen,\n            onUpstreamClose,\n          }}\n        >\n          <Popover\n            {...{\n              trigger: nested ? \"hover\" : \"click\",\n              ...rest,\n              closeOnBlur,\n              closeOnButton: false,\n              duration,\n              initialFocusRef,\n              offset,\n              open,\n              placement,\n              relatedRef,\n              onClose,\n              onOpen,\n            }}\n          />\n        </MenuProvider>\n      </UpstreamMenuProvider>\n    </DescendantsContextProvider>\n  )\n}\n\nMenu.__ui__ = \"Menu\"\n"],"mappings":"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","names":["_a","id","onClose"]}
         
     | 
| 
         @@ -1 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            {"version":3,"sources":["../src/menu-item.tsx"],"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"],"mappings":";;;;;;;;;AAOA,SAAS,YAAY,UAAU;AAC/B,SAAS,oBAAoB;AAC7B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,aAAa,OAAO,QAAQ,gBAAgB;AAwN7C,cA4BA,YA5BA;AAhNR,IAAM,mBAAmB,CAAC,WAA+B;AA3BzD;AA4BE,SACE,cAAc,MAAM,KACpB,CAAC,GAAC,YAAO,aAAa,MAAM,MAA1B,mBAA6B,WAAW;AAE9C;AAiDO,IAAM,WAAW;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,IAAI,SAAkB,KAAK;AACnE,UAAM,OAAO,MAAM;AACnB,UAAM,UAAU,OAAuB,IAAI;AAC3C,UAAM,mBAAmB,OAAgB,KAAK;AAC9C,UAAM,eAAe;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,cAAc,YAAY,MAAM;AACpC,UAAI,SAAU;AAEd,sBAAgB,KAAK;AAAA,IACvB,GAAG,CAAC,OAAO,UAAU,eAAe,CAAC;AAErC,UAAM,eAAe,YAAY,MAAM;AACrC,UAAI,SAAU;AAEd,sBAAgB,EAAE;AAAA,IACpB,GAAG,CAAC,iBAAiB,QAAQ,CAAC;AAE9B,UAAM,UAAU;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,UAAU,YAAY,MAAM;AAChC,sBAAgB,KAAK;AAAA,IACvB,GAAG,CAAC,iBAAiB,KAAK,CAAC;AAE3B,UAAM,iBAAiB,YAAY,MAAM;AAtK7C,UAAAA;AAuKM,OAAAA,MAAA,QAAQ,YAAR,gBAAAA,IAAiB;AAEjB,sBAAgB,KAAK;AAAA,IACvB,GAAG,CAAC,iBAAiB,KAAK,CAAC;AAE3B,UAAM,YAAY;AAAA,MAChB,CAAC,OAAsC;AACrC,YAAI,GAAG,QAAQ,IAAK,IAAG,MAAM,GAAG;AAEhC,cAAM,UAAmD;AAAA,UACvD,WAAW,SACP,QAAQ,wBAAwB,OAAO,IACvC;AAAA,UACJ,OAAO,CAAC,iBAAiB,UACrB,QAAQ,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,OAAO,aAA6B;AAAA,MACxC,cAAc;AAAA,MACd,cAAc;AAAA,MACd,GAAG;AAAA,MACH,KAAK,UAAU,UAAU,SAAS,GAAG;AAAA,MACrC;AAAA,MACA;AAAA,MACA,SAAS,WAAW,MAAM,SAAS,OAAO;AAAA,MAC1C,SAAS,WAAW,MAAM,SAAS,OAAO;AAAA,MAC1C,WAAW,WAAW,MAAM,WAAW,WAAW,aAAa,OAAO;AAAA,MACtE,cAAc,WAAW,MAAM,cAAc,YAAY;AAAA,MACzD,aAAa,WAAW,MAAM,aAAa,WAAW;AAAA,IACxD,CAAC;AAED,oBAAgB,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,CAAC,gBAAgB,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,oBAAC,GAAG,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,GAAG;AAAA,UAAH;AAAA,YACC;AAAA,YACA,WAAW,GAAG,iBAAiB,SAAS;AAAA,YACxC,cAAY,SAAS,cAAc;AAAA,YACnC,OAAO;AAAA,YACN,GAAG;AAAA,YACJ;AAAA,YACA,UAAU,CAAC,kBAAkB,UAAU,IAAI;AAAA,YAE1C;AAAA,qBAAO,oBAAC,YAAU,gBAAK,IAAc;AAAA,cACrC;AAAA,cACA,UAAU,oBAAC,eAAa,mBAAQ,IAAiB;AAAA;AAAA;AAAA,QACpD;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AAEA,SAAS,cAAc;AACvB,SAAS,SAAS;AAmCX,IAAM,iBAAiB;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,WAAW,GAAG,yBAAyB,SAAS;AAAA,QAChD,gBAAc;AAAA,QACd;AAAA,QACC,GAAG;AAAA,QAEH;AAAA,mBAAS,OACR,oBAAC,YAAS,SAAS,UAAU,IAAI,GAAI,kBAAQ,oBAAC,aAAU,GAAG,IACzD;AAAA,UACH;AAAA;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,eAAe,cAAc;AAC7B,eAAe,SAAS;AAIjB,IAAM,WAAW;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,GAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,WAAW,GAAG,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,cAAc;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,GAAG;AAAA,MAAH;AAAA,QACC;AAAA,QACA,WAAW,GAAG,0BAA0B,SAAS;AAAA,QACjD,OAAO;AAAA,QACN,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;AAEA,YAAY,cAAc;AAC1B,YAAY,SAAS;AAErB,IAAM,YAAgB,MACpB,oBAAC,SAAI,QAAO,OAAM,SAAQ,aAAY,OAAM,OAC1C;AAAA,EAAC;AAAA;AAAA,IACC,MAAK;AAAA,IACL,QAAO;AAAA;AACT,GACF;","names":["_a","id"]}
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     |