@devalok/shilp-sutra 0.28.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks/badge-group.js +299 -0
- package/dist/_chunks/framer.js +1915 -1980
- package/dist/_chunks/keybinding.js +4 -5
- package/dist/_chunks/primitives.js +3198 -3272
- package/dist/_chunks/sonner.js +29 -31
- package/dist/_chunks/stat-row.js +110 -131
- package/dist/_chunks/tiptap.js +42 -78
- package/dist/_chunks/tree-view.js +138 -149
- package/dist/_chunks/typing-indicator.js +565 -0
- package/dist/_chunks/use-calendar.js +416 -439
- package/dist/_chunks/vendor-client.js +5 -5
- package/dist/_chunks/vendor-utils.js +5 -5
- package/dist/ai/block-renderer.js +22 -22
- package/dist/ai/blocks/loading.d.ts.map +1 -1
- package/dist/ai/command-bar.d.ts.map +1 -1
- package/dist/ai/command-bar.js +241 -263
- package/dist/ai/conversation.d.ts.map +1 -1
- package/dist/ai/conversation.js +87 -107
- package/dist/composed/activity-feed.d.ts +2 -0
- package/dist/composed/activity-feed.d.ts.map +1 -1
- package/dist/composed/activity-feed.js +118 -90
- package/dist/composed/avatar-group.d.ts +1 -0
- package/dist/composed/avatar-group.d.ts.map +1 -1
- package/dist/composed/avatar-group.js +125 -86
- package/dist/composed/bulk-action-bar.d.ts.map +1 -1
- package/dist/composed/bulk-action-bar.js +29 -28
- package/dist/composed/command-palette.d.ts.map +1 -1
- package/dist/composed/command-palette.js +99 -113
- package/dist/composed/content-card.js +1 -1
- package/dist/composed/date-picker/calendar-grid.d.ts.map +1 -1
- package/dist/composed/date-picker/date-picker.d.ts.map +1 -1
- package/dist/composed/date-picker/date-range-picker.d.ts.map +1 -1
- package/dist/composed/date-picker/date-time-picker.d.ts.map +1 -1
- package/dist/composed/date-picker/time-picker.d.ts.map +1 -1
- package/dist/composed/deadline-indicator.d.ts.map +1 -1
- package/dist/composed/deadline-indicator.js +29 -28
- package/dist/composed/error-boundary.d.ts.map +1 -1
- package/dist/composed/error-boundary.js +30 -27
- package/dist/composed/extensions/file-attachment.d.ts.map +1 -1
- package/dist/composed/file-preview.d.ts.map +1 -1
- package/dist/composed/file-preview.js +261 -271
- package/dist/composed/filter-bar.d.ts.map +1 -1
- package/dist/composed/filter-bar.js +49 -48
- package/dist/composed/form-section.d.ts.map +1 -1
- package/dist/composed/form-section.js +12 -11
- package/dist/composed/global-loading.js +1 -1
- package/dist/composed/index.d.ts +1 -1
- package/dist/composed/index.d.ts.map +1 -1
- package/dist/composed/index.js +63 -63
- package/dist/composed/inline-edit.d.ts.map +1 -1
- package/dist/composed/inline-edit.js +55 -54
- package/dist/composed/markdown-viewer.d.ts.map +1 -1
- package/dist/composed/markdown-viewer.js +44 -43
- package/dist/composed/master-detail.d.ts.map +1 -1
- package/dist/composed/master-detail.js +35 -34
- package/dist/composed/multi-select-popover.d.ts.map +1 -1
- package/dist/composed/multi-select-popover.js +73 -73
- package/dist/composed/page-header.d.ts.map +1 -1
- package/dist/composed/page-header.js +42 -35
- package/dist/composed/priority-indicator.d.ts.map +1 -1
- package/dist/composed/priority-indicator.js +37 -36
- package/dist/composed/rich-text-editor.d.ts +3 -0
- package/dist/composed/rich-text-editor.d.ts.map +1 -1
- package/dist/composed/rich-text-editor.js +295 -311
- package/dist/composed/schedule-view.js +62 -62
- package/dist/composed/status-badge.d.ts +4 -2
- package/dist/composed/status-badge.d.ts.map +1 -1
- package/dist/composed/status-badge.js +58 -45
- package/dist/shell/app-command-palette.d.ts.map +1 -1
- package/dist/shell/app-command-palette.js +93 -93
- package/dist/shell/bottom-navbar.d.ts.map +1 -1
- package/dist/shell/bottom-navbar.js +21 -20
- package/dist/shell/index.js +18 -18
- package/dist/shell/notification-center.d.ts.map +1 -1
- package/dist/shell/notification-center.js +96 -95
- package/dist/shell/notification-preferences.d.ts.map +1 -1
- package/dist/shell/notification-preferences.js +82 -85
- package/dist/shell/sidebar.js +59 -60
- package/dist/shell/top-bar.d.ts.map +1 -1
- package/dist/shell/top-bar.js +103 -103
- package/dist/tailwind/index.cjs +37 -4
- package/dist/tailwind/preset.d.ts.map +1 -1
- package/dist/tailwind/preset.js +38 -5
- package/dist/tokens/primitives.css +20 -0
- package/dist/tokens/semantic.css +74 -7
- package/dist/ui/accordion.d.ts +5 -2
- package/dist/ui/accordion.d.ts.map +1 -1
- package/dist/ui/accordion.js +44 -39
- package/dist/ui/alert-dialog.js +57 -57
- package/dist/ui/alert.d.ts +1 -1
- package/dist/ui/alert.d.ts.map +1 -1
- package/dist/ui/alert.js +30 -29
- package/dist/ui/aspect-ratio.js +4 -4
- package/dist/ui/autocomplete.js +56 -56
- package/dist/ui/avatar.js +2 -2
- package/dist/ui/badge-group.d.ts +22 -0
- package/dist/ui/badge-group.d.ts.map +1 -0
- package/dist/ui/badge-group.js +8 -0
- package/dist/ui/badge-indicator.d.ts +32 -0
- package/dist/ui/badge-indicator.d.ts.map +1 -0
- package/dist/ui/badge-indicator.js +54 -0
- package/dist/ui/badge.d.ts +27 -24
- package/dist/ui/badge.d.ts.map +1 -1
- package/dist/ui/badge.js +13 -129
- package/dist/ui/banner.d.ts +1 -1
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +27 -26
- package/dist/ui/breadcrumb.d.ts.map +1 -1
- package/dist/ui/breadcrumb.js +37 -36
- package/dist/ui/button-group.d.ts +12 -6
- package/dist/ui/button-group.d.ts.map +1 -1
- package/dist/ui/button-group.js +18 -18
- package/dist/ui/button-processing.d.ts +16 -0
- package/dist/ui/button-processing.d.ts.map +1 -0
- package/dist/ui/button-processing.js +77 -0
- package/dist/ui/button.d.ts +50 -25
- package/dist/ui/button.d.ts.map +1 -1
- package/dist/ui/button.js +243 -127
- package/dist/ui/card.js +20 -21
- package/dist/ui/charts/index.js +499 -508
- package/dist/ui/chat/date-separator.d.ts +12 -0
- package/dist/ui/chat/date-separator.d.ts.map +1 -0
- package/dist/ui/chat/index.d.ts +9 -0
- package/dist/ui/chat/index.d.ts.map +1 -0
- package/dist/ui/chat/index.js +12 -0
- package/dist/ui/chat/message-input.d.ts +16 -0
- package/dist/ui/chat/message-input.d.ts.map +1 -0
- package/dist/ui/chat/message-list.d.ts +24 -0
- package/dist/ui/chat/message-list.d.ts.map +1 -0
- package/dist/ui/chat/message.d.ts +108 -0
- package/dist/ui/chat/message.d.ts.map +1 -0
- package/dist/ui/chat/system-message.d.ts +11 -0
- package/dist/ui/chat/system-message.d.ts.map +1 -0
- package/dist/ui/chat/typing-indicator.d.ts +14 -0
- package/dist/ui/chat/typing-indicator.d.ts.map +1 -0
- package/dist/ui/chat/unread-separator.d.ts +12 -0
- package/dist/ui/chat/unread-separator.d.ts.map +1 -0
- package/dist/ui/checkbox.js +18 -18
- package/dist/ui/chip.d.ts +13 -62
- package/dist/ui/chip.d.ts.map +1 -1
- package/dist/ui/chip.js +10 -109
- package/dist/ui/collapsible.js +4 -4
- package/dist/ui/color-input.js +134 -134
- package/dist/ui/color-swatch.js +11 -11
- package/dist/ui/combobox.d.ts.map +1 -1
- package/dist/ui/combobox.js +74 -80
- package/dist/ui/context-menu.d.ts.map +1 -1
- package/dist/ui/context-menu.js +86 -85
- package/dist/ui/data-table-toolbar.d.ts.map +1 -1
- package/dist/ui/data-table-toolbar.js +51 -57
- package/dist/ui/data-table.d.ts.map +1 -1
- package/dist/ui/data-table.js +268 -296
- package/dist/ui/devalok-grain.d.ts +81 -0
- package/dist/ui/devalok-grain.d.ts.map +1 -0
- package/dist/ui/devalok-grain.js +69 -0
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +73 -72
- package/dist/ui/dropdown-menu.d.ts.map +1 -1
- package/dist/ui/dropdown-menu.js +93 -92
- package/dist/ui/file-upload.d.ts.map +1 -1
- package/dist/ui/file-upload.js +82 -82
- package/dist/ui/hover-card.js +29 -29
- package/dist/ui/icon-button.d.ts +7 -7
- package/dist/ui/icon-button.d.ts.map +1 -1
- package/dist/ui/icon-context.d.ts +15 -0
- package/dist/ui/icon-context.d.ts.map +1 -0
- package/dist/ui/icon-context.js +20 -0
- package/dist/ui/icon-group.d.ts +22 -0
- package/dist/ui/icon-group.d.ts.map +1 -0
- package/dist/ui/icon-group.js +32 -0
- package/dist/ui/icon.d.ts +57 -0
- package/dist/ui/icon.d.ts.map +1 -0
- package/dist/ui/icon.js +122 -0
- package/dist/ui/index.d.ts +8 -1
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +351 -329
- package/dist/ui/input-otp.d.ts.map +1 -1
- package/dist/ui/input-otp.js +21 -20
- package/dist/ui/input.d.ts +32 -11
- package/dist/ui/input.d.ts.map +1 -1
- package/dist/ui/input.js +149 -44
- package/dist/ui/lib/motion.d.ts +2 -0
- package/dist/ui/lib/motion.d.ts.map +1 -1
- package/dist/ui/lib/motion.js +13 -11
- package/dist/ui/lib/utils.js +4 -4
- package/dist/ui/menubar.d.ts.map +1 -1
- package/dist/ui/menubar.js +87 -86
- package/dist/ui/navigation-menu.d.ts.map +1 -1
- package/dist/ui/navigation-menu.js +23 -28
- package/dist/ui/number-input.d.ts.map +1 -1
- package/dist/ui/number-input.js +54 -53
- package/dist/ui/pagination.d.ts.map +1 -1
- package/dist/ui/pagination.js +45 -44
- package/dist/ui/popover.js +28 -28
- package/dist/ui/progress.d.ts +3 -1
- package/dist/ui/progress.d.ts.map +1 -1
- package/dist/ui/progress.js +43 -39
- package/dist/ui/search-input.d.ts.map +1 -1
- package/dist/ui/search-input.js +47 -60
- package/dist/ui/segmented-control.js +1 -1
- package/dist/ui/select.d.ts.map +1 -1
- package/dist/ui/select.js +54 -53
- package/dist/ui/sheet.d.ts.map +1 -1
- package/dist/ui/sheet.js +46 -45
- package/dist/ui/sidebar.d.ts.map +1 -1
- package/dist/ui/sidebar.js +196 -193
- package/dist/ui/skeleton.js +1 -1
- package/dist/ui/spinner.js +74 -74
- package/dist/ui/stat-card.d.ts.map +1 -1
- package/dist/ui/stat-card.js +85 -86
- package/dist/ui/switch.d.ts +3 -0
- package/dist/ui/switch.d.ts.map +1 -1
- package/dist/ui/switch.js +41 -27
- package/dist/ui/tabs.js +43 -43
- package/dist/ui/text.js +1 -1
- package/dist/ui/textarea.js +10 -10
- package/dist/ui/toast.d.ts.map +1 -1
- package/dist/ui/toast.js +169 -169
- package/dist/ui/toggle.js +4 -4
- package/dist/ui/tooltip.js +40 -40
- package/dist/ui/tree-view/tree-item.d.ts.map +1 -1
- package/docs/components/_header.md +4 -4
- package/docs/components/composed/activity-feed.md +7 -0
- package/docs/components/composed/avatar-group.md +8 -5
- package/docs/components/composed/rich-text-editor.md +6 -0
- package/docs/components/composed/status-badge.md +14 -1
- package/docs/components/ui/accordion.md +5 -2
- package/docs/components/ui/badge-group.md +38 -0
- package/docs/components/ui/badge-indicator.md +40 -0
- package/docs/components/ui/badge.md +36 -5
- package/docs/components/ui/button-processing.md +15 -0
- package/docs/components/ui/button.md +40 -11
- package/docs/components/ui/chat.md +214 -0
- package/docs/components/ui/data-table.md +3 -0
- package/docs/components/ui/devalok-grain.md +55 -0
- package/docs/components/ui/icon-button.md +12 -5
- package/docs/components/ui/icon-context.md +38 -0
- package/docs/components/ui/icon-group.md +36 -0
- package/docs/components/ui/icon.md +47 -0
- package/docs/components/ui/input.md +32 -6
- package/docs/components/ui/progress.md +5 -0
- package/docs/components/ui/spinner.md +3 -0
- package/docs/components/ui/switch.md +13 -0
- package/llms-full.txt +672 -40
- package/llms.txt +46 -21
- package/package.json +7 -2
package/llms.txt
CHANGED
|
@@ -4,6 +4,13 @@
|
|
|
4
4
|
> Built on the same primitives as shadcn/ui but with key API differences.
|
|
5
5
|
> Read this file BEFORE writing any UI code. Do NOT guess from shadcn/ui knowledge.
|
|
6
6
|
|
|
7
|
+
## CHANGES (v0.30.0)
|
|
8
|
+
- **RichTextEditor `toolbar` prop** — `toolbar?: ToolbarItem[]` whitelist of toolbar items to display. Omit to show all (default). `ToolbarItem` type exported.
|
|
9
|
+
- **`@devalok/shilp-sutra-karm` removed** — Domain components moved to Karm app repo. npm package deprecated.
|
|
10
|
+
- **Warning dark mode fixed** — `warning-*` tokens now have proper dark mode values (higher chroma than category amber).
|
|
11
|
+
- **tailwind-merge fix** — All `text-ds-*` sizes now correctly registered. `cn('text-ds-lg', 'text-accent-11')` no longer strips the color.
|
|
12
|
+
- **AvatarGroup fixes** — Overflow badge text matches avatar size, indicator dots scale with size, aria-labels added.
|
|
13
|
+
|
|
7
14
|
## BREAKING CHANGES (v0.27.0 — Externalized Dependencies)
|
|
8
15
|
|
|
9
16
|
FilePreview and MarkdownViewer dependencies are now **external** (not bundled).
|
|
@@ -101,12 +108,11 @@ Same pattern for `border-surface-*`, `text-surface-*`, `ring-surface-*`.
|
|
|
101
108
|
|
|
102
109
|
**Server safety changes:** EmptyState, StatusBadge, Spinner are NO LONGER server-safe (they now use Framer Motion). Remove from RSC imports.
|
|
103
110
|
|
|
104
|
-
**Build:** `framer-motion` and `sonner` moved from `dependencies` to `devDependencies` (bundled at build time — no consumer install needed for core
|
|
111
|
+
**Build:** `framer-motion` and `sonner` moved from `dependencies` to `devDependencies` (bundled at build time — no consumer install needed for core).
|
|
105
112
|
|
|
106
113
|
**New APIs in v0.18.0:**
|
|
107
114
|
- Combobox: `accessibleLabel?: string` — custom aria-label for trigger (falls back to placeholder)
|
|
108
115
|
- Slider: multi-thumb support — pass array `defaultValue={[25, 75]}` for range sliders
|
|
109
|
-
- StreamingText (karm): `isComplete?: boolean` — debounces aria-live, announces only on completion
|
|
110
116
|
|
|
111
117
|
## CHANGES (v0.16.0)
|
|
112
118
|
- **DataTable server-side features**: `onSort` callback (manual sorting), `pagination` prop (server-side pagination with page/total/onPageChange), `selectedIds` + `selectableFilter` (controlled selection), `loading` shimmer, `emptyState` ReactNode, `singleExpand`, `stickyHeader`, `onRowClick`, `bulkActions` floating bar
|
|
@@ -243,7 +249,7 @@ pnpm add @devalok/shilp-sutra
|
|
|
243
249
|
|
|
244
250
|
Add to next.config.js:
|
|
245
251
|
```js
|
|
246
|
-
transpilePackages: ["@devalok/shilp-sutra", "@devalok/shilp-sutra-
|
|
252
|
+
transpilePackages: ["@devalok/shilp-sutra", "@devalok/shilp-sutra-brand"]
|
|
247
253
|
```
|
|
248
254
|
|
|
249
255
|
// Import components (barrel):
|
|
@@ -254,6 +260,9 @@ import { Button } from '@devalok/shilp-sutra/ui/button'
|
|
|
254
260
|
import { PageHeader } from '@devalok/shilp-sutra/composed/page-header'
|
|
255
261
|
import { TopBar } from '@devalok/shilp-sutra/shell/top-bar'
|
|
256
262
|
|
|
263
|
+
// Chat primitives (v0.29.0+):
|
|
264
|
+
import { MessageList, Message, SystemMessage, MessageInput, DateSeparator, UnreadSeparator, TypingIndicator } from '@devalok/shilp-sutra/ui/chat'
|
|
265
|
+
|
|
257
266
|
// AI command system (v0.25.0+):
|
|
258
267
|
import { CommandBar, AIConversation, BlockRenderer, AICommandProvider, DevadootIcon } from '@devalok/shilp-sutra/ai'
|
|
259
268
|
|
|
@@ -278,7 +287,7 @@ If you have shadcn/ui knowledge, these are the differences that WILL trip you up
|
|
|
278
287
|
| variant="destructive" | color="error" | Two-axis system: variant=shape, color=intent |
|
|
279
288
|
| size="default" | size="md" | All sizes: sm, md, lg (never "default") |
|
|
280
289
|
| <Select size="lg"> | <SelectTrigger size="lg"> | Size goes on trigger, NOT root |
|
|
281
|
-
| <Chip>
|
|
290
|
+
| <Chip> | <Badge onClick={...}> | Chip is deprecated, use Badge with onClick |
|
|
282
291
|
| useToast() + toast({ variant }) | toast.success('msg') | Imperative API, no hook needed |
|
|
283
292
|
| Badge variant="destructive" | Badge variant="solid" color="error" | Two-axis: variant + color |
|
|
284
293
|
| Alert + AlertTitle + AlertDescription | <Alert title="..." color="error"> | Single component, not compound |
|
|
@@ -292,25 +301,27 @@ Many components use TWO props where shadcn uses one:
|
|
|
292
301
|
- `color` controls INTENT/SEMANTICS: default, error, success, warning, info, etc.
|
|
293
302
|
|
|
294
303
|
Examples:
|
|
295
|
-
<Button variant="solid" color="error">Delete</Button>
|
|
296
|
-
<Button variant="
|
|
297
|
-
<
|
|
298
|
-
<
|
|
304
|
+
<Button variant="solid" color="error">Delete</Button> // red solid button
|
|
305
|
+
<Button variant="soft" color="warning">Pending</Button> // amber tinted button
|
|
306
|
+
<Button variant="outline" color="success">Approve</Button> // green outline button
|
|
307
|
+
<Badge variant="solid" color="success">Active</Badge> // green solid badge
|
|
308
|
+
<Alert variant="filled" color="warning">Warning!</Alert> // amber filled alert
|
|
299
309
|
|
|
300
|
-
Components with two-axis system: Button, Badge, Alert,
|
|
310
|
+
Components with two-axis system: Button, Badge, Alert, Banner, Progress, StatusBadge
|
|
301
311
|
|
|
302
312
|
## Component Quick Reference
|
|
303
313
|
|
|
304
314
|
### Inputs & Controls
|
|
305
|
-
- Button: variant(solid|
|
|
315
|
+
- Button: variant(solid|soft|outline|ghost|link) color(accent|error|success|warning|neutral) size(xs|sm|md|lg|compact-xs|compact-sm|compact-md|icon-xs|icon-sm|icon-md|icon-lg) shape(default|pill) weight(semibold|normal) + loading, startIcon, endIcon, asChild, processing?('ambient'|'working'|'urgent'|boolean — marching ants SVG border, forces soft variant), processingColor?('accent'|'error'|'success'|'warning'|'neutral'), processingDisabled?(boolean, default true — set false for cancel-by-click). onClickAsync auto-activates processing='working' during loading phase. Layout animation always on. Deprecated aliases still work: variant="default"→solid, variant="destructive"→solid+error, color="default"→accent
|
|
306
316
|
- IconButton: icon(ReactNode, required) shape(square|circle) size(sm|md|lg) + aria-label required
|
|
307
|
-
-
|
|
308
|
-
-
|
|
317
|
+
- Icon: `<Icon icon={IconPlus} />` — context-aware wrapper for Tabler icons. Size tiers: xs(14px) sm(16px) md(18px) lg(20px) xl(24px) 2xl(32px). Default: md. Stroke: light(1.5) regular(2) bold(2.5). Default: regular. Scales per size tier. Reads size from parent Button/IconGroup via IconContext. Explicit props override. Accessibility: aria-hidden by default. Pass label="Add item" for accessible icons. Animation: animate="spin|pulse|bounce|draw". `draw` renders SVG path-draw animation (check/X icons draw progressively via pathLength; other icons fall back to static). State machine: state="idle|loading|success|error". Button integration: startIcon={<Icon icon={IconPlus} />} (NOT raw <IconPlus />). IconGroup: <IconGroup size="sm" gap="tight"> for toolbar patterns.
|
|
318
|
+
- Input: size(xs|sm|md|lg) state(InputState) + startSection(ReactNode), endSection(ReactNode), startSectionClickable(bool), endSectionClickable(bool), startSectionType('icon'|'label'), endSectionType('icon'|'label'), wrapperClassName(string). Container-level focus ring wraps input + sections as one unit. Sections are pointer-events-none by default; use *SectionClickable for interactive content (clear buttons, toggles). Section type auto-inferred: strings→'label' (tinted bg + border separator), React elements→'icon' (fixed-width centered). Override with *SectionType. Flexbox section layout. Icons auto-size via IconProvider per input size. className targets <input>, wrapperClassName targets wrapper div. Deprecated aliases: startIcon→startSection, endIcon→endSection, inputVariants→inputWrapperVariants. Type: InputState = 'default' | 'error' | 'warning' | 'success'
|
|
319
|
+
- SearchInput: size(xs|sm|md|lg) + loading, onClear. Delegates to Input v2 sections internally.
|
|
309
320
|
- NumberInput: value + onValueChange, min, max, step (controlled only)
|
|
310
321
|
- Textarea: size(xs|sm|md|lg) state(default|error|warning|success)
|
|
311
322
|
- ColorInput: value(hex string) onChange(value) presets({hex,label}[]|string[]|false, default: 10 named colors) variant('default'|'inline') showPicker(boolean, default:true) defaultFormat('hex'|'rgb'|'hsl') align('start'|'center'|'end') disabled. Popover trigger opens interactive picker (react-colorful) + format switcher + preset swatches + undo/reset. Inline variant renders entire trigger as the color with contrast-aware text.
|
|
312
323
|
- Checkbox: checked, onCheckedChange, error(boolean), indeterminate(boolean)
|
|
313
|
-
- Switch: checked, onCheckedChange, error(boolean)
|
|
324
|
+
- Switch: checked, onCheckedChange, error(boolean), size(sm|md|lg), color(accent|success|warning), thumbIcon(ReactNode)
|
|
314
325
|
- RadioGroup > RadioGroupItem(value)
|
|
315
326
|
- Select > SelectTrigger(size: xs|sm|md|lg) > SelectValue; SelectContent > SelectItem(value)
|
|
316
327
|
- Toggle: variant(default|outline) size(sm|md|lg)
|
|
@@ -323,7 +334,7 @@ Components with two-axis system: Button, Badge, Alert, Chip, Banner, Progress, S
|
|
|
323
334
|
- Banner: color(info|success|warning|error|neutral) + actions?(ReactNode), onDismiss. `action` (singular) deprecated, use `actions`. Mobile flex-wrap for multiple buttons.
|
|
324
335
|
- Toast: imperative API via toast.success/error/warning/info/loading/message/undo/promise/upload/custom — REQUIRES <Toaster> at layout root
|
|
325
336
|
- Spinner: size(sm|md|lg) — renders with role="status"
|
|
326
|
-
- Progress: track size(sm|md|lg), indicator color(default|success|warning|error)
|
|
337
|
+
- Progress: track size(sm|md|lg), indicator color(default|success|warning|error), autoColor(boolean, auto-shifts color by value: 0-59=default, 60-84=warning, 85-100=success, >100=error)
|
|
327
338
|
|
|
328
339
|
NOTIFICATION SELECTION GUIDE:
|
|
329
340
|
- Alert: inline contextual feedback within a form or page section
|
|
@@ -331,8 +342,8 @@ NOTIFICATION SELECTION GUIDE:
|
|
|
331
342
|
- Toast: transient notification triggered by user action (needs <Toaster>, then call toast.success() etc.)
|
|
332
343
|
|
|
333
344
|
### Data Display
|
|
334
|
-
- Badge: variant(subtle|solid|outline) color(default|
|
|
335
|
-
- Chip:
|
|
345
|
+
- Badge: variant(subtle|solid|outline|soft) color(default|accent|error|success|warning|info|neutral + 7 category colors + custom) size(xs|sm|md|lg) + onClick, onDismiss, selected, disabled, dot, startIcon, endIcon, maxWidth, circle, asChild. Compound: Badge.Indicator(count, max, dot, color, invisible, showZero, placement, children), Badge.Group(max, gap, size, onOverflowClick, children). Custom colors: color="custom" + style={{'--badge-color':'#hex'}}. Grain-ready (has relative/overflow-hidden/isolate).
|
|
346
|
+
- Chip: DEPRECATED — Use `<Badge onClick={...}>` instead. Chip wrapper maps label prop to children for backward compat.
|
|
336
347
|
- Avatar: size(xs|sm|md|lg|xl) shape(circle|square|rounded) status?(AvatarStatus) ring?('lead'|'admin'|'client') badge?(number|'dot'|ReactNode) loading?(boolean) > AvatarImage + AvatarFallback(colorSeed?). Types: AvatarStatus = 'online'|'offline'|'busy'|'away', AvatarRing = 'none'|'lead'|'admin'|'client'. Fallback colors are deterministic from name hash (8 categorical). Online dot pulses. Badge pops in with MotionPop.
|
|
337
348
|
- Card: variant(default|elevated|outline|flat) interactive(boolean) accent?(left|top|right|bottom) accentColor?(default|secondary|error|success|warning|info) > CardHeader > CardTitle, CardDescription; CardContent; CardFooter
|
|
338
349
|
- Table > TableHeader > TableRow > TableHead; TableBody > TableRow > TableCell; TableFooter; TableCaption
|
|
@@ -343,6 +354,17 @@ NOTIFICATION SELECTION GUIDE:
|
|
|
343
354
|
- ColorSwatch: color(CSS string) size(sm|md|lg) shape(circle|square|rounded) ring(boolean) — for dynamic runtime colors
|
|
344
355
|
- StatusDot: status(healthy|warning|critical|neutral|inactive) size(sm|md|lg) pulse?(boolean, default true for healthy) label?(string)
|
|
345
356
|
- ProgressRing: value(number) max?(100) size(sm|md|lg) color(default|success|warning|error|info) showValue?(boolean) label?(string). Also: MultiProgressRing for concentric Activity Ring style
|
|
357
|
+
- DevalokGrain: Brand texture overlay — drop inside any element with `relative overflow-hidden isolate`. Props: intensity('subtle'|'medium'|'heavy'), surface('solid'|'soft'), sheen(boolean, inner highlight), animated(boolean, fade-in on mount), hoverIntensify(boolean, parent needs `group` class), tint(CSS color string for directional gradient). No gradient rendered without tint.
|
|
358
|
+
|
|
359
|
+
### Chat Primitives (ui/chat/)
|
|
360
|
+
Import: `@devalok/shilp-sutra/ui/chat`
|
|
361
|
+
- MessageList: children, autoScroll?(true), newMessageCount?(number, shows floating "N new" pill), onScrollToBottom?(), onLoadMore?(), isLoadingMore?(boolean), emptySlot?(ReactNode), headerSlot?(ReactNode). role="log" aria-live="polite".
|
|
362
|
+
- Message: COMPOUND — variant('flat'|'bubble') placement('start'|'end') highlight?('mention'|'internal') grouped?(boolean) deleted?(boolean) deletedText?(string). Sub-parts: Message.Avatar(src?, fallback?, icon?, size?('sm'|'md')), Message.Content, Message.Author(name, badge?, timestamp?, formattedTimestamp?, timestampFormat?), Message.Body, Message.EditableBody(content, onSave, onCancel?, canEdit?, renderContent?), Message.Reactions(reactions[{emoji,count,reacted}], onReact), Message.Actions(children, delay?), Message.Action(icon, label, onClick, variant?('default'|'danger'))
|
|
363
|
+
- SystemMessage: variant('event'|'alert') icon?(ReactNode) timestamp?(string) children
|
|
364
|
+
- MessageInput: onSubmit(text=>void), placeholder?, disabled?, isStreaming?(boolean, shows stop button), onCancel?(), leadingSlot?, trailingSlot?, disclaimer?(string), sendIcon?(ReactNode). Enter to send, Shift+Enter for newline.
|
|
365
|
+
- DateSeparator: date(Date|string), format?((date)=>string). Shows "Today", "Yesterday", or "Mar 15".
|
|
366
|
+
- UnreadSeparator: label?('NEW'), count?(number). Accent-colored horizontal rule.
|
|
367
|
+
- TypingIndicator: users({name, image?}[]). Shows animated bouncing dots + "Alice is typing..." / "Alice and Bob are typing..." / "Several people are typing..."
|
|
346
368
|
|
|
347
369
|
### Overlays
|
|
348
370
|
- Dialog > DialogTrigger; DialogContent > DialogHeader > DialogTitle, DialogDescription; [content]; DialogFooter
|
|
@@ -355,7 +377,7 @@ NOTIFICATION SELECTION GUIDE:
|
|
|
355
377
|
|
|
356
378
|
### Navigation
|
|
357
379
|
- Tabs > TabsList(variant: line|contained) > TabsTrigger(value); TabsContent(value) — variant propagates via context
|
|
358
|
-
- Accordion(type: single|multiple) > AccordionItem(value) > AccordionTrigger; AccordionContent
|
|
380
|
+
- Accordion(type: single|multiple) > AccordionItem(value) > AccordionTrigger(chevronPosition?: 'left'|'right', default 'right'); AccordionContent
|
|
359
381
|
- Breadcrumb > BreadcrumbList > BreadcrumbItem > BreadcrumbLink | BreadcrumbPage; BreadcrumbSeparator
|
|
360
382
|
- PaginationRoot > PaginationContent > PaginationItem > PaginationLink(isActive) | PaginationPrevious | PaginationNext | PaginationEllipsis
|
|
361
383
|
- DropdownMenu > DropdownMenuTrigger; DropdownMenuContent > DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuCheckboxItem, DropdownMenuRadioGroup > DropdownMenuRadioItem
|
|
@@ -378,8 +400,8 @@ NOTIFICATION SELECTION GUIDE:
|
|
|
378
400
|
### Composed Components
|
|
379
401
|
- ConfirmDialog: open, onOpenChange, title, description, onConfirm + confirmText, cancelText, color(default|error), loading
|
|
380
402
|
- PageHeader: title, subtitle, breadcrumbs[], actions(ReactNode)
|
|
381
|
-
- AvatarGroup: users(AvatarUser[]), max?(number), size?(xs|sm|md|lg|xl), showTooltip?, borderColor?('surface-base'|'surface-raised'), onOverflowClick?(), renderAvatar?((user,index)=>ReactNode), expandDirection?('left'|'right'), expandAmount?('compact'|'default'|'wide'). Type: AvatarUser = { name, image?, ring? }. GPU-composited hover expand via translateX. Use expandDirection="left" for right-aligned groups.
|
|
382
|
-
- StatusBadge: DISCRIMINATED UNION — pass status OR color, not both. status(active|pending|approved|rejected|completed|blocked|cancelled|draft) color(success|warning|error|info|neutral) size(sm|md)
|
|
403
|
+
- AvatarGroup: users(AvatarUser[]), max?(number), size?(xs|sm|md|lg|xl), showTooltip?, borderColor?('surface-base'|'surface-raised'), onOverflowClick?(), renderAvatar?((user,index)=>ReactNode), expandDirection?('left'|'right'), expandAmount?('compact'|'default'|'wide'). Type: AvatarUser = { name, image?, ring?, indicator?('lead'|'admin'|ReactNode) }. GPU-composited hover expand via translateX. Use expandDirection="left" for right-aligned groups. indicator renders a small dot on avatar: 'lead'=warning-9, 'admin'=accent-9, or custom ReactNode.
|
|
404
|
+
- StatusBadge: DISCRIMINATED UNION — pass status OR color, not both. status(active|pending|approved|rejected|completed|blocked|in-progress|review|cancelled|draft) color(success|warning|error|info|neutral) size(sm|md) onClick?(() => void, renders as button with auto chevron-down icon) icon?(ReactNode, custom trailing icon)
|
|
383
405
|
- ContentCard: variant(default|outline|ghost) padding(default|compact|spacious|none)
|
|
384
406
|
- EmptyState: icon(ReactNode or ComponentType), title(required), description, action(ReactNode), compact
|
|
385
407
|
- PriorityIndicator: priority(Priority) display(compact|full). Type: Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' | 'low' | 'medium' | 'high' | 'urgent'
|
|
@@ -394,7 +416,7 @@ NOTIFICATION SELECTION GUIDE:
|
|
|
394
416
|
- (UploadProgress REMOVED — upload tracking is now built into toast.upload())
|
|
395
417
|
- RichTextEditor: Tiptap editor — bold/italic/underline/strike/highlight, headings, blockquote, lists (bullet/ordered/task), code, links, images (paste/drop/upload), file attachments, @mentions, emoji picker + :shortcode:, text alignment, HR. Props: onImageUpload?, onFileUpload?, mentions?, onMentionSearch?, onMentionSelect?(item: MentionItem)
|
|
396
418
|
- RichTextViewer: read-only renderer for RichTextEditor HTML content (renders all above content types)
|
|
397
|
-
- ActivityFeed: items(ActivityItem[]), onLoadMore, loading, hasMore, emptyState, compact, maxInitialItems, groupBy?('time'|'none'), groupLabels?({ today, yesterday, thisWeek, older }). Type: ActivityItem = { id, actor?, action, timestamp, icon?, color?, detail? }. Utility: groupItemsByTime(items, labels) exported.
|
|
419
|
+
- ActivityFeed: items(ActivityItem[]), onLoadMore, loading, hasMore, emptyState, compact, maxInitialItems, groupBy?('time'|'none'), groupLabels?({ today, yesterday, thisWeek, older }), renderItem?((item, index) => ReactNode|undefined, custom renderer per item — return ReactNode for custom, undefined for default). Type: ActivityItem = { id, actor?, action, timestamp, icon?, color?, detail? }. Utility: groupItemsByTime(items, labels) exported.
|
|
398
420
|
- CommandPalette: open, defaultOpen, onOpenChange (controlled/uncontrolled), keybinding(string|string[]|false), maxHeight, emptyState(ReactNode), footerHints(FooterHint[]|false). CommandItem: label(string|ReactNode), description(string|ReactNode), renderLabel(query=>ReactNode), filterValue(string), shortcut(rendered as keycap badges). Keyboard shortcuts rendered per-key with platform-aware Cmd/Ctrl. Reduced-motion support via MotionProvider.
|
|
399
421
|
- MemberPicker: thin wrapper around MultiSelectPopover with Avatar rendering
|
|
400
422
|
- MultiSelectPopover: items/groups, value, onValueChange, searchPlaceholder, onSearch?(async), renderItem?, emptyMessage, maxSelections. Generic multi-select popover with search + checkmarks.
|
|
@@ -468,11 +490,14 @@ DO NOT use barrel imports in Server Components — they include "use client" com
|
|
|
468
490
|
- DO NOT use variant="destructive" — use color="error"
|
|
469
491
|
- DO NOT use size="default" — use size="md" (or sm, lg)
|
|
470
492
|
- DO NOT put size on <Select> — put it on <SelectTrigger size="md">
|
|
471
|
-
- DO NOT use <Chip>
|
|
493
|
+
- DO NOT use <Chip> — Chip is deprecated. Use <Badge onClick={...}> instead
|
|
472
494
|
- DO NOT use useToast() hook — use import { toast } from '@devalok/shilp-sutra/ui/toast' (imperative)
|
|
473
495
|
- DO NOT use toast({ title, color }) object syntax — use toast.success('message'), toast.error('message'), etc.
|
|
474
496
|
- DO NOT call toast() without <Toaster /> mounted at your layout root
|
|
475
497
|
- DO NOT use <Alert><AlertTitle>...</AlertTitle></Alert> — use <Alert title="..." />
|
|
476
498
|
- DO NOT import from barrel in Next.js Server Components — use per-component imports
|
|
477
499
|
- DO NOT use variant="secondary" on Button — use variant="outline" or variant="ghost"
|
|
500
|
+
- DO NOT use variant="default" on Button — use variant="solid" (deprecated alias, still works)
|
|
501
|
+
- DO NOT use variant="destructive" on Button — use variant="solid" color="error" (deprecated alias, still works)
|
|
502
|
+
- DO NOT use color="default" on Button — use color="accent" (deprecated alias, still works)
|
|
478
503
|
- DO NOT put variant on individual TabsTrigger — put it on TabsList (propagates via context)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devalok/shilp-sutra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.30.0",
|
|
4
4
|
"description": "Devalok Design System — tokens, components, and patterns for Next.js",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -363,6 +363,11 @@
|
|
|
363
363
|
"default": "./dist/ui/tree-view/index.js",
|
|
364
364
|
"types": "./dist/ui/tree-view/index.d.ts"
|
|
365
365
|
},
|
|
366
|
+
"./ui/chat": {
|
|
367
|
+
"import": "./dist/ui/chat/index.js",
|
|
368
|
+
"default": "./dist/ui/chat/index.js",
|
|
369
|
+
"types": "./dist/ui/chat/index.d.ts"
|
|
370
|
+
},
|
|
366
371
|
"./composed": {
|
|
367
372
|
"import": "./dist/composed/index.js",
|
|
368
373
|
"default": "./dist/composed/index.js",
|
|
@@ -815,7 +820,7 @@
|
|
|
815
820
|
"tailwind-merge": "^3.0.1"
|
|
816
821
|
},
|
|
817
822
|
"engines": {
|
|
818
|
-
"node": ">=20.
|
|
823
|
+
"node": ">=20.19.0"
|
|
819
824
|
},
|
|
820
825
|
"packageManager": "pnpm@10.0.0"
|
|
821
826
|
}
|