@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.
Files changed (278) hide show
  1. package/LICENSE +21 -0
  2. package/dist/_chunks/badge-group.js +123 -172
  3. package/dist/_chunks/date-time-picker.js +851 -0
  4. package/dist/_chunks/document-preview.js +92 -0
  5. package/dist/_chunks/file-preview.js +511 -0
  6. package/dist/_chunks/image-preview.js +90 -0
  7. package/dist/_chunks/mention-suggestion.js +362 -0
  8. package/dist/_chunks/primitives.js +109 -109
  9. package/dist/_chunks/stat-row.js +144 -124
  10. package/dist/_chunks/tiptap.js +11595 -7731
  11. package/dist/_chunks/use-calendar.js +117 -890
  12. package/dist/_chunks/vendor-client.js +1055 -894
  13. package/dist/ai/block-renderer.d.ts +2 -1
  14. package/dist/ai/block-renderer.d.ts.map +1 -1
  15. package/dist/ai/block-renderer.js +30 -29
  16. package/dist/ai/blocks/block-table.d.ts.map +1 -1
  17. package/dist/ai/blocks/confirm.d.ts.map +1 -1
  18. package/dist/ai/blocks/divider.d.ts.map +1 -1
  19. package/dist/ai/blocks/error.d.ts.map +1 -1
  20. package/dist/ai/blocks/info.d.ts.map +1 -1
  21. package/dist/ai/blocks/loading.d.ts.map +1 -1
  22. package/dist/ai/blocks/stat-row.d.ts.map +1 -1
  23. package/dist/ai/blocks/success.d.ts.map +1 -1
  24. package/dist/ai/blocks/text.d.ts.map +1 -1
  25. package/dist/ai/command-bar.d.ts +18 -0
  26. package/dist/ai/command-bar.d.ts.map +1 -1
  27. package/dist/ai/command-bar.js +126 -125
  28. package/dist/ai/conversation.d.ts +13 -1
  29. package/dist/ai/conversation.d.ts.map +1 -1
  30. package/dist/ai/conversation.js +78 -78
  31. package/dist/ai/types.d.ts +0 -1
  32. package/dist/ai/types.d.ts.map +1 -1
  33. package/dist/ai/types.js +0 -1
  34. package/dist/composed/bulk-action-bar.d.ts +6 -4
  35. package/dist/composed/bulk-action-bar.d.ts.map +1 -1
  36. package/dist/composed/bulk-action-bar.js +102 -58
  37. package/dist/composed/command-palette.d.ts +9 -0
  38. package/dist/composed/command-palette.d.ts.map +1 -1
  39. package/dist/composed/command-palette.js +68 -68
  40. package/dist/composed/confirm-dialog.d.ts +1 -1
  41. package/dist/composed/confirm-dialog.d.ts.map +1 -1
  42. package/dist/composed/confirm-dialog.js +10 -10
  43. package/dist/composed/date-picker/date-picker.d.ts +11 -1
  44. package/dist/composed/date-picker/date-picker.d.ts.map +1 -1
  45. package/dist/composed/date-picker/index.js +9 -8
  46. package/dist/composed/date-picker/month-picker.d.ts.map +1 -1
  47. package/dist/composed/date-picker/year-picker.d.ts.map +1 -1
  48. package/dist/composed/deadline-indicator.d.ts +1 -1
  49. package/dist/composed/deadline-indicator.d.ts.map +1 -1
  50. package/dist/composed/deadline-indicator.js +39 -36
  51. package/dist/composed/emoji-picker.d.ts +14 -2
  52. package/dist/composed/emoji-picker.d.ts.map +1 -1
  53. package/dist/composed/emoji-picker.js +66 -55
  54. package/dist/composed/error-boundary.d.ts +21 -1
  55. package/dist/composed/error-boundary.d.ts.map +1 -1
  56. package/dist/composed/error-boundary.js +47 -32
  57. package/dist/composed/extensions/emoji-data.d.ts +35 -0
  58. package/dist/composed/extensions/emoji-data.d.ts.map +1 -0
  59. package/dist/composed/extensions/emoji-node.d.ts +11 -0
  60. package/dist/composed/extensions/emoji-node.d.ts.map +1 -0
  61. package/dist/composed/extensions/emoji-suggestion.d.ts +4 -6
  62. package/dist/composed/extensions/emoji-suggestion.d.ts.map +1 -1
  63. package/dist/composed/extensions/slash-command.d.ts +35 -0
  64. package/dist/composed/extensions/slash-command.d.ts.map +1 -0
  65. package/dist/composed/file-preview/audio-preview.d.ts +7 -0
  66. package/dist/composed/file-preview/audio-preview.d.ts.map +1 -0
  67. package/dist/composed/file-preview/document-preview.d.ts +7 -0
  68. package/dist/composed/file-preview/document-preview.d.ts.map +1 -0
  69. package/dist/composed/file-preview/embed-preview.d.ts +7 -0
  70. package/dist/composed/file-preview/embed-preview.d.ts.map +1 -0
  71. package/dist/composed/file-preview/image-preview.d.ts +7 -0
  72. package/dist/composed/file-preview/image-preview.d.ts.map +1 -0
  73. package/dist/composed/file-preview/shared.d.ts +20 -0
  74. package/dist/composed/file-preview/shared.d.ts.map +1 -0
  75. package/dist/composed/file-preview/video-preview.d.ts +6 -0
  76. package/dist/composed/file-preview/video-preview.d.ts.map +1 -0
  77. package/dist/composed/file-preview.d.ts.map +1 -1
  78. package/dist/composed/file-preview.js +10 -662
  79. package/dist/composed/filter-bar.d.ts +10 -2
  80. package/dist/composed/filter-bar.d.ts.map +1 -1
  81. package/dist/composed/filter-bar.js +42 -43
  82. package/dist/composed/form-section.d.ts +1 -1
  83. package/dist/composed/form-section.d.ts.map +1 -1
  84. package/dist/composed/form-section.js +22 -21
  85. package/dist/composed/index.d.ts +9 -3
  86. package/dist/composed/index.d.ts.map +1 -1
  87. package/dist/composed/index.js +79 -69
  88. package/dist/composed/inline-edit.d.ts +1 -1
  89. package/dist/composed/inline-edit.d.ts.map +1 -1
  90. package/dist/composed/inline-edit.js +33 -32
  91. package/dist/composed/markdown-viewer.d.ts +1 -1
  92. package/dist/composed/markdown-viewer.d.ts.map +1 -1
  93. package/dist/composed/markdown-viewer.js +60 -59
  94. package/dist/composed/master-detail.d.ts +11 -7
  95. package/dist/composed/master-detail.d.ts.map +1 -1
  96. package/dist/composed/master-detail.js +123 -84
  97. package/dist/composed/responsive-overlay.d.ts +8 -0
  98. package/dist/composed/responsive-overlay.d.ts.map +1 -1
  99. package/dist/composed/rich-chat-input/attachment-strip.d.ts +15 -0
  100. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -0
  101. package/dist/composed/rich-chat-input/audio-player.d.ts +11 -0
  102. package/dist/composed/rich-chat-input/audio-player.d.ts.map +1 -0
  103. package/dist/composed/rich-chat-input/audio-waveform.d.ts +24 -0
  104. package/dist/composed/rich-chat-input/audio-waveform.d.ts.map +1 -0
  105. package/dist/composed/rich-chat-input/chat-toolbar.d.ts +51 -0
  106. package/dist/composed/rich-chat-input/chat-toolbar.d.ts.map +1 -0
  107. package/dist/composed/rich-chat-input/recording-overlay.d.ts +15 -0
  108. package/dist/composed/rich-chat-input/recording-overlay.d.ts.map +1 -0
  109. package/dist/composed/rich-chat-input/reply-banner.d.ts +8 -0
  110. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -0
  111. package/dist/composed/rich-chat-input/schedule-send.d.ts +22 -0
  112. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -0
  113. package/dist/composed/rich-chat-input/use-voice-recorder.d.ts +18 -0
  114. package/dist/composed/rich-chat-input/use-voice-recorder.d.ts.map +1 -0
  115. package/dist/composed/rich-chat-input.d.ts +91 -0
  116. package/dist/composed/rich-chat-input.d.ts.map +1 -0
  117. package/dist/composed/rich-chat-input.js +1861 -0
  118. package/dist/composed/rich-text-editor.d.ts +14 -3
  119. package/dist/composed/rich-text-editor.d.ts.map +1 -1
  120. package/dist/composed/rich-text-editor.js +278 -447
  121. package/dist/composed/schedule-view.d.ts +9 -1
  122. package/dist/composed/schedule-view.d.ts.map +1 -1
  123. package/dist/hooks/index.d.ts +2 -0
  124. package/dist/hooks/index.d.ts.map +1 -1
  125. package/dist/hooks/index.js +8 -4
  126. package/dist/hooks/use-touch-device.d.ts +12 -0
  127. package/dist/hooks/use-touch-device.d.ts.map +1 -0
  128. package/dist/hooks/use-touch-device.js +13 -0
  129. package/dist/hooks/use-viewport-height.d.ts +11 -0
  130. package/dist/hooks/use-viewport-height.d.ts.map +1 -0
  131. package/dist/hooks/use-viewport-height.js +16 -0
  132. package/dist/shell/bottom-navbar.d.ts.map +1 -1
  133. package/dist/shell/bottom-navbar.js +72 -63
  134. package/dist/shell/command-registry.d.ts.map +1 -1
  135. package/dist/shell/notification-center.d.ts.map +1 -1
  136. package/dist/shell/notification-center.js +77 -77
  137. package/dist/shell/top-bar.d.ts +2 -2
  138. package/dist/shell/top-bar.d.ts.map +1 -1
  139. package/dist/shell/top-bar.js +61 -60
  140. package/dist/tailwind/index.cjs +51 -7
  141. package/dist/tailwind/preset.d.ts.map +1 -1
  142. package/dist/tailwind/preset.js +51 -7
  143. package/dist/tokens/primitives.css +3 -1
  144. package/dist/tokens/semantic.css +16 -13
  145. package/dist/ui/autocomplete.d.ts.map +1 -1
  146. package/dist/ui/autocomplete.js +38 -39
  147. package/dist/ui/badge.d.ts +104 -2
  148. package/dist/ui/badge.d.ts.map +1 -1
  149. package/dist/ui/banner.d.ts.map +1 -1
  150. package/dist/ui/banner.js +8 -7
  151. package/dist/ui/button-group.d.ts +27 -37
  152. package/dist/ui/button-group.d.ts.map +1 -1
  153. package/dist/ui/button-group.js +95 -29
  154. package/dist/ui/button.d.ts +2 -2
  155. package/dist/ui/button.d.ts.map +1 -1
  156. package/dist/ui/button.js +118 -134
  157. package/dist/ui/card.js +24 -24
  158. package/dist/ui/charts/area-chart.d.ts +2 -0
  159. package/dist/ui/charts/area-chart.d.ts.map +1 -1
  160. package/dist/ui/charts/bar-chart.d.ts +2 -0
  161. package/dist/ui/charts/bar-chart.d.ts.map +1 -1
  162. package/dist/ui/charts/chart-container.d.ts +2 -0
  163. package/dist/ui/charts/chart-container.d.ts.map +1 -1
  164. package/dist/ui/charts/index.js +583 -577
  165. package/dist/ui/charts/line-chart.d.ts +2 -0
  166. package/dist/ui/charts/line-chart.d.ts.map +1 -1
  167. package/dist/ui/charts/pie-chart.d.ts +2 -0
  168. package/dist/ui/charts/pie-chart.d.ts.map +1 -1
  169. package/dist/ui/charts/radar-chart.d.ts +2 -0
  170. package/dist/ui/charts/radar-chart.d.ts.map +1 -1
  171. package/dist/ui/checkbox.d.ts +2 -0
  172. package/dist/ui/checkbox.d.ts.map +1 -1
  173. package/dist/ui/checkbox.js +36 -27
  174. package/dist/ui/color-input.js +5 -5
  175. package/dist/ui/combobox.d.ts +6 -1
  176. package/dist/ui/combobox.d.ts.map +1 -1
  177. package/dist/ui/combobox.js +1 -1
  178. package/dist/ui/context-menu.js +1 -1
  179. package/dist/ui/data-table-body.d.ts +12 -0
  180. package/dist/ui/data-table-body.d.ts.map +1 -0
  181. package/dist/ui/data-table-body.js +219 -0
  182. package/dist/ui/data-table-bulk-actions.d.ts +19 -0
  183. package/dist/ui/data-table-bulk-actions.d.ts.map +1 -0
  184. package/dist/ui/data-table-bulk-actions.js +61 -0
  185. package/dist/ui/data-table-card.d.ts +9 -0
  186. package/dist/ui/data-table-card.d.ts.map +1 -0
  187. package/dist/ui/data-table-card.js +73 -0
  188. package/dist/ui/data-table-context.d.ts +62 -0
  189. package/dist/ui/data-table-context.d.ts.map +1 -0
  190. package/dist/ui/data-table-context.js +48 -0
  191. package/dist/ui/data-table-header.d.ts +10 -0
  192. package/dist/ui/data-table-header.d.ts.map +1 -0
  193. package/dist/ui/data-table-header.js +141 -0
  194. package/dist/ui/data-table-pagination.d.ts +13 -0
  195. package/dist/ui/data-table-pagination.d.ts.map +1 -0
  196. package/dist/ui/data-table-pagination.js +84 -0
  197. package/dist/ui/data-table.d.ts +11 -9
  198. package/dist/ui/data-table.d.ts.map +1 -1
  199. package/dist/ui/data-table.js +258 -573
  200. package/dist/ui/dialog.d.ts +6 -2
  201. package/dist/ui/dialog.d.ts.map +1 -1
  202. package/dist/ui/dialog.js +84 -82
  203. package/dist/ui/dropdown-menu.js +1 -1
  204. package/dist/ui/hover-card.d.ts +7 -0
  205. package/dist/ui/hover-card.d.ts.map +1 -1
  206. package/dist/ui/hover-card.js +3 -3
  207. package/dist/ui/icon-group.d.ts +2 -4
  208. package/dist/ui/icon-group.d.ts.map +1 -1
  209. package/dist/ui/icon-group.js +22 -23
  210. package/dist/ui/index.d.ts +2 -2
  211. package/dist/ui/index.d.ts.map +1 -1
  212. package/dist/ui/index.js +324 -327
  213. package/dist/ui/label.js +1 -1
  214. package/dist/ui/lib/bottom-sheet.d.ts +16 -0
  215. package/dist/ui/lib/bottom-sheet.d.ts.map +1 -0
  216. package/dist/ui/menubar.d.ts.map +1 -1
  217. package/dist/ui/menubar.js +64 -73
  218. package/dist/ui/navigation-menu.d.ts.map +1 -1
  219. package/dist/ui/navigation-menu.js +40 -44
  220. package/dist/ui/number-input.d.ts.map +1 -1
  221. package/dist/ui/number-input.js +19 -17
  222. package/dist/ui/popover.d.ts.map +1 -1
  223. package/dist/ui/popover.js +107 -32
  224. package/dist/ui/progress-ring.d.ts.map +1 -1
  225. package/dist/ui/progress-ring.js +80 -80
  226. package/dist/ui/progress.js +4 -4
  227. package/dist/ui/radio.d.ts +5 -2
  228. package/dist/ui/radio.d.ts.map +1 -1
  229. package/dist/ui/radio.js +29 -20
  230. package/dist/ui/search-input.d.ts.map +1 -1
  231. package/dist/ui/search-input.js +13 -12
  232. package/dist/ui/segmented-control.d.ts +6 -108
  233. package/dist/ui/segmented-control.d.ts.map +1 -1
  234. package/dist/ui/segmented-control.js +86 -272
  235. package/dist/ui/select.js +5 -5
  236. package/dist/ui/separator.js +5 -5
  237. package/dist/ui/sheet.d.ts +2 -0
  238. package/dist/ui/sheet.d.ts.map +1 -1
  239. package/dist/ui/sheet.js +102 -84
  240. package/dist/ui/sidebar.d.ts.map +1 -1
  241. package/dist/ui/sidebar.js +200 -175
  242. package/dist/ui/slider.js +14 -14
  243. package/dist/ui/split-button.d.ts +45 -0
  244. package/dist/ui/split-button.d.ts.map +1 -0
  245. package/dist/ui/split-button.js +282 -0
  246. package/dist/ui/status-dot.js +8 -8
  247. package/dist/ui/stepper.d.ts.map +1 -1
  248. package/dist/ui/stepper.js +33 -31
  249. package/dist/ui/switch.js +3 -3
  250. package/dist/ui/tabs.js +6 -6
  251. package/dist/ui/toast-types.d.ts +0 -1
  252. package/dist/ui/toast-types.d.ts.map +1 -1
  253. package/dist/ui/toast-types.js +0 -1
  254. package/dist/ui/toast.d.ts.map +1 -1
  255. package/dist/ui/toast.js +156 -150
  256. package/dist/ui/toggle-group.js +1 -1
  257. package/dist/ui/toggle.js +1 -1
  258. package/dist/ui/tooltip.js +3 -3
  259. package/docs/components/composed/emoji-picker.md +9 -0
  260. package/docs/components/composed/rich-chat-input.md +88 -0
  261. package/docs/components/composed/rich-text-editor.md +5 -0
  262. package/docs/components/ui/button-group.md +9 -0
  263. package/docs/components/ui/button.md +4 -0
  264. package/docs/components/ui/data-table-body.md +13 -0
  265. package/docs/components/ui/data-table-bulk-actions.md +13 -0
  266. package/docs/components/ui/data-table-card.md +13 -0
  267. package/docs/components/ui/data-table-context.md +13 -0
  268. package/docs/components/ui/data-table-header.md +13 -0
  269. package/docs/components/ui/data-table-pagination.md +13 -0
  270. package/docs/components/ui/split-button.md +41 -0
  271. package/llms-full.txt +235 -48
  272. package/llms.txt +54 -2
  273. package/package.json +30 -31
  274. package/dist/ui/chip.d.ts +0 -19
  275. package/dist/ui/chip.d.ts.map +0 -1
  276. package/dist/ui/chip.js +0 -14
  277. package/dist/ui/lib/use-ripple.d.ts +0 -14
  278. package/dist/ui/lib/use-ripple.d.ts.map +0 -1
@@ -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 { aL as y, aM as f, aN as C, aO as u, aP as g } from "../_chunks/primitives.js";
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 L = C, A = {
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
- L as TooltipTrigger
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.31.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