@devalok/shilp-sutra 0.34.1 → 0.36.1

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 (440) 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 +651 -650
  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 +1 -1
  78. package/dist/composed/rich-text-editor.js.map +1 -0
  79. package/dist/composed/schedule-view.js.map +1 -0
  80. package/dist/composed/simple-tooltip.js.map +1 -0
  81. package/dist/composed/status-badge.d.ts.map +1 -1
  82. package/dist/composed/status-badge.js.map +1 -0
  83. package/dist/hooks/use-color-mode.js.map +1 -0
  84. package/dist/hooks/use-mobile.js.map +1 -0
  85. package/dist/hooks/use-touch-device.js.map +1 -0
  86. package/dist/hooks/use-viewport-height.js.map +1 -0
  87. package/dist/motion/check-motion-provider.d.ts +3 -0
  88. package/dist/motion/check-motion-provider.d.ts.map +1 -0
  89. package/dist/motion/index.js +14 -0
  90. package/dist/motion/index.js.map +1 -0
  91. package/dist/motion/primitives-index.js.map +1 -0
  92. package/dist/primitives/react-accordion.d.ts +114 -114
  93. package/dist/primitives/react-alert-dialog.d.ts +51 -51
  94. package/dist/primitives/react-aspect-ratio.d.ts +11 -11
  95. package/dist/primitives/react-avatar.d.ts +24 -24
  96. package/dist/primitives/react-checkbox.d.ts +50 -50
  97. package/dist/primitives/react-collapsible.d.ts +33 -33
  98. package/dist/primitives/react-context-menu.d.ts +96 -96
  99. package/dist/primitives/react-dialog.d.ts +103 -103
  100. package/dist/primitives/react-dropdown-menu.d.ts +97 -97
  101. package/dist/primitives/react-hover-card.d.ts +79 -79
  102. package/dist/primitives/react-label.d.ts +10 -10
  103. package/dist/primitives/react-menu.d.ts +169 -169
  104. package/dist/primitives/react-menubar.d.ts +115 -115
  105. package/dist/primitives/react-navigation-menu.d.ts +126 -126
  106. package/dist/primitives/react-popover.d.ts +85 -85
  107. package/dist/primitives/react-progress.d.ts +19 -19
  108. package/dist/primitives/react-radio-group.d.ts +58 -58
  109. package/dist/primitives/react-roving-focus.d.ts +49 -49
  110. package/dist/primitives/react-select.d.ts +137 -137
  111. package/dist/primitives/react-separator.d.ts +21 -21
  112. package/dist/primitives/react-slider.d.ts +75 -75
  113. package/dist/primitives/react-switch.d.ts +21 -21
  114. package/dist/primitives/react-tabs.d.ts +56 -56
  115. package/dist/primitives/react-toast.d.ts +120 -120
  116. package/dist/primitives/react-toggle-group.d.ts +75 -75
  117. package/dist/primitives/react-toggle.d.ts +24 -24
  118. package/dist/primitives/react-tooltip.d.ts +101 -101
  119. package/dist/primitives/react-visually-hidden.d.ts +22 -22
  120. package/dist/shell/app-command-palette.d.ts +2 -0
  121. package/dist/shell/app-command-palette.d.ts.map +1 -1
  122. package/dist/shell/app-command-palette.js +42 -155
  123. package/dist/shell/app-command-palette.js.map +1 -0
  124. package/dist/shell/bottom-navbar.js +1 -1
  125. package/dist/shell/bottom-navbar.js.map +1 -0
  126. package/dist/shell/command-registry.js.map +1 -0
  127. package/dist/shell/notification-center.d.ts.map +1 -1
  128. package/dist/shell/notification-center.js +194 -169
  129. package/dist/shell/notification-center.js.map +1 -0
  130. package/dist/shell/notification-preferences.js.map +1 -0
  131. package/dist/shell/sidebar.js.map +1 -0
  132. package/dist/shell/top-bar.js +1 -1
  133. package/dist/shell/top-bar.js.map +1 -0
  134. package/dist/tailwind/index.cjs +48 -1
  135. package/dist/tailwind/preset.d.ts.map +1 -1
  136. package/dist/tailwind/preset.js +48 -1
  137. package/dist/tailwind/preset.js.map +1 -0
  138. package/dist/tokens/index.css +4 -4
  139. package/dist/tokens/primitives.css +442 -442
  140. package/dist/tokens/semantic.css +742 -547
  141. package/dist/tokens/typography-semantic.css +123 -100
  142. package/dist/tokens/typography.css +422 -422
  143. package/dist/ui/accordion.js +13 -13
  144. package/dist/ui/accordion.js.map +1 -0
  145. package/dist/ui/alert-dialog.d.ts +6 -2
  146. package/dist/ui/alert-dialog.d.ts.map +1 -1
  147. package/dist/ui/alert-dialog.js +43 -42
  148. package/dist/ui/alert-dialog.js.map +1 -0
  149. package/dist/ui/alert.d.ts +3 -2
  150. package/dist/ui/alert.d.ts.map +1 -1
  151. package/dist/ui/alert.js +31 -5
  152. package/dist/ui/alert.js.map +1 -0
  153. package/dist/ui/aspect-ratio.js +1 -1
  154. package/dist/ui/aspect-ratio.js.map +1 -0
  155. package/dist/ui/autocomplete.d.ts.map +1 -1
  156. package/dist/ui/autocomplete.js +92 -67
  157. package/dist/ui/autocomplete.js.map +1 -0
  158. package/dist/ui/avatar.js +9 -9
  159. package/dist/ui/avatar.js.map +1 -0
  160. package/dist/ui/badge-indicator.js.map +1 -0
  161. package/dist/ui/banner.js.map +1 -0
  162. package/dist/ui/breadcrumb.js +1 -1
  163. package/dist/ui/breadcrumb.js.map +1 -0
  164. package/dist/ui/button-group.js.map +1 -0
  165. package/dist/ui/button-processing.d.ts.map +1 -1
  166. package/dist/ui/button-processing.js +61 -40
  167. package/dist/ui/button-processing.js.map +1 -0
  168. package/dist/ui/button.js +8 -8
  169. package/dist/ui/button.js.map +1 -0
  170. package/dist/ui/card.js.map +1 -0
  171. package/dist/ui/charts/bar-chart.d.ts.map +1 -1
  172. package/dist/ui/charts/chart-container.d.ts +2 -0
  173. package/dist/ui/charts/chart-container.d.ts.map +1 -1
  174. package/dist/ui/charts/index.js +88 -65
  175. package/dist/ui/charts/index.js.map +1 -0
  176. package/dist/ui/charts/line-chart.d.ts.map +1 -1
  177. package/dist/ui/chat/message-input.d.ts.map +1 -1
  178. package/dist/ui/chat/message-list.d.ts +1 -1
  179. package/dist/ui/chat/message-list.d.ts.map +1 -1
  180. package/dist/ui/chat/message.d.ts.map +1 -1
  181. package/dist/ui/chat/system-message.d.ts.map +1 -1
  182. package/dist/ui/checkbox.d.ts.map +1 -1
  183. package/dist/ui/checkbox.js +33 -28
  184. package/dist/ui/checkbox.js.map +1 -0
  185. package/dist/ui/code.js.map +1 -0
  186. package/dist/ui/collapsible.js +1 -1
  187. package/dist/ui/collapsible.js.map +1 -0
  188. package/dist/ui/color-input.d.ts.map +1 -1
  189. package/dist/ui/color-input.js +165 -163
  190. package/dist/ui/color-input.js.map +1 -0
  191. package/dist/ui/color-swatch.js.map +1 -0
  192. package/dist/ui/combobox.d.ts +7 -0
  193. package/dist/ui/combobox.d.ts.map +1 -1
  194. package/dist/ui/combobox.js +147 -113
  195. package/dist/ui/combobox.js.map +1 -0
  196. package/dist/ui/container.js +1 -1
  197. package/dist/ui/container.js.map +1 -0
  198. package/dist/ui/context-menu.js.map +1 -0
  199. package/dist/ui/data-table-body.js.map +1 -0
  200. package/dist/ui/data-table-bulk-actions.js +1 -1
  201. package/dist/ui/data-table-bulk-actions.js.map +1 -0
  202. package/dist/ui/data-table-card.js.map +1 -0
  203. package/dist/ui/data-table-context.js.map +1 -0
  204. package/dist/ui/data-table-header.js.map +1 -0
  205. package/dist/ui/data-table-pagination.js.map +1 -0
  206. package/dist/ui/data-table-toolbar.js.map +1 -0
  207. package/dist/ui/data-table.js +34 -31
  208. package/dist/ui/data-table.js.map +1 -0
  209. package/dist/ui/devalok-grain.js.map +1 -0
  210. package/dist/ui/dialog.js +31 -35
  211. package/dist/ui/dialog.js.map +1 -0
  212. package/dist/ui/dropdown-menu.js.map +1 -0
  213. package/dist/ui/file-upload.js +120 -120
  214. package/dist/ui/file-upload.js.map +1 -0
  215. package/dist/ui/form.d.ts +8 -0
  216. package/dist/ui/form.d.ts.map +1 -1
  217. package/dist/ui/form.js +14 -12
  218. package/dist/ui/form.js.map +1 -0
  219. package/dist/ui/hover-card.js.map +1 -0
  220. package/dist/ui/icon-button.js.map +1 -0
  221. package/dist/ui/icon-context.js.map +1 -0
  222. package/dist/ui/icon-group.js.map +1 -0
  223. package/dist/ui/icon.js.map +1 -0
  224. package/dist/ui/index.d.ts +4 -4
  225. package/dist/ui/index.d.ts.map +1 -1
  226. package/dist/ui/index.js +82 -66
  227. package/dist/ui/index.js.map +1 -0
  228. package/dist/ui/input-otp.d.ts +12 -3
  229. package/dist/ui/input-otp.d.ts.map +1 -1
  230. package/dist/ui/input-otp.js +41 -27
  231. package/dist/ui/input-otp.js.map +1 -0
  232. package/dist/ui/input.d.ts.map +1 -1
  233. package/dist/ui/input.js +16 -15
  234. package/dist/ui/input.js.map +1 -0
  235. package/dist/ui/label.d.ts.map +1 -1
  236. package/dist/ui/label.js +19 -14
  237. package/dist/ui/label.js.map +1 -0
  238. package/dist/ui/lib/check-tokens.d.ts +3 -0
  239. package/dist/ui/lib/check-tokens.d.ts.map +1 -0
  240. package/dist/ui/lib/date-utils.js.map +1 -0
  241. package/dist/ui/lib/motion.d.ts +15 -4
  242. package/dist/ui/lib/motion.d.ts.map +1 -1
  243. package/dist/ui/lib/motion.js +18 -9
  244. package/dist/ui/lib/motion.js.map +1 -0
  245. package/dist/ui/lib/utils.js.map +1 -0
  246. package/dist/ui/link.js +2 -2
  247. package/dist/ui/link.js.map +1 -0
  248. package/dist/ui/menubar.js.map +1 -0
  249. package/dist/ui/navigation-menu.js.map +1 -0
  250. package/dist/ui/number-input.d.ts +16 -1
  251. package/dist/ui/number-input.d.ts.map +1 -1
  252. package/dist/ui/number-input.js +79 -49
  253. package/dist/ui/number-input.js.map +1 -0
  254. package/dist/ui/pagination.js +1 -1
  255. package/dist/ui/pagination.js.map +1 -0
  256. package/dist/ui/progress-ring.d.ts.map +1 -1
  257. package/dist/ui/progress-ring.js.map +1 -0
  258. package/dist/ui/progress.js.map +1 -0
  259. package/dist/ui/radio.d.ts.map +1 -1
  260. package/dist/ui/radio.js +27 -20
  261. package/dist/ui/radio.js.map +1 -0
  262. package/dist/ui/search-input.js.map +1 -0
  263. package/dist/ui/segmented-control.d.ts +1 -1
  264. package/dist/ui/segmented-control.d.ts.map +1 -1
  265. package/dist/ui/segmented-control.js +3 -1
  266. package/dist/ui/segmented-control.js.map +1 -0
  267. package/dist/ui/select.d.ts.map +1 -1
  268. package/dist/ui/select.js +54 -48
  269. package/dist/ui/select.js.map +1 -0
  270. package/dist/ui/separator.d.ts.map +1 -1
  271. package/dist/ui/separator.js +10 -7
  272. package/dist/ui/separator.js.map +1 -0
  273. package/dist/ui/sheet.js +29 -29
  274. package/dist/ui/sheet.js.map +1 -0
  275. package/dist/ui/sidebar.js +9 -9
  276. package/dist/ui/sidebar.js.map +1 -0
  277. package/dist/ui/skeleton.js.map +1 -0
  278. package/dist/ui/slider.d.ts +22 -3
  279. package/dist/ui/slider.d.ts.map +1 -1
  280. package/dist/ui/slider.js +57 -19
  281. package/dist/ui/slider.js.map +1 -0
  282. package/dist/ui/spinner.js.map +1 -0
  283. package/dist/ui/split-button.d.ts.map +1 -1
  284. package/dist/ui/split-button.js +77 -76
  285. package/dist/ui/split-button.js.map +1 -0
  286. package/dist/ui/stack.js.map +1 -0
  287. package/dist/ui/stat-card.js.map +1 -0
  288. package/dist/ui/status-dot.js.map +1 -0
  289. package/dist/ui/stepper.d.ts +10 -0
  290. package/dist/ui/stepper.d.ts.map +1 -1
  291. package/dist/ui/stepper.js +80 -75
  292. package/dist/ui/stepper.js.map +1 -0
  293. package/dist/ui/switch.d.ts.map +1 -1
  294. package/dist/ui/switch.js +26 -22
  295. package/dist/ui/switch.js.map +1 -0
  296. package/dist/ui/table.js.map +1 -0
  297. package/dist/ui/tabs.d.ts +3 -1
  298. package/dist/ui/tabs.d.ts.map +1 -1
  299. package/dist/ui/tabs.js +68 -48
  300. package/dist/ui/tabs.js.map +1 -0
  301. package/dist/ui/text.d.ts +1 -1
  302. package/dist/ui/text.d.ts.map +1 -1
  303. package/dist/ui/text.js +10 -2
  304. package/dist/ui/text.js.map +1 -0
  305. package/dist/ui/textarea.js +1 -1
  306. package/dist/ui/textarea.js.map +1 -0
  307. package/dist/ui/toast-registry.d.ts +8 -0
  308. package/dist/ui/toast-registry.d.ts.map +1 -0
  309. package/dist/ui/toast-registry.js +13 -0
  310. package/dist/ui/toast-registry.js.map +1 -0
  311. package/dist/ui/toast.d.ts.map +1 -1
  312. package/dist/ui/toast.js +141 -136
  313. package/dist/ui/toast.js.map +1 -0
  314. package/dist/ui/toaster.d.ts.map +1 -1
  315. package/dist/ui/toaster.js +15 -14
  316. package/dist/ui/toaster.js.map +1 -0
  317. package/dist/ui/toggle-group.d.ts +2 -0
  318. package/dist/ui/toggle-group.d.ts.map +1 -1
  319. package/dist/ui/toggle-group.js +23 -16
  320. package/dist/ui/toggle-group.js.map +1 -0
  321. package/dist/ui/toggle.d.ts +2 -0
  322. package/dist/ui/toggle.d.ts.map +1 -1
  323. package/dist/ui/toggle.js +14 -6
  324. package/dist/ui/toggle.js.map +1 -0
  325. package/dist/ui/tooltip.js.map +1 -0
  326. package/dist/ui/visually-hidden.js.map +1 -0
  327. package/docs/components/_header.md +85 -85
  328. package/docs/components/composed/activity-feed.md +62 -62
  329. package/docs/components/composed/avatar-group.md +65 -65
  330. package/docs/components/composed/bulk-action-bar.md +40 -40
  331. package/docs/components/composed/command-palette.md +40 -40
  332. package/docs/components/composed/confirm-dialog.md +46 -46
  333. package/docs/components/composed/content-card.md +36 -36
  334. package/docs/components/composed/date-picker.md +130 -130
  335. package/docs/components/composed/deadline-indicator.md +27 -27
  336. package/docs/components/composed/emoji-picker.md +52 -52
  337. package/docs/components/composed/empty-state.md +53 -53
  338. package/docs/components/composed/error-boundary.md +29 -29
  339. package/docs/components/composed/file-preview.md +40 -40
  340. package/docs/components/composed/filter-bar.md +57 -57
  341. package/docs/components/composed/form-section.md +31 -31
  342. package/docs/components/composed/global-loading.md +27 -27
  343. package/docs/components/composed/inline-edit.md +35 -35
  344. package/docs/components/composed/loading-skeleton.md +51 -51
  345. package/docs/components/composed/markdown-viewer.md +27 -27
  346. package/docs/components/composed/master-detail.md +48 -48
  347. package/docs/components/composed/member-picker.md +35 -35
  348. package/docs/components/composed/multi-select-popover.md +62 -62
  349. package/docs/components/composed/page-header.md +41 -41
  350. package/docs/components/composed/page-skeletons.md +32 -32
  351. package/docs/components/composed/priority-indicator.md +32 -32
  352. package/docs/components/composed/responsive-overlay.md +34 -34
  353. package/docs/components/composed/rich-text-editor.md +82 -82
  354. package/docs/components/composed/schedule-view.md +39 -39
  355. package/docs/components/composed/simple-tooltip.md +33 -33
  356. package/docs/components/composed/status-badge.md +55 -55
  357. package/docs/components/shell/app-command-palette.md +44 -44
  358. package/docs/components/shell/bottom-navbar.md +52 -52
  359. package/docs/components/shell/command-registry.md +48 -48
  360. package/docs/components/shell/link-context.md +41 -41
  361. package/docs/components/shell/notification-center.md +63 -63
  362. package/docs/components/shell/notification-preferences.md +42 -42
  363. package/docs/components/shell/sidebar.md +92 -92
  364. package/docs/components/shell/top-bar.md +143 -143
  365. package/docs/components/ui/accordion.md +51 -51
  366. package/docs/components/ui/alert-dialog.md +61 -61
  367. package/docs/components/ui/alert.md +46 -46
  368. package/docs/components/ui/aspect-ratio.md +25 -25
  369. package/docs/components/ui/autocomplete.md +48 -48
  370. package/docs/components/ui/avatar.md +56 -56
  371. package/docs/components/ui/badge.md +83 -82
  372. package/docs/components/ui/banner.md +42 -42
  373. package/docs/components/ui/breadcrumb.md +37 -37
  374. package/docs/components/ui/button-group.md +41 -41
  375. package/docs/components/ui/button.md +94 -93
  376. package/docs/components/ui/card.md +52 -52
  377. package/docs/components/ui/charts.md +43 -43
  378. package/docs/components/ui/checkbox.md +36 -36
  379. package/docs/components/ui/chip.md +47 -47
  380. package/docs/components/ui/code.md +28 -28
  381. package/docs/components/ui/collapsible.md +40 -40
  382. package/docs/components/ui/color-input.md +91 -91
  383. package/docs/components/ui/color-swatch.md +25 -25
  384. package/docs/components/ui/combobox.md +54 -54
  385. package/docs/components/ui/container.md +26 -26
  386. package/docs/components/ui/context-menu.md +43 -43
  387. package/docs/components/ui/data-table-body.md +1 -1
  388. package/docs/components/ui/data-table-bulk-actions.md +1 -1
  389. package/docs/components/ui/data-table-card.md +1 -1
  390. package/docs/components/ui/data-table-context.md +1 -1
  391. package/docs/components/ui/data-table-header.md +1 -1
  392. package/docs/components/ui/data-table-pagination.md +1 -1
  393. package/docs/components/ui/data-table-toolbar.md +44 -44
  394. package/docs/components/ui/data-table.md +94 -94
  395. package/docs/components/ui/dialog.md +54 -54
  396. package/docs/components/ui/dropdown-menu.md +48 -48
  397. package/docs/components/ui/file-upload.md +41 -41
  398. package/docs/components/ui/form.md +51 -51
  399. package/docs/components/ui/hover-card.md +32 -32
  400. package/docs/components/ui/icon-button.md +40 -40
  401. package/docs/components/ui/input-otp.md +44 -44
  402. package/docs/components/ui/input.md +74 -74
  403. package/docs/components/ui/label.md +25 -25
  404. package/docs/components/ui/link.md +29 -29
  405. package/docs/components/ui/menubar.md +44 -44
  406. package/docs/components/ui/navigation-menu.md +46 -46
  407. package/docs/components/ui/number-input.md +44 -44
  408. package/docs/components/ui/pagination.md +48 -48
  409. package/docs/components/ui/popover.md +30 -30
  410. package/docs/components/ui/progress-ring.md +41 -41
  411. package/docs/components/ui/progress.md +34 -34
  412. package/docs/components/ui/radio.md +34 -34
  413. package/docs/components/ui/search-input.md +43 -43
  414. package/docs/components/ui/segmented-control.md +50 -50
  415. package/docs/components/ui/select.md +53 -53
  416. package/docs/components/ui/separator.md +32 -32
  417. package/docs/components/ui/sheet.md +47 -47
  418. package/docs/components/ui/sidebar.md +72 -72
  419. package/docs/components/ui/skeleton.md +77 -77
  420. package/docs/components/ui/slider.md +29 -29
  421. package/docs/components/ui/spinner.md +54 -54
  422. package/docs/components/ui/stack.md +39 -39
  423. package/docs/components/ui/stat-card.md +61 -61
  424. package/docs/components/ui/status-dot.md +26 -26
  425. package/docs/components/ui/stepper.md +49 -49
  426. package/docs/components/ui/switch.md +47 -47
  427. package/docs/components/ui/table.md +47 -47
  428. package/docs/components/ui/tabs.md +60 -60
  429. package/docs/components/ui/text.md +37 -37
  430. package/docs/components/ui/textarea.md +39 -39
  431. package/docs/components/ui/toast.md +65 -65
  432. package/docs/components/ui/toaster.md +47 -47
  433. package/docs/components/ui/toggle-group.md +43 -43
  434. package/docs/components/ui/toggle.md +37 -37
  435. package/docs/components/ui/tooltip.md +38 -38
  436. package/docs/components/ui/tree-view.md +65 -65
  437. package/docs/components/ui/visually-hidden.md +21 -21
  438. package/llms-full.txt +5266 -5264
  439. package/llms.txt +624 -580
  440. 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