Beautiful clay-style React component library
124 components · Dark mode · Animations · TypeScript · Radix UI
npm install neumorui
# or
pnpm add neumorui// 1. Wrap your app
import { NeuProvider } from "neumorui";
import "neumorui/styles";
function App() {
return (
<NeuProvider defaultTheme="light" defaultAccent="violet">
<MyApp />
</NeuProvider>
);
}// 2. Use components
import { Button, Input, Card, Grid, Col, Badge } from "neumorui";
function LoginPage() {
return (
<Grid cols={12} gap={16}>
<Col span={7}>
<Card>
<Input label="Email" leftIcon="✉" placeholder="you@example.com" />
<Input label="Password" type="password" placeholder="••••••••" />
<Button variant="primary" style={{ width: "100%" }}>Sign In</Button>
</Card>
</Col>
<Col span={5}>
<Card>
<Badge variant="success" dot>Online</Badge>
</Card>
</Col>
</Grid>
);
}| Category | Components |
|---|---|
| Form (24) | Button, Input, Textarea, Switch, Checkbox, RadioGroup, Select, Slider, ToggleGroup, FileUpload, OTPInput, Rating, TagInput, ColorPicker, SegmentedControl, PasswordInput, NumberInput, PhoneInput, PinInput, InputGroup, FormField, MultiSelect, RichTextEditor, MarkdownEditor |
| Layout (11) | Card, Grid, Col, Divider, Hero, PricingCard, AspectRatio, ScrollArea, ResizablePanels, Masonry, Container |
| Data Display (28) | Badge, Avatar, Progress, Skeleton, Spinner, DataTable, StatsCard, BarChart, DonutChart, LineChart, Heatmap, ComparisonTable, KanbanBoard, TreeView, ActivityFeed, Timeline, Chip, ImageGallery, Countdown, AreaChart, RadarChart, GaugeChart, Sparkline, UserCard, TestimonialCard, NotificationCard, CodeBlock, AvatarGroup |
| Navigation (15) | Tabs, Breadcrumb, Pagination, Navbar, Sidebar, BottomNav, BrowserTabs, MegaMenu, SpeedDial, BackToTop, Dock, Steps, LinkPreview, CommandMenu, TableOfContents |
| Overlay (9) | Modal, Popover, Tooltip, DropdownMenu, ContextMenu, Drawer, ConfirmDialog, Sheet, AlertDialog |
| Feedback (10) | Alert, Toast, AnnouncementBar, CookieConsent, LoadingOverlay, Stepper, EmptyState, Snackbar, Banner, InlineMessage |
| Disclosure (1) | Accordion |
| Date (4) | Calendar, DatePicker, DateRangePicker, TimePicker |
| Command (2) | Command, Combobox |
| Animation (3) | Reveal, Marquee, Carousel |
| Showpiece (5) | MusicPlayerCard, WeatherCard, ChatBubble, NotificationCenter, Onboarding |
| Media (2) | AudioPlayer, VideoPlayer |
| Utility (5) | CopyButton, Kbd, InfiniteScroll, QRCode, ThemeCustomizer |
| AI Chat (5) | ChatInput, MessageList, StreamingText, ThinkingIndicator, PromptCard |
- Clay/Neumorphic design — Soft shadows, no hard borders, depth through light
- Dark mode —
<NeuProvider followSystemTheme>or manualtoggleTheme() - Fully customizable — Every component accepts
className,style, and...restprops - Animations — Hover lifts, press effects, scroll reveal, count-up numbers, spring easing
- Interactive feedback — Raised/inset shadow states, drag/swipe, keyboard navigation
- TypeScript — Full type definitions, no
any - Radix UI — Accessible primitives for overlays, forms, and navigation
- Pure inline styles — No Tailwind required, zero CSS conflicts
- Versioned docs — Version selector dropdown, each release preserved on its own branch
- 380 tests — Smoke tests for every component
- Accessibility — eslint-plugin-jsx-a11y, ARIA attributes, keyboard navigation
- Live playground — Interactive prop editor on docs pages
- Global search — Cmd+K component search across docs
// Auto (follows system)
<NeuProvider followSystemTheme>
// Manual toggle
const { theme, toggleTheme } = useNeuTheme();Override CSS variables:
:root {
--neu-bg: #f0f4ff;
--neu-accent: #6c7ef8;
--neu-danger: #f87c6c;
--neu-success: #5ecba1;
--neu-radius-md: 14px;
--neu-shadow-raised: 7px 7px 18px rgba(180,190,220,0.8), -5px -5px 14px rgba(255,255,255,0.95);
}
[data-theme="dark"] {
--neu-bg: #1a1e32;
--neu-accent: #7c8ffa;
}import { useNeuTheme, useReveal, useCountUp, useRipple, useSnackbar } from "neumorui";
const { theme, toggleTheme, isDark } = useNeuTheme();
const { ref, visible } = useReveal();
const count = useCountUp(9240);
const { createRipple } = useRipple();
const { snackbar } = useSnackbar();| Link | |
|---|---|
| Docs | neumorui.vercel.app |
| npm | npmjs.com/package/neumorui |
| Storybook | rukonpro.github.io/neumorui |
| GitHub | github.com/rukonpro/neumorui |
pnpm install
pnpm --filter neumorui build # Build library
pnpm --filter docs dev # Docs at localhost:3001
pnpm --filter @neumorui/storybook dev # Storybook at localhost:6006
pnpm --filter neumorui test # 380 tests
pnpm build # Build all# 1. Snapshot current docs to a version branch
./scripts/release-version.sh
# 2. Bump version in packages/core/package.json
# 3. Update apps/docs/src/data/versions.ts
# 4. Commit, push, and deploy- Fork the repo
- Create a feature branch (
git checkout -b feat/my-component) - Commit changes (
git commit -m "feat: add MyComponent") - Push and open a PR
MIT — Rukon Uddin