You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
A production-ready React component library built on Radix UI and Tailwind CSS v4.
37+ accessible, composable, dark-mode-ready components — drop in and ship.
Why Clidey UX?
Building a consistent, accessible UI from scratch takes weeks. Clidey UX gives you a complete set of polished components so you can focus on your product, not your design system.
Accessible by default — every component is built on Radix UI primitives. Keyboard navigation, focus management, and ARIA attributes are handled for you.
Dark mode included — wrap your app with ThemeProvider and all components adapt automatically. System preference detection and localStorage persistence built in.
Fully typed — complete TypeScript definitions with strict mode. Autocomplete for every prop, variant, and event handler.
Composable API — sub-component patterns give you full control over layout and markup without fighting against an opinionated structure.
Tailwind CSS v4 — styled with utility classes you already know. Override anything with className.
Zero configuration — one import, one stylesheet, done.
Installation
npm install @clidey/ux
# or
pnpm add @clidey/ux
# or
yarn add @clidey/ux
Import the stylesheet once at your app entry point:
import{ThemeProvider}from'@clidey/ux';exportdefaultfunctionApp(){return(<ThemeProviderdefaultTheme="system">{/* your app */}</ThemeProvider>);}
That's it. No extra configuration, no Tailwind setup required in your project.
Quick start
import{Button,Card,CardHeader,CardTitle,CardDescription,CardContent,CardFooter,Badge,Input,Label,}from'@clidey/ux';import'@clidey/ux/styles.css';exportdefaultfunctionExample(){return(<CardclassName="max-w-sm"><CardHeader><CardTitle>Create account</CardTitle><CardDescription>Get started in seconds. No credit card required.</CardDescription></CardHeader><CardContentclassName="space-y-3"><divclassName="space-y-1"><LabelhtmlFor="email">Email</Label><Inputid="email"type="email"placeholder="you@example.com"/></div><divclassName="space-y-1"><LabelhtmlFor="password">Password</Label><Inputid="password"type="password"showPasswordToggle/></div></CardContent><CardFooterclassName="flex items-center justify-between"><Badgevariant="outline">Free plan</Badge><Button>Create account</Button></CardFooter></Card>);}
Connected button strip for toolbars and segmented controls
Inputs
Component
Description
Input
Text field with optional password toggle
TextArea
Multi-line text input
SearchInput
Text field with built-in search icon
Checkbox
Accessible checkbox with indeterminate state
Switch
Toggle for boolean settings
Select
Composable dropdown selector
SearchSelect
Dropdown with search filtering and icon support
Label
Accessible form label
Display
Component
Description
Badge
Status and category labels · 4 variants
Card
Container with header, content, footer, and action slots
Alert
Inline feedback messages · default and destructive
Spinner
Animated loader · 5 color variants · 3 sizes
Skeleton
Pulsing placeholder for loading states
Progress
Linear progress bar
EmptyState
Placeholder for empty lists and zero-state screens
Separator
Horizontal or vertical divider
Navigation
Component
Description
Tabs
Tab panels for switching between sections
Breadcrumb
Hierarchical path with ellipsis support
Pagination
Previous / next and numbered page controls
Sidebar
Full sidebar with collapsible menus, submenus, mobile support
Overlays
Component
Description
Dialog
Modal with focus trap and scroll lock
AlertDialog
Blocking confirmation for destructive actions
Drawer
Slide-in panel from any edge (powered by Vaul)
Sheet
Side panel overlay (powered by Radix Dialog)
Tooltip
Hover label with configurable delay and position
Popover
Click-anchored floating panel
Menus
Component
Description
DropdownMenu
Trigger menu with checkboxes, radio groups, and sub-menus
ContextMenu
Right-click menu with the same rich item types
Command
Fuzzy-search command palette (⌘K) powered by cmdk
Layout
Component
Description
Accordion
Collapsible sections with animated expand/collapse
ResizablePanelGroup
Drag-to-resize split views
ScrollArea
Custom scrollbar with styled track and thumb
StackList
Key-value metadata list with separators
Data & Visualization
Component
Description
Table
Full table with virtualization for large datasets and JSON preview
Chart
Recharts wrapper with theme-aware tooltips and legend
Tree
Hierarchical tree / file explorer with expand and selection
Utilities
Component
Description
Icon
SVG wrapper with consistent sizing
Toaster
Toast notifications powered by Sonner
Theme
Component / Hook
Description
ThemeProvider
Context provider for light / dark / system theme
useTheme
Hook to read and set the active theme
ModeToggle
Ready-made dropdown to switch themes
Usage examples
Confirmation dialog
import{AlertDialog,AlertDialogTrigger,AlertDialogContent,AlertDialogHeader,AlertDialogTitle,AlertDialogDescription,AlertDialogFooter,AlertDialogCancel,AlertDialogAction,Button,}from'@clidey/ux';<AlertDialog><AlertDialogTriggerasChild><Buttonvariant="destructive">Delete account</Button></AlertDialogTrigger><AlertDialogContent><AlertDialogHeader><AlertDialogTitle>Are you absolutely sure?</AlertDialogTitle><AlertDialogDescription>
This action cannot be undone. Your data will be permanently deleted.
</AlertDialogDescription></AlertDialogHeader><AlertDialogFooter><AlertDialogCancel>Cancel</AlertDialogCancel><AlertDialogAction>Delete account</AlertDialogAction></AlertDialogFooter></AlertDialogContent></AlertDialog>
Toast notifications
import{Toaster,toast}from'@clidey/ux';// In your root layout<Toaster/>// Anywhere in your apptoast.success('Saved successfully!');toast.error('Something went wrong.');toast.promise(saveData(),{loading: 'Saving...',success: 'Done!',error: 'Failed to save.',});