{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "combobox",
  "title": "Combobox",
  "description": "Searchable selection with filtering, empty results, and keyboard interaction.",
  "dependencies": [
    "@base-ui/react"
  ],
  "registryDependencies": [
    "@neumorphism-ui/utils"
  ],
  "files": [
    {
      "path": "src/components/ui/combobox.tsx",
      "content": "\"use client\";\n\nimport { Combobox as Primitive } from \"@base-ui/react/combobox\";\nimport { mergeClassName } from \"@/lib/utils\";\n\nconst Combobox = Primitive.Root;\nconst ComboboxTrigger = Primitive.Trigger;\nconst ComboboxValue = Primitive.Value;\nconst ComboboxClear = Primitive.Clear;\nfunction ComboboxInput({ className, ...props }: Primitive.Input.Props) {\n  return <Primitive.Input data-slot=\"combobox-input\" className={mergeClassName<Primitive.Input.State>(\"h-10 w-full min-w-0 rounded-[var(--neu-radius-control)] border border-transparent bg-[var(--neu-surface)] [background-image:var(--neu-fill-inset)] px-3 text-sm font-normal tracking-normal text-[var(--foreground)] [box-shadow:var(--neu-shadow-inset)] outline-none transition-[border-color,box-shadow] duration-[var(--neu-duration)] motion-reduce:transition-none placeholder:text-[var(--muted-foreground)] focus-visible:border-[var(--ring)] focus-visible:outline-2 focus-visible:outline-solid focus-visible:outline-offset-2 focus-visible:outline-[color:var(--ring)] aria-invalid:border-[var(--destructive)] aria-invalid:focus-visible:outline-[color:var(--neu-error-text)] read-only:[box-shadow:none] read-only:[background-image:none] read-only:border-[color:var(--input)] read-only:bg-[var(--neu-surface-soft)] disabled:opacity-60 disabled:shadow-none disabled:[background-image:none] disabled:border-[color:var(--input)]\", className)} {...props} />;\n}\ntype ComboboxContentProps = Primitive.Popup.Props & { sideOffset?: number; align?: Primitive.Positioner.Props[\"align\"] };\nfunction ComboboxContent({ className, sideOffset = 8, align = \"start\", ...props }: ComboboxContentProps) {\n  return <Primitive.Portal><Primitive.Positioner collisionPadding={8} sideOffset={sideOffset} align={align} className=\"z-50 outline-none\">\n    <Primitive.Popup data-slot=\"combobox-content\" className={mergeClassName<Primitive.Popup.State>(\"flex max-h-[var(--available-height)] w-[var(--anchor-width)] min-w-48 max-w-[var(--available-width)] flex-col overflow-hidden rounded-[var(--neu-radius-overlay)] border border-[color:var(--neu-edge)] bg-[var(--popover)] p-1.5 text-sm text-[var(--popover-foreground)] [box-shadow:var(--neu-shadow-floating)] outline-none transition-opacity duration-[var(--neu-duration)] motion-reduce:transition-none data-[starting-style]:opacity-0 data-[ending-style]:opacity-0\", className)} {...props} />\n  </Primitive.Positioner></Primitive.Portal>;\n}\nfunction ComboboxList({ className, ...props }: Primitive.List.Props) {\n  return <Primitive.List data-slot=\"combobox-list\" className={mergeClassName<Primitive.List.State>(\"min-h-0 max-h-72 flex-1 overflow-x-hidden overflow-y-auto overscroll-contain scroll-py-1 outline-none empty:p-0\", className)} {...props} />;\n}\nfunction ComboboxItem({ className, children, ...props }: Primitive.Item.Props) {\n  return <Primitive.Item data-slot=\"combobox-item\" className={mergeClassName<Primitive.Item.State>(\"relative flex min-h-10 min-w-0 [overflow-wrap:anywhere] cursor-default items-center gap-2 rounded-[var(--neu-radius-small)] border border-transparent py-2 pr-3 pl-8 outline-none data-highlighted:border-transparent data-highlighted:bg-[var(--neu-surface)] data-highlighted:[box-shadow:var(--neu-shadow-inset-sm)] data-selected:font-semibold data-disabled:opacity-40 data-disabled:pointer-events-none\", className)} {...props}>\n    <Primitive.ItemIndicator className=\"absolute left-2.5 inline-flex size-3.5 items-center justify-center\"><span aria-hidden=\"true\">✓</span></Primitive.ItemIndicator>{children}\n  </Primitive.Item>;\n}\nfunction ComboboxEmpty({ className, ...props }: Primitive.Empty.Props) {\n  return <Primitive.Empty data-slot=\"combobox-empty\" className={mergeClassName<Primitive.Empty.State>(\"px-3 py-5 text-center text-sm text-[var(--muted-foreground)] empty:hidden\", className)} {...props} />;\n}\nfunction ComboboxLabel({ className, ...props }: Primitive.Label.Props) {\n  return <Primitive.Label data-slot=\"combobox-label\" className={mergeClassName<Primitive.Label.State>(\"mb-2 block text-sm font-semibold text-[var(--foreground)]\", className)} {...props} />;\n}\nconst ComboboxGroup = Primitive.Group;\nfunction ComboboxGroupLabel({ className, ...props }: Primitive.GroupLabel.Props) {\n  return <Primitive.GroupLabel data-slot=\"combobox-group-label\" className={mergeClassName<Primitive.GroupLabel.State>(\"px-3 py-2 text-xs font-semibold text-[var(--muted-foreground)]\", className)} {...props} />;\n}\nexport { Combobox, ComboboxInput, ComboboxTrigger, ComboboxContent, ComboboxList, ComboboxItem, ComboboxEmpty, ComboboxLabel, ComboboxValue, ComboboxClear, ComboboxGroup, ComboboxGroupLabel };\nexport type { ComboboxContentProps };\n",
      "type": "registry:ui"
    }
  ],
  "categories": [
    "forms-selection"
  ],
  "type": "registry:ui"
}