TypeScript React Components
Strict TypeScript with full generics, autocomplete, and zero any types. Every prop, every variant, every callback is typed.
import { Button } from "@ninna-ui/primitives";
import { Select } from "@ninna-ui/forms";
// Full autocomplete for variant, size, color
<Button variant="outline" color="primary" size="md" />
// Generic Select with typed value
<Select<string> value="apple" onChange={(v: string) => {}}>
<Select.Item value="apple">Apple</Select.Item>
</Select>Key features
Strict TypeScript — no any, no unsafe casts, no @ts-ignore
Full generics on data components (Select, DataTable, RadioGroup)
Autocomplete for every variant, size, color, and status prop
Compile-time errors for invalid prop combinations
Type-safe event handlers and callbacks
displayName on every component for DevTools
Type safety as a feature
TypeScript isn't just for catching typos — it's for API discoverability. When you type <Button variant=...>, your editor shows all valid variants. When you pass an invalid combination, you get a compile-time error, not a runtime surprise.
Ninna UI's type definitions are generated from the actual component source, not hand-written. This means the types always match the implementation — no stale type definitions.