{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "primitives",
  "title": "Primitives",
  "description": "Headless primitive adapter: the single entry point every ai2 component imports its unstyled behaviour from. Components never import the primitive library directly, so the provider is swapped in one file instead of thirty. Re-exports the twenty-four Radix UI namespaces the system uses (Dialog, Popover, Select, Tabs, Tooltip, Menu, and the rest). Components with no cross-library equivalent, such as Command, Toast, Drawer, Calendar, OTP input, Carousel and Resizable, keep their own dependency on purpose.",
  "dependencies": [
    "radix-ui@^1.6.1"
  ],
  "files": [
    {
      "path": "registry/ai2/ui/primitives.ts",
      "content": "/* ai2 primitive adapter - the SINGLE entry point to the headless layer.\n\n   Why it exists: ai2 components never import the primitive library DIRECTLY,\n   they all go through here. That way the headless provider (Radix UI today,\n   Base UI tomorrow) is swapped in ONE file; none of the 30 component files are\n   touched. Pro blocks use the same surface, so the promise \"the same block\n   runs on two primitives\" is kept in this file.\n\n   RULE: writing `from \"radix-ui\"` anywhere under `registry/ai2/**` is\n   FORBIDDEN (added to the audit R76 family). If a new primitive is needed, it\n   is added here first.\n\n   Deliberately out of scope: cmdk (Command), sonner (Toast), vaul (Drawer),\n   react-day-picker (Calendar), input-otp, embla-carousel-react,\n   react-resizable-panels. These have NO Base UI equivalent; putting them in\n   the adapter would imply they are swappable, which is not true. They are\n   imported directly in their own files.\n\n   The Base UI binding does NOT exist yet. When it does, only the re-export\n   block below changes; API differences (controlled/uncontrolled naming,\n   portal/anchor structure, `render` vs `asChild`) are absorbed here and the\n   a11y measurement is re-run. Until that day Base UI is NOT used in marketing\n   copy. */\n\nexport {\n  Accordion,\n  AlertDialog,\n  Avatar,\n  Checkbox,\n  Collapsible,\n  ContextMenu,\n  Dialog,\n  DropdownMenu,\n  HoverCard,\n  Label,\n  Menubar,\n  Popover,\n  Progress,\n  RadioGroup,\n  ScrollArea,\n  Select,\n  Separator,\n  Slider,\n  Slot,\n  Switch,\n  Tabs,\n  Toggle,\n  ToggleGroup,\n  Tooltip,\n} from \"radix-ui\"\n",
      "type": "registry:lib"
    }
  ],
  "docs": "Swap the provider here, not in components. Anything without a cross-library equivalent stays out of this file so the surface does not promise a swap it cannot deliver.",
  "categories": [
    "utility"
  ],
  "type": "registry:lib"
}