{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "autocomplete-tailwind",
  "type": "registry:item",
  "title": "Autocomplete (Tailwind)",
  "description": "An input that suggests options as you type.",
  "registryDependencies": [
    "https://roiui.com/r/input-tailwind.json"
  ],
  "files": [
    {
      "path": "registry/brook/tailwind/ui/autocomplete.tsx",
      "content": "\"use client\";\n\nimport { Autocomplete } from \"@base-ui/react/autocomplete\";\nimport { Search, X } from \"lucide-react\";\nimport type React from \"react\";\nimport { cn } from \"@/lib/utils\";\nimport { Input } from \"@/registry/brook/tailwind/ui/input\";\n\nfunction AutocompleteRoot({ ...props }: React.ComponentProps<typeof Autocomplete.Root>) {\n  return <Autocomplete.Root {...props} />;\n}\n\nfunction AutocompleteValue({ ...props }: React.ComponentProps<typeof Autocomplete.Value>) {\n  return <Autocomplete.Value data-slot=\"autocomplete-value\" {...props} />;\n}\n\nfunction AutocompleteInput({ className, ...props }: React.ComponentProps<typeof Autocomplete.Input>) {\n  return (\n    <Autocomplete.Input\n      className={cn(\"max-sm:text-[0.9375rem] max-sm:placeholder:text-[0.9375rem]\", className)}\n      render={<Input />}\n      {...props}\n    />\n  );\n}\n\nfunction AutocompleteTrigger({ className, children, ...props }: React.ComponentProps<typeof Autocomplete.Trigger>) {\n  return (\n    <Autocomplete.Trigger\n      className={cn(\n        \"flex cursor-pointer items-center justify-center border-none bg-transparent p-2\",\n        \"text-muted-foreground transition-colors duration-150\",\n        \"hover:text-foreground\",\n        \"focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n        className\n      )}\n      data-slot=\"autocomplete-trigger\"\n      {...props}\n    >\n      {children || <Search className=\"h-4 w-4 flex-shrink-0 opacity-60\" size={16} />}\n    </Autocomplete.Trigger>\n  );\n}\n\nfunction AutocompleteIcon({ className, children, ...props }: React.ComponentProps<typeof Autocomplete.Icon>) {\n  return (\n    <Autocomplete.Icon\n      className={cn(\"h-4 w-4 flex-shrink-0 opacity-60\", className)}\n      data-slot=\"autocomplete-icon\"\n      {...props}\n    >\n      {children || <Search size={16} />}\n    </Autocomplete.Icon>\n  );\n}\n\nfunction AutocompleteClear({ className, children, ...props }: React.ComponentProps<typeof Autocomplete.Clear>) {\n  return (\n    <Autocomplete.Clear\n      className={cn(\n        \"flex cursor-pointer items-center justify-center rounded-[calc(var(--radius)-2px)] p-1\",\n        \"text-muted-foreground transition-all duration-150\",\n        \"hover:bg-accent hover:text-foreground\",\n        \"focus-visible:outline-2 focus-visible:outline-ring focus-visible:outline-offset-2\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50\",\n        className\n      )}\n      data-slot=\"autocomplete-clear\"\n      {...props}\n    >\n      {children || <X size={16} />}\n    </Autocomplete.Clear>\n  );\n}\n\nconst AutocompletePortal = Autocomplete.Portal;\n\nfunction AutocompleteBackdrop({ className, ...props }: React.ComponentProps<typeof Autocomplete.Backdrop>) {\n  return (\n    <Autocomplete.Backdrop\n      className={cn(\n        \"fixed inset-0 z-[140] bg-[var(--dialog-overlay)] opacity-0 transition-opacity duration-150\",\n        \"data-[open]:opacity-100\",\n        className\n      )}\n      data-slot=\"autocomplete-backdrop\"\n      {...props}\n    />\n  );\n}\n\nfunction AutocompletePositioner({ className, ...props }: React.ComponentProps<typeof Autocomplete.Positioner>) {\n  return (\n    <Autocomplete.Positioner\n      className={cn(\"absolute z-[150] w-[var(--anchor-width)] outline-none\", className)}\n      data-slot=\"autocomplete-positioner\"\n      sideOffset={4}\n      {...props}\n    />\n  );\n}\n\nfunction AutocompletePopup({ className, children, ...props }: React.ComponentProps<typeof Autocomplete.Popup>) {\n  return (\n    <Autocomplete.Popup\n      className={cn(\n        \"box-border flex flex-col rounded-[var(--radius)]\",\n        \"bg-[var(--popover)] text-popover-foreground\",\n        \"max-h-[min(var(--available-height),23rem)] w-[var(--anchor-width)] max-w-[var(--available-width)]\",\n        \"overflow-y-auto overscroll-contain [scroll-padding-block:0.5rem]\",\n        \"shadow-[0_0_0_0.5px_oklch(from_var(--border)_l_c_h_/_0.8),var(--shadow-border-stack)]\",\n        \"origin-[var(--transform-origin)] transition-[transform,opacity] duration-250 ease-[var(--ease-out-expo)]\",\n        \"data-[starting-style]:scale-95 data-[starting-style]:opacity-0\",\n        \"data-[ending-style]:transition-none\",\n        \"max-sm:max-w-[calc(100vw-2rem)]\",\n        className\n      )}\n      data-slot=\"autocomplete-popup\"\n      {...props}\n    >\n      <AutocompleteSpacer />\n      {children}\n      <AutocompleteSpacer />\n    </Autocomplete.Popup>\n  );\n}\n\nfunction AutocompleteSpacer() {\n  return <div style={{ height: \"4px\", width: \"100%\", flexShrink: 0 }} />;\n}\n\nfunction AutocompleteArrow({ className, ...props }: React.ComponentProps<typeof Autocomplete.Arrow>) {\n  return (\n    <Autocomplete.Arrow\n      className={cn(\n        \"absolute h-2 w-2 rotate-45 border border-border bg-[var(--mix-card-33-bg)]\",\n        \"data-[side=top]:-bottom-1 data-[side=top]:border-r-0 data-[side=top]:border-b-0\",\n        \"data-[side=right]:-left-1 data-[side=right]:border-b-0 data-[side=right]:border-l-0\",\n        \"data-[side=bottom]:-top-1 data-[side=bottom]:border-t-0 data-[side=bottom]:border-l-0\",\n        \"data-[side=left]:-right-1 data-[side=left]:border-t-0 data-[side=left]:border-r-0\",\n        className\n      )}\n      data-slot=\"autocomplete-arrow\"\n      {...props}\n    />\n  );\n}\n\nfunction AutocompleteStatus({ className, ...props }: React.ComponentProps<typeof Autocomplete.Status>) {\n  return (\n    <Autocomplete.Status\n      className={cn(\"px-4 py-2 text-muted-foreground text-sm\", className)}\n      data-slot=\"autocomplete-status\"\n      {...props}\n    />\n  );\n}\n\nfunction AutocompleteList({ className, ...props }: React.ComponentProps<typeof Autocomplete.List>) {\n  return (\n    <Autocomplete.List\n      className={cn(\"flex flex-col gap-px outline-none\", className)}\n      data-slot=\"autocomplete-list\"\n      {...props}\n    />\n  );\n}\n\nfunction AutocompleteEmpty({ className, children, ...props }: React.ComponentProps<typeof Autocomplete.Empty>) {\n  return (\n    <Autocomplete.Empty\n      className={cn(\n        \"box-border p-4 text-center text-[0.925rem] text-muted-foreground\",\n        \"empty:m-0 empty:p-0\",\n        \"max-sm:p-5 max-sm:text-[0.9375rem]\",\n        className\n      )}\n      data-slot=\"autocomplete-empty\"\n      {...props}\n    >\n      {children || \"No items found\"}\n    </Autocomplete.Empty>\n  );\n}\n\nfunction AutocompleteCollection({ ...props }: React.ComponentProps<typeof Autocomplete.Collection>) {\n  return <Autocomplete.Collection data-slot=\"autocomplete-collection\" {...props} />;\n}\n\nfunction AutocompleteRow({ className, ...props }: React.ComponentProps<typeof Autocomplete.Row>) {\n  return <Autocomplete.Row className={cn(\"flex items-center\", className)} data-slot=\"autocomplete-row\" {...props} />;\n}\n\nfunction AutocompleteItem({ className, ...props }: React.ComponentProps<typeof Autocomplete.Item>) {\n  return (\n    <Autocomplete.Item\n      className={cn(\n        \"relative isolate m-0 flex h-8 cursor-pointer items-center justify-start gap-3\",\n        \"pr-1.5 pl-3 font-normal text-foreground text-sm leading-[1.2]\",\n        \"before:-z-10 before:absolute before:inset-x-1 before:inset-y-0 before:rounded-[calc(var(--radius)-3px)] before:bg-transparent before:content-['']\",\n        \"hover:before:bg-[var(--accent)] focus:outline-none focus:before:bg-[var(--accent)] focus-visible:outline-none\",\n        \"data-[highlighted]:before:bg-[var(--accent)]\",\n        \"data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 data-[disabled]:hover:bg-transparent\",\n        \"max-sm:min-h-[2.75rem] max-sm:gap-3 max-sm:px-3 max-sm:py-2.5 max-sm:text-[0.9375rem]\",\n        className\n      )}\n      data-slot=\"autocomplete-item\"\n      {...props}\n    />\n  );\n}\n\nfunction AutocompleteGroup({ className, ...props }: React.ComponentProps<typeof Autocomplete.Group>) {\n  return <Autocomplete.Group className={cn(\"py-1\", className)} data-slot=\"autocomplete-group\" {...props} />;\n}\n\nfunction AutocompleteGroupLabel({ className, ...props }: React.ComponentProps<typeof Autocomplete.GroupLabel>) {\n  return (\n    <Autocomplete.GroupLabel\n      className={cn(\"px-3 pt-2 pb-1 font-medium text-muted-foreground text-xs uppercase tracking-wide\", className)}\n      data-slot=\"autocomplete-group-label\"\n      {...props}\n    />\n  );\n}\n\nfunction AutocompleteSeparator({ className, ...props }: React.ComponentProps<typeof Autocomplete.Separator>) {\n  return (\n    <Autocomplete.Separator\n      className={cn(\"h-px border-[oklch(from_var(--border)_l_c_h_/_0.8)] border-b-[0.5px]\", className)}\n      data-slot=\"autocomplete-separator\"\n      {...props}\n    />\n  );\n}\n\nexport {\n  AutocompleteRoot as Autocomplete,\n  AutocompleteArrow,\n  AutocompleteBackdrop,\n  AutocompleteClear,\n  AutocompleteCollection,\n  AutocompleteEmpty,\n  AutocompleteGroup,\n  AutocompleteGroupLabel,\n  AutocompleteIcon,\n  AutocompleteInput,\n  AutocompleteItem,\n  AutocompleteList,\n  AutocompletePopup,\n  AutocompletePortal,\n  AutocompletePositioner,\n  AutocompleteRow,\n  AutocompleteSeparator,\n  AutocompleteSpacer,\n  AutocompleteStatus,\n  AutocompleteTrigger,\n  AutocompleteValue,\n};\n",
      "type": "registry:file",
      "target": "~/components/ui/autocomplete/autocomplete.tsx"
    }
  ]
}