Skip to main content
Features

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.

Component Docs

FAQ