@devalok/shilp-sutra 0.34.1 → 0.36.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 (439) hide show
  1. package/LICENSE +21 -21
  2. package/dist/_chunks/badge-group.js +95 -95
  3. package/dist/_chunks/badge-group.js.map +1 -0
  4. package/dist/_chunks/chat.js +7 -2
  5. package/dist/_chunks/chat.js.map +1 -0
  6. package/dist/_chunks/date-picker.js.map +1 -0
  7. package/dist/_chunks/document-preview.js.map +1 -0
  8. package/dist/_chunks/file-preview.js.map +1 -0
  9. package/dist/_chunks/framer.js +62 -62
  10. package/dist/_chunks/framer.js.map +1 -0
  11. package/dist/_chunks/image-preview.js +1 -1
  12. package/dist/_chunks/image-preview.js.map +1 -0
  13. package/dist/_chunks/keybinding.js.map +1 -0
  14. package/dist/_chunks/link-context.js.map +1 -0
  15. package/dist/_chunks/mention-suggestion.js.map +1 -0
  16. package/dist/_chunks/motion-provider.js.map +1 -0
  17. package/dist/_chunks/popover.js +32 -36
  18. package/dist/_chunks/popover.js.map +1 -0
  19. package/dist/_chunks/primitives.js +686 -686
  20. package/dist/_chunks/primitives.js.map +1 -0
  21. package/dist/_chunks/rich-chat-input.js +650 -649
  22. package/dist/_chunks/rich-chat-input.js.map +1 -0
  23. package/dist/_chunks/shared.js.map +1 -0
  24. package/dist/_chunks/sonner.js.map +1 -0
  25. package/dist/_chunks/stat-row.js +158 -158
  26. package/dist/_chunks/stat-row.js.map +1 -0
  27. package/dist/_chunks/tiptap.js +11 -11
  28. package/dist/_chunks/tiptap.js.map +1 -0
  29. package/dist/_chunks/tree-view.js +1 -1
  30. package/dist/_chunks/tree-view.js.map +1 -0
  31. package/dist/_chunks/use-calendar.js.map +1 -0
  32. package/dist/_chunks/vendor-client.js +1 -1
  33. package/dist/_chunks/vendor-client.js.map +1 -0
  34. package/dist/_chunks/vendor-utils.js.map +1 -0
  35. package/dist/ai/ai-command-provider.js.map +1 -0
  36. package/dist/ai/block-renderer.js.map +1 -0
  37. package/dist/ai/blocks/loading.d.ts.map +1 -1
  38. package/dist/ai/command-bar.js.map +1 -0
  39. package/dist/ai/conversation.js +76 -76
  40. package/dist/ai/conversation.js.map +1 -0
  41. package/dist/ai/devadoot-icon.d.ts.map +1 -1
  42. package/dist/ai/index.js.map +1 -0
  43. package/dist/composed/activity-feed.js.map +1 -0
  44. package/dist/composed/avatar-group.js +1 -1
  45. package/dist/composed/avatar-group.js.map +1 -0
  46. package/dist/composed/bulk-action-bar.js +13 -21
  47. package/dist/composed/bulk-action-bar.js.map +1 -0
  48. package/dist/composed/command-palette.js.map +1 -0
  49. package/dist/composed/confirm-dialog.js.map +1 -0
  50. package/dist/composed/content-card.js.map +1 -0
  51. package/dist/composed/deadline-indicator.js.map +1 -0
  52. package/dist/composed/emoji-picker.js.map +1 -0
  53. package/dist/composed/empty-state.d.ts.map +1 -1
  54. package/dist/composed/empty-state.js +30 -30
  55. package/dist/composed/empty-state.js.map +1 -0
  56. package/dist/composed/error-boundary.js.map +1 -0
  57. package/dist/composed/filter-bar.js.map +1 -0
  58. package/dist/composed/form-section.js.map +1 -0
  59. package/dist/composed/global-loading.js.map +1 -0
  60. package/dist/composed/inline-edit.js.map +1 -0
  61. package/dist/composed/lib/string-utils.js.map +1 -0
  62. package/dist/composed/loading-skeleton.js.map +1 -0
  63. package/dist/composed/markdown-viewer.js.map +1 -0
  64. package/dist/composed/master-detail.js.map +1 -0
  65. package/dist/composed/member-picker.js.map +1 -0
  66. package/dist/composed/multi-select-popover.d.ts.map +1 -1
  67. package/dist/composed/multi-select-popover.js +4 -0
  68. package/dist/composed/multi-select-popover.js.map +1 -0
  69. package/dist/composed/page-header.js.map +1 -0
  70. package/dist/composed/page-skeletons.js.map +1 -0
  71. package/dist/composed/priority-indicator.js.map +1 -0
  72. package/dist/composed/responsive-overlay.js.map +1 -0
  73. package/dist/composed/rich-chat-input/attachment-strip.d.ts.map +1 -1
  74. package/dist/composed/rich-chat-input/reply-banner.d.ts.map +1 -1
  75. package/dist/composed/rich-chat-input/schedule-send.d.ts.map +1 -1
  76. package/dist/composed/rich-chat-input.d.ts.map +1 -1
  77. package/dist/composed/rich-text-editor.js.map +1 -0
  78. package/dist/composed/schedule-view.js.map +1 -0
  79. package/dist/composed/simple-tooltip.js.map +1 -0
  80. package/dist/composed/status-badge.d.ts.map +1 -1
  81. package/dist/composed/status-badge.js.map +1 -0
  82. package/dist/hooks/use-color-mode.js.map +1 -0
  83. package/dist/hooks/use-mobile.js.map +1 -0
  84. package/dist/hooks/use-touch-device.js.map +1 -0
  85. package/dist/hooks/use-viewport-height.js.map +1 -0
  86. package/dist/motion/check-motion-provider.d.ts +3 -0
  87. package/dist/motion/check-motion-provider.d.ts.map +1 -0
  88. package/dist/motion/index.js +14 -0
  89. package/dist/motion/index.js.map +1 -0
  90. package/dist/motion/primitives-index.js.map +1 -0
  91. package/dist/primitives/react-accordion.d.ts +114 -114
  92. package/dist/primitives/react-alert-dialog.d.ts +51 -51
  93. package/dist/primitives/react-aspect-ratio.d.ts +11 -11
  94. package/dist/primitives/react-avatar.d.ts +24 -24
  95. package/dist/primitives/react-checkbox.d.ts +50 -50
  96. package/dist/primitives/react-collapsible.d.ts +33 -33
  97. package/dist/primitives/react-context-menu.d.ts +96 -96
  98. package/dist/primitives/react-dialog.d.ts +103 -103
  99. package/dist/primitives/react-dropdown-menu.d.ts +97 -97
  100. package/dist/primitives/react-hover-card.d.ts +79 -79
  101. package/dist/primitives/react-label.d.ts +10 -10
  102. package/dist/primitives/react-menu.d.ts +169 -169
  103. package/dist/primitives/react-menubar.d.ts +115 -115
  104. package/dist/primitives/react-navigation-menu.d.ts +126 -126
  105. package/dist/primitives/react-popover.d.ts +85 -85
  106. package/dist/primitives/react-progress.d.ts +19 -19
  107. package/dist/primitives/react-radio-group.d.ts +58 -58
  108. package/dist/primitives/react-roving-focus.d.ts +49 -49
  109. package/dist/primitives/react-select.d.ts +137 -137
  110. package/dist/primitives/react-separator.d.ts +21 -21
  111. package/dist/primitives/react-slider.d.ts +75 -75
  112. package/dist/primitives/react-switch.d.ts +21 -21
  113. package/dist/primitives/react-tabs.d.ts +56 -56
  114. package/dist/primitives/react-toast.d.ts +120 -120
  115. package/dist/primitives/react-toggle-group.d.ts +75 -75
  116. package/dist/primitives/react-toggle.d.ts +24 -24
  117. package/dist/primitives/react-tooltip.d.ts +101 -101
  118. package/dist/primitives/react-visually-hidden.d.ts +22 -22
  119. package/dist/shell/app-command-palette.d.ts +2 -0
  120. package/dist/shell/app-command-palette.d.ts.map +1 -1
  121. package/dist/shell/app-command-palette.js +42 -155
  122. package/dist/shell/app-command-palette.js.map +1 -0
  123. package/dist/shell/bottom-navbar.js +1 -1
  124. package/dist/shell/bottom-navbar.js.map +1 -0
  125. package/dist/shell/command-registry.js.map +1 -0
  126. package/dist/shell/notification-center.d.ts.map +1 -1
  127. package/dist/shell/notification-center.js +194 -169
  128. package/dist/shell/notification-center.js.map +1 -0
  129. package/dist/shell/notification-preferences.js.map +1 -0
  130. package/dist/shell/sidebar.js.map +1 -0
  131. package/dist/shell/top-bar.js +1 -1
  132. package/dist/shell/top-bar.js.map +1 -0
  133. package/dist/tailwind/index.cjs +48 -1
  134. package/dist/tailwind/preset.d.ts.map +1 -1
  135. package/dist/tailwind/preset.js +48 -1
  136. package/dist/tailwind/preset.js.map +1 -0
  137. package/dist/tokens/index.css +4 -4
  138. package/dist/tokens/primitives.css +442 -442
  139. package/dist/tokens/semantic.css +742 -547
  140. package/dist/tokens/typography-semantic.css +123 -100
  141. package/dist/tokens/typography.css +422 -422
  142. package/dist/ui/accordion.js +13 -13
  143. package/dist/ui/accordion.js.map +1 -0
  144. package/dist/ui/alert-dialog.d.ts +6 -2
  145. package/dist/ui/alert-dialog.d.ts.map +1 -1
  146. package/dist/ui/alert-dialog.js +43 -42
  147. package/dist/ui/alert-dialog.js.map +1 -0
  148. package/dist/ui/alert.d.ts +3 -2
  149. package/dist/ui/alert.d.ts.map +1 -1
  150. package/dist/ui/alert.js +31 -5
  151. package/dist/ui/alert.js.map +1 -0
  152. package/dist/ui/aspect-ratio.js +1 -1
  153. package/dist/ui/aspect-ratio.js.map +1 -0
  154. package/dist/ui/autocomplete.d.ts.map +1 -1
  155. package/dist/ui/autocomplete.js +92 -67
  156. package/dist/ui/autocomplete.js.map +1 -0
  157. package/dist/ui/avatar.js +9 -9
  158. package/dist/ui/avatar.js.map +1 -0
  159. package/dist/ui/badge-indicator.js.map +1 -0
  160. package/dist/ui/banner.js.map +1 -0
  161. package/dist/ui/breadcrumb.js +1 -1
  162. package/dist/ui/breadcrumb.js.map +1 -0
  163. package/dist/ui/button-group.js.map +1 -0
  164. package/dist/ui/button-processing.d.ts.map +1 -1
  165. package/dist/ui/button-processing.js +61 -40
  166. package/dist/ui/button-processing.js.map +1 -0
  167. package/dist/ui/button.js +8 -8
  168. package/dist/ui/button.js.map +1 -0
  169. package/dist/ui/card.js.map +1 -0
  170. package/dist/ui/charts/bar-chart.d.ts.map +1 -1
  171. package/dist/ui/charts/chart-container.d.ts +2 -0
  172. package/dist/ui/charts/chart-container.d.ts.map +1 -1
  173. package/dist/ui/charts/index.js +88 -65
  174. package/dist/ui/charts/index.js.map +1 -0
  175. package/dist/ui/charts/line-chart.d.ts.map +1 -1
  176. package/dist/ui/chat/message-input.d.ts.map +1 -1
  177. package/dist/ui/chat/message-list.d.ts +1 -1
  178. package/dist/ui/chat/message-list.d.ts.map +1 -1
  179. package/dist/ui/chat/message.d.ts.map +1 -1
  180. package/dist/ui/chat/system-message.d.ts.map +1 -1
  181. package/dist/ui/checkbox.d.ts.map +1 -1
  182. package/dist/ui/checkbox.js +33 -28
  183. package/dist/ui/checkbox.js.map +1 -0
  184. package/dist/ui/code.js.map +1 -0
  185. package/dist/ui/collapsible.js +1 -1
  186. package/dist/ui/collapsible.js.map +1 -0
  187. package/dist/ui/color-input.d.ts.map +1 -1
  188. package/dist/ui/color-input.js +165 -163
  189. package/dist/ui/color-input.js.map +1 -0
  190. package/dist/ui/color-swatch.js.map +1 -0
  191. package/dist/ui/combobox.d.ts +7 -0
  192. package/dist/ui/combobox.d.ts.map +1 -1
  193. package/dist/ui/combobox.js +147 -113
  194. package/dist/ui/combobox.js.map +1 -0
  195. package/dist/ui/container.js +1 -1
  196. package/dist/ui/container.js.map +1 -0
  197. package/dist/ui/context-menu.js.map +1 -0
  198. package/dist/ui/data-table-body.js.map +1 -0
  199. package/dist/ui/data-table-bulk-actions.js +1 -1
  200. package/dist/ui/data-table-bulk-actions.js.map +1 -0
  201. package/dist/ui/data-table-card.js.map +1 -0
  202. package/dist/ui/data-table-context.js.map +1 -0
  203. package/dist/ui/data-table-header.js.map +1 -0
  204. package/dist/ui/data-table-pagination.js.map +1 -0
  205. package/dist/ui/data-table-toolbar.js.map +1 -0
  206. package/dist/ui/data-table.js +34 -31
  207. package/dist/ui/data-table.js.map +1 -0
  208. package/dist/ui/devalok-grain.js.map +1 -0
  209. package/dist/ui/dialog.js +31 -35
  210. package/dist/ui/dialog.js.map +1 -0
  211. package/dist/ui/dropdown-menu.js.map +1 -0
  212. package/dist/ui/file-upload.js +120 -120
  213. package/dist/ui/file-upload.js.map +1 -0
  214. package/dist/ui/form.d.ts +8 -0
  215. package/dist/ui/form.d.ts.map +1 -1
  216. package/dist/ui/form.js +14 -12
  217. package/dist/ui/form.js.map +1 -0
  218. package/dist/ui/hover-card.js.map +1 -0
  219. package/dist/ui/icon-button.js.map +1 -0
  220. package/dist/ui/icon-context.js.map +1 -0
  221. package/dist/ui/icon-group.js.map +1 -0
  222. package/dist/ui/icon.js.map +1 -0
  223. package/dist/ui/index.d.ts +4 -4
  224. package/dist/ui/index.d.ts.map +1 -1
  225. package/dist/ui/index.js +82 -66
  226. package/dist/ui/index.js.map +1 -0
  227. package/dist/ui/input-otp.d.ts +12 -3
  228. package/dist/ui/input-otp.d.ts.map +1 -1
  229. package/dist/ui/input-otp.js +41 -27
  230. package/dist/ui/input-otp.js.map +1 -0
  231. package/dist/ui/input.d.ts.map +1 -1
  232. package/dist/ui/input.js +16 -15
  233. package/dist/ui/input.js.map +1 -0
  234. package/dist/ui/label.d.ts.map +1 -1
  235. package/dist/ui/label.js +19 -14
  236. package/dist/ui/label.js.map +1 -0
  237. package/dist/ui/lib/check-tokens.d.ts +3 -0
  238. package/dist/ui/lib/check-tokens.d.ts.map +1 -0
  239. package/dist/ui/lib/date-utils.js.map +1 -0
  240. package/dist/ui/lib/motion.d.ts +15 -4
  241. package/dist/ui/lib/motion.d.ts.map +1 -1
  242. package/dist/ui/lib/motion.js +18 -9
  243. package/dist/ui/lib/motion.js.map +1 -0
  244. package/dist/ui/lib/utils.js.map +1 -0
  245. package/dist/ui/link.js +2 -2
  246. package/dist/ui/link.js.map +1 -0
  247. package/dist/ui/menubar.js.map +1 -0
  248. package/dist/ui/navigation-menu.js.map +1 -0
  249. package/dist/ui/number-input.d.ts +16 -1
  250. package/dist/ui/number-input.d.ts.map +1 -1
  251. package/dist/ui/number-input.js +79 -49
  252. package/dist/ui/number-input.js.map +1 -0
  253. package/dist/ui/pagination.js +1 -1
  254. package/dist/ui/pagination.js.map +1 -0
  255. package/dist/ui/progress-ring.d.ts.map +1 -1
  256. package/dist/ui/progress-ring.js.map +1 -0
  257. package/dist/ui/progress.js.map +1 -0
  258. package/dist/ui/radio.d.ts.map +1 -1
  259. package/dist/ui/radio.js +27 -20
  260. package/dist/ui/radio.js.map +1 -0
  261. package/dist/ui/search-input.js.map +1 -0
  262. package/dist/ui/segmented-control.d.ts +1 -1
  263. package/dist/ui/segmented-control.d.ts.map +1 -1
  264. package/dist/ui/segmented-control.js +2 -0
  265. package/dist/ui/segmented-control.js.map +1 -0
  266. package/dist/ui/select.d.ts.map +1 -1
  267. package/dist/ui/select.js +54 -48
  268. package/dist/ui/select.js.map +1 -0
  269. package/dist/ui/separator.d.ts.map +1 -1
  270. package/dist/ui/separator.js +10 -7
  271. package/dist/ui/separator.js.map +1 -0
  272. package/dist/ui/sheet.js +29 -29
  273. package/dist/ui/sheet.js.map +1 -0
  274. package/dist/ui/sidebar.js +7 -7
  275. package/dist/ui/sidebar.js.map +1 -0
  276. package/dist/ui/skeleton.js.map +1 -0
  277. package/dist/ui/slider.d.ts +22 -3
  278. package/dist/ui/slider.d.ts.map +1 -1
  279. package/dist/ui/slider.js +57 -19
  280. package/dist/ui/slider.js.map +1 -0
  281. package/dist/ui/spinner.js.map +1 -0
  282. package/dist/ui/split-button.d.ts.map +1 -1
  283. package/dist/ui/split-button.js +77 -76
  284. package/dist/ui/split-button.js.map +1 -0
  285. package/dist/ui/stack.js.map +1 -0
  286. package/dist/ui/stat-card.js.map +1 -0
  287. package/dist/ui/status-dot.js.map +1 -0
  288. package/dist/ui/stepper.d.ts +10 -0
  289. package/dist/ui/stepper.d.ts.map +1 -1
  290. package/dist/ui/stepper.js +80 -75
  291. package/dist/ui/stepper.js.map +1 -0
  292. package/dist/ui/switch.d.ts.map +1 -1
  293. package/dist/ui/switch.js +26 -22
  294. package/dist/ui/switch.js.map +1 -0
  295. package/dist/ui/table.js.map +1 -0
  296. package/dist/ui/tabs.d.ts +3 -1
  297. package/dist/ui/tabs.d.ts.map +1 -1
  298. package/dist/ui/tabs.js +68 -48
  299. package/dist/ui/tabs.js.map +1 -0
  300. package/dist/ui/text.d.ts +1 -1
  301. package/dist/ui/text.d.ts.map +1 -1
  302. package/dist/ui/text.js +10 -2
  303. package/dist/ui/text.js.map +1 -0
  304. package/dist/ui/textarea.js +1 -1
  305. package/dist/ui/textarea.js.map +1 -0
  306. package/dist/ui/toast-registry.d.ts +8 -0
  307. package/dist/ui/toast-registry.d.ts.map +1 -0
  308. package/dist/ui/toast-registry.js +13 -0
  309. package/dist/ui/toast-registry.js.map +1 -0
  310. package/dist/ui/toast.d.ts.map +1 -1
  311. package/dist/ui/toast.js +141 -136
  312. package/dist/ui/toast.js.map +1 -0
  313. package/dist/ui/toaster.d.ts.map +1 -1
  314. package/dist/ui/toaster.js +15 -14
  315. package/dist/ui/toaster.js.map +1 -0
  316. package/dist/ui/toggle-group.d.ts +2 -0
  317. package/dist/ui/toggle-group.d.ts.map +1 -1
  318. package/dist/ui/toggle-group.js +23 -16
  319. package/dist/ui/toggle-group.js.map +1 -0
  320. package/dist/ui/toggle.d.ts +2 -0
  321. package/dist/ui/toggle.d.ts.map +1 -1
  322. package/dist/ui/toggle.js +14 -6
  323. package/dist/ui/toggle.js.map +1 -0
  324. package/dist/ui/tooltip.js.map +1 -0
  325. package/dist/ui/visually-hidden.js.map +1 -0
  326. package/docs/components/_header.md +85 -85
  327. package/docs/components/composed/activity-feed.md +62 -62
  328. package/docs/components/composed/avatar-group.md +65 -65
  329. package/docs/components/composed/bulk-action-bar.md +40 -40
  330. package/docs/components/composed/command-palette.md +40 -40
  331. package/docs/components/composed/confirm-dialog.md +46 -46
  332. package/docs/components/composed/content-card.md +36 -36
  333. package/docs/components/composed/date-picker.md +130 -130
  334. package/docs/components/composed/deadline-indicator.md +27 -27
  335. package/docs/components/composed/emoji-picker.md +52 -52
  336. package/docs/components/composed/empty-state.md +53 -53
  337. package/docs/components/composed/error-boundary.md +29 -29
  338. package/docs/components/composed/file-preview.md +40 -40
  339. package/docs/components/composed/filter-bar.md +57 -57
  340. package/docs/components/composed/form-section.md +31 -31
  341. package/docs/components/composed/global-loading.md +27 -27
  342. package/docs/components/composed/inline-edit.md +35 -35
  343. package/docs/components/composed/loading-skeleton.md +51 -51
  344. package/docs/components/composed/markdown-viewer.md +27 -27
  345. package/docs/components/composed/master-detail.md +48 -48
  346. package/docs/components/composed/member-picker.md +35 -35
  347. package/docs/components/composed/multi-select-popover.md +62 -62
  348. package/docs/components/composed/page-header.md +41 -41
  349. package/docs/components/composed/page-skeletons.md +32 -32
  350. package/docs/components/composed/priority-indicator.md +32 -32
  351. package/docs/components/composed/responsive-overlay.md +34 -34
  352. package/docs/components/composed/rich-text-editor.md +82 -82
  353. package/docs/components/composed/schedule-view.md +39 -39
  354. package/docs/components/composed/simple-tooltip.md +33 -33
  355. package/docs/components/composed/status-badge.md +55 -55
  356. package/docs/components/shell/app-command-palette.md +44 -44
  357. package/docs/components/shell/bottom-navbar.md +52 -52
  358. package/docs/components/shell/command-registry.md +48 -48
  359. package/docs/components/shell/link-context.md +41 -41
  360. package/docs/components/shell/notification-center.md +63 -63
  361. package/docs/components/shell/notification-preferences.md +42 -42
  362. package/docs/components/shell/sidebar.md +92 -92
  363. package/docs/components/shell/top-bar.md +143 -143
  364. package/docs/components/ui/accordion.md +51 -51
  365. package/docs/components/ui/alert-dialog.md +61 -61
  366. package/docs/components/ui/alert.md +46 -46
  367. package/docs/components/ui/aspect-ratio.md +25 -25
  368. package/docs/components/ui/autocomplete.md +48 -48
  369. package/docs/components/ui/avatar.md +56 -56
  370. package/docs/components/ui/badge.md +83 -82
  371. package/docs/components/ui/banner.md +42 -42
  372. package/docs/components/ui/breadcrumb.md +37 -37
  373. package/docs/components/ui/button-group.md +41 -41
  374. package/docs/components/ui/button.md +94 -93
  375. package/docs/components/ui/card.md +52 -52
  376. package/docs/components/ui/charts.md +43 -43
  377. package/docs/components/ui/checkbox.md +36 -36
  378. package/docs/components/ui/chip.md +47 -47
  379. package/docs/components/ui/code.md +28 -28
  380. package/docs/components/ui/collapsible.md +40 -40
  381. package/docs/components/ui/color-input.md +91 -91
  382. package/docs/components/ui/color-swatch.md +25 -25
  383. package/docs/components/ui/combobox.md +54 -54
  384. package/docs/components/ui/container.md +26 -26
  385. package/docs/components/ui/context-menu.md +43 -43
  386. package/docs/components/ui/data-table-body.md +1 -1
  387. package/docs/components/ui/data-table-bulk-actions.md +1 -1
  388. package/docs/components/ui/data-table-card.md +1 -1
  389. package/docs/components/ui/data-table-context.md +1 -1
  390. package/docs/components/ui/data-table-header.md +1 -1
  391. package/docs/components/ui/data-table-pagination.md +1 -1
  392. package/docs/components/ui/data-table-toolbar.md +44 -44
  393. package/docs/components/ui/data-table.md +94 -94
  394. package/docs/components/ui/dialog.md +54 -54
  395. package/docs/components/ui/dropdown-menu.md +48 -48
  396. package/docs/components/ui/file-upload.md +41 -41
  397. package/docs/components/ui/form.md +51 -51
  398. package/docs/components/ui/hover-card.md +32 -32
  399. package/docs/components/ui/icon-button.md +40 -40
  400. package/docs/components/ui/input-otp.md +44 -44
  401. package/docs/components/ui/input.md +74 -74
  402. package/docs/components/ui/label.md +25 -25
  403. package/docs/components/ui/link.md +29 -29
  404. package/docs/components/ui/menubar.md +44 -44
  405. package/docs/components/ui/navigation-menu.md +46 -46
  406. package/docs/components/ui/number-input.md +44 -44
  407. package/docs/components/ui/pagination.md +48 -48
  408. package/docs/components/ui/popover.md +30 -30
  409. package/docs/components/ui/progress-ring.md +41 -41
  410. package/docs/components/ui/progress.md +34 -34
  411. package/docs/components/ui/radio.md +34 -34
  412. package/docs/components/ui/search-input.md +43 -43
  413. package/docs/components/ui/segmented-control.md +50 -50
  414. package/docs/components/ui/select.md +53 -53
  415. package/docs/components/ui/separator.md +32 -32
  416. package/docs/components/ui/sheet.md +47 -47
  417. package/docs/components/ui/sidebar.md +72 -72
  418. package/docs/components/ui/skeleton.md +77 -77
  419. package/docs/components/ui/slider.md +29 -29
  420. package/docs/components/ui/spinner.md +54 -54
  421. package/docs/components/ui/stack.md +39 -39
  422. package/docs/components/ui/stat-card.md +61 -61
  423. package/docs/components/ui/status-dot.md +26 -26
  424. package/docs/components/ui/stepper.md +49 -49
  425. package/docs/components/ui/switch.md +47 -47
  426. package/docs/components/ui/table.md +47 -47
  427. package/docs/components/ui/tabs.md +60 -60
  428. package/docs/components/ui/text.md +37 -37
  429. package/docs/components/ui/textarea.md +39 -39
  430. package/docs/components/ui/toast.md +65 -65
  431. package/docs/components/ui/toaster.md +47 -47
  432. package/docs/components/ui/toggle-group.md +43 -43
  433. package/docs/components/ui/toggle.md +37 -37
  434. package/docs/components/ui/tooltip.md +38 -38
  435. package/docs/components/ui/tree-view.md +65 -65
  436. package/docs/components/ui/visually-hidden.md +21 -21
  437. package/llms-full.txt +5266 -5264
  438. package/llms.txt +624 -580
  439. package/package.json +7 -8
@@ -1,35 +1,35 @@
1
- # MemberPicker
2
-
3
- - Import: @devalok/shilp-sutra/composed/member-picker
4
- - Server-safe: No
5
- - Category: composed
6
-
7
- ## Props
8
- members: MemberPickerMember[] (REQUIRED) — { id, name, avatar? }
9
- selectedIds: string[] (REQUIRED)
10
- onSelect: (memberId: string) => void (REQUIRED)
11
- multiple: boolean (default: false)
12
- placeholder: string (default: "Search members...")
13
- children: ReactNode (trigger element)
14
-
15
- ## Defaults
16
- multiple=false, placeholder="Search members..."
17
-
18
- ## Example
19
- ```jsx
20
- <MemberPicker members={teamMembers} selectedIds={assignees} onSelect={toggleAssignee} multiple>
21
- <Button variant="outline">Assign Members</Button>
22
- </MemberPicker>
23
- ```
24
-
25
- ## Gotchas
26
- - `children` is used as the trigger element (e.g., a Button)
27
- - `onSelect` is called with a single `memberId` — toggle logic is up to the consumer
28
- - When `multiple=false`, selecting a new member replaces the previous selection
29
-
30
- ## Changes
31
- ### v0.18.0
32
- - **Fixed** Added `aria-label` to search input
33
-
34
- ### v0.1.0
35
- - **Added** Initial release
1
+ # MemberPicker
2
+
3
+ - Import: @devalok/shilp-sutra/composed/member-picker
4
+ - Server-safe: No
5
+ - Category: composed
6
+
7
+ ## Props
8
+ members: MemberPickerMember[] (REQUIRED) — { id, name, avatar? }
9
+ selectedIds: string[] (REQUIRED)
10
+ onSelect: (memberId: string) => void (REQUIRED)
11
+ multiple: boolean (default: false)
12
+ placeholder: string (default: "Search members...")
13
+ children: ReactNode (trigger element)
14
+
15
+ ## Defaults
16
+ multiple=false, placeholder="Search members..."
17
+
18
+ ## Example
19
+ ```jsx
20
+ <MemberPicker members={teamMembers} selectedIds={assignees} onSelect={toggleAssignee} multiple>
21
+ <Button variant="outline">Assign Members</Button>
22
+ </MemberPicker>
23
+ ```
24
+
25
+ ## Gotchas
26
+ - `children` is used as the trigger element (e.g., a Button)
27
+ - `onSelect` is called with a single `memberId` — toggle logic is up to the consumer
28
+ - When `multiple=false`, selecting a new member replaces the previous selection
29
+
30
+ ## Changes
31
+ ### v0.18.0
32
+ - **Fixed** Added `aria-label` to search input
33
+
34
+ ### v0.1.0
35
+ - **Added** Initial release
@@ -1,62 +1,62 @@
1
- # MultiSelectPopover
2
-
3
- - Import: @devalok/shilp-sutra/composed/multi-select-popover
4
- - Server-safe: No
5
- - Category: composed
6
-
7
- ## Props
8
- items: MultiSelectItem[] (flat list — use `groups` for grouped rendering)
9
- groups: MultiSelectGroup[] (grouped items with section headers)
10
- value: string[] (currently selected item IDs)
11
- onValueChange: (ids: string[]) => void
12
- searchPlaceholder: string
13
- onSearch: (query: string) => Promise<MultiSelectItem[]> (async search — replaces local filter)
14
- searchDebounce: number (debounce for async search in ms)
15
- renderItem: (item: MultiSelectItem, selected: boolean) => ReactNode (custom item renderer)
16
- emptyMessage: string (message when no items match)
17
- maxSelections: number (cap on selections)
18
- align: "start" | "center" | "end"
19
- width: string | number (popover width)
20
- children: ReactNode (trigger element)
21
-
22
- ### MultiSelectItem
23
- id: string
24
- label: string
25
- image?: string
26
- description?: string
27
- disabled?: boolean
28
-
29
- ### MultiSelectGroup
30
- label: string
31
- items: MultiSelectItem[]
32
-
33
- ## Defaults
34
- searchPlaceholder="Search...", searchDebounce={300}, emptyMessage="No results found", align="start", width={240}
35
-
36
- ## Example
37
- ```jsx
38
- <MultiSelectPopover
39
- items={[
40
- { id: '1', label: 'Alice', image: '/alice.jpg' },
41
- { id: '2', label: 'Bob' },
42
- ]}
43
- value={selected}
44
- onValueChange={setSelected}
45
- >
46
- <Button>Assign members</Button>
47
- </MultiSelectPopover>
48
- ```
49
-
50
- ## Gotchas
51
- - Supply either `items` (flat) or `groups` (sectioned), not both
52
- - When `onSearch` is provided, local filtering is disabled — the callback must return results
53
- - Search state resets when the popover closes
54
- - `maxSelections: 1` acts as single-select — clicking a new item replaces the current one
55
-
56
- ## Changes
57
-
58
- ### v0.27.2
59
- - **Fixed** `maxSelections` at limit now replaces oldest selection instead of blocking. Single-select (`maxSelections: 1`) swaps in the new value.
60
-
61
- ### v0.26.0
62
- - **Added** Initial release
1
+ # MultiSelectPopover
2
+
3
+ - Import: @devalok/shilp-sutra/composed/multi-select-popover
4
+ - Server-safe: No
5
+ - Category: composed
6
+
7
+ ## Props
8
+ items: MultiSelectItem[] (flat list — use `groups` for grouped rendering)
9
+ groups: MultiSelectGroup[] (grouped items with section headers)
10
+ value: string[] (currently selected item IDs)
11
+ onValueChange: (ids: string[]) => void
12
+ searchPlaceholder: string
13
+ onSearch: (query: string) => Promise<MultiSelectItem[]> (async search — replaces local filter)
14
+ searchDebounce: number (debounce for async search in ms)
15
+ renderItem: (item: MultiSelectItem, selected: boolean) => ReactNode (custom item renderer)
16
+ emptyMessage: string (message when no items match)
17
+ maxSelections: number (cap on selections)
18
+ align: "start" | "center" | "end"
19
+ width: string | number (popover width)
20
+ children: ReactNode (trigger element)
21
+
22
+ ### MultiSelectItem
23
+ id: string
24
+ label: string
25
+ image?: string
26
+ description?: string
27
+ disabled?: boolean
28
+
29
+ ### MultiSelectGroup
30
+ label: string
31
+ items: MultiSelectItem[]
32
+
33
+ ## Defaults
34
+ searchPlaceholder="Search...", searchDebounce={300}, emptyMessage="No results found", align="start", width={240}
35
+
36
+ ## Example
37
+ ```jsx
38
+ <MultiSelectPopover
39
+ items={[
40
+ { id: '1', label: 'Alice', image: '/alice.jpg' },
41
+ { id: '2', label: 'Bob' },
42
+ ]}
43
+ value={selected}
44
+ onValueChange={setSelected}
45
+ >
46
+ <Button>Assign members</Button>
47
+ </MultiSelectPopover>
48
+ ```
49
+
50
+ ## Gotchas
51
+ - Supply either `items` (flat) or `groups` (sectioned), not both
52
+ - When `onSearch` is provided, local filtering is disabled — the callback must return results
53
+ - Search state resets when the popover closes
54
+ - `maxSelections: 1` acts as single-select — clicking a new item replaces the current one
55
+
56
+ ## Changes
57
+
58
+ ### v0.27.2
59
+ - **Fixed** `maxSelections` at limit now replaces oldest selection instead of blocking. Single-select (`maxSelections: 1`) swaps in the new value.
60
+
61
+ ### v0.26.0
62
+ - **Added** Initial release
@@ -1,41 +1,41 @@
1
- # PageHeader
2
-
3
- - Import: @devalok/shilp-sutra/composed/page-header
4
- - Server-safe: Yes
5
- - Category: composed
6
-
7
- ## Props
8
- title: string (falls back to last breadcrumb label if omitted)
9
- subtitle: string
10
- actions: ReactNode (action buttons)
11
- breadcrumbs: Breadcrumb[] — { label: string, href?: string }
12
- titleClassName: string
13
-
14
- ## Defaults
15
- None
16
-
17
- ## Example
18
- ```jsx
19
- <PageHeader
20
- title="Project Settings"
21
- subtitle="Configure your project preferences"
22
- breadcrumbs={[
23
- { label: 'Home', href: '/' },
24
- { label: 'Projects', href: '/projects' },
25
- { label: 'Settings' },
26
- ]}
27
- actions={<Button>Save</Button>}
28
- />
29
- ```
30
-
31
- ## Gotchas
32
- - Server-safe: can be imported directly in Next.js Server Components
33
- - If `title` is omitted, the last breadcrumb's `label` is used as the page title
34
- - The last breadcrumb should not have an `href` (it represents the current page)
35
-
36
- ## Changes
37
- ### v0.2.0
38
- - **Added** Identified as server-safe component
39
-
40
- ### v0.1.0
41
- - **Added** Initial release
1
+ # PageHeader
2
+
3
+ - Import: @devalok/shilp-sutra/composed/page-header
4
+ - Server-safe: Yes
5
+ - Category: composed
6
+
7
+ ## Props
8
+ title: string (falls back to last breadcrumb label if omitted)
9
+ subtitle: string
10
+ actions: ReactNode (action buttons)
11
+ breadcrumbs: Breadcrumb[] — { label: string, href?: string }
12
+ titleClassName: string
13
+
14
+ ## Defaults
15
+ None
16
+
17
+ ## Example
18
+ ```jsx
19
+ <PageHeader
20
+ title="Project Settings"
21
+ subtitle="Configure your project preferences"
22
+ breadcrumbs={[
23
+ { label: 'Home', href: '/' },
24
+ { label: 'Projects', href: '/projects' },
25
+ { label: 'Settings' },
26
+ ]}
27
+ actions={<Button>Save</Button>}
28
+ />
29
+ ```
30
+
31
+ ## Gotchas
32
+ - Server-safe: can be imported directly in Next.js Server Components
33
+ - If `title` is omitted, the last breadcrumb's `label` is used as the page title
34
+ - The last breadcrumb should not have an `href` (it represents the current page)
35
+
36
+ ## Changes
37
+ ### v0.2.0
38
+ - **Added** Identified as server-safe component
39
+
40
+ ### v0.1.0
41
+ - **Added** Initial release
@@ -1,32 +1,32 @@
1
- # PageSkeletons
2
-
3
- - Import: @devalok/shilp-sutra/composed/page-skeletons
4
- - Server-safe: Yes
5
- - Category: composed
6
-
7
- Exports: DashboardSkeleton, ProjectListSkeleton, TaskDetailSkeleton
8
-
9
- ## Props
10
- className?: string (plus all standard HTML div attributes via React.ComponentPropsWithoutRef<'div'>)
11
-
12
- ## Defaults
13
- None
14
-
15
- ## Example
16
- ```jsx
17
- <DashboardSkeleton />
18
- <ProjectListSkeleton />
19
- <TaskDetailSkeleton />
20
- ```
21
-
22
- ## Gotchas
23
- - Server-safe: can be imported directly in Next.js Server Components
24
- - These are full-page skeleton layouts — for smaller skeleton sections, use LoadingSkeleton components
25
- - Accept `className` and standard div attributes but render fixed layout structures
26
-
27
- ## Changes
28
- ### v0.2.0
29
- - **Added** Identified as server-safe component
30
-
31
- ### v0.1.0
32
- - **Added** Initial release
1
+ # PageSkeletons
2
+
3
+ - Import: @devalok/shilp-sutra/composed/page-skeletons
4
+ - Server-safe: Yes
5
+ - Category: composed
6
+
7
+ Exports: DashboardSkeleton, ProjectListSkeleton, TaskDetailSkeleton
8
+
9
+ ## Props
10
+ className?: string (plus all standard HTML div attributes via React.ComponentPropsWithoutRef<'div'>)
11
+
12
+ ## Defaults
13
+ None
14
+
15
+ ## Example
16
+ ```jsx
17
+ <DashboardSkeleton />
18
+ <ProjectListSkeleton />
19
+ <TaskDetailSkeleton />
20
+ ```
21
+
22
+ ## Gotchas
23
+ - Server-safe: can be imported directly in Next.js Server Components
24
+ - These are full-page skeleton layouts — for smaller skeleton sections, use LoadingSkeleton components
25
+ - Accept `className` and standard div attributes but render fixed layout structures
26
+
27
+ ## Changes
28
+ ### v0.2.0
29
+ - **Added** Identified as server-safe component
30
+
31
+ ### v0.1.0
32
+ - **Added** Initial release
@@ -1,32 +1,32 @@
1
- # PriorityIndicator
2
-
3
- - Import: @devalok/shilp-sutra/composed/priority-indicator
4
- - Server-safe: Yes
5
- - Category: composed
6
-
7
- ## Props
8
- priority: Priority
9
- display: "compact" | "full" (default: "full")
10
-
11
- Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' | 'low' | 'medium' | 'high' | 'urgent'
12
-
13
- ## Defaults
14
- display="full"
15
-
16
- ## Example
17
- ```jsx
18
- <PriorityIndicator priority="HIGH" />
19
- <PriorityIndicator priority="low" display="compact" />
20
- ```
21
-
22
- ## Gotchas
23
- - Case-insensitive — "low" and "LOW" both work
24
- - Server-safe: can be imported directly in Next.js Server Components
25
- - `compact` display shows only the icon; `full` shows icon + text label
26
-
27
- ## Changes
28
- ### v0.2.0
29
- - **Added** Identified as server-safe component
30
-
31
- ### v0.1.0
32
- - **Added** Initial release
1
+ # PriorityIndicator
2
+
3
+ - Import: @devalok/shilp-sutra/composed/priority-indicator
4
+ - Server-safe: Yes
5
+ - Category: composed
6
+
7
+ ## Props
8
+ priority: Priority
9
+ display: "compact" | "full" (default: "full")
10
+
11
+ Priority = 'LOW' | 'MEDIUM' | 'HIGH' | 'URGENT' | 'low' | 'medium' | 'high' | 'urgent'
12
+
13
+ ## Defaults
14
+ display="full"
15
+
16
+ ## Example
17
+ ```jsx
18
+ <PriorityIndicator priority="HIGH" />
19
+ <PriorityIndicator priority="low" display="compact" />
20
+ ```
21
+
22
+ ## Gotchas
23
+ - Case-insensitive — "low" and "LOW" both work
24
+ - Server-safe: can be imported directly in Next.js Server Components
25
+ - `compact` display shows only the icon; `full` shows icon + text label
26
+
27
+ ## Changes
28
+ ### v0.2.0
29
+ - **Added** Identified as server-safe component
30
+
31
+ ### v0.1.0
32
+ - **Added** Initial release
@@ -1,34 +1,34 @@
1
- # ResponsiveOverlay
2
-
3
- - Import: @devalok/shilp-sutra/composed/responsive-overlay
4
- - Server-safe: No
5
- - Category: composed
6
-
7
- ## Props
8
- open: boolean
9
- onOpenChange: (open: boolean) => void
10
- title: string
11
- description: string
12
- breakpoint: "sm" | "md" (below this renders as bottom Sheet; above as Dialog)
13
- children: ReactNode
14
- className: string
15
-
16
- ## Defaults
17
- breakpoint="md"
18
-
19
- ## Example
20
- ```jsx
21
- <ResponsiveOverlay
22
- open={open}
23
- onOpenChange={setOpen}
24
- title="Edit task"
25
- description="Update the task details"
26
- >
27
- <TaskForm />
28
- </ResponsiveOverlay>
29
- ```
30
-
31
- ## Gotchas
32
- - Renders a centered Dialog on desktop and a bottom Sheet on mobile — same content, different container
33
- - Uses `window.matchMedia` internally — SSR defaults to desktop (Dialog) until hydration
34
- - Title and description are optional; if omitted, no header is rendered in either mode
1
+ # ResponsiveOverlay
2
+
3
+ - Import: @devalok/shilp-sutra/composed/responsive-overlay
4
+ - Server-safe: No
5
+ - Category: composed
6
+
7
+ ## Props
8
+ open: boolean
9
+ onOpenChange: (open: boolean) => void
10
+ title: string
11
+ description: string
12
+ breakpoint: "sm" | "md" (below this renders as bottom Sheet; above as Dialog)
13
+ children: ReactNode
14
+ className: string
15
+
16
+ ## Defaults
17
+ breakpoint="md"
18
+
19
+ ## Example
20
+ ```jsx
21
+ <ResponsiveOverlay
22
+ open={open}
23
+ onOpenChange={setOpen}
24
+ title="Edit task"
25
+ description="Update the task details"
26
+ >
27
+ <TaskForm />
28
+ </ResponsiveOverlay>
29
+ ```
30
+
31
+ ## Gotchas
32
+ - Renders a centered Dialog on desktop and a bottom Sheet on mobile — same content, different container
33
+ - Uses `window.matchMedia` internally — SSR defaults to desktop (Dialog) until hydration
34
+ - Title and description are optional; if omitted, no header is rendered in either mode
@@ -1,82 +1,82 @@
1
- # RichTextEditor
2
-
3
- - Import: @devalok/shilp-sutra/composed/rich-text-editor
4
- - Server-safe: No
5
- - Category: composed
6
-
7
- Exports: RichTextEditor, RichTextViewer
8
-
9
- ## Props
10
-
11
- ### RichTextEditor
12
- content: string (HTML string)
13
- placeholder: string (default: "Start writing...")
14
- onChange: (html: string) => void
15
- className: string
16
- editable: boolean (default: true)
17
- onImageUpload?: (file: File) => Promise<string> — return URL. If omitted, images paste as base64
18
- onFileUpload?: (file: File) => Promise<{ url: string; name: string; size: number }> — enables file attachments
19
- mentions?: MentionItem[] — static list for @mention autocomplete
20
- onMentionSearch?: (query: string) => Promise<MentionItem[]> — async search, takes precedence over static mentions
21
- toolbar?: ToolbarItem[] — whitelist of toolbar items to show. Omit to show all.
22
- onMentionSelect?: (item: MentionItem) => void — called when a mention is selected
23
-
24
- ToolbarItem: 'bold' | 'italic' | 'underline' | 'strike' | 'highlight' | 'h2' | 'h3' | 'blockquote' | 'bulletList' | 'orderedList' | 'taskList' | 'codeBlock' | 'link' | 'image' | 'file' | 'hr' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'emoji' | 'undo' | 'redo'
25
-
26
- MentionItem: { id: string; label: string; avatar?: string }
27
-
28
- ### RichTextViewer
29
- content: string (REQUIRED, HTML string)
30
- className: string
31
-
32
- ## Defaults
33
- RichTextEditor: placeholder="Start writing...", editable=true
34
-
35
- ## Example
36
- ```jsx
37
- <RichTextEditor content={html} onChange={setHtml} placeholder="Write your message..." />
38
-
39
- <RichTextEditor
40
- content={html}
41
- onChange={setHtml}
42
- mentions={[{ id: '1', label: 'Aarav' }]}
43
- onImageUpload={async (file) => uploadAndReturnUrl(file)}
44
- onFileUpload={async (file) => ({ url: uploadUrl, name: file.name, size: file.size })}
45
- />
46
-
47
- <RichTextViewer content={savedHtml} />
48
- ```
49
-
50
- ## Gotchas
51
- - Tiptap is bundled — no need to install `@tiptap/*` packages separately
52
- - Emoji picker requires `@emoji-mart/react` + `@emoji-mart/data` peers
53
- - Images without `onImageUpload` are stored as base64 in HTML — large images bloat content
54
- - Mention rendering in viewer always works (no mention props needed, just the HTML)
55
- - Features: bold, italic, underline, strikethrough, highlight, headings, blockquote, lists, task lists, code, links, images, file attachments, mentions, emoji, text alignment, horizontal rule
56
-
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
-
63
- ### v0.30.0
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.
65
-
66
- ### v0.18.0
67
- - **Fixed** Use ref to track internal changes, prevent update loop
68
-
69
- ### v0.9.0
70
- - **Changed** All `@tiptap/*` packages moved from peerDependencies to bundled build-time dependencies — consumers no longer need to install tiptap separately
71
-
72
- ### v0.8.0
73
- - **Fixed** Emoji picker now renders above the editor (not clipped by overflow)
74
- - **Fixed** Link/image URL injection prevented via protocol validation
75
- - **Fixed** Escape key in emoji picker no longer closes parent dialogs
76
- - **Fixed** Tiptap peer deps tightened to `>=2.27.2 <3.0.0`
77
-
78
- ### v0.7.0
79
- - **Added** Initial release — full-featured tiptap-based rich text editing with toolbar, mentions, emoji, image, alignment
80
-
81
- ### v0.1.1
82
- - **Fixed** Added content sync effect so editor updates when `content` prop changes externally
1
+ # RichTextEditor
2
+
3
+ - Import: @devalok/shilp-sutra/composed/rich-text-editor
4
+ - Server-safe: No
5
+ - Category: composed
6
+
7
+ Exports: RichTextEditor, RichTextViewer
8
+
9
+ ## Props
10
+
11
+ ### RichTextEditor
12
+ content: string (HTML string)
13
+ placeholder: string (default: "Start writing...")
14
+ onChange: (html: string) => void
15
+ className: string
16
+ editable: boolean (default: true)
17
+ onImageUpload?: (file: File) => Promise<string> — return URL. If omitted, images paste as base64
18
+ onFileUpload?: (file: File) => Promise<{ url: string; name: string; size: number }> — enables file attachments
19
+ mentions?: MentionItem[] — static list for @mention autocomplete
20
+ onMentionSearch?: (query: string) => Promise<MentionItem[]> — async search, takes precedence over static mentions
21
+ toolbar?: ToolbarItem[] — whitelist of toolbar items to show. Omit to show all.
22
+ onMentionSelect?: (item: MentionItem) => void — called when a mention is selected
23
+
24
+ ToolbarItem: 'bold' | 'italic' | 'underline' | 'strike' | 'highlight' | 'h2' | 'h3' | 'blockquote' | 'bulletList' | 'orderedList' | 'taskList' | 'codeBlock' | 'link' | 'image' | 'file' | 'hr' | 'alignLeft' | 'alignCenter' | 'alignRight' | 'emoji' | 'undo' | 'redo'
25
+
26
+ MentionItem: { id: string; label: string; avatar?: string }
27
+
28
+ ### RichTextViewer
29
+ content: string (REQUIRED, HTML string)
30
+ className: string
31
+
32
+ ## Defaults
33
+ RichTextEditor: placeholder="Start writing...", editable=true
34
+
35
+ ## Example
36
+ ```jsx
37
+ <RichTextEditor content={html} onChange={setHtml} placeholder="Write your message..." />
38
+
39
+ <RichTextEditor
40
+ content={html}
41
+ onChange={setHtml}
42
+ mentions={[{ id: '1', label: 'Aarav' }]}
43
+ onImageUpload={async (file) => uploadAndReturnUrl(file)}
44
+ onFileUpload={async (file) => ({ url: uploadUrl, name: file.name, size: file.size })}
45
+ />
46
+
47
+ <RichTextViewer content={savedHtml} />
48
+ ```
49
+
50
+ ## Gotchas
51
+ - Tiptap is bundled — no need to install `@tiptap/*` packages separately
52
+ - Emoji picker requires `@emoji-mart/react` + `@emoji-mart/data` peers
53
+ - Images without `onImageUpload` are stored as base64 in HTML — large images bloat content
54
+ - Mention rendering in viewer always works (no mention props needed, just the HTML)
55
+ - Features: bold, italic, underline, strikethrough, highlight, headings, blockquote, lists, task lists, code, links, images, file attachments, mentions, emoji, text alignment, horizontal rule
56
+
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
+
63
+ ### v0.30.0
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.
65
+
66
+ ### v0.18.0
67
+ - **Fixed** Use ref to track internal changes, prevent update loop
68
+
69
+ ### v0.9.0
70
+ - **Changed** All `@tiptap/*` packages moved from peerDependencies to bundled build-time dependencies — consumers no longer need to install tiptap separately
71
+
72
+ ### v0.8.0
73
+ - **Fixed** Emoji picker now renders above the editor (not clipped by overflow)
74
+ - **Fixed** Link/image URL injection prevented via protocol validation
75
+ - **Fixed** Escape key in emoji picker no longer closes parent dialogs
76
+ - **Fixed** Tiptap peer deps tightened to `>=2.27.2 <3.0.0`
77
+
78
+ ### v0.7.0
79
+ - **Added** Initial release — full-featured tiptap-based rich text editing with toolbar, mentions, emoji, image, alignment
80
+
81
+ ### v0.1.1
82
+ - **Fixed** Added content sync effect so editor updates when `content` prop changes externally