@devalok/shilp-sutra 0.31.0 → 0.33.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/LICENSE +21 -0
- package/dist/_chunks/badge-group.js +123 -172
- package/dist/_chunks/date-time-picker.js +851 -0
- package/dist/_chunks/document-preview.js +92 -0
- package/dist/_chunks/file-preview.js +511 -0
- package/dist/_chunks/image-preview.js +90 -0
- package/dist/_chunks/mention-suggestion.js +362 -0
- package/dist/_chunks/primitives.js +109 -109
- package/dist/_chunks/stat-row.js +144 -124
- package/dist/_chunks/tiptap.js +11595 -7731
- package/dist/_chunks/use-calendar.js +117 -890
- package/dist/_chunks/vendor-client.js +1055 -894
- package/dist/ai/block-renderer.d.ts +2 -1
- package/dist/ai/block-renderer.d.ts.map +1 -1
- package/dist/ai/block-renderer.js +30 -29
- package/dist/ai/blocks/block-table.d.ts.map +1 -1
- package/dist/ai/blocks/confirm.d.ts.map +1 -1
- package/dist/ai/blocks/divider.d.ts.map +1 -1
- package/dist/ai/blocks/error.d.ts.map +1 -1
- package/dist/ai/blocks/info.d.ts.map +1 -1
- package/dist/ai/blocks/loading.d.ts.map +1 -1
- package/dist/ai/blocks/stat-row.d.ts.map +1 -1
- package/dist/ai/blocks/success.d.ts.map +1 -1
- package/dist/ai/blocks/text.d.ts.map +1 -1
- package/dist/ai/command-bar.d.ts +18 -0
- package/dist/ai/command-bar.d.ts.map +1 -1
- package/dist/ai/command-bar.js +126 -125
- package/dist/ai/conversation.d.ts +13 -1
- package/dist/ai/conversation.d.ts.map +1 -1
- package/dist/ai/conversation.js +78 -78
- package/dist/ai/types.d.ts +0 -1
- package/dist/ai/types.d.ts.map +1 -1
- package/dist/ai/types.js +0 -1
- package/dist/composed/bulk-action-bar.d.ts +6 -4
- package/dist/composed/bulk-action-bar.d.ts.map +1 -1
- package/dist/composed/bulk-action-bar.js +102 -58
- package/dist/composed/command-palette.d.ts +9 -0
- package/dist/composed/command-palette.d.ts.map +1 -1
- package/dist/composed/command-palette.js +68 -68
- package/dist/composed/confirm-dialog.d.ts +1 -1
- package/dist/composed/confirm-dialog.d.ts.map +1 -1
- package/dist/composed/confirm-dialog.js +10 -10
- package/dist/composed/date-picker/date-picker.d.ts +11 -1
- package/dist/composed/date-picker/date-picker.d.ts.map +1 -1
- package/dist/composed/date-picker/index.js +9 -8
- package/dist/composed/date-picker/month-picker.d.ts.map +1 -1
- package/dist/composed/date-picker/year-picker.d.ts.map +1 -1
- package/dist/composed/deadline-indicator.d.ts +1 -1
- package/dist/composed/deadline-indicator.d.ts.map +1 -1
- package/dist/composed/deadline-indicator.js +39 -36
- package/dist/composed/emoji-picker.d.ts +14 -2
- package/dist/composed/emoji-picker.d.ts.map +1 -1
- package/dist/composed/emoji-picker.js +66 -55
- package/dist/composed/error-boundary.d.ts +21 -1
- package/dist/composed/error-boundary.d.ts.map +1 -1
- package/dist/composed/error-boundary.js +47 -32
- package/dist/composed/extensions/emoji-data.d.ts +35 -0
- package/dist/composed/extensions/emoji-data.d.ts.map +1 -0
- package/dist/composed/extensions/emoji-node.d.ts +11 -0
- package/dist/composed/extensions/emoji-node.d.ts.map +1 -0
- package/dist/composed/extensions/emoji-suggestion.d.ts +4 -6
- package/dist/composed/extensions/emoji-suggestion.d.ts.map +1 -1
- package/dist/composed/extensions/slash-command.d.ts +35 -0
- package/dist/composed/extensions/slash-command.d.ts.map +1 -0
- package/dist/composed/file-preview/audio-preview.d.ts +7 -0
- package/dist/composed/file-preview/audio-preview.d.ts.map +1 -0
- package/dist/composed/file-preview/document-preview.d.ts +7 -0
- package/dist/composed/file-preview/document-preview.d.ts.map +1 -0
- package/dist/composed/file-preview/embed-preview.d.ts +7 -0
- package/dist/composed/file-preview/embed-preview.d.ts.map +1 -0
- package/dist/composed/file-preview/image-preview.d.ts +7 -0
- package/dist/composed/file-preview/image-preview.d.ts.map +1 -0
- package/dist/composed/file-preview/shared.d.ts +20 -0
- package/dist/composed/file-preview/shared.d.ts.map +1 -0
- package/dist/composed/file-preview/video-preview.d.ts +6 -0
- package/dist/composed/file-preview/video-preview.d.ts.map +1 -0
- package/dist/composed/file-preview.d.ts.map +1 -1
- package/dist/composed/file-preview.js +10 -662
- package/dist/composed/filter-bar.d.ts +10 -2
- package/dist/composed/filter-bar.d.ts.map +1 -1
- package/dist/composed/filter-bar.js +42 -43
- package/dist/composed/form-section.d.ts +1 -1
- package/dist/composed/form-section.d.ts.map +1 -1
- package/dist/composed/form-section.js +22 -21
- package/dist/composed/index.d.ts +9 -3
- package/dist/composed/index.d.ts.map +1 -1
- package/dist/composed/index.js +79 -69
- package/dist/composed/inline-edit.d.ts +1 -1
- package/dist/composed/inline-edit.d.ts.map +1 -1
- package/dist/composed/inline-edit.js +33 -32
- package/dist/composed/markdown-viewer.d.ts +1 -1
- package/dist/composed/markdown-viewer.d.ts.map +1 -1
- package/dist/composed/markdown-viewer.js +60 -59
- package/dist/composed/master-detail.d.ts +11 -7
- package/dist/composed/master-detail.d.ts.map +1 -1
- package/dist/composed/master-detail.js +123 -84
- package/dist/composed/responsive-overlay.d.ts +8 -0
- package/dist/composed/responsive-overlay.d.ts.map +1 -1
- package/dist/composed/rich-chat-input/attachment-strip.d.ts +15 -0
- package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/audio-player.d.ts +11 -0
- package/dist/composed/rich-chat-input/audio-player.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/audio-waveform.d.ts +24 -0
- package/dist/composed/rich-chat-input/audio-waveform.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/chat-toolbar.d.ts +51 -0
- package/dist/composed/rich-chat-input/chat-toolbar.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/recording-overlay.d.ts +15 -0
- package/dist/composed/rich-chat-input/recording-overlay.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/reply-banner.d.ts +8 -0
- package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/schedule-send.d.ts +22 -0
- package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -0
- package/dist/composed/rich-chat-input/use-voice-recorder.d.ts +18 -0
- package/dist/composed/rich-chat-input/use-voice-recorder.d.ts.map +1 -0
- package/dist/composed/rich-chat-input.d.ts +91 -0
- package/dist/composed/rich-chat-input.d.ts.map +1 -0
- package/dist/composed/rich-chat-input.js +1861 -0
- package/dist/composed/rich-text-editor.d.ts +14 -3
- package/dist/composed/rich-text-editor.d.ts.map +1 -1
- package/dist/composed/rich-text-editor.js +278 -447
- package/dist/composed/schedule-view.d.ts +9 -1
- package/dist/composed/schedule-view.d.ts.map +1 -1
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +8 -4
- package/dist/hooks/use-touch-device.d.ts +12 -0
- package/dist/hooks/use-touch-device.d.ts.map +1 -0
- package/dist/hooks/use-touch-device.js +13 -0
- package/dist/hooks/use-viewport-height.d.ts +11 -0
- package/dist/hooks/use-viewport-height.d.ts.map +1 -0
- package/dist/hooks/use-viewport-height.js +16 -0
- package/dist/shell/bottom-navbar.d.ts.map +1 -1
- package/dist/shell/bottom-navbar.js +72 -63
- package/dist/shell/command-registry.d.ts.map +1 -1
- package/dist/shell/notification-center.d.ts.map +1 -1
- package/dist/shell/notification-center.js +77 -77
- package/dist/shell/top-bar.d.ts +2 -2
- package/dist/shell/top-bar.d.ts.map +1 -1
- package/dist/shell/top-bar.js +61 -60
- package/dist/tailwind/index.cjs +51 -7
- package/dist/tailwind/preset.d.ts.map +1 -1
- package/dist/tailwind/preset.js +51 -7
- package/dist/tokens/primitives.css +3 -1
- package/dist/tokens/semantic.css +16 -13
- package/dist/ui/autocomplete.d.ts.map +1 -1
- package/dist/ui/autocomplete.js +38 -39
- package/dist/ui/badge.d.ts +104 -2
- package/dist/ui/badge.d.ts.map +1 -1
- package/dist/ui/banner.d.ts.map +1 -1
- package/dist/ui/banner.js +8 -7
- package/dist/ui/button-group.d.ts +27 -37
- package/dist/ui/button-group.d.ts.map +1 -1
- package/dist/ui/button-group.js +95 -29
- package/dist/ui/button.d.ts +2 -2
- package/dist/ui/button.d.ts.map +1 -1
- package/dist/ui/button.js +118 -134
- package/dist/ui/card.js +24 -24
- package/dist/ui/charts/area-chart.d.ts +2 -0
- package/dist/ui/charts/area-chart.d.ts.map +1 -1
- package/dist/ui/charts/bar-chart.d.ts +2 -0
- package/dist/ui/charts/bar-chart.d.ts.map +1 -1
- package/dist/ui/charts/chart-container.d.ts +2 -0
- package/dist/ui/charts/chart-container.d.ts.map +1 -1
- package/dist/ui/charts/index.js +583 -577
- package/dist/ui/charts/line-chart.d.ts +2 -0
- package/dist/ui/charts/line-chart.d.ts.map +1 -1
- package/dist/ui/charts/pie-chart.d.ts +2 -0
- package/dist/ui/charts/pie-chart.d.ts.map +1 -1
- package/dist/ui/charts/radar-chart.d.ts +2 -0
- package/dist/ui/charts/radar-chart.d.ts.map +1 -1
- package/dist/ui/checkbox.d.ts +2 -0
- package/dist/ui/checkbox.d.ts.map +1 -1
- package/dist/ui/checkbox.js +36 -27
- package/dist/ui/color-input.js +5 -5
- package/dist/ui/combobox.d.ts +6 -1
- package/dist/ui/combobox.d.ts.map +1 -1
- package/dist/ui/combobox.js +1 -1
- package/dist/ui/context-menu.js +1 -1
- package/dist/ui/data-table-body.d.ts +12 -0
- package/dist/ui/data-table-body.d.ts.map +1 -0
- package/dist/ui/data-table-body.js +219 -0
- package/dist/ui/data-table-bulk-actions.d.ts +19 -0
- package/dist/ui/data-table-bulk-actions.d.ts.map +1 -0
- package/dist/ui/data-table-bulk-actions.js +61 -0
- package/dist/ui/data-table-card.d.ts +9 -0
- package/dist/ui/data-table-card.d.ts.map +1 -0
- package/dist/ui/data-table-card.js +73 -0
- package/dist/ui/data-table-context.d.ts +62 -0
- package/dist/ui/data-table-context.d.ts.map +1 -0
- package/dist/ui/data-table-context.js +48 -0
- package/dist/ui/data-table-header.d.ts +10 -0
- package/dist/ui/data-table-header.d.ts.map +1 -0
- package/dist/ui/data-table-header.js +141 -0
- package/dist/ui/data-table-pagination.d.ts +13 -0
- package/dist/ui/data-table-pagination.d.ts.map +1 -0
- package/dist/ui/data-table-pagination.js +84 -0
- package/dist/ui/data-table.d.ts +11 -9
- package/dist/ui/data-table.d.ts.map +1 -1
- package/dist/ui/data-table.js +258 -573
- package/dist/ui/dialog.d.ts +6 -2
- package/dist/ui/dialog.d.ts.map +1 -1
- package/dist/ui/dialog.js +84 -82
- package/dist/ui/dropdown-menu.js +1 -1
- package/dist/ui/hover-card.d.ts +7 -0
- package/dist/ui/hover-card.d.ts.map +1 -1
- package/dist/ui/hover-card.js +3 -3
- package/dist/ui/icon-group.d.ts +2 -4
- package/dist/ui/icon-group.d.ts.map +1 -1
- package/dist/ui/icon-group.js +22 -23
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/index.js +324 -327
- package/dist/ui/label.js +1 -1
- package/dist/ui/lib/bottom-sheet.d.ts +16 -0
- package/dist/ui/lib/bottom-sheet.d.ts.map +1 -0
- package/dist/ui/menubar.d.ts.map +1 -1
- package/dist/ui/menubar.js +64 -73
- package/dist/ui/navigation-menu.d.ts.map +1 -1
- package/dist/ui/navigation-menu.js +40 -44
- package/dist/ui/number-input.d.ts.map +1 -1
- package/dist/ui/number-input.js +19 -17
- package/dist/ui/popover.d.ts.map +1 -1
- package/dist/ui/popover.js +107 -32
- package/dist/ui/progress-ring.d.ts.map +1 -1
- package/dist/ui/progress-ring.js +80 -80
- package/dist/ui/progress.js +4 -4
- package/dist/ui/radio.d.ts +5 -2
- package/dist/ui/radio.d.ts.map +1 -1
- package/dist/ui/radio.js +29 -20
- package/dist/ui/search-input.d.ts.map +1 -1
- package/dist/ui/search-input.js +13 -12
- package/dist/ui/segmented-control.d.ts +6 -108
- package/dist/ui/segmented-control.d.ts.map +1 -1
- package/dist/ui/segmented-control.js +86 -272
- package/dist/ui/select.js +5 -5
- package/dist/ui/separator.js +5 -5
- package/dist/ui/sheet.d.ts +2 -0
- package/dist/ui/sheet.d.ts.map +1 -1
- package/dist/ui/sheet.js +102 -84
- package/dist/ui/sidebar.d.ts.map +1 -1
- package/dist/ui/sidebar.js +200 -175
- package/dist/ui/slider.js +14 -14
- package/dist/ui/split-button.d.ts +45 -0
- package/dist/ui/split-button.d.ts.map +1 -0
- package/dist/ui/split-button.js +282 -0
- package/dist/ui/status-dot.js +8 -8
- package/dist/ui/stepper.d.ts.map +1 -1
- package/dist/ui/stepper.js +33 -31
- package/dist/ui/switch.js +3 -3
- package/dist/ui/tabs.js +6 -6
- package/dist/ui/toast-types.d.ts +0 -1
- package/dist/ui/toast-types.d.ts.map +1 -1
- package/dist/ui/toast-types.js +0 -1
- package/dist/ui/toast.d.ts.map +1 -1
- package/dist/ui/toast.js +156 -150
- package/dist/ui/toggle-group.js +1 -1
- package/dist/ui/toggle.js +1 -1
- package/dist/ui/tooltip.js +3 -3
- package/docs/components/composed/emoji-picker.md +9 -0
- package/docs/components/composed/rich-chat-input.md +88 -0
- package/docs/components/composed/rich-text-editor.md +5 -0
- package/docs/components/ui/button-group.md +9 -0
- package/docs/components/ui/button.md +4 -0
- package/docs/components/ui/data-table-body.md +13 -0
- package/docs/components/ui/data-table-bulk-actions.md +13 -0
- package/docs/components/ui/data-table-card.md +13 -0
- package/docs/components/ui/data-table-context.md +13 -0
- package/docs/components/ui/data-table-header.md +13 -0
- package/docs/components/ui/data-table-pagination.md +13 -0
- package/docs/components/ui/split-button.md +41 -0
- package/llms-full.txt +235 -48
- package/llms.txt +54 -2
- package/package.json +30 -31
- package/dist/ui/chip.d.ts +0 -19
- package/dist/ui/chip.d.ts.map +0 -1
- package/dist/ui/chip.js +0 -14
- package/dist/ui/lib/use-ripple.d.ts +0 -14
- package/dist/ui/lib/use-ripple.d.ts.map +0 -1
package/dist/ui/tooltip.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as e, Fragment as h } from "react/jsx-runtime";
|
|
3
3
|
import * as o from "react";
|
|
4
|
-
import {
|
|
4
|
+
import { aK as y, aL as f, aM as C, aN as u, aO as g } from "../_chunks/primitives.js";
|
|
5
5
|
import { cn as P } from "./lib/utils.js";
|
|
6
6
|
import { tweens as T, springs as O } from "./lib/motion.js";
|
|
7
7
|
import { A as N, m as b } from "../_chunks/framer.js";
|
|
@@ -27,7 +27,7 @@ const m = o.createContext({ open: !1 }), M = ({
|
|
|
27
27
|
return /* @__PURE__ */ e(w, { children: /* @__PURE__ */ e(m.Provider, { value: x, children: /* @__PURE__ */ e(g, { open: n, onOpenChange: v, ...a }) }) });
|
|
28
28
|
};
|
|
29
29
|
M.displayName = "Tooltip";
|
|
30
|
-
const
|
|
30
|
+
const K = C, A = {
|
|
31
31
|
top: { y: 4 },
|
|
32
32
|
bottom: { y: -4 },
|
|
33
33
|
left: { x: 4 },
|
|
@@ -65,5 +65,5 @@ export {
|
|
|
65
65
|
M as Tooltip,
|
|
66
66
|
R as TooltipContent,
|
|
67
67
|
F as TooltipProvider,
|
|
68
|
-
|
|
68
|
+
K as TooltipTrigger
|
|
69
69
|
};
|
|
@@ -41,3 +41,12 @@ EmojiPicker, EmojiPickerPopover
|
|
|
41
41
|
- Wraps `@emoji-mart/react` which is lazy-loaded — shows a Skeleton placeholder while loading
|
|
42
42
|
- `theme="auto"` reads the `.dark` class on `<html>` to pick light/dark
|
|
43
43
|
- EmojiPickerPopover auto-closes after selection
|
|
44
|
+
|
|
45
|
+
## Changes
|
|
46
|
+
|
|
47
|
+
### v0.33.0
|
|
48
|
+
- **Added** `set` prop on EmojiPicker and EmojiPickerPopover — `EmojiSet` type: 'native' | 'apple' | 'google' | 'twitter' | 'facebook'
|
|
49
|
+
- **Added** `EmojiNode` TipTap extension — inline atom node with spritesheet rendering for consistent emoji art styles
|
|
50
|
+
- **Added** `createEmojiSuggestion(set?)` factory — replaces `EmojiSuggestion` named export
|
|
51
|
+
- **Added** `EmojiSet` type exported from barrel
|
|
52
|
+
- **Breaking** `EmojiSuggestion` named export removed — use `createEmojiSuggestion()` factory
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# RichChatInput
|
|
2
|
+
|
|
3
|
+
- Import: @devalok/shilp-sutra/composed/rich-chat-input
|
|
4
|
+
- Server-safe: No
|
|
5
|
+
- Category: composed
|
|
6
|
+
|
|
7
|
+
Compact rich text chat input for unified human+AI workspaces. Built on TipTap.
|
|
8
|
+
|
|
9
|
+
## Props
|
|
10
|
+
|
|
11
|
+
### RichChatInputProps
|
|
12
|
+
onSubmit: (html: string, plainText: string) => void (REQUIRED)
|
|
13
|
+
placeholder: string (default: "Type a message...")
|
|
14
|
+
disabled: boolean (default: false)
|
|
15
|
+
variant: 'compact' | 'expanded' | 'minimal' (default: 'compact')
|
|
16
|
+
maxRows: number
|
|
17
|
+
enterBehavior: 'send' | 'newline' (default: 'send')
|
|
18
|
+
maxLength: number — enables character counter
|
|
19
|
+
mentions: MentionItem[] — static list for @mention autocomplete
|
|
20
|
+
onMentionSearch: (query: string) => Promise<MentionItem[]> — async search
|
|
21
|
+
onMentionSelect: (item: MentionItem) => void
|
|
22
|
+
onFileUpload: (file: File) => Promise<{ url: string; name: string; size: number }>
|
|
23
|
+
onImageUpload: (file: File) => Promise<string>
|
|
24
|
+
slashCommands: SlashCommandGroup[] — enables / command palette
|
|
25
|
+
onTyping: (isTyping: boolean) => void — typing indicator callback
|
|
26
|
+
onEmpty: (isEmpty: boolean) => void
|
|
27
|
+
isStreaming: boolean (default: false) — shows stop button instead of send
|
|
28
|
+
onCancel: () => void — called when stop button is clicked
|
|
29
|
+
leadingSlot: ReactNode — rendered above the editor
|
|
30
|
+
trailingSlot: ReactNode — rendered below the toolbar
|
|
31
|
+
disclaimer: string — small text below the input
|
|
32
|
+
toolbar: boolean | ChatToolbarItem[] (default: true)
|
|
33
|
+
|
|
34
|
+
ChatToolbarItem: 'bold' | 'italic' | 'underline' | 'strike' | 'highlight' | 'code' | 'bulletList' | 'orderedList' | 'mention' | 'emoji' | 'attach' | 'slash'
|
|
35
|
+
|
|
36
|
+
MentionItem: { id: string; label: string; avatar?: string }
|
|
37
|
+
|
|
38
|
+
SlashCommand: { id: string; label: string; description?: string; icon?: ComponentType; action: (editor: Editor) => void }
|
|
39
|
+
|
|
40
|
+
SlashCommandGroup: { label: string; commands: SlashCommand[] }
|
|
41
|
+
|
|
42
|
+
## Variants
|
|
43
|
+
- `compact` (default) — 2-3 lines, inline toolbar
|
|
44
|
+
- `expanded` — 5+ lines, always-visible toolbar, suited for AI prompts
|
|
45
|
+
- `minimal` — single line, toolbar appears on focus
|
|
46
|
+
|
|
47
|
+
## Example
|
|
48
|
+
```jsx
|
|
49
|
+
<RichChatInput
|
|
50
|
+
onSubmit={(html, text) => sendMessage(html)}
|
|
51
|
+
mentions={teamMembers}
|
|
52
|
+
onFileUpload={uploadFile}
|
|
53
|
+
slashCommands={[{ label: 'Actions', commands: [...] }]}
|
|
54
|
+
/>
|
|
55
|
+
|
|
56
|
+
<RichChatInput
|
|
57
|
+
variant="expanded"
|
|
58
|
+
onSubmit={handleSubmit}
|
|
59
|
+
maxLength={2000}
|
|
60
|
+
disclaimer="AI-generated content may be inaccurate."
|
|
61
|
+
/>
|
|
62
|
+
|
|
63
|
+
<RichChatInput
|
|
64
|
+
variant="minimal"
|
|
65
|
+
enterBehavior="newline"
|
|
66
|
+
onSubmit={handleReply}
|
|
67
|
+
/>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Gotchas
|
|
71
|
+
- Tiptap is bundled — no need to install `@tiptap/*` packages separately
|
|
72
|
+
- Enter sends by default; use `enterBehavior="newline"` for long-form composition (Cmd/Ctrl+Enter always sends)
|
|
73
|
+
- `maxLength` enables both a character limit and the visual counter in the toolbar
|
|
74
|
+
- File/image upload buttons only appear when the corresponding handler is provided
|
|
75
|
+
- Slash command button only appears when `slashCommands` is provided
|
|
76
|
+
- Mention button only appears when `mentions` or `onMentionSearch` is provided
|
|
77
|
+
|
|
78
|
+
## Changes
|
|
79
|
+
### v0.33.0
|
|
80
|
+
- **Added** Custom EmojiNode with spritesheet rendering — `emojiSet` prop
|
|
81
|
+
- **Added** `onSchedule` prop — schedule send with smart presets + DateTimePicker, SplitButton UX
|
|
82
|
+
- **Added** `actionButton` prop — composable left-side button (replaces default attach, or pass false to hide)
|
|
83
|
+
- **Added** Animated mic ↔ send button transitions (AnimatePresence)
|
|
84
|
+
- **Changed** Voice recording buttons from outline to soft variant
|
|
85
|
+
- **Fixed** ToolbarButton width for custom-width buttons (e.g. "Refine" with text label)
|
|
86
|
+
|
|
87
|
+
### v0.32.0
|
|
88
|
+
- Initial release
|
|
@@ -55,6 +55,11 @@ MentionItem: { id: string; label: string; avatar?: string }
|
|
|
55
55
|
- Features: bold, italic, underline, strikethrough, highlight, headings, blockquote, lists, task lists, code, links, images, file attachments, mentions, emoji, text alignment, horizontal rule
|
|
56
56
|
|
|
57
57
|
## Changes
|
|
58
|
+
### v0.33.0
|
|
59
|
+
- **Added** `emojiSet` prop — `EmojiSet` type for consistent emoji art style rendering
|
|
60
|
+
- **Changed** TipTap v2 → v3 upgrade (useEditorState, immediatelyRender: false for SSR, ListKit)
|
|
61
|
+
- **Added** EmojiNode + createEmojiSuggestion(set) registered internally
|
|
62
|
+
|
|
58
63
|
### v0.30.0
|
|
59
64
|
- **Added** `toolbar` prop — whitelist of `ToolbarItem` names to control which toolbar buttons appear. Dividers render only between groups that have visible items. `ToolbarItem` type exported from barrel.
|
|
60
65
|
|
|
@@ -25,6 +25,15 @@
|
|
|
25
25
|
- Children can override variant/size individually
|
|
26
26
|
|
|
27
27
|
## Changes
|
|
28
|
+
### v0.33.0
|
|
29
|
+
- **Rebuilt** with compound component pattern — Button reads position from ButtonGroup context and applies border-radius inline
|
|
30
|
+
- **Added** `disabled` prop (propagates to all children via context)
|
|
31
|
+
- **Added** `attached` prop (default true; false = spaced with gap)
|
|
32
|
+
- **Added** `fullWidth` prop (stretch to fill container)
|
|
33
|
+
- **Added** Tonal divider elements between buttons for solid/soft/ghost variants
|
|
34
|
+
- **Added** Focus z-index isolation (focused button rises above siblings)
|
|
35
|
+
- **Fixed** Border-radius not working with custom `rounded-ds-*` design tokens
|
|
36
|
+
|
|
28
37
|
### v0.4.2
|
|
29
38
|
- **Fixed** `Omit<HTMLAttributes, 'color'>` resolves TS2320 conflict with CVA color prop
|
|
30
39
|
|
|
@@ -47,6 +47,10 @@
|
|
|
47
47
|
- Grain children (DevalokGrain) are auto-separated and rendered as direct button children for absolute positioning
|
|
48
48
|
|
|
49
49
|
## Changes
|
|
50
|
+
### v0.33.0
|
|
51
|
+
- **Added** `disabled` inherited from ButtonGroup context
|
|
52
|
+
- **Added** Position-aware border-radius when inside an attached ButtonGroup (compound component pattern)
|
|
53
|
+
|
|
50
54
|
### v0.29.0
|
|
51
55
|
- **Added** `soft` variant — tinted background, colored text (new middle ground between solid and ghost)
|
|
52
56
|
- **Added** 5 color options: `accent` (default), `error`, `success`, `warning`, `neutral` (replaces old `default`/`error`-only axis)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
2
|
+
|
|
3
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
8
|
+
See [DataTable](./data-table.md) for the public API.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
### v0.32.0
|
|
13
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
2
|
+
|
|
3
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
8
|
+
See [DataTable](./data-table.md) for the public API.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
### v0.32.0
|
|
13
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
2
|
+
|
|
3
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
8
|
+
See [DataTable](./data-table.md) for the public API.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
### v0.32.0
|
|
13
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
2
|
+
|
|
3
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
8
|
+
See [DataTable](./data-table.md) for the public API.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
### v0.32.0
|
|
13
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
2
|
+
|
|
3
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
8
|
+
See [DataTable](./data-table.md) for the public API.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
### v0.32.0
|
|
13
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
2
|
+
|
|
3
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
8
|
+
See [DataTable](./data-table.md) for the public API.
|
|
9
|
+
|
|
10
|
+
## Changes
|
|
11
|
+
|
|
12
|
+
### v0.32.0
|
|
13
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# SplitButton
|
|
2
|
+
|
|
3
|
+
A compound button that combines a primary action with a dropdown trigger, rendered as a single visual unit `[Action | ▼]`.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { SplitButton } from '@devalok/shilp-sutra'
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<SplitButton onClick={handleSave} dropdownContent={<SaveOptions />}>
|
|
15
|
+
Save
|
|
16
|
+
</SplitButton>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Props
|
|
20
|
+
|
|
21
|
+
| Prop | Type | Default | Description |
|
|
22
|
+
|------|------|---------|-------------|
|
|
23
|
+
| children | ReactNode | — | Primary action content (left side) |
|
|
24
|
+
| onClick | (e) => void | — | Primary click handler |
|
|
25
|
+
| dropdownContent | ReactNode | — | Content rendered inside floating dropdown |
|
|
26
|
+
| variant | 'solid' \| 'soft' \| 'outline' | 'solid' | Visual style |
|
|
27
|
+
| color | 'accent' \| 'error' \| 'success' \| 'warning' \| 'neutral' | 'accent' | Color scheme |
|
|
28
|
+
| size | 'xs' \| 'sm' \| 'md' \| 'icon-xs' \| 'icon-sm' \| 'icon-md' | 'md' | Size |
|
|
29
|
+
| triggerSide | 'left' \| 'right' | 'right' | Which side the dropdown chevron sits on |
|
|
30
|
+
| triggerWidth | number \| string | auto | Custom width for the trigger half |
|
|
31
|
+
| placement | Placement | 'top-end' | Floating UI placement for dropdown |
|
|
32
|
+
| disabled | boolean | false | Disable both halves |
|
|
33
|
+
| open | boolean | — | Controlled open state |
|
|
34
|
+
| onOpenChange | (open: boolean) => void | — | Open state callback |
|
|
35
|
+
| dropdownLabel | string | 'More options' | aria-label for trigger |
|
|
36
|
+
| dropdownIcon | ReactNode | chevron-down | Custom trigger icon |
|
|
37
|
+
|
|
38
|
+
## Changes
|
|
39
|
+
|
|
40
|
+
### v0.33.0
|
|
41
|
+
- **Added** Initial release
|
package/llms-full.txt
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
> All variant values and props verified from source CVA definitions.
|
|
6
6
|
>
|
|
7
7
|
> Package: @devalok/shilp-sutra
|
|
8
|
-
> Version: 0.
|
|
8
|
+
> Version: 0.33.0
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
@@ -667,6 +667,10 @@ Note: getFormFieldA11y() was removed in favor of useFormField() hook.
|
|
|
667
667
|
- Grain children (DevalokGrain) are auto-separated and rendered as direct button children for absolute positioning
|
|
668
668
|
|
|
669
669
|
## Changes
|
|
670
|
+
### v0.33.0
|
|
671
|
+
- **Added** `disabled` inherited from ButtonGroup context
|
|
672
|
+
- **Added** Position-aware border-radius when inside an attached ButtonGroup (compound component pattern)
|
|
673
|
+
|
|
670
674
|
### v0.29.0
|
|
671
675
|
- **Added** `soft` variant — tinted background, colored text (new middle ground between solid and ghost)
|
|
672
676
|
- **Added** 5 color options: `accent` (default), `error`, `success`, `warning`, `neutral` (replaces old `default`/`error`-only axis)
|
|
@@ -734,6 +738,15 @@ Note: getFormFieldA11y() was removed in favor of useFormField() hook.
|
|
|
734
738
|
- Children can override variant/size individually
|
|
735
739
|
|
|
736
740
|
## Changes
|
|
741
|
+
### v0.33.0
|
|
742
|
+
- **Rebuilt** with compound component pattern — Button reads position from ButtonGroup context and applies border-radius inline
|
|
743
|
+
- **Added** `disabled` prop (propagates to all children via context)
|
|
744
|
+
- **Added** `attached` prop (default true; false = spaced with gap)
|
|
745
|
+
- **Added** `fullWidth` prop (stretch to fill container)
|
|
746
|
+
- **Added** Tonal divider elements between buttons for solid/soft/ghost variants
|
|
747
|
+
- **Added** Focus z-index isolation (focused button rises above siblings)
|
|
748
|
+
- **Fixed** Border-radius not working with custom `rounded-ds-*` design tokens
|
|
749
|
+
|
|
737
750
|
### v0.4.2
|
|
738
751
|
- **Fixed** `Omit<HTMLAttributes, 'color'>` resolves TS2320 conflict with CVA color prop
|
|
739
752
|
|
|
@@ -1097,53 +1110,6 @@ Animated bouncing dots with a text description of who is typing.
|
|
|
1097
1110
|
- **Changed** Bouncy check indicator animation migrated to Framer Motion
|
|
1098
1111
|
- **Fixed** Icon sizing uses design tokens consistently
|
|
1099
1112
|
|
|
1100
|
-
### v0.1.0
|
|
1101
|
-
- **Added** Initial release
|
|
1102
|
-
# Chip
|
|
1103
|
-
|
|
1104
|
-
- Import: @devalok/shilp-sutra/ui/chip
|
|
1105
|
-
- Server-safe: No
|
|
1106
|
-
- Category: ui
|
|
1107
|
-
|
|
1108
|
-
## Props
|
|
1109
|
-
label: string (REQUIRED — use this, NOT children)
|
|
1110
|
-
variant: "subtle" | "outline"
|
|
1111
|
-
color: "default" | "primary" | "success" | "error" | "warning" | "info" | "teal" | "amber" | "slate" | "indigo" | "cyan" | "orange" | "emerald"
|
|
1112
|
-
size: "sm" | "md" | "lg"
|
|
1113
|
-
icon: ReactNode
|
|
1114
|
-
onClick: MouseEventHandler (renders as <button> when provided)
|
|
1115
|
-
onDismiss: () => void (shows X button)
|
|
1116
|
-
disabled: boolean
|
|
1117
|
-
|
|
1118
|
-
## Defaults
|
|
1119
|
-
variant="subtle", size="md", color="default"
|
|
1120
|
-
|
|
1121
|
-
## Example
|
|
1122
|
-
```jsx
|
|
1123
|
-
<Chip label="In Progress" color="warning" />
|
|
1124
|
-
<Chip label="React" color="info" onDismiss={() => removeFilter('react')} />
|
|
1125
|
-
```
|
|
1126
|
-
|
|
1127
|
-
## Additional Exports
|
|
1128
|
-
ChipGroup — re-exported AnimatePresence from framer-motion; wrap a list of Chips for coordinated exit animations
|
|
1129
|
-
|
|
1130
|
-
## Gotchas
|
|
1131
|
-
- MUST use label prop — children are NOT rendered
|
|
1132
|
-
- `<Chip>text</Chip>` is WRONG — use `<Chip label="text" />`
|
|
1133
|
-
- Wrap dynamic chip lists in `<ChipGroup>` for exit animations
|
|
1134
|
-
- `color="primary"` will be renamed to `color="brand"` in v1.0 — use `color="primary"` for now
|
|
1135
|
-
|
|
1136
|
-
## Changes
|
|
1137
|
-
### v0.19.1
|
|
1138
|
-
- **Fixed** `active:scale-95` tap feedback broken by Framer Motion transform override — replaced with `whileTap={{ scale: 0.95 }}`
|
|
1139
|
-
|
|
1140
|
-
### v0.4.2
|
|
1141
|
-
- **Changed** (BREAKING) `variant="filled"` renamed to `"subtle"`, `variant="outlined"` renamed to `"outline"`, `onDelete` renamed to `onDismiss`
|
|
1142
|
-
|
|
1143
|
-
### v0.1.1
|
|
1144
|
-
- **Fixed** `opacity-[var(--action-disabled-opacity,0.38)]` replaced with `opacity-action-disabled`
|
|
1145
|
-
- **Fixed** Converted from `React.createElement` to JSX syntax
|
|
1146
|
-
|
|
1147
1113
|
### v0.1.0
|
|
1148
1114
|
- **Added** Initial release
|
|
1149
1115
|
# Code
|
|
@@ -1547,6 +1513,84 @@ import { DataTable } from '@devalok/shilp-sutra/ui/data-table'
|
|
|
1547
1513
|
|
|
1548
1514
|
### v0.1.0
|
|
1549
1515
|
- **Added** Initial release
|
|
1516
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
1517
|
+
|
|
1518
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
1519
|
+
|
|
1520
|
+
## Usage
|
|
1521
|
+
|
|
1522
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
1523
|
+
See [DataTable](./data-table.md) for the public API.
|
|
1524
|
+
|
|
1525
|
+
## Changes
|
|
1526
|
+
|
|
1527
|
+
### v0.32.0
|
|
1528
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
1529
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
1530
|
+
|
|
1531
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
1532
|
+
|
|
1533
|
+
## Usage
|
|
1534
|
+
|
|
1535
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
1536
|
+
See [DataTable](./data-table.md) for the public API.
|
|
1537
|
+
|
|
1538
|
+
## Changes
|
|
1539
|
+
|
|
1540
|
+
### v0.32.0
|
|
1541
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
1542
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
1543
|
+
|
|
1544
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
1545
|
+
|
|
1546
|
+
## Usage
|
|
1547
|
+
|
|
1548
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
1549
|
+
See [DataTable](./data-table.md) for the public API.
|
|
1550
|
+
|
|
1551
|
+
## Changes
|
|
1552
|
+
|
|
1553
|
+
### v0.32.0
|
|
1554
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
1555
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
1556
|
+
|
|
1557
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
1558
|
+
|
|
1559
|
+
## Usage
|
|
1560
|
+
|
|
1561
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
1562
|
+
See [DataTable](./data-table.md) for the public API.
|
|
1563
|
+
|
|
1564
|
+
## Changes
|
|
1565
|
+
|
|
1566
|
+
### v0.32.0
|
|
1567
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
1568
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
1569
|
+
|
|
1570
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
1571
|
+
|
|
1572
|
+
## Usage
|
|
1573
|
+
|
|
1574
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
1575
|
+
See [DataTable](./data-table.md) for the public API.
|
|
1576
|
+
|
|
1577
|
+
## Changes
|
|
1578
|
+
|
|
1579
|
+
### v0.32.0
|
|
1580
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
1581
|
+
# $(echo $f | sed 's/-/ /g' | sed 's/\b\(.\)/\u\1/g')
|
|
1582
|
+
|
|
1583
|
+
> Internal sub-component of DataTable. Not exported to consumers.
|
|
1584
|
+
|
|
1585
|
+
## Usage
|
|
1586
|
+
|
|
1587
|
+
This component is used internally by `<DataTable>` and should not be imported directly.
|
|
1588
|
+
See [DataTable](./data-table.md) for the public API.
|
|
1589
|
+
|
|
1590
|
+
## Changes
|
|
1591
|
+
|
|
1592
|
+
### v0.32.0
|
|
1593
|
+
- Extracted from DataTable monolith into focused sub-component.
|
|
1550
1594
|
# DataTableToolbar
|
|
1551
1595
|
|
|
1552
1596
|
- Import: @devalok/shilp-sutra/ui/data-table-toolbar
|
|
@@ -2983,6 +3027,47 @@ const { size, stroke } = useIconContext()
|
|
|
2983
3027
|
|
|
2984
3028
|
### v0.1.0
|
|
2985
3029
|
- **Added** Initial release
|
|
3030
|
+
# SplitButton
|
|
3031
|
+
|
|
3032
|
+
A compound button that combines a primary action with a dropdown trigger, rendered as a single visual unit `[Action | ▼]`.
|
|
3033
|
+
|
|
3034
|
+
## Import
|
|
3035
|
+
|
|
3036
|
+
```ts
|
|
3037
|
+
import { SplitButton } from '@devalok/shilp-sutra'
|
|
3038
|
+
```
|
|
3039
|
+
|
|
3040
|
+
## Usage
|
|
3041
|
+
|
|
3042
|
+
```tsx
|
|
3043
|
+
<SplitButton onClick={handleSave} dropdownContent={<SaveOptions />}>
|
|
3044
|
+
Save
|
|
3045
|
+
</SplitButton>
|
|
3046
|
+
```
|
|
3047
|
+
|
|
3048
|
+
## Props
|
|
3049
|
+
|
|
3050
|
+
| Prop | Type | Default | Description |
|
|
3051
|
+
|------|------|---------|-------------|
|
|
3052
|
+
| children | ReactNode | — | Primary action content (left side) |
|
|
3053
|
+
| onClick | (e) => void | — | Primary click handler |
|
|
3054
|
+
| dropdownContent | ReactNode | — | Content rendered inside floating dropdown |
|
|
3055
|
+
| variant | 'solid' \| 'soft' \| 'outline' | 'solid' | Visual style |
|
|
3056
|
+
| color | 'accent' \| 'error' \| 'success' \| 'warning' \| 'neutral' | 'accent' | Color scheme |
|
|
3057
|
+
| size | 'xs' \| 'sm' \| 'md' \| 'icon-xs' \| 'icon-sm' \| 'icon-md' | 'md' | Size |
|
|
3058
|
+
| triggerSide | 'left' \| 'right' | 'right' | Which side the dropdown chevron sits on |
|
|
3059
|
+
| triggerWidth | number \| string | auto | Custom width for the trigger half |
|
|
3060
|
+
| placement | Placement | 'top-end' | Floating UI placement for dropdown |
|
|
3061
|
+
| disabled | boolean | false | Disable both halves |
|
|
3062
|
+
| open | boolean | — | Controlled open state |
|
|
3063
|
+
| onOpenChange | (open: boolean) => void | — | Open state callback |
|
|
3064
|
+
| dropdownLabel | string | 'More options' | aria-label for trigger |
|
|
3065
|
+
| dropdownIcon | ReactNode | chevron-down | Custom trigger icon |
|
|
3066
|
+
|
|
3067
|
+
## Changes
|
|
3068
|
+
|
|
3069
|
+
### v0.33.0
|
|
3070
|
+
- **Added** Initial release
|
|
2986
3071
|
# Stack
|
|
2987
3072
|
|
|
2988
3073
|
- Import: @devalok/shilp-sutra/ui/stack
|
|
@@ -4202,6 +4287,15 @@ EmojiPicker, EmojiPickerPopover
|
|
|
4202
4287
|
- Wraps `@emoji-mart/react` which is lazy-loaded — shows a Skeleton placeholder while loading
|
|
4203
4288
|
- `theme="auto"` reads the `.dark` class on `<html>` to pick light/dark
|
|
4204
4289
|
- EmojiPickerPopover auto-closes after selection
|
|
4290
|
+
|
|
4291
|
+
## Changes
|
|
4292
|
+
|
|
4293
|
+
### v0.33.0
|
|
4294
|
+
- **Added** `set` prop on EmojiPicker and EmojiPickerPopover — `EmojiSet` type: 'native' | 'apple' | 'google' | 'twitter' | 'facebook'
|
|
4295
|
+
- **Added** `EmojiNode` TipTap extension — inline atom node with spritesheet rendering for consistent emoji art styles
|
|
4296
|
+
- **Added** `createEmojiSuggestion(set?)` factory — replaces `EmojiSuggestion` named export
|
|
4297
|
+
- **Added** `EmojiSet` type exported from barrel
|
|
4298
|
+
- **Breaking** `EmojiSuggestion` named export removed — use `createEmojiSuggestion()` factory
|
|
4205
4299
|
# EmptyState
|
|
4206
4300
|
|
|
4207
4301
|
- Import: @devalok/shilp-sutra/composed/empty-state
|
|
@@ -4836,6 +4930,94 @@ Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' | 'low' | 'medium' | 'high' | 'u
|
|
|
4836
4930
|
- Renders a centered Dialog on desktop and a bottom Sheet on mobile — same content, different container
|
|
4837
4931
|
- Uses `window.matchMedia` internally — SSR defaults to desktop (Dialog) until hydration
|
|
4838
4932
|
- Title and description are optional; if omitted, no header is rendered in either mode
|
|
4933
|
+
# RichChatInput
|
|
4934
|
+
|
|
4935
|
+
- Import: @devalok/shilp-sutra/composed/rich-chat-input
|
|
4936
|
+
- Server-safe: No
|
|
4937
|
+
- Category: composed
|
|
4938
|
+
|
|
4939
|
+
Compact rich text chat input for unified human+AI workspaces. Built on TipTap.
|
|
4940
|
+
|
|
4941
|
+
## Props
|
|
4942
|
+
|
|
4943
|
+
### RichChatInputProps
|
|
4944
|
+
onSubmit: (html: string, plainText: string) => void (REQUIRED)
|
|
4945
|
+
placeholder: string (default: "Type a message...")
|
|
4946
|
+
disabled: boolean (default: false)
|
|
4947
|
+
variant: 'compact' | 'expanded' | 'minimal' (default: 'compact')
|
|
4948
|
+
maxRows: number
|
|
4949
|
+
enterBehavior: 'send' | 'newline' (default: 'send')
|
|
4950
|
+
maxLength: number — enables character counter
|
|
4951
|
+
mentions: MentionItem[] — static list for @mention autocomplete
|
|
4952
|
+
onMentionSearch: (query: string) => Promise<MentionItem[]> — async search
|
|
4953
|
+
onMentionSelect: (item: MentionItem) => void
|
|
4954
|
+
onFileUpload: (file: File) => Promise<{ url: string; name: string; size: number }>
|
|
4955
|
+
onImageUpload: (file: File) => Promise<string>
|
|
4956
|
+
slashCommands: SlashCommandGroup[] — enables / command palette
|
|
4957
|
+
onTyping: (isTyping: boolean) => void — typing indicator callback
|
|
4958
|
+
onEmpty: (isEmpty: boolean) => void
|
|
4959
|
+
isStreaming: boolean (default: false) — shows stop button instead of send
|
|
4960
|
+
onCancel: () => void — called when stop button is clicked
|
|
4961
|
+
leadingSlot: ReactNode — rendered above the editor
|
|
4962
|
+
trailingSlot: ReactNode — rendered below the toolbar
|
|
4963
|
+
disclaimer: string — small text below the input
|
|
4964
|
+
toolbar: boolean | ChatToolbarItem[] (default: true)
|
|
4965
|
+
|
|
4966
|
+
ChatToolbarItem: 'bold' | 'italic' | 'underline' | 'strike' | 'highlight' | 'code' | 'bulletList' | 'orderedList' | 'mention' | 'emoji' | 'attach' | 'slash'
|
|
4967
|
+
|
|
4968
|
+
MentionItem: { id: string; label: string; avatar?: string }
|
|
4969
|
+
|
|
4970
|
+
SlashCommand: { id: string; label: string; description?: string; icon?: ComponentType; action: (editor: Editor) => void }
|
|
4971
|
+
|
|
4972
|
+
SlashCommandGroup: { label: string; commands: SlashCommand[] }
|
|
4973
|
+
|
|
4974
|
+
## Variants
|
|
4975
|
+
- `compact` (default) — 2-3 lines, inline toolbar
|
|
4976
|
+
- `expanded` — 5+ lines, always-visible toolbar, suited for AI prompts
|
|
4977
|
+
- `minimal` — single line, toolbar appears on focus
|
|
4978
|
+
|
|
4979
|
+
## Example
|
|
4980
|
+
```jsx
|
|
4981
|
+
<RichChatInput
|
|
4982
|
+
onSubmit={(html, text) => sendMessage(html)}
|
|
4983
|
+
mentions={teamMembers}
|
|
4984
|
+
onFileUpload={uploadFile}
|
|
4985
|
+
slashCommands={[{ label: 'Actions', commands: [...] }]}
|
|
4986
|
+
/>
|
|
4987
|
+
|
|
4988
|
+
<RichChatInput
|
|
4989
|
+
variant="expanded"
|
|
4990
|
+
onSubmit={handleSubmit}
|
|
4991
|
+
maxLength={2000}
|
|
4992
|
+
disclaimer="AI-generated content may be inaccurate."
|
|
4993
|
+
/>
|
|
4994
|
+
|
|
4995
|
+
<RichChatInput
|
|
4996
|
+
variant="minimal"
|
|
4997
|
+
enterBehavior="newline"
|
|
4998
|
+
onSubmit={handleReply}
|
|
4999
|
+
/>
|
|
5000
|
+
```
|
|
5001
|
+
|
|
5002
|
+
## Gotchas
|
|
5003
|
+
- Tiptap is bundled — no need to install `@tiptap/*` packages separately
|
|
5004
|
+
- Enter sends by default; use `enterBehavior="newline"` for long-form composition (Cmd/Ctrl+Enter always sends)
|
|
5005
|
+
- `maxLength` enables both a character limit and the visual counter in the toolbar
|
|
5006
|
+
- File/image upload buttons only appear when the corresponding handler is provided
|
|
5007
|
+
- Slash command button only appears when `slashCommands` is provided
|
|
5008
|
+
- Mention button only appears when `mentions` or `onMentionSearch` is provided
|
|
5009
|
+
|
|
5010
|
+
## Changes
|
|
5011
|
+
### v0.33.0
|
|
5012
|
+
- **Added** Custom EmojiNode with spritesheet rendering — `emojiSet` prop
|
|
5013
|
+
- **Added** `onSchedule` prop — schedule send with smart presets + DateTimePicker, SplitButton UX
|
|
5014
|
+
- **Added** `actionButton` prop — composable left-side button (replaces default attach, or pass false to hide)
|
|
5015
|
+
- **Added** Animated mic ↔ send button transitions (AnimatePresence)
|
|
5016
|
+
- **Changed** Voice recording buttons from outline to soft variant
|
|
5017
|
+
- **Fixed** ToolbarButton width for custom-width buttons (e.g. "Refine" with text label)
|
|
5018
|
+
|
|
5019
|
+
### v0.32.0
|
|
5020
|
+
- Initial release
|
|
4839
5021
|
# RichTextEditor
|
|
4840
5022
|
|
|
4841
5023
|
- Import: @devalok/shilp-sutra/composed/rich-text-editor
|
|
@@ -4893,6 +5075,11 @@ MentionItem: { id: string; label: string; avatar?: string }
|
|
|
4893
5075
|
- Features: bold, italic, underline, strikethrough, highlight, headings, blockquote, lists, task lists, code, links, images, file attachments, mentions, emoji, text alignment, horizontal rule
|
|
4894
5076
|
|
|
4895
5077
|
## Changes
|
|
5078
|
+
### v0.33.0
|
|
5079
|
+
- **Added** `emojiSet` prop — `EmojiSet` type for consistent emoji art style rendering
|
|
5080
|
+
- **Changed** TipTap v2 → v3 upgrade (useEditorState, immediatelyRender: false for SSR, ListKit)
|
|
5081
|
+
- **Added** EmojiNode + createEmojiSuggestion(set) registered internally
|
|
5082
|
+
|
|
4896
5083
|
### v0.30.0
|
|
4897
5084
|
- **Added** `toolbar` prop — whitelist of `ToolbarItem` names to control which toolbar buttons appear. Dividers render only between groups that have visible items. `ToolbarItem` type exported from barrel.
|
|
4898
5085
|
|