Package Exports
- @devalok/shilp-sutra
- @devalok/shilp-sutra/composed
- @devalok/shilp-sutra/composed/activity-feed
- @devalok/shilp-sutra/composed/avatar-group
- @devalok/shilp-sutra/composed/command-palette
- @devalok/shilp-sutra/composed/confirm-dialog
- @devalok/shilp-sutra/composed/content-card
- @devalok/shilp-sutra/composed/date-picker
- @devalok/shilp-sutra/composed/empty-state
- @devalok/shilp-sutra/composed/error-boundary
- @devalok/shilp-sutra/composed/global-loading
- @devalok/shilp-sutra/composed/lib/string-utils
- @devalok/shilp-sutra/composed/loading-skeleton
- @devalok/shilp-sutra/composed/member-picker
- @devalok/shilp-sutra/composed/page-header
- @devalok/shilp-sutra/composed/page-skeletons
- @devalok/shilp-sutra/composed/priority-indicator
- @devalok/shilp-sutra/composed/rich-text-editor
- @devalok/shilp-sutra/composed/schedule-view
- @devalok/shilp-sutra/composed/simple-tooltip
- @devalok/shilp-sutra/composed/status-badge
- @devalok/shilp-sutra/docs/_header.md
- @devalok/shilp-sutra/docs/composed/activity-feed.md
- @devalok/shilp-sutra/docs/composed/avatar-group.md
- @devalok/shilp-sutra/docs/composed/command-palette.md
- @devalok/shilp-sutra/docs/composed/confirm-dialog.md
- @devalok/shilp-sutra/docs/composed/content-card.md
- @devalok/shilp-sutra/docs/composed/date-picker.md
- @devalok/shilp-sutra/docs/composed/empty-state.md
- @devalok/shilp-sutra/docs/composed/error-boundary.md
- @devalok/shilp-sutra/docs/composed/global-loading.md
- @devalok/shilp-sutra/docs/composed/loading-skeleton.md
- @devalok/shilp-sutra/docs/composed/member-picker.md
- @devalok/shilp-sutra/docs/composed/page-header.md
- @devalok/shilp-sutra/docs/composed/page-skeletons.md
- @devalok/shilp-sutra/docs/composed/priority-indicator.md
- @devalok/shilp-sutra/docs/composed/rich-text-editor.md
- @devalok/shilp-sutra/docs/composed/schedule-view.md
- @devalok/shilp-sutra/docs/composed/simple-tooltip.md
- @devalok/shilp-sutra/docs/composed/status-badge.md
- @devalok/shilp-sutra/docs/shell/app-command-palette.md
- @devalok/shilp-sutra/docs/shell/bottom-navbar.md
- @devalok/shilp-sutra/docs/shell/command-registry.md
- @devalok/shilp-sutra/docs/shell/link-context.md
- @devalok/shilp-sutra/docs/shell/notification-center.md
- @devalok/shilp-sutra/docs/shell/notification-preferences.md
- @devalok/shilp-sutra/docs/shell/sidebar.md
- @devalok/shilp-sutra/docs/shell/top-bar.md
- @devalok/shilp-sutra/docs/ui/accordion.md
- @devalok/shilp-sutra/docs/ui/alert-dialog.md
- @devalok/shilp-sutra/docs/ui/alert.md
- @devalok/shilp-sutra/docs/ui/aspect-ratio.md
- @devalok/shilp-sutra/docs/ui/autocomplete.md
- @devalok/shilp-sutra/docs/ui/avatar.md
- @devalok/shilp-sutra/docs/ui/badge.md
- @devalok/shilp-sutra/docs/ui/banner.md
- @devalok/shilp-sutra/docs/ui/breadcrumb.md
- @devalok/shilp-sutra/docs/ui/button-group.md
- @devalok/shilp-sutra/docs/ui/button.md
- @devalok/shilp-sutra/docs/ui/card.md
- @devalok/shilp-sutra/docs/ui/charts.md
- @devalok/shilp-sutra/docs/ui/checkbox.md
- @devalok/shilp-sutra/docs/ui/chip.md
- @devalok/shilp-sutra/docs/ui/code.md
- @devalok/shilp-sutra/docs/ui/collapsible.md
- @devalok/shilp-sutra/docs/ui/color-input.md
- @devalok/shilp-sutra/docs/ui/combobox.md
- @devalok/shilp-sutra/docs/ui/container.md
- @devalok/shilp-sutra/docs/ui/context-menu.md
- @devalok/shilp-sutra/docs/ui/data-table-toolbar.md
- @devalok/shilp-sutra/docs/ui/data-table.md
- @devalok/shilp-sutra/docs/ui/dialog.md
- @devalok/shilp-sutra/docs/ui/dropdown-menu.md
- @devalok/shilp-sutra/docs/ui/file-upload.md
- @devalok/shilp-sutra/docs/ui/form.md
- @devalok/shilp-sutra/docs/ui/hover-card.md
- @devalok/shilp-sutra/docs/ui/icon-button.md
- @devalok/shilp-sutra/docs/ui/input-otp.md
- @devalok/shilp-sutra/docs/ui/input.md
- @devalok/shilp-sutra/docs/ui/label.md
- @devalok/shilp-sutra/docs/ui/link.md
- @devalok/shilp-sutra/docs/ui/menubar.md
- @devalok/shilp-sutra/docs/ui/navigation-menu.md
- @devalok/shilp-sutra/docs/ui/number-input.md
- @devalok/shilp-sutra/docs/ui/pagination.md
- @devalok/shilp-sutra/docs/ui/popover.md
- @devalok/shilp-sutra/docs/ui/progress.md
- @devalok/shilp-sutra/docs/ui/radio.md
- @devalok/shilp-sutra/docs/ui/search-input.md
- @devalok/shilp-sutra/docs/ui/segmented-control.md
- @devalok/shilp-sutra/docs/ui/select.md
- @devalok/shilp-sutra/docs/ui/separator.md
- @devalok/shilp-sutra/docs/ui/sheet.md
- @devalok/shilp-sutra/docs/ui/sidebar.md
- @devalok/shilp-sutra/docs/ui/skeleton.md
- @devalok/shilp-sutra/docs/ui/slider.md
- @devalok/shilp-sutra/docs/ui/spinner.md
- @devalok/shilp-sutra/docs/ui/stack.md
- @devalok/shilp-sutra/docs/ui/stat-card.md
- @devalok/shilp-sutra/docs/ui/stepper.md
- @devalok/shilp-sutra/docs/ui/switch.md
- @devalok/shilp-sutra/docs/ui/table.md
- @devalok/shilp-sutra/docs/ui/tabs.md
- @devalok/shilp-sutra/docs/ui/text.md
- @devalok/shilp-sutra/docs/ui/textarea.md
- @devalok/shilp-sutra/docs/ui/toast.md
- @devalok/shilp-sutra/docs/ui/toaster.md
- @devalok/shilp-sutra/docs/ui/toggle-group.md
- @devalok/shilp-sutra/docs/ui/toggle.md
- @devalok/shilp-sutra/docs/ui/tooltip.md
- @devalok/shilp-sutra/docs/ui/tree-view.md
- @devalok/shilp-sutra/docs/ui/visually-hidden.md
- @devalok/shilp-sutra/fonts/Inter-Italic-Variable.woff2
- @devalok/shilp-sutra/fonts/Inter-Variable.woff2
- @devalok/shilp-sutra/fonts/Ranade-Variable.woff2
- @devalok/shilp-sutra/fonts/Ranade-VariableItalic.woff2
- @devalok/shilp-sutra/hooks
- @devalok/shilp-sutra/hooks/use-color-mode
- @devalok/shilp-sutra/hooks/use-mobile
- @devalok/shilp-sutra/hooks/use-toast
- @devalok/shilp-sutra/motion
- @devalok/shilp-sutra/motion/primitives
- @devalok/shilp-sutra/shell
- @devalok/shilp-sutra/shell/app-command-palette
- @devalok/shilp-sutra/shell/bottom-navbar
- @devalok/shilp-sutra/shell/command-registry
- @devalok/shilp-sutra/shell/link-context
- @devalok/shilp-sutra/shell/notification-center
- @devalok/shilp-sutra/shell/notification-preferences
- @devalok/shilp-sutra/shell/sidebar
- @devalok/shilp-sutra/shell/top-bar
- @devalok/shilp-sutra/tailwind
- @devalok/shilp-sutra/tailwind/preset
- @devalok/shilp-sutra/tokens
- @devalok/shilp-sutra/ui
- @devalok/shilp-sutra/ui/accordion
- @devalok/shilp-sutra/ui/alert
- @devalok/shilp-sutra/ui/alert-dialog
- @devalok/shilp-sutra/ui/aspect-ratio
- @devalok/shilp-sutra/ui/autocomplete
- @devalok/shilp-sutra/ui/avatar
- @devalok/shilp-sutra/ui/badge
- @devalok/shilp-sutra/ui/banner
- @devalok/shilp-sutra/ui/breadcrumb
- @devalok/shilp-sutra/ui/button
- @devalok/shilp-sutra/ui/button-group
- @devalok/shilp-sutra/ui/card
- @devalok/shilp-sutra/ui/charts
- @devalok/shilp-sutra/ui/checkbox
- @devalok/shilp-sutra/ui/chip
- @devalok/shilp-sutra/ui/code
- @devalok/shilp-sutra/ui/collapsible
- @devalok/shilp-sutra/ui/color-input
- @devalok/shilp-sutra/ui/combobox
- @devalok/shilp-sutra/ui/container
- @devalok/shilp-sutra/ui/context-menu
- @devalok/shilp-sutra/ui/data-table
- @devalok/shilp-sutra/ui/data-table-toolbar
- @devalok/shilp-sutra/ui/dialog
- @devalok/shilp-sutra/ui/dropdown-menu
- @devalok/shilp-sutra/ui/file-upload
- @devalok/shilp-sutra/ui/form
- @devalok/shilp-sutra/ui/hover-card
- @devalok/shilp-sutra/ui/icon-button
- @devalok/shilp-sutra/ui/input
- @devalok/shilp-sutra/ui/input-otp
- @devalok/shilp-sutra/ui/label
- @devalok/shilp-sutra/ui/lib/date-utils
- @devalok/shilp-sutra/ui/lib/motion
- @devalok/shilp-sutra/ui/lib/utils
- @devalok/shilp-sutra/ui/link
- @devalok/shilp-sutra/ui/menubar
- @devalok/shilp-sutra/ui/navigation-menu
- @devalok/shilp-sutra/ui/number-input
- @devalok/shilp-sutra/ui/pagination
- @devalok/shilp-sutra/ui/popover
- @devalok/shilp-sutra/ui/progress
- @devalok/shilp-sutra/ui/radio
- @devalok/shilp-sutra/ui/search-input
- @devalok/shilp-sutra/ui/segmented-control
- @devalok/shilp-sutra/ui/select
- @devalok/shilp-sutra/ui/separator
- @devalok/shilp-sutra/ui/sheet
- @devalok/shilp-sutra/ui/sidebar
- @devalok/shilp-sutra/ui/skeleton
- @devalok/shilp-sutra/ui/slider
- @devalok/shilp-sutra/ui/spinner
- @devalok/shilp-sutra/ui/stack
- @devalok/shilp-sutra/ui/stat-card
- @devalok/shilp-sutra/ui/stepper
- @devalok/shilp-sutra/ui/switch
- @devalok/shilp-sutra/ui/table
- @devalok/shilp-sutra/ui/tabs
- @devalok/shilp-sutra/ui/text
- @devalok/shilp-sutra/ui/textarea
- @devalok/shilp-sutra/ui/toast
- @devalok/shilp-sutra/ui/toast-types
- @devalok/shilp-sutra/ui/toaster
- @devalok/shilp-sutra/ui/toggle
- @devalok/shilp-sutra/ui/toggle-group
- @devalok/shilp-sutra/ui/tooltip
- @devalok/shilp-sutra/ui/tree-view
- @devalok/shilp-sutra/ui/visually-hidden
- @devalok/shilp-sutra/utils
Readme
@devalok/shilp-sutra
Devalok Design System -- tokens, components, and patterns for React & Next.js.
Quick Setup
1. Install
pnpm add @devalok/shilp-sutra2. Add Tailwind Preset
// tailwind.config.ts
import shilpSutra from '@devalok/shilp-sutra/tailwind'
export default {
presets: [shilpSutra],
content: [
'./app/**/*.{ts,tsx}',
'./node_modules/@devalok/shilp-sutra/dist/**/*.js',
],
}3. Import Tokens
// app/layout.tsx (Next.js) or main entry point
import '@devalok/shilp-sutra/tokens'
import './globals.css'Done. Start using components.
Import Patterns
Per-component import (recommended)
Best for tree-shaking, Server Components, and fast builds:
import { Button } from '@devalok/shilp-sutra/ui/button'
import { Dialog } from '@devalok/shilp-sutra/ui/dialog'
import { DatePicker } from '@devalok/shilp-sutra/composed/date-picker'
import { TopBar } from '@devalok/shilp-sutra/shell/top-bar'Barrel import
Convenient for client components that use many primitives:
import { Button, Dialog, Input, Badge } from '@devalok/shilp-sutra/ui'
import { PageHeader, DatePicker } from '@devalok/shilp-sutra/composed'
import { AppSidebar, TopBar } from '@devalok/shilp-sutra/shell'Root import
Shorthand for UI components only:
import { Button, Input } from '@devalok/shilp-sutra'Mental Model
The design system is organized into three tiers:
| Layer | Import | What it contains |
|---|---|---|
| ui | @devalok/shilp-sutra/ui |
60+ atomic primitives -- buttons, inputs, dialogs, cards, tables, badges, charts, navigation menus |
| composed | @devalok/shilp-sutra/composed |
14 multi-component patterns -- date picker, rich text editor, command palette, page header, skeletons |
| shell | @devalok/shilp-sutra/shell |
7 app-level layout components -- sidebar, top bar, bottom navbar, notification center, command palette |
Additional exports:
| Import | Contents |
|---|---|
@devalok/shilp-sutra/tokens |
CSS custom properties (primitives, semantic, typography) |
@devalok/shilp-sutra/tailwind |
Tailwind CSS preset with all design tokens |
@devalok/shilp-sutra/hooks |
useToast, useColorMode, useIsMobile |
@devalok/shilp-sutra/fonts/* |
Inter and Ranade variable fonts (WOFF2) |
Peer Dependencies
Required
| Package | Version |
|---|---|
react |
^18 || ^19 |
react-dom |
^18 || ^19 |
Optional
Install only what you use:
| Feature | Packages |
|---|---|
Charts (./ui/charts) |
d3-array, d3-axis, d3-format, d3-interpolate, d3-scale, d3-selection, d3-shape, d3-time-format, d3-transition |
Rich Text Editor (./composed/rich-text-editor) |
@tiptap/react, @tiptap/starter-kit, @tiptap/extension-placeholder |
DataTable (./ui/data-table) |
@tanstack/react-table, @tanstack/react-virtual |
| Icons (various components) | @tabler/icons-react |
Date components (./composed/date-picker) |
date-fns |
OTP Input (./ui/input-otp) |
input-otp |
| Markdown rendering | react-markdown |
Example -- install only charts deps:
pnpm add d3-array d3-axis d3-format d3-interpolate d3-scale d3-selection d3-shape d3-time-format d3-transitionServer-Safe Components
These components work in React Server Components when imported via their per-component path. They do not include "use client" directives:
ui
| Component | Import |
|---|---|
| Text | @devalok/shilp-sutra/ui/text |
| Skeleton | @devalok/shilp-sutra/ui/skeleton |
| Spinner | @devalok/shilp-sutra/ui/spinner |
| Stack | @devalok/shilp-sutra/ui/stack |
| Container | @devalok/shilp-sutra/ui/container |
| Table | @devalok/shilp-sutra/ui/table |
| Code | @devalok/shilp-sutra/ui/code |
| VisuallyHidden | @devalok/shilp-sutra/ui/visually-hidden |
composed
| Component | Import |
|---|---|
| ContentCard | @devalok/shilp-sutra/composed/content-card |
| EmptyState | @devalok/shilp-sutra/composed/empty-state |
| PageHeader | @devalok/shilp-sutra/composed/page-header |
| LoadingSkeleton | @devalok/shilp-sutra/composed/loading-skeleton |
| PageSkeletons | @devalok/shilp-sutra/composed/page-skeletons |
| PriorityIndicator | @devalok/shilp-sutra/composed/priority-indicator |
| StatusBadge | @devalok/shilp-sutra/composed/status-badge |
All other components require client-side React and include "use client".
Dark Mode
The design system uses CSS custom properties with a .dark class toggle. All semantic tokens have dark mode overrides built in.
Setup
Add the .dark class to your <html> or a parent element:
<html class="dark">Next.js with next-themes
// app/layout.tsx
import { ThemeProvider } from 'next-themes'
export default function RootLayout({ children }) {
return (
<html suppressHydrationWarning>
<body>
<ThemeProvider attribute="class" defaultTheme="system">
{children}
</ThemeProvider>
</body>
</html>
)
}Programmatic toggle
import { useColorMode } from '@devalok/shilp-sutra/hooks'
function ThemeToggle() {
const { mode, toggle } = useColorMode()
return <button onClick={toggle}>{mode === 'dark' ? 'Light' : 'Dark'}</button>
}TypeScript
Full TypeScript support works out of the box. No special tsconfig.json settings required.
All component props are exported as named types:
import { type ButtonProps } from '@devalok/shilp-sutra/ui/button'
import { type DatePickerProps } from '@devalok/shilp-sutra/composed/date-picker'Token Architecture
Three-tier CSS custom property system:
- Primitives (
primitives.css) -- Raw palette values (50-950 scales). Never used directly in components. - Semantic (
semantic.css) -- Intent-based tokens (--color-interactive,--color-text-primary). Includes dark mode via.darkclass. - Typography (
typography.css) -- Font-face declarations, type scale (T1-T7, B1-B8, L1-L6, P1-P7).
Links
License
MIT -- Copyright 2026 Devalok Design & Strategy Studios