{"version":3,"file":"combobox-root.cjs","sources":["../../../components/combobox/combobox-root.tsx"],"sourcesContent":["'use client';\n\nimport { Combobox as ComboboxPrimitive } from '@base-ui/react';\nimport {\n  createContext,\n  RefObject,\n  useCallback,\n  useContext,\n  useMemo,\n  useRef,\n  useState\n} from 'react';\nimport { useFieldContext } from '../field';\n\ninterface ComboboxContextValue<Value = string> {\n  multiple: boolean;\n  inputValue: string;\n  hasItems: boolean;\n  inputContainerRef: RefObject<HTMLDivElement | null>;\n  value: Value | Value[] | null | undefined;\n  onValueChange?: (value: Value | Value[] | null) => void;\n}\n\nconst ComboboxContext = createContext<\n  ComboboxContextValue<unknown> | undefined\n>(undefined);\n\nexport const useComboboxContext = <\n  Value = string\n>(): ComboboxContextValue<Value> => {\n  const context = useContext(ComboboxContext);\n  if (!context) {\n    throw new Error(\n      'useComboboxContext must be used within a ComboboxProvider'\n    );\n  }\n  return context as ComboboxContextValue<Value>;\n};\n\nexport interface BaseComboboxRootProps<Value>\n  extends Omit<\n    ComboboxPrimitive.Root.Props<Value, boolean>,\n    'onValueChange' | 'onInputValueChange' | 'multiple'\n  > {\n  onInputValueChange?: (inputValue: string) => void;\n}\n\nexport interface SingleComboboxProps<Value = string>\n  extends BaseComboboxRootProps<Value> {\n  multiple?: false;\n  value?: Value | null;\n  defaultValue?: Value | null;\n  onValueChange?: (value: Value | null) => void;\n}\n\nexport interface MultipleComboboxProps<Value = string>\n  extends BaseComboboxRootProps<Value> {\n  multiple: true;\n  value?: Value[];\n  defaultValue?: Value[];\n  onValueChange?: (value: Value[]) => void;\n}\n\nexport type ComboboxRootProps<Value = string> =\n  | SingleComboboxProps<Value>\n  | MultipleComboboxProps<Value>;\n\nexport const ComboboxRoot = <Value extends unknown | unknown[]>({\n  multiple = false,\n  children,\n  onValueChange,\n  onInputValueChange,\n  value: providedValue,\n  defaultValue,\n  items,\n  required,\n  ...props\n}: ComboboxRootProps<Value>) => {\n  const fieldContext = useFieldContext();\n  const resolvedRequired = required ?? fieldContext?.required;\n\n  const [inputValue, setInputValue] = useState('');\n  const [internalValue, setInternalValue] = useState<\n    Value | Value[] | null | undefined\n  >(defaultValue ?? null);\n  const inputContainerRef = useRef<HTMLDivElement>(null);\n\n  const computedValue = providedValue ?? internalValue;\n\n  const handleInputValueChange = useCallback(\n    (\n      value: string,\n      eventDetails: ComboboxPrimitive.Root.ChangeEventDetails\n    ) => {\n      setInputValue(value);\n      onInputValueChange?.(value);\n    },\n    [onInputValueChange]\n  );\n\n  const handleValueChange = useCallback(\n    (\n      value: Value | Value[] | null,\n      eventDetails: ComboboxPrimitive.Root.ChangeEventDetails\n    ) => {\n      setInternalValue(value);\n      if (multiple) {\n        (onValueChange as MultipleComboboxProps<Value>['onValueChange'])?.(\n          value as Value[]\n        );\n      } else {\n        (onValueChange as SingleComboboxProps<Value>['onValueChange'])?.(\n          value as Value | null\n        );\n      }\n    },\n    [onValueChange, multiple]\n  );\n\n  const contextValue = useMemo(\n    () => ({\n      multiple,\n      inputValue,\n      hasItems: !!items,\n      inputContainerRef,\n      value: computedValue,\n      onValueChange: handleValueChange\n    }),\n    [multiple, inputValue, items, computedValue, handleValueChange]\n  );\n\n  return (\n    <ComboboxContext value={contextValue as ComboboxContextValue<unknown>}>\n      <ComboboxPrimitive.Root\n        multiple={multiple}\n        onValueChange={handleValueChange}\n        onInputValueChange={handleInputValueChange}\n        items={items}\n        value={providedValue}\n        defaultValue={defaultValue}\n        required={resolvedRequired}\n        modal\n        {...props}\n      >\n        {children}\n      </ComboboxPrimitive.Root>\n    </ComboboxContext>\n  );\n};\n\nComboboxRoot.displayName = 'Combobox';\n"],"names":[],"mappings":";;;;;;;;;AAuBA;AAIO;AAGL;;AAEE;;AAIF;AACF;AA8BO;AAWL;AACA;;AAGA;AAGA;AAEA;;;AAQI;AACF;;;;AAWK;;;AAIA;;AAIL;AAIF;;;;;AAMI;AACA;AACD;;AAqBL;AAEA;;;"}