{"version":3,"file":"context-menu-root.cjs","sources":["../../../components/context-menu/context-menu-root.tsx"],"sourcesContent":["'use client';\n\nimport { ContextMenu as ContextMenuPrimitive } from '@base-ui/react';\nimport { useCallback, useRef, useState } from 'react';\nimport { MenuContext, useMenuContext } from '../menu/menu-root';\n\nexport interface NormalContextMenuRootProps\n  extends ContextMenuPrimitive.Root.Props {\n  autocomplete?: false;\n  autocompleteMode?: never;\n  inputValue?: never;\n  onInputValueChange?: never;\n  defaultInputValue?: never;\n}\n\nexport interface AutocompleteContextMenuRootProps\n  extends ContextMenuPrimitive.Root.Props {\n  autocomplete: true;\n  autocompleteMode?: 'auto' | 'manual';\n  inputValue?: string;\n  onInputValueChange?: (value: string) => void;\n  defaultInputValue?: string;\n}\n\nexport type ContextMenuRootProps =\n  | NormalContextMenuRootProps\n  | AutocompleteContextMenuRootProps;\n\nexport const ContextMenuRoot = ({\n  autocomplete,\n  autocompleteMode = 'auto',\n  inputValue: providedInputValue,\n  onInputValueChange,\n  defaultInputValue = '',\n  open: providedOpen,\n  onOpenChange,\n  defaultOpen = false,\n  ...props\n}: ContextMenuRootProps) => {\n  const [internalInputValue, setInternalInputValue] =\n    useState(defaultInputValue);\n\n  const [internalOpen, setInternalOpen] = useState(defaultOpen);\n  const open = providedOpen ?? internalOpen;\n  const inputRef = useRef<HTMLInputElement>(null);\n  const contentRef = useRef<HTMLDivElement>(null);\n  const isInitialRender = useRef(true);\n\n  const inputValue = providedInputValue ?? internalInputValue;\n\n  const setValue = useCallback(\n    (value: string) => {\n      setInternalInputValue(value);\n      onInputValueChange?.(value);\n    },\n    [onInputValueChange]\n  );\n\n  const handleOpenChange: ContextMenuPrimitive.Root.Props['onOpenChange'] =\n    useCallback(\n      (\n        value: boolean,\n        eventDetails: ContextMenuPrimitive.Root.ChangeEventDetails\n      ) => {\n        if (!value && autocomplete) {\n          setValue('');\n          isInitialRender.current = true;\n        }\n        setInternalOpen(value);\n        onOpenChange?.(value, eventDetails);\n      },\n      [onOpenChange, setValue, autocomplete]\n    );\n\n  return (\n    <MenuContext\n      value={{\n        autocomplete,\n        inputRef,\n        autocompleteMode,\n        inputValue,\n        onInputValueChange: setValue,\n        open: open,\n        isInitialRender,\n        contentRef\n      }}\n    >\n      <ContextMenuPrimitive.Root\n        open={open}\n        onOpenChange={handleOpenChange}\n        loopFocus={false}\n        {...props}\n      />\n    </MenuContext>\n  );\n};\nContextMenuRoot.displayName = 'ContextMenu';\n\nexport interface NormalContextMenuSubMenuProps\n  extends ContextMenuPrimitive.SubmenuRoot.Props {\n  autocomplete?: false;\n  autocompleteMode?: never;\n  inputValue?: never;\n  onInputValueChange?: never;\n  defaultInputValue?: never;\n}\n\nexport interface AutocompleteContextMenuSubMenuProps\n  extends ContextMenuPrimitive.SubmenuRoot.Props {\n  autocomplete: true;\n  autocompleteMode?: 'auto' | 'manual';\n  inputValue?: string;\n  onInputValueChange?: (value: string) => void;\n  defaultInputValue?: string;\n}\n\nexport type ContextMenuSubMenuProps =\n  | NormalContextMenuSubMenuProps\n  | AutocompleteContextMenuSubMenuProps;\n\nexport const ContextMenuSubMenu = ({\n  autocomplete,\n  autocompleteMode = 'auto',\n  inputValue: providedInputValue,\n  onInputValueChange,\n  defaultInputValue = '',\n  open: providedOpen,\n  onOpenChange,\n  defaultOpen = false,\n  ...props\n}: ContextMenuSubMenuProps) => {\n  const [internalInputValue, setInternalInputValue] =\n    useState(defaultInputValue);\n  const [internalOpen, setInternalOpen] = useState(defaultOpen);\n  const open = providedOpen ?? internalOpen;\n  const parentContext = useMenuContext();\n  const inputRef = useRef<HTMLInputElement>(null);\n  const isInitialRender = useRef(true);\n  const contentRef = useRef<HTMLDivElement>(null);\n  const inputValue = providedInputValue ?? internalInputValue;\n\n  const setValue = useCallback(\n    (value: string) => {\n      setInternalInputValue(value);\n      onInputValueChange?.(value);\n    },\n    [onInputValueChange]\n  );\n\n  const handleOpenChange: ContextMenuPrimitive.SubmenuRoot.Props['onOpenChange'] =\n    useCallback(\n      (\n        value: boolean,\n        eventDetails: ContextMenuPrimitive.SubmenuRoot.ChangeEventDetails\n      ) => {\n        if (!value && autocomplete) {\n          setValue('');\n          isInitialRender.current = true;\n        }\n        setInternalOpen(value);\n        onOpenChange?.(value, eventDetails);\n      },\n      [onOpenChange, setValue, autocomplete]\n    );\n\n  return (\n    <MenuContext\n      value={{\n        autocomplete,\n        inputRef,\n        parent: parentContext,\n        autocompleteMode,\n        inputValue,\n        onInputValueChange: setValue,\n        open: open,\n        isInitialRender,\n        contentRef\n      }}\n    >\n      <ContextMenuPrimitive.SubmenuRoot\n        loopFocus={false}\n        open={open}\n        onOpenChange={handleOpenChange}\n        {...props}\n      />\n    </MenuContext>\n  );\n};\nContextMenuSubMenu.displayName = 'ContextMenu.SubMenu';\n"],"names":[],"mappings":";;;;;;;;AA4Ba;;;AAeX;AACA;AACA;AACA;AAEA;AAEA;;AAGI;AACF;;AAUI;;AAEE;;;AAGF;;AAKN;;;;;AAOM;AACA;;;;AAaR;AACA;AAwBa;;;AAcX;AACA;AACA;AACA;AACA;AACA;AAEA;;AAGI;AACF;;AAUI;;AAEE;;;AAGF;;AAKN;;;AAKM;;;AAGA;AACA;;;;AAaR;AACA;;;"}