Radix UI unstyled accessible primitives for dialogs, popovers, dropdowns, and more. Use when building custom accessible components, understanding shadcn internals, or needing polymorphic composition.
View on GitHubyonatangross/orchestkit
orchestkit-complete
January 24, 2026
Select agents to install to:
npx add-skill https://github.com/yonatangross/orchestkit/blob/main/./skills/radix-primitives/SKILL.md -a claude-code --skill radix-primitivesInstallation paths:
.claude/skills/radix-primitives/# Radix Primitives Unstyled, accessible React components for building high-quality design systems. ## Overview - Building custom styled components with full accessibility - Understanding how shadcn/ui works under the hood - Need polymorphic composition without wrapper divs - Implementing complex UI patterns (modals, menus, tooltips) ## Primitives Catalog ### Overlay Components | Primitive | Use Case | |-----------|----------| | **Dialog** | Modal dialogs, forms, confirmations | | **AlertDialog** | Destructive action confirmations | | **Sheet** | Side panels, mobile drawers | ### Popover Components | Primitive | Use Case | |-----------|----------| | **Popover** | Rich content on trigger | | **Tooltip** | Simple text hints | | **HoverCard** | Preview cards on hover | | **ContextMenu** | Right-click menus | ### Menu Components | Primitive | Use Case | |-----------|----------| | **DropdownMenu** | Action menus | | **Menubar** | Application menubars | | **NavigationMenu** | Site navigation | ### Form Components | Primitive | Use Case | |-----------|----------| | **Select** | Custom select dropdowns | | **RadioGroup** | Single selection groups | | **Checkbox** | Boolean toggles | | **Switch** | On/off toggles | | **Slider** | Range selection | ### Disclosure Components | Primitive | Use Case | |-----------|----------| | **Accordion** | Expandable sections | | **Collapsible** | Single toggle content | | **Tabs** | Tabbed interfaces | ## Core Pattern: asChild The `asChild` prop enables polymorphic rendering without wrapper divs: ```tsx // Without asChild - creates nested elements <Button> <Link href="/about">About</Link> </Button> // With asChild - merges into single element <Button asChild> <Link href="/about">About</Link> </Button> ``` **How it works:** - Uses Radix's internal `Slot` component - Merges props from parent to child - Forwards refs correctly - Combines event handlers (both fire) - Merges classNames ## Built-in Accessibility Every primitive