Radix UI Components
Full Radix UI accessibility without managing Radix peer deps. We wrap Radix internally — the API never leaks.
import { Modal } from "@ninna-ui/overlays";
import { Select } from "@ninna-ui/forms";
import { Tabs } from "@ninna-ui/navigation";
// Radix accessibility is built in — no @radix-ui/* imports needed
// No peer dep management, no version conflictsKey features
Built on Radix UI primitives for complex widgets
Zero API leakage — Radix types never appear in your code
No @radix-ui/* peer dependencies to manage
Full WAI-ARIA compliance: keyboard nav, focus trapping, ARIA
Consistent API across all components — no Radix-specific patterns
Radix updates handled internally — you just npm update
Radix without the complexity
Radix UI is the gold standard for accessible React primitives, but using it directly means managing 15+ peer dependencies, learning Radix-specific APIs, and handling version conflicts. Ninna UI wraps Radix internally through @ninna-ui/react-internal, so you get all the accessibility benefits without the dependency management overhead.
The Radix API never leaks into your code. You import from @ninna-ui/* packages, not from @radix-ui/*. When Radix releases a fix, we update our wrapper and ship it via npm — you just run npm update.