{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "autocomplete",
  "title": "Autocomplete",
  "description": "Autocomplete component built on Base UI, styled with sc1m tokens.",
  "dependencies": [
    "@base-ui/react"
  ],
  "registryDependencies": [
    "https://sc1m.vercel.app/r/tokens.json",
    "https://sc1m.vercel.app/r/cn.json"
  ],
  "files": [
    {
      "path": "src/components/ui/autocomplete/autocomplete.tsx",
      "content": "\"use client\";\n\nimport * as React from \"react\";\nimport { Autocomplete as BaseAutocomplete } from \"@base-ui/react/autocomplete\";\nimport { cn } from \"@/lib/cn\";\n\nexport const Autocomplete = BaseAutocomplete.Root;\n\nexport function AutocompleteInput({\n  className,\n  ...props\n}: React.ComponentProps<typeof BaseAutocomplete.Input>) {\n  return (\n    <BaseAutocomplete.Input\n      className={cn(\n        \"h-9 w-full rounded-md border border-line bg-surface-raised px-3 text-sm text-fg placeholder:text-fg-subtle\",\n        \"transition-colors duration-fast ease-out-quad\",\n        \"focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ring\",\n        \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport function AutocompleteContent({\n  className,\n  children,\n  side = \"bottom\",\n  ...props\n}: React.ComponentProps<typeof BaseAutocomplete.Popup> & {\n  side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n}) {\n  return (\n    <BaseAutocomplete.Portal>\n      <BaseAutocomplete.Positioner side={side} sideOffset={8}>\n        <BaseAutocomplete.Popup\n          className={cn(\n            \"max-h-72 min-w-[var(--anchor-width)] overflow-y-auto rounded-md border border-line bg-surface-raised p-1 text-fg shadow-overlay\",\n            \"popup-motion\",\n            className,\n          )}\n          {...props}\n        >\n          {children}\n        </BaseAutocomplete.Popup>\n      </BaseAutocomplete.Positioner>\n    </BaseAutocomplete.Portal>\n  );\n}\n\nexport function AutocompleteList({\n  className,\n  ...props\n}: React.ComponentProps<typeof BaseAutocomplete.List>) {\n  return (\n    <BaseAutocomplete.List className={cn(\"flex flex-col\", className)} {...props} />\n  );\n}\n\nexport function AutocompleteItem({\n  className,\n  ...props\n}: React.ComponentProps<typeof BaseAutocomplete.Item>) {\n  return (\n    <BaseAutocomplete.Item\n      className={cn(\n        \"flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm text-fg select-none\",\n        \"data-highlighted:bg-surface\",\n        \"data-disabled:pointer-events-none data-disabled:opacity-50\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nexport function AutocompleteEmpty({\n  className,\n  ...props\n}: React.ComponentProps<typeof BaseAutocomplete.Empty>) {\n  return (\n    <BaseAutocomplete.Empty\n      className={cn(\n        \"px-2 py-1.5 text-sm text-fg-subtle\",\n        // Base UI renders the CHILDREN only when the list is empty, but keeps\n        // the element mounted on purpose — it is a role=\"status\" live region,\n        // and its docs are explicit that hiding it with display:none, hidden,\n        // aria-hidden or conditional rendering breaks the announcement. So\n        // collapse the padding rather than the element: with results present\n        // the div is childless and would otherwise sit above the list as a\n        // 12px strip of dead space (py-1.5 top and bottom, no content).\n        \"empty:p-0\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}