{
  "version": 3,
  "sources": ["esm/menu/menu-list.js"],
  "sourcesContent": ["import { useState, useEffect } from 'react';\nimport { useId, useEvent, useForkRef } from 'ariakit-utils/hooks';\nimport { useStore, useStoreProvider } from 'ariakit-utils/store';\nimport { createHook, createComponent, createElement } from 'ariakit-utils/system';\nimport { useComposite } from '../composite/composite.js';\nimport { useCompositeTypeahead } from '../composite/composite-typeahead.js';\nimport { M as MenuContext, a as MenuBarContext } from '../__utils-07f4a93f.js';\n\nfunction useAriaLabelledBy(_ref) {\n  let {\n    state,\n    ...props\n  } = _ref;\n  const [id, setId] = useState(undefined);\n  const label = props[\"aria-label\"];\n  useEffect(() => {\n    const disclosure = state.disclosureRef.current;\n    if (!disclosure) return;\n    const menu = state.contentElement;\n    if (!menu) return;\n    const menuLabel = label || menu.hasAttribute(\"aria-label\");\n\n    if (menuLabel) {\n      setId(undefined);\n    } else if (disclosure.id) {\n      setId(disclosure.id);\n    }\n  }, [label, state.disclosureRef, state.contentElement]);\n  return id;\n}\n/**\n * A component hook that returns props that can be passed to `Role` or any other\n * Ariakit component to render a menu list element.\n * @see https://ariakit.org/components/menu\n * @example\n * ```jsx\n * const state = useMenuState();\n * const props = useMenuList({ state });\n * <MenuButton state={state}>Edit</MenuButton>\n * <Role {...props}>\n *   <MenuItem>Undo</MenuItem>\n *   <MenuItem>Redo</MenuItem>\n * </Role>\n * ```\n */\n\n\nconst useMenuList = createHook(_ref2 => {\n  let {\n    state,\n    composite = true,\n    ...props\n  } = _ref2;\n  const parentMenu = useStore(MenuContext, []);\n  const parentMenuBar = useStore(MenuBarContext, [\"items\", \"move\", \"next\", \"previous\", \"orientation\"]);\n  const hasParentMenu = !!parentMenu;\n  const id = useId(props.id);\n  const onKeyDownProp = props.onKeyDown;\n  const dir = state.placement.split(\"-\")[0];\n  const orientation = state.orientation === \"both\" ? undefined : state.orientation;\n  const isHorizontal = orientation !== \"vertical\";\n  const isMenuBarHorizontal = !!parentMenuBar && (parentMenuBar == null ? void 0 : parentMenuBar.orientation) !== \"vertical\";\n  const onKeyDown = useEvent(event => {\n    onKeyDownProp == null ? void 0 : onKeyDownProp(event);\n    if (event.defaultPrevented) return;\n\n    if (hasParentMenu || parentMenuBar && !isHorizontal) {\n      const hideMap = {\n        ArrowRight: () => dir === \"left\" && !isHorizontal,\n        ArrowLeft: () => dir === \"right\" && !isHorizontal,\n        ArrowUp: () => dir === \"bottom\" && isHorizontal,\n        ArrowDown: () => dir === \"top\" && isHorizontal\n      };\n      const action = hideMap[event.key];\n\n      if (action != null && action()) {\n        event.stopPropagation();\n        event.preventDefault();\n        return state.hide();\n      }\n    }\n\n    if (parentMenuBar) {\n      const keyMap = {\n        ArrowRight: () => {\n          if (!isMenuBarHorizontal) return;\n          return parentMenuBar.next();\n        },\n        ArrowLeft: () => {\n          if (!isMenuBarHorizontal) return;\n          return parentMenuBar.previous();\n        },\n        ArrowDown: () => {\n          if (isMenuBarHorizontal) return;\n          return parentMenuBar.next();\n        },\n        ArrowUp: () => {\n          if (isMenuBarHorizontal) return;\n          return parentMenuBar.previous();\n        }\n      };\n      const action = keyMap[event.key];\n      const id = action == null ? void 0 : action();\n\n      if (id !== undefined) {\n        event.stopPropagation();\n        event.preventDefault();\n        parentMenuBar.move(id);\n      }\n    }\n  });\n  props = useStoreProvider({\n    state,\n    ...props\n  }, MenuContext);\n  const ariaLabelledBy = useAriaLabelledBy({\n    state,\n    ...props\n  });\n  const style = state.mounted ? props.style : { ...props.style,\n    display: \"none\"\n  };\n  props = {\n    id,\n    \"aria-labelledby\": ariaLabelledBy,\n    hidden: !state.mounted,\n    ...props,\n    ref: useForkRef(id ? state.setContentElement : null, props.ref),\n    style,\n    onKeyDown\n  };\n\n  if (composite) {\n    props = {\n      role: \"menu\",\n      \"aria-orientation\": orientation,\n      ...props\n    };\n  }\n\n  props = useComposite({\n    state,\n    composite,\n    ...props\n  });\n  props = useCompositeTypeahead({\n    state,\n    ...props\n  });\n  return props;\n});\n/**\n * A component that renders a menu list element.\n * @see https://ariakit.org/components/menu\n * @example\n * ```jsx\n * const menu = useMenuState();\n * <MenuButton state={menu}>Edit</MenuButton>\n * <MenuList state={menu}>\n *   <MenuItem>Undo</MenuItem>\n *   <MenuItem>Redo</MenuItem>\n * </MenuList>\n * ```\n */\n\nconst MenuList = createComponent(props => {\n  const htmlProps = useMenuList(props);\n  return createElement(\"div\", htmlProps);\n});\n\nif (process.env.NODE_ENV !== \"production\") {\n  MenuList.displayName = \"MenuList\";\n}\n\nexport { MenuList, useMenuList };\n"],
  "mappings": "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",
  "names": ["useState", "useEffect", "useId", "useEvent", "useForkRef", "useStore", "useStoreProvider", "createHook", "createComponent", "createElement", "useAriaLabelledBy", "_ref", "state", "props", "id", "setId", "useState", "label", "useEffect", "disclosure", "menu", "useMenuList", "createHook", "_ref2", "composite", "parentMenu", "useStore", "MenuContext", "parentMenuBar", "MenuBarContext", "hasParentMenu", "useId", "onKeyDownProp", "dir", "orientation", "isHorizontal", "isMenuBarHorizontal", "onKeyDown", "useEvent", "event", "action", "useStoreProvider", "ariaLabelledBy", "style", "useForkRef", "useComposite", "useCompositeTypeahead", "MenuList", "createComponent", "htmlProps", "createElement"]
}
