@dowel-ui/react 0.1.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 (691) hide show
  1. package/LICENSE +21 -0
  2. package/dist/blocks/admin-users/meta.js +27 -0
  3. package/dist/blocks/admin-users/meta.js.map +1 -0
  4. package/dist/blocks/ai-chat/meta.js +30 -0
  5. package/dist/blocks/ai-chat/meta.js.map +1 -0
  6. package/dist/blocks/dashboard/meta.js +23 -0
  7. package/dist/blocks/dashboard/meta.js.map +1 -0
  8. package/dist/blocks/forgot-password/meta.js +24 -0
  9. package/dist/blocks/forgot-password/meta.js.map +1 -0
  10. package/dist/blocks/login/meta.js +26 -0
  11. package/dist/blocks/login/meta.js.map +1 -0
  12. package/dist/blocks/pricing/meta.js +24 -0
  13. package/dist/blocks/pricing/meta.js.map +1 -0
  14. package/dist/blocks/settings/meta.js +29 -0
  15. package/dist/blocks/settings/meta.js.map +1 -0
  16. package/dist/blocks/signup/meta.js +25 -0
  17. package/dist/blocks/signup/meta.js.map +1 -0
  18. package/dist/components/accordion/accordion.d.ts +19 -0
  19. package/dist/components/accordion/accordion.d.ts.map +1 -0
  20. package/dist/components/accordion/accordion.js +58 -0
  21. package/dist/components/accordion/accordion.js.map +1 -0
  22. package/dist/components/accordion/index.d.ts +2 -0
  23. package/dist/components/accordion/index.js +2 -0
  24. package/dist/components/accordion/meta.js +17 -0
  25. package/dist/components/accordion/meta.js.map +1 -0
  26. package/dist/components/activity-feed/activity-feed.d.ts +39 -0
  27. package/dist/components/activity-feed/activity-feed.d.ts.map +1 -0
  28. package/dist/components/activity-feed/activity-feed.js +77 -0
  29. package/dist/components/activity-feed/activity-feed.js.map +1 -0
  30. package/dist/components/activity-feed/index.d.ts +2 -0
  31. package/dist/components/activity-feed/index.js +2 -0
  32. package/dist/components/activity-feed/meta.js +17 -0
  33. package/dist/components/activity-feed/meta.js.map +1 -0
  34. package/dist/components/ai-agent-status/ai-agent-status.d.ts +30 -0
  35. package/dist/components/ai-agent-status/ai-agent-status.d.ts.map +1 -0
  36. package/dist/components/ai-agent-status/ai-agent-status.js +43 -0
  37. package/dist/components/ai-agent-status/ai-agent-status.js.map +1 -0
  38. package/dist/components/ai-agent-status/index.d.ts +2 -0
  39. package/dist/components/ai-agent-status/index.js +2 -0
  40. package/dist/components/ai-agent-status/meta.js +17 -0
  41. package/dist/components/ai-agent-status/meta.js.map +1 -0
  42. package/dist/components/ai-conversation/ai-conversation.d.ts +45 -0
  43. package/dist/components/ai-conversation/ai-conversation.d.ts.map +1 -0
  44. package/dist/components/ai-conversation/ai-conversation.js +138 -0
  45. package/dist/components/ai-conversation/ai-conversation.js.map +1 -0
  46. package/dist/components/ai-conversation/index.d.ts +2 -0
  47. package/dist/components/ai-conversation/index.js +2 -0
  48. package/dist/components/ai-conversation/meta.js +17 -0
  49. package/dist/components/ai-conversation/meta.js.map +1 -0
  50. package/dist/components/ai-message/ai-message.d.ts +56 -0
  51. package/dist/components/ai-message/ai-message.d.ts.map +1 -0
  52. package/dist/components/ai-message/ai-message.js +90 -0
  53. package/dist/components/ai-message/ai-message.js.map +1 -0
  54. package/dist/components/ai-message/index.d.ts +2 -0
  55. package/dist/components/ai-message/index.js +2 -0
  56. package/dist/components/ai-message/meta.js +17 -0
  57. package/dist/components/ai-message/meta.js.map +1 -0
  58. package/dist/components/ai-model-selector/ai-model-selector.d.ts +42 -0
  59. package/dist/components/ai-model-selector/ai-model-selector.d.ts.map +1 -0
  60. package/dist/components/ai-model-selector/ai-model-selector.js +48 -0
  61. package/dist/components/ai-model-selector/ai-model-selector.js.map +1 -0
  62. package/dist/components/ai-model-selector/index.d.ts +2 -0
  63. package/dist/components/ai-model-selector/index.js +2 -0
  64. package/dist/components/ai-model-selector/meta.js +17 -0
  65. package/dist/components/ai-model-selector/meta.js.map +1 -0
  66. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts +61 -0
  67. package/dist/components/ai-prompt-input/ai-prompt-input.d.ts.map +1 -0
  68. package/dist/components/ai-prompt-input/ai-prompt-input.js +170 -0
  69. package/dist/components/ai-prompt-input/ai-prompt-input.js.map +1 -0
  70. package/dist/components/ai-prompt-input/index.d.ts +2 -0
  71. package/dist/components/ai-prompt-input/index.js +2 -0
  72. package/dist/components/ai-prompt-input/meta.js +17 -0
  73. package/dist/components/ai-prompt-input/meta.js.map +1 -0
  74. package/dist/components/ai-reasoning/ai-reasoning.d.ts +24 -0
  75. package/dist/components/ai-reasoning/ai-reasoning.d.ts.map +1 -0
  76. package/dist/components/ai-reasoning/ai-reasoning.js +64 -0
  77. package/dist/components/ai-reasoning/ai-reasoning.js.map +1 -0
  78. package/dist/components/ai-reasoning/index.d.ts +2 -0
  79. package/dist/components/ai-reasoning/index.js +2 -0
  80. package/dist/components/ai-reasoning/meta.js +17 -0
  81. package/dist/components/ai-reasoning/meta.js.map +1 -0
  82. package/dist/components/ai-response/ai-response.d.ts +36 -0
  83. package/dist/components/ai-response/ai-response.d.ts.map +1 -0
  84. package/dist/components/ai-response/ai-response.js +46 -0
  85. package/dist/components/ai-response/ai-response.js.map +1 -0
  86. package/dist/components/ai-response/index.d.ts +2 -0
  87. package/dist/components/ai-response/index.js +2 -0
  88. package/dist/components/ai-response/meta.js +17 -0
  89. package/dist/components/ai-response/meta.js.map +1 -0
  90. package/dist/components/ai-sources/ai-sources.d.ts +44 -0
  91. package/dist/components/ai-sources/ai-sources.d.ts.map +1 -0
  92. package/dist/components/ai-sources/ai-sources.js +112 -0
  93. package/dist/components/ai-sources/ai-sources.js.map +1 -0
  94. package/dist/components/ai-sources/index.d.ts +2 -0
  95. package/dist/components/ai-sources/index.js +2 -0
  96. package/dist/components/ai-sources/meta.js +17 -0
  97. package/dist/components/ai-sources/meta.js.map +1 -0
  98. package/dist/components/ai-token-usage/ai-token-usage.d.ts +34 -0
  99. package/dist/components/ai-token-usage/ai-token-usage.d.ts.map +1 -0
  100. package/dist/components/ai-token-usage/ai-token-usage.js +58 -0
  101. package/dist/components/ai-token-usage/ai-token-usage.js.map +1 -0
  102. package/dist/components/ai-token-usage/index.d.ts +2 -0
  103. package/dist/components/ai-token-usage/index.js +2 -0
  104. package/dist/components/ai-token-usage/meta.js +17 -0
  105. package/dist/components/ai-token-usage/meta.js.map +1 -0
  106. package/dist/components/ai-tool/ai-tool.d.ts +50 -0
  107. package/dist/components/ai-tool/ai-tool.d.ts.map +1 -0
  108. package/dist/components/ai-tool/ai-tool.js +129 -0
  109. package/dist/components/ai-tool/ai-tool.js.map +1 -0
  110. package/dist/components/ai-tool/index.d.ts +2 -0
  111. package/dist/components/ai-tool/index.js +2 -0
  112. package/dist/components/ai-tool/meta.js +17 -0
  113. package/dist/components/ai-tool/meta.js.map +1 -0
  114. package/dist/components/alert/alert.d.ts +32 -0
  115. package/dist/components/alert/alert.d.ts.map +1 -0
  116. package/dist/components/alert/alert.js +49 -0
  117. package/dist/components/alert/alert.js.map +1 -0
  118. package/dist/components/alert/index.d.ts +2 -0
  119. package/dist/components/alert/index.js +2 -0
  120. package/dist/components/alert/meta.js +17 -0
  121. package/dist/components/alert/meta.js.map +1 -0
  122. package/dist/components/avatar/avatar.d.ts +23 -0
  123. package/dist/components/avatar/avatar.d.ts.map +1 -0
  124. package/dist/components/avatar/avatar.js +44 -0
  125. package/dist/components/avatar/avatar.js.map +1 -0
  126. package/dist/components/avatar/index.d.ts +2 -0
  127. package/dist/components/avatar/index.js +2 -0
  128. package/dist/components/avatar/meta.js +17 -0
  129. package/dist/components/avatar/meta.js.map +1 -0
  130. package/dist/components/badge/badge.d.ts +20 -0
  131. package/dist/components/badge/badge.d.ts.map +1 -0
  132. package/dist/components/badge/badge.js +47 -0
  133. package/dist/components/badge/badge.js.map +1 -0
  134. package/dist/components/badge/index.d.ts +2 -0
  135. package/dist/components/badge/index.js +2 -0
  136. package/dist/components/badge/meta.js +17 -0
  137. package/dist/components/badge/meta.js.map +1 -0
  138. package/dist/components/button/button.d.ts +28 -0
  139. package/dist/components/button/button.d.ts.map +1 -0
  140. package/dist/components/button/button.js +77 -0
  141. package/dist/components/button/button.js.map +1 -0
  142. package/dist/components/button/index.d.ts +2 -0
  143. package/dist/components/button/index.js +2 -0
  144. package/dist/components/button/meta.js +17 -0
  145. package/dist/components/button/meta.js.map +1 -0
  146. package/dist/components/calendar/calendar.d.ts +16 -0
  147. package/dist/components/calendar/calendar.d.ts.map +1 -0
  148. package/dist/components/calendar/calendar.js +70 -0
  149. package/dist/components/calendar/calendar.js.map +1 -0
  150. package/dist/components/calendar/index.d.ts +2 -0
  151. package/dist/components/calendar/index.js +2 -0
  152. package/dist/components/calendar/meta.js +17 -0
  153. package/dist/components/calendar/meta.js.map +1 -0
  154. package/dist/components/card/card.d.ts +23 -0
  155. package/dist/components/card/card.d.ts.map +1 -0
  156. package/dist/components/card/card.js +53 -0
  157. package/dist/components/card/card.js.map +1 -0
  158. package/dist/components/card/index.d.ts +2 -0
  159. package/dist/components/card/index.js +2 -0
  160. package/dist/components/card/meta.js +17 -0
  161. package/dist/components/card/meta.js.map +1 -0
  162. package/dist/components/checkbox/checkbox.d.ts +15 -0
  163. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  164. package/dist/components/checkbox/checkbox.js +45 -0
  165. package/dist/components/checkbox/checkbox.js.map +1 -0
  166. package/dist/components/checkbox/index.d.ts +2 -0
  167. package/dist/components/checkbox/index.js +2 -0
  168. package/dist/components/checkbox/meta.js +17 -0
  169. package/dist/components/checkbox/meta.js.map +1 -0
  170. package/dist/components/code-block/code-block.d.ts +46 -0
  171. package/dist/components/code-block/code-block.d.ts.map +1 -0
  172. package/dist/components/code-block/code-block.js +110 -0
  173. package/dist/components/code-block/code-block.js.map +1 -0
  174. package/dist/components/code-block/index.d.ts +2 -0
  175. package/dist/components/code-block/index.js +2 -0
  176. package/dist/components/code-block/meta.js +17 -0
  177. package/dist/components/code-block/meta.js.map +1 -0
  178. package/dist/components/combobox/combobox.d.ts +59 -0
  179. package/dist/components/combobox/combobox.d.ts.map +1 -0
  180. package/dist/components/combobox/combobox.js +346 -0
  181. package/dist/components/combobox/combobox.js.map +1 -0
  182. package/dist/components/combobox/index.d.ts +2 -0
  183. package/dist/components/combobox/index.js +2 -0
  184. package/dist/components/combobox/meta.js +17 -0
  185. package/dist/components/combobox/meta.js.map +1 -0
  186. package/dist/components/command/command.d.ts +65 -0
  187. package/dist/components/command/command.d.ts.map +1 -0
  188. package/dist/components/command/command.js +330 -0
  189. package/dist/components/command/command.js.map +1 -0
  190. package/dist/components/command/index.d.ts +2 -0
  191. package/dist/components/command/index.js +2 -0
  192. package/dist/components/command/meta.js +17 -0
  193. package/dist/components/command/meta.js.map +1 -0
  194. package/dist/components/data-table/data-table.d.ts +91 -0
  195. package/dist/components/data-table/data-table.d.ts.map +1 -0
  196. package/dist/components/data-table/data-table.js +263 -0
  197. package/dist/components/data-table/data-table.js.map +1 -0
  198. package/dist/components/data-table/index.d.ts +2 -0
  199. package/dist/components/data-table/index.js +2 -0
  200. package/dist/components/data-table/meta.js +22 -0
  201. package/dist/components/data-table/meta.js.map +1 -0
  202. package/dist/components/date-picker/date-picker.d.ts +31 -0
  203. package/dist/components/date-picker/date-picker.d.ts.map +1 -0
  204. package/dist/components/date-picker/date-picker.js +123 -0
  205. package/dist/components/date-picker/date-picker.js.map +1 -0
  206. package/dist/components/date-picker/index.d.ts +2 -0
  207. package/dist/components/date-picker/index.js +2 -0
  208. package/dist/components/date-picker/meta.js +21 -0
  209. package/dist/components/date-picker/meta.js.map +1 -0
  210. package/dist/components/dialog/dialog.d.ts +30 -0
  211. package/dist/components/dialog/dialog.d.ts.map +1 -0
  212. package/dist/components/dialog/dialog.js +79 -0
  213. package/dist/components/dialog/dialog.js.map +1 -0
  214. package/dist/components/dialog/index.d.ts +2 -0
  215. package/dist/components/dialog/index.js +2 -0
  216. package/dist/components/dialog/meta.js +17 -0
  217. package/dist/components/dialog/meta.js.map +1 -0
  218. package/dist/components/drawer/drawer.d.ts +32 -0
  219. package/dist/components/drawer/drawer.d.ts.map +1 -0
  220. package/dist/components/drawer/drawer.js +153 -0
  221. package/dist/components/drawer/drawer.js.map +1 -0
  222. package/dist/components/drawer/index.d.ts +2 -0
  223. package/dist/components/drawer/index.js +2 -0
  224. package/dist/components/drawer/meta.js +17 -0
  225. package/dist/components/drawer/meta.js.map +1 -0
  226. package/dist/components/dropdown-menu/dropdown-menu.d.ts +43 -0
  227. package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +1 -0
  228. package/dist/components/dropdown-menu/dropdown-menu.js +130 -0
  229. package/dist/components/dropdown-menu/dropdown-menu.js.map +1 -0
  230. package/dist/components/dropdown-menu/index.d.ts +2 -0
  231. package/dist/components/dropdown-menu/index.js +2 -0
  232. package/dist/components/dropdown-menu/meta.js +17 -0
  233. package/dist/components/dropdown-menu/meta.js.map +1 -0
  234. package/dist/components/empty-state/empty-state.d.ts +24 -0
  235. package/dist/components/empty-state/empty-state.d.ts.map +1 -0
  236. package/dist/components/empty-state/empty-state.js +73 -0
  237. package/dist/components/empty-state/empty-state.js.map +1 -0
  238. package/dist/components/empty-state/index.d.ts +2 -0
  239. package/dist/components/empty-state/index.js +2 -0
  240. package/dist/components/empty-state/meta.js +17 -0
  241. package/dist/components/empty-state/meta.js.map +1 -0
  242. package/dist/components/form/form.d.ts +43 -0
  243. package/dist/components/form/form.d.ts.map +1 -0
  244. package/dist/components/form/form.js +127 -0
  245. package/dist/components/form/form.js.map +1 -0
  246. package/dist/components/form/index.d.ts +2 -0
  247. package/dist/components/form/index.js +2 -0
  248. package/dist/components/form/meta.js +17 -0
  249. package/dist/components/form/meta.js.map +1 -0
  250. package/dist/components/input/index.d.ts +2 -0
  251. package/dist/components/input/index.js +2 -0
  252. package/dist/components/input/input.d.ts +21 -0
  253. package/dist/components/input/input.d.ts.map +1 -0
  254. package/dist/components/input/input.js +34 -0
  255. package/dist/components/input/input.js.map +1 -0
  256. package/dist/components/input/meta.js +17 -0
  257. package/dist/components/input/meta.js.map +1 -0
  258. package/dist/components/label/index.d.ts +2 -0
  259. package/dist/components/label/index.js +2 -0
  260. package/dist/components/label/label.d.ts +14 -0
  261. package/dist/components/label/label.d.ts.map +1 -0
  262. package/dist/components/label/label.js +20 -0
  263. package/dist/components/label/label.js.map +1 -0
  264. package/dist/components/label/meta.js +17 -0
  265. package/dist/components/label/meta.js.map +1 -0
  266. package/dist/components/pagination/index.d.ts +2 -0
  267. package/dist/components/pagination/index.js +2 -0
  268. package/dist/components/pagination/meta.js +17 -0
  269. package/dist/components/pagination/meta.js.map +1 -0
  270. package/dist/components/pagination/pagination.d.ts +33 -0
  271. package/dist/components/pagination/pagination.d.ts.map +1 -0
  272. package/dist/components/pagination/pagination.js +143 -0
  273. package/dist/components/pagination/pagination.js.map +1 -0
  274. package/dist/components/popover/index.d.ts +2 -0
  275. package/dist/components/popover/index.js +2 -0
  276. package/dist/components/popover/meta.js +17 -0
  277. package/dist/components/popover/meta.js.map +1 -0
  278. package/dist/components/popover/popover.d.ts +24 -0
  279. package/dist/components/popover/popover.d.ts.map +1 -0
  280. package/dist/components/popover/popover.js +60 -0
  281. package/dist/components/popover/popover.js.map +1 -0
  282. package/dist/components/progress/index.d.ts +2 -0
  283. package/dist/components/progress/index.js +2 -0
  284. package/dist/components/progress/meta.js +17 -0
  285. package/dist/components/progress/meta.js.map +1 -0
  286. package/dist/components/progress/progress.d.ts +21 -0
  287. package/dist/components/progress/progress.d.ts.map +1 -0
  288. package/dist/components/progress/progress.js +55 -0
  289. package/dist/components/progress/progress.js.map +1 -0
  290. package/dist/components/radio-group/index.d.ts +2 -0
  291. package/dist/components/radio-group/index.js +2 -0
  292. package/dist/components/radio-group/meta.js +17 -0
  293. package/dist/components/radio-group/meta.js.map +1 -0
  294. package/dist/components/radio-group/radio-group.d.ts +17 -0
  295. package/dist/components/radio-group/radio-group.d.ts.map +1 -0
  296. package/dist/components/radio-group/radio-group.js +29 -0
  297. package/dist/components/radio-group/radio-group.js.map +1 -0
  298. package/dist/components/select/index.d.ts +2 -0
  299. package/dist/components/select/index.js +2 -0
  300. package/dist/components/select/meta.js +17 -0
  301. package/dist/components/select/meta.js.map +1 -0
  302. package/dist/components/select/select.d.ts +37 -0
  303. package/dist/components/select/select.d.ts.map +1 -0
  304. package/dist/components/select/select.js +128 -0
  305. package/dist/components/select/select.js.map +1 -0
  306. package/dist/components/separator/index.d.ts +2 -0
  307. package/dist/components/separator/index.js +2 -0
  308. package/dist/components/separator/meta.js +17 -0
  309. package/dist/components/separator/meta.js.map +1 -0
  310. package/dist/components/separator/separator.d.ts +15 -0
  311. package/dist/components/separator/separator.d.ts.map +1 -0
  312. package/dist/components/separator/separator.js +23 -0
  313. package/dist/components/separator/separator.js.map +1 -0
  314. package/dist/components/sheet/index.d.ts +2 -0
  315. package/dist/components/sheet/index.js +2 -0
  316. package/dist/components/sheet/meta.js +17 -0
  317. package/dist/components/sheet/meta.js.map +1 -0
  318. package/dist/components/sheet/sheet.d.ts +31 -0
  319. package/dist/components/sheet/sheet.d.ts.map +1 -0
  320. package/dist/components/sheet/sheet.js +90 -0
  321. package/dist/components/sheet/sheet.js.map +1 -0
  322. package/dist/components/skeleton/index.d.ts +2 -0
  323. package/dist/components/skeleton/index.js +2 -0
  324. package/dist/components/skeleton/meta.js +17 -0
  325. package/dist/components/skeleton/meta.js.map +1 -0
  326. package/dist/components/skeleton/skeleton.d.ts +20 -0
  327. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  328. package/dist/components/skeleton/skeleton.js +29 -0
  329. package/dist/components/skeleton/skeleton.js.map +1 -0
  330. package/dist/components/slider/index.d.ts +2 -0
  331. package/dist/components/slider/index.js +2 -0
  332. package/dist/components/slider/meta.js +17 -0
  333. package/dist/components/slider/meta.js.map +1 -0
  334. package/dist/components/slider/slider.d.ts +29 -0
  335. package/dist/components/slider/slider.d.ts.map +1 -0
  336. package/dist/components/slider/slider.js +61 -0
  337. package/dist/components/slider/slider.js.map +1 -0
  338. package/dist/components/spinner/index.d.ts +2 -0
  339. package/dist/components/spinner/index.js +2 -0
  340. package/dist/components/spinner/meta.js +17 -0
  341. package/dist/components/spinner/meta.js.map +1 -0
  342. package/dist/components/spinner/spinner.d.ts +21 -0
  343. package/dist/components/spinner/spinner.d.ts.map +1 -0
  344. package/dist/components/spinner/spinner.js +45 -0
  345. package/dist/components/spinner/spinner.js.map +1 -0
  346. package/dist/components/switch/index.d.ts +2 -0
  347. package/dist/components/switch/index.js +2 -0
  348. package/dist/components/switch/meta.js +17 -0
  349. package/dist/components/switch/meta.js.map +1 -0
  350. package/dist/components/switch/switch.d.ts +15 -0
  351. package/dist/components/switch/switch.d.ts.map +1 -0
  352. package/dist/components/switch/switch.js +21 -0
  353. package/dist/components/switch/switch.js.map +1 -0
  354. package/dist/components/table/index.d.ts +2 -0
  355. package/dist/components/table/index.js +2 -0
  356. package/dist/components/table/meta.js +17 -0
  357. package/dist/components/table/meta.js.map +1 -0
  358. package/dist/components/table/table.d.ts +41 -0
  359. package/dist/components/table/table.d.ts.map +1 -0
  360. package/dist/components/table/table.js +78 -0
  361. package/dist/components/table/table.js.map +1 -0
  362. package/dist/components/tabs/index.d.ts +2 -0
  363. package/dist/components/tabs/index.js +2 -0
  364. package/dist/components/tabs/meta.js +17 -0
  365. package/dist/components/tabs/meta.js.map +1 -0
  366. package/dist/components/tabs/tabs.d.ts +28 -0
  367. package/dist/components/tabs/tabs.d.ts.map +1 -0
  368. package/dist/components/tabs/tabs.js +58 -0
  369. package/dist/components/tabs/tabs.js.map +1 -0
  370. package/dist/components/toast/index.d.ts +3 -0
  371. package/dist/components/toast/index.js +3 -0
  372. package/dist/components/toast/meta.js +17 -0
  373. package/dist/components/toast/meta.js.map +1 -0
  374. package/dist/components/toast/toast-store.d.ts +84 -0
  375. package/dist/components/toast/toast-store.d.ts.map +1 -0
  376. package/dist/components/toast/toast-store.js +115 -0
  377. package/dist/components/toast/toast-store.js.map +1 -0
  378. package/dist/components/toast/toast.d.ts +39 -0
  379. package/dist/components/toast/toast.d.ts.map +1 -0
  380. package/dist/components/toast/toast.js +140 -0
  381. package/dist/components/toast/toast.js.map +1 -0
  382. package/dist/components/tooltip/index.d.ts +2 -0
  383. package/dist/components/tooltip/index.js +2 -0
  384. package/dist/components/tooltip/meta.js +17 -0
  385. package/dist/components/tooltip/meta.js.map +1 -0
  386. package/dist/components/tooltip/tooltip.d.ts +24 -0
  387. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  388. package/dist/components/tooltip/tooltip.js +38 -0
  389. package/dist/components/tooltip/tooltip.js.map +1 -0
  390. package/dist/index.d.ts +97 -0
  391. package/dist/index.js +51 -0
  392. package/dist/lib/styles.d.ts +21 -0
  393. package/dist/lib/styles.d.ts.map +1 -0
  394. package/dist/lib/styles.js +22 -0
  395. package/dist/lib/styles.js.map +1 -0
  396. package/dist/lib/utils.d.ts +11 -0
  397. package/dist/lib/utils.d.ts.map +1 -0
  398. package/dist/lib/utils.js +21 -0
  399. package/dist/lib/utils.js.map +1 -0
  400. package/dist/registry/blocks.d.ts +15 -0
  401. package/dist/registry/blocks.d.ts.map +1 -0
  402. package/dist/registry/blocks.js +32 -0
  403. package/dist/registry/blocks.js.map +1 -0
  404. package/dist/registry/components.d.ts +18 -0
  405. package/dist/registry/components.d.ts.map +1 -0
  406. package/dist/registry/components.js +112 -0
  407. package/dist/registry/components.js.map +1 -0
  408. package/dist/registry/schema.d.ts +44 -0
  409. package/dist/registry/schema.d.ts.map +1 -0
  410. package/dist/registry/schema.js +33 -0
  411. package/dist/registry/schema.js.map +1 -0
  412. package/package.json +74 -0
  413. package/src/blocks/admin-users/admin-users.stories.tsx +83 -0
  414. package/src/blocks/admin-users/admin-users.test.tsx +159 -0
  415. package/src/blocks/admin-users/admin-users.tsx +251 -0
  416. package/src/blocks/admin-users/index.ts +1 -0
  417. package/src/blocks/admin-users/meta.ts +27 -0
  418. package/src/blocks/ai-chat/ai-chat.stories.tsx +149 -0
  419. package/src/blocks/ai-chat/ai-chat.test.tsx +166 -0
  420. package/src/blocks/ai-chat/ai-chat.tsx +280 -0
  421. package/src/blocks/ai-chat/index.ts +7 -0
  422. package/src/blocks/ai-chat/meta.ts +32 -0
  423. package/src/blocks/dashboard/dashboard.stories.tsx +106 -0
  424. package/src/blocks/dashboard/dashboard.test.tsx +94 -0
  425. package/src/blocks/dashboard/dashboard.tsx +192 -0
  426. package/src/blocks/dashboard/index.ts +6 -0
  427. package/src/blocks/dashboard/meta.ts +18 -0
  428. package/src/blocks/forgot-password/forgot-password.stories.tsx +41 -0
  429. package/src/blocks/forgot-password/forgot-password.test.tsx +62 -0
  430. package/src/blocks/forgot-password/forgot-password.tsx +158 -0
  431. package/src/blocks/forgot-password/index.ts +1 -0
  432. package/src/blocks/forgot-password/meta.ts +18 -0
  433. package/src/blocks/login/index.ts +1 -0
  434. package/src/blocks/login/login.stories.tsx +46 -0
  435. package/src/blocks/login/login.test.tsx +100 -0
  436. package/src/blocks/login/login.tsx +178 -0
  437. package/src/blocks/login/meta.ts +18 -0
  438. package/src/blocks/pricing/index.ts +1 -0
  439. package/src/blocks/pricing/meta.ts +18 -0
  440. package/src/blocks/pricing/pricing.stories.tsx +62 -0
  441. package/src/blocks/pricing/pricing.test.tsx +101 -0
  442. package/src/blocks/pricing/pricing.tsx +176 -0
  443. package/src/blocks/settings/index.ts +6 -0
  444. package/src/blocks/settings/meta.ts +29 -0
  445. package/src/blocks/settings/settings.stories.tsx +94 -0
  446. package/src/blocks/settings/settings.test.tsx +167 -0
  447. package/src/blocks/settings/settings.tsx +317 -0
  448. package/src/blocks/signup/index.ts +1 -0
  449. package/src/blocks/signup/meta.ts +18 -0
  450. package/src/blocks/signup/signup.stories.tsx +27 -0
  451. package/src/blocks/signup/signup.test.tsx +97 -0
  452. package/src/blocks/signup/signup.tsx +240 -0
  453. package/src/components/accordion/accordion.stories.tsx +90 -0
  454. package/src/components/accordion/accordion.test.tsx +156 -0
  455. package/src/components/accordion/accordion.tsx +88 -0
  456. package/src/components/accordion/index.ts +9 -0
  457. package/src/components/accordion/meta.ts +16 -0
  458. package/src/components/activity-feed/activity-feed.stories.tsx +163 -0
  459. package/src/components/activity-feed/activity-feed.test.tsx +125 -0
  460. package/src/components/activity-feed/activity-feed.tsx +115 -0
  461. package/src/components/activity-feed/index.ts +12 -0
  462. package/src/components/activity-feed/meta.ts +17 -0
  463. package/src/components/ai-agent-status/ai-agent-status.stories.tsx +86 -0
  464. package/src/components/ai-agent-status/ai-agent-status.test.tsx +66 -0
  465. package/src/components/ai-agent-status/ai-agent-status.tsx +88 -0
  466. package/src/components/ai-agent-status/index.ts +6 -0
  467. package/src/components/ai-agent-status/meta.ts +17 -0
  468. package/src/components/ai-conversation/ai-conversation.stories.tsx +126 -0
  469. package/src/components/ai-conversation/ai-conversation.test.tsx +144 -0
  470. package/src/components/ai-conversation/ai-conversation.tsx +229 -0
  471. package/src/components/ai-conversation/index.ts +9 -0
  472. package/src/components/ai-conversation/meta.ts +20 -0
  473. package/src/components/ai-message/ai-message.stories.tsx +106 -0
  474. package/src/components/ai-message/ai-message.test.tsx +160 -0
  475. package/src/components/ai-message/ai-message.tsx +162 -0
  476. package/src/components/ai-message/index.ts +13 -0
  477. package/src/components/ai-message/meta.ts +17 -0
  478. package/src/components/ai-model-selector/ai-model-selector.stories.tsx +66 -0
  479. package/src/components/ai-model-selector/ai-model-selector.test.tsx +120 -0
  480. package/src/components/ai-model-selector/ai-model-selector.tsx +112 -0
  481. package/src/components/ai-model-selector/index.ts +1 -0
  482. package/src/components/ai-model-selector/meta.ts +17 -0
  483. package/src/components/ai-prompt-input/ai-prompt-input.stories.tsx +145 -0
  484. package/src/components/ai-prompt-input/ai-prompt-input.test.tsx +273 -0
  485. package/src/components/ai-prompt-input/ai-prompt-input.tsx +306 -0
  486. package/src/components/ai-prompt-input/index.ts +11 -0
  487. package/src/components/ai-prompt-input/meta.ts +18 -0
  488. package/src/components/ai-reasoning/ai-reasoning.stories.tsx +60 -0
  489. package/src/components/ai-reasoning/ai-reasoning.test.tsx +95 -0
  490. package/src/components/ai-reasoning/ai-reasoning.tsx +106 -0
  491. package/src/components/ai-reasoning/index.ts +7 -0
  492. package/src/components/ai-reasoning/meta.ts +17 -0
  493. package/src/components/ai-response/ai-response.stories.tsx +75 -0
  494. package/src/components/ai-response/ai-response.test.tsx +96 -0
  495. package/src/components/ai-response/ai-response.tsx +95 -0
  496. package/src/components/ai-response/index.ts +7 -0
  497. package/src/components/ai-response/meta.ts +17 -0
  498. package/src/components/ai-sources/ai-sources.stories.tsx +93 -0
  499. package/src/components/ai-sources/ai-sources.test.tsx +102 -0
  500. package/src/components/ai-sources/ai-sources.tsx +186 -0
  501. package/src/components/ai-sources/index.ts +11 -0
  502. package/src/components/ai-sources/meta.ts +17 -0
  503. package/src/components/ai-token-usage/ai-token-usage.stories.tsx +59 -0
  504. package/src/components/ai-token-usage/ai-token-usage.test.tsx +83 -0
  505. package/src/components/ai-token-usage/ai-token-usage.tsx +105 -0
  506. package/src/components/ai-token-usage/index.ts +6 -0
  507. package/src/components/ai-token-usage/meta.ts +16 -0
  508. package/src/components/ai-tool/ai-tool.stories.tsx +96 -0
  509. package/src/components/ai-tool/ai-tool.test.tsx +137 -0
  510. package/src/components/ai-tool/ai-tool.tsx +235 -0
  511. package/src/components/ai-tool/index.ts +13 -0
  512. package/src/components/ai-tool/meta.ts +17 -0
  513. package/src/components/alert/alert.stories.tsx +101 -0
  514. package/src/components/alert/alert.test.tsx +94 -0
  515. package/src/components/alert/alert.tsx +89 -0
  516. package/src/components/alert/index.ts +8 -0
  517. package/src/components/alert/meta.ts +16 -0
  518. package/src/components/avatar/avatar.stories.tsx +58 -0
  519. package/src/components/avatar/avatar.test.tsx +64 -0
  520. package/src/components/avatar/avatar.tsx +68 -0
  521. package/src/components/avatar/index.ts +9 -0
  522. package/src/components/avatar/meta.ts +15 -0
  523. package/src/components/badge/badge.stories.tsx +68 -0
  524. package/src/components/badge/badge.test.tsx +61 -0
  525. package/src/components/badge/badge.tsx +54 -0
  526. package/src/components/badge/index.ts +1 -0
  527. package/src/components/badge/meta.ts +15 -0
  528. package/src/components/button/button.stories.tsx +128 -0
  529. package/src/components/button/button.test.tsx +224 -0
  530. package/src/components/button/button.tsx +114 -0
  531. package/src/components/button/index.ts +1 -0
  532. package/src/components/button/meta.ts +16 -0
  533. package/src/components/calendar/calendar.stories.tsx +105 -0
  534. package/src/components/calendar/calendar.test.tsx +255 -0
  535. package/src/components/calendar/calendar.tsx +115 -0
  536. package/src/components/calendar/index.ts +1 -0
  537. package/src/components/calendar/meta.ts +17 -0
  538. package/src/components/card/card.stories.tsx +61 -0
  539. package/src/components/card/card.test.tsx +66 -0
  540. package/src/components/card/card.tsx +81 -0
  541. package/src/components/card/index.ts +9 -0
  542. package/src/components/card/meta.ts +16 -0
  543. package/src/components/checkbox/checkbox.stories.tsx +124 -0
  544. package/src/components/checkbox/checkbox.test.tsx +121 -0
  545. package/src/components/checkbox/checkbox.tsx +66 -0
  546. package/src/components/checkbox/index.ts +1 -0
  547. package/src/components/checkbox/meta.ts +16 -0
  548. package/src/components/code-block/code-block.stories.tsx +62 -0
  549. package/src/components/code-block/code-block.test.tsx +139 -0
  550. package/src/components/code-block/code-block.tsx +188 -0
  551. package/src/components/code-block/index.ts +1 -0
  552. package/src/components/code-block/meta.ts +17 -0
  553. package/src/components/combobox/combobox.stories.tsx +171 -0
  554. package/src/components/combobox/combobox.test.tsx +429 -0
  555. package/src/components/combobox/combobox.tsx +544 -0
  556. package/src/components/combobox/index.ts +15 -0
  557. package/src/components/combobox/meta.ts +17 -0
  558. package/src/components/command/command.stories.tsx +152 -0
  559. package/src/components/command/command.test.tsx +380 -0
  560. package/src/components/command/command.tsx +482 -0
  561. package/src/components/command/index.ts +17 -0
  562. package/src/components/command/meta.ts +18 -0
  563. package/src/components/data-table/data-table.stories.tsx +151 -0
  564. package/src/components/data-table/data-table.test.tsx +288 -0
  565. package/src/components/data-table/data-table.tsx +485 -0
  566. package/src/components/data-table/index.ts +13 -0
  567. package/src/components/data-table/meta.ts +19 -0
  568. package/src/components/date-picker/date-picker.stories.tsx +103 -0
  569. package/src/components/date-picker/date-picker.test.tsx +205 -0
  570. package/src/components/date-picker/date-picker.tsx +198 -0
  571. package/src/components/date-picker/index.ts +6 -0
  572. package/src/components/date-picker/meta.ts +18 -0
  573. package/src/components/dialog/dialog.stories.tsx +140 -0
  574. package/src/components/dialog/dialog.test.tsx +186 -0
  575. package/src/components/dialog/dialog.tsx +132 -0
  576. package/src/components/dialog/index.ts +16 -0
  577. package/src/components/dialog/meta.ts +16 -0
  578. package/src/components/drawer/drawer.stories.tsx +111 -0
  579. package/src/components/drawer/drawer.test.tsx +187 -0
  580. package/src/components/drawer/drawer.tsx +293 -0
  581. package/src/components/drawer/index.ts +16 -0
  582. package/src/components/drawer/meta.ts +16 -0
  583. package/src/components/dropdown-menu/dropdown-menu.stories.tsx +128 -0
  584. package/src/components/dropdown-menu/dropdown-menu.test.tsx +321 -0
  585. package/src/components/dropdown-menu/dropdown-menu.tsx +242 -0
  586. package/src/components/dropdown-menu/index.ts +21 -0
  587. package/src/components/dropdown-menu/meta.ts +17 -0
  588. package/src/components/empty-state/empty-state.stories.tsx +70 -0
  589. package/src/components/empty-state/empty-state.test.tsx +97 -0
  590. package/src/components/empty-state/empty-state.tsx +92 -0
  591. package/src/components/empty-state/index.ts +9 -0
  592. package/src/components/empty-state/meta.ts +16 -0
  593. package/src/components/form/form.stories.tsx +144 -0
  594. package/src/components/form/form.test.tsx +203 -0
  595. package/src/components/form/form.tsx +221 -0
  596. package/src/components/form/index.ts +13 -0
  597. package/src/components/form/meta.ts +17 -0
  598. package/src/components/input/index.ts +1 -0
  599. package/src/components/input/input.stories.tsx +84 -0
  600. package/src/components/input/input.test.tsx +108 -0
  601. package/src/components/input/input.tsx +51 -0
  602. package/src/components/input/meta.ts +15 -0
  603. package/src/components/label/index.ts +1 -0
  604. package/src/components/label/label.stories.tsx +51 -0
  605. package/src/components/label/label.test.tsx +55 -0
  606. package/src/components/label/label.tsx +26 -0
  607. package/src/components/label/meta.ts +15 -0
  608. package/src/components/pagination/index.ts +10 -0
  609. package/src/components/pagination/meta.ts +17 -0
  610. package/src/components/pagination/pagination.stories.tsx +129 -0
  611. package/src/components/pagination/pagination.test.tsx +119 -0
  612. package/src/components/pagination/pagination.tsx +142 -0
  613. package/src/components/popover/index.ts +9 -0
  614. package/src/components/popover/meta.ts +18 -0
  615. package/src/components/popover/popover.stories.tsx +84 -0
  616. package/src/components/popover/popover.test.tsx +163 -0
  617. package/src/components/popover/popover.tsx +89 -0
  618. package/src/components/progress/index.ts +1 -0
  619. package/src/components/progress/meta.ts +17 -0
  620. package/src/components/progress/progress.stories.tsx +90 -0
  621. package/src/components/progress/progress.test.tsx +78 -0
  622. package/src/components/progress/progress.tsx +70 -0
  623. package/src/components/radio-group/index.ts +6 -0
  624. package/src/components/radio-group/meta.ts +16 -0
  625. package/src/components/radio-group/radio-group.stories.tsx +102 -0
  626. package/src/components/radio-group/radio-group.test.tsx +152 -0
  627. package/src/components/radio-group/radio-group.tsx +53 -0
  628. package/src/components/select/index.ts +14 -0
  629. package/src/components/select/meta.ts +16 -0
  630. package/src/components/select/select.stories.tsx +137 -0
  631. package/src/components/select/select.test.tsx +209 -0
  632. package/src/components/select/select.tsx +222 -0
  633. package/src/components/separator/index.ts +1 -0
  634. package/src/components/separator/meta.ts +15 -0
  635. package/src/components/separator/separator.stories.tsx +42 -0
  636. package/src/components/separator/separator.test.tsx +46 -0
  637. package/src/components/separator/separator.tsx +33 -0
  638. package/src/components/sheet/index.ts +14 -0
  639. package/src/components/sheet/meta.ts +16 -0
  640. package/src/components/sheet/sheet.stories.tsx +107 -0
  641. package/src/components/sheet/sheet.test.tsx +152 -0
  642. package/src/components/sheet/sheet.tsx +160 -0
  643. package/src/components/skeleton/index.ts +1 -0
  644. package/src/components/skeleton/meta.ts +15 -0
  645. package/src/components/skeleton/skeleton.stories.tsx +46 -0
  646. package/src/components/skeleton/skeleton.test.tsx +57 -0
  647. package/src/components/skeleton/skeleton.tsx +28 -0
  648. package/src/components/slider/index.ts +1 -0
  649. package/src/components/slider/meta.ts +19 -0
  650. package/src/components/slider/slider.stories.tsx +87 -0
  651. package/src/components/slider/slider.test.tsx +148 -0
  652. package/src/components/slider/slider.tsx +135 -0
  653. package/src/components/spinner/index.ts +1 -0
  654. package/src/components/spinner/meta.ts +15 -0
  655. package/src/components/spinner/spinner.stories.tsx +47 -0
  656. package/src/components/spinner/spinner.test.tsx +41 -0
  657. package/src/components/spinner/spinner.tsx +68 -0
  658. package/src/components/switch/index.ts +1 -0
  659. package/src/components/switch/meta.ts +15 -0
  660. package/src/components/switch/switch.stories.tsx +70 -0
  661. package/src/components/switch/switch.test.tsx +101 -0
  662. package/src/components/switch/switch.tsx +42 -0
  663. package/src/components/table/index.ts +11 -0
  664. package/src/components/table/meta.ts +17 -0
  665. package/src/components/table/table.stories.tsx +131 -0
  666. package/src/components/table/table.test.tsx +153 -0
  667. package/src/components/table/table.tsx +138 -0
  668. package/src/components/tabs/index.ts +11 -0
  669. package/src/components/tabs/meta.ts +17 -0
  670. package/src/components/tabs/tabs.stories.tsx +139 -0
  671. package/src/components/tabs/tabs.test.tsx +148 -0
  672. package/src/components/tabs/tabs.tsx +106 -0
  673. package/src/components/toast/index.ts +24 -0
  674. package/src/components/toast/meta.ts +18 -0
  675. package/src/components/toast/toast-store.ts +181 -0
  676. package/src/components/toast/toast.stories.tsx +167 -0
  677. package/src/components/toast/toast.test.tsx +306 -0
  678. package/src/components/toast/toast.tsx +241 -0
  679. package/src/components/tooltip/index.ts +8 -0
  680. package/src/components/tooltip/meta.ts +17 -0
  681. package/src/components/tooltip/tooltip.stories.tsx +89 -0
  682. package/src/components/tooltip/tooltip.test.tsx +120 -0
  683. package/src/components/tooltip/tooltip.tsx +58 -0
  684. package/src/index.ts +50 -0
  685. package/src/lib/styles.ts +26 -0
  686. package/src/lib/utils.test.ts +32 -0
  687. package/src/lib/utils.ts +24 -0
  688. package/src/registry/blocks.ts +30 -0
  689. package/src/registry/components.ts +114 -0
  690. package/src/registry/meta.test.ts +234 -0
  691. package/src/registry/schema.ts +58 -0
@@ -0,0 +1,8 @@
1
+ export {
2
+ Tooltip,
3
+ TooltipContent,
4
+ TooltipProvider,
5
+ TooltipTrigger,
6
+ type TooltipContentProps,
7
+ type TooltipProps,
8
+ } from "./tooltip";
@@ -0,0 +1,17 @@
1
+ import { defineMeta } from "@/registry/schema";
2
+
3
+ export const meta = defineMeta({
4
+ name: "tooltip",
5
+ title: "Tooltip",
6
+ description: "A short label revealed on hover or keyboard focus.",
7
+ category: "overlay",
8
+ status: "stable",
9
+ dependencies: ["radix-ui"],
10
+ registryDependencies: [],
11
+ files: ["tooltip.tsx"],
12
+ a11y:
13
+ "Opens on focus as well as hover, and Escape dismisses it. Never put essential or " +
14
+ "interactive content in a tooltip: it is unreachable on touch and vanishes on blur. For an " +
15
+ "icon-only button, prefer aria-label for the name and use the tooltip only to repeat it " +
16
+ "visually.",
17
+ });
@@ -0,0 +1,89 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Bold, Italic, Underline } from "lucide-react";
3
+
4
+ import { Button } from "@/components/button";
5
+
6
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip";
7
+
8
+ const meta = {
9
+ title: "Overlays/Tooltip",
10
+ component: Tooltip,
11
+ args: { delayDuration: 200 },
12
+ argTypes: {
13
+ delayDuration: { control: { type: "number", min: 0, max: 1000, step: 50 } },
14
+ },
15
+ } satisfies Meta<typeof Tooltip>;
16
+
17
+ export default meta;
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ export const Default: Story = {
21
+ render: (args) => (
22
+ <Tooltip {...args}>
23
+ <TooltipTrigger asChild>
24
+ <Button variant="outline">Hover or focus me</Button>
25
+ </TooltipTrigger>
26
+ <TooltipContent>Deploys the current branch</TooltipContent>
27
+ </Tooltip>
28
+ ),
29
+ };
30
+
31
+ /**
32
+ * On an icon-only control the accessible name comes from aria-label. The
33
+ * tooltip repeats it visually; it does not supply it.
34
+ */
35
+ export const IconButtons: Story = {
36
+ parameters: { controls: { disable: true } },
37
+ render: () => (
38
+ <TooltipProvider delayDuration={150}>
39
+ <div className="flex items-center gap-1">
40
+ {[
41
+ { icon: Bold, label: "Bold" },
42
+ { icon: Italic, label: "Italic" },
43
+ { icon: Underline, label: "Underline" },
44
+ ].map(({ icon: Icon, label }) => (
45
+ <Tooltip key={label}>
46
+ <TooltipTrigger asChild>
47
+ <Button variant="ghost" size="icon" aria-label={label}>
48
+ <Icon />
49
+ </Button>
50
+ </TooltipTrigger>
51
+ <TooltipContent>{label}</TooltipContent>
52
+ </Tooltip>
53
+ ))}
54
+ </div>
55
+ </TooltipProvider>
56
+ ),
57
+ };
58
+
59
+ export const Sides: Story = {
60
+ parameters: { controls: { disable: true } },
61
+ render: () => (
62
+ <TooltipProvider delayDuration={0}>
63
+ <div className="flex flex-wrap gap-3">
64
+ {(["top", "right", "bottom", "left"] as const).map((side) => (
65
+ <Tooltip key={side}>
66
+ <TooltipTrigger asChild>
67
+ <Button variant="outline">{side}</Button>
68
+ </TooltipTrigger>
69
+ <TooltipContent side={side}>Anchored {side}</TooltipContent>
70
+ </Tooltip>
71
+ ))}
72
+ </div>
73
+ </TooltipProvider>
74
+ ),
75
+ };
76
+
77
+ export const LongText: Story = {
78
+ parameters: { controls: { disable: true } },
79
+ render: () => (
80
+ <Tooltip delayDuration={0}>
81
+ <TooltipTrigger asChild>
82
+ <Button variant="outline">Retention</Button>
83
+ </TooltipTrigger>
84
+ <TooltipContent>
85
+ Logs are kept for 30 days on the current plan, then aggregated into daily summaries.
86
+ </TooltipContent>
87
+ </Tooltip>
88
+ ),
89
+ };
@@ -0,0 +1,120 @@
1
+ import { render, screen, waitFor } from "@testing-library/react";
2
+ import userEvent from "@testing-library/user-event";
3
+ import { describe, expect, it } from "vitest";
4
+
5
+ import { expectNoA11yViolations } from "../../../test/a11y";
6
+ import { Button } from "../button";
7
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./tooltip";
8
+
9
+ function Example({ delayDuration = 0 }: { delayDuration?: number } = {}) {
10
+ return (
11
+ <Tooltip delayDuration={delayDuration}>
12
+ <TooltipTrigger asChild>
13
+ <Button size="icon" aria-label="Add item">
14
+ +
15
+ </Button>
16
+ </TooltipTrigger>
17
+ <TooltipContent>Add item</TooltipContent>
18
+ </Tooltip>
19
+ );
20
+ }
21
+
22
+ describe("Tooltip", () => {
23
+ it("is hidden until the trigger is hovered", async () => {
24
+ const user = userEvent.setup();
25
+ render(<Example />);
26
+
27
+ expect(screen.queryByRole("tooltip")).not.toBeInTheDocument();
28
+ await user.hover(screen.getByRole("button", { name: "Add item" }));
29
+ expect(await screen.findByRole("tooltip")).toHaveTextContent("Add item");
30
+ });
31
+
32
+ it("opens on keyboard focus, not only on hover", async () => {
33
+ const user = userEvent.setup();
34
+ render(<Example />);
35
+
36
+ await user.tab();
37
+ expect(screen.getByRole("button", { name: "Add item" })).toHaveFocus();
38
+ expect(await screen.findByRole("tooltip")).toBeInTheDocument();
39
+ });
40
+
41
+ it("closes when the pointer leaves", async () => {
42
+ const user = userEvent.setup();
43
+ // disableHoverableContent removes the grace area that normally lets the
44
+ // pointer travel from trigger to tooltip. That grace area is a polygon
45
+ // computed from measured rects, and jsdom reports every rect as zero-sized,
46
+ // so leaving it enabled would exercise the stub rather than the behaviour.
47
+ render(
48
+ <Tooltip delayDuration={0} disableHoverableContent>
49
+ <TooltipTrigger>Trigger</TooltipTrigger>
50
+ <TooltipContent>Hint</TooltipContent>
51
+ </Tooltip>,
52
+ );
53
+
54
+ const trigger = screen.getByText("Trigger");
55
+ await user.hover(trigger);
56
+ await screen.findByRole("tooltip");
57
+
58
+ await user.unhover(trigger);
59
+ await waitFor(() => {
60
+ expect(screen.queryByRole("tooltip")).not.toBeInTheDocument();
61
+ });
62
+ });
63
+
64
+ it("closes on Escape", async () => {
65
+ const user = userEvent.setup();
66
+ render(<Example />);
67
+
68
+ await user.tab();
69
+ await screen.findByRole("tooltip");
70
+
71
+ await user.keyboard("{Escape}");
72
+ await waitFor(() => {
73
+ expect(screen.queryByRole("tooltip")).not.toBeInTheDocument();
74
+ });
75
+ });
76
+
77
+ it("works without an explicit provider", async () => {
78
+ const user = userEvent.setup();
79
+ render(<Example />);
80
+
81
+ await user.hover(screen.getByRole("button", { name: "Add item" }));
82
+ expect(await screen.findByRole("tooltip")).toBeInTheDocument();
83
+ });
84
+
85
+ it("works inside a shared provider", async () => {
86
+ const user = userEvent.setup();
87
+ render(
88
+ <TooltipProvider delayDuration={0}>
89
+ <Example />
90
+ </TooltipProvider>,
91
+ );
92
+
93
+ await user.hover(screen.getByRole("button", { name: "Add item" }));
94
+ expect(await screen.findByRole("tooltip")).toBeInTheDocument();
95
+ });
96
+
97
+ it("merges a consumer className", async () => {
98
+ const user = userEvent.setup();
99
+ render(
100
+ <Tooltip delayDuration={0}>
101
+ <TooltipTrigger>Trigger</TooltipTrigger>
102
+ <TooltipContent className="max-w-xs">Hint</TooltipContent>
103
+ </Tooltip>,
104
+ );
105
+
106
+ await user.hover(screen.getByText("Trigger"));
107
+ const tooltip = await screen.findByRole("tooltip");
108
+ expect(tooltip).toHaveClass("max-w-xs");
109
+ expect(tooltip).not.toHaveClass("max-w-64");
110
+ });
111
+
112
+ it("has no accessibility violations while open", async () => {
113
+ const user = userEvent.setup();
114
+ const { baseElement } = render(<Example />);
115
+ await user.hover(screen.getByRole("button", { name: "Add item" }));
116
+ await screen.findByRole("tooltip");
117
+
118
+ await expectNoA11yViolations(baseElement);
119
+ });
120
+ });
@@ -0,0 +1,58 @@
1
+ "use client";
2
+
3
+ import { Tooltip as TooltipPrimitive } from "radix-ui";
4
+ import type { ComponentPropsWithRef } from "react";
5
+
6
+ import { cn } from "@/lib/utils";
7
+
8
+ /**
9
+ * A short label revealed on hover or focus.
10
+ *
11
+ * A tooltip supplements a control that is already understandable — it must
12
+ * never be the only place information appears, because it is unreachable on
13
+ * touch devices and disappears the moment attention moves. If the content is
14
+ * essential, put it in the interface.
15
+ */
16
+ export const TooltipProvider = TooltipPrimitive.Provider;
17
+ export const TooltipTrigger = TooltipPrimitive.Trigger;
18
+
19
+ export type TooltipProps = ComponentPropsWithRef<typeof TooltipPrimitive.Root>;
20
+
21
+ /**
22
+ * Self-providing, so a single tooltip works without app-level setup. Wrap a
23
+ * subtree in TooltipProvider to share open/close timing across many tooltips.
24
+ */
25
+ export function Tooltip({ children, ...props }: TooltipProps) {
26
+ return (
27
+ <TooltipPrimitive.Provider>
28
+ <TooltipPrimitive.Root {...props}>{children}</TooltipPrimitive.Root>
29
+ </TooltipPrimitive.Provider>
30
+ );
31
+ }
32
+
33
+ export type TooltipContentProps = ComponentPropsWithRef<typeof TooltipPrimitive.Content>;
34
+
35
+ export function TooltipContent({
36
+ className,
37
+ sideOffset = 6,
38
+ children,
39
+ ...props
40
+ }: TooltipContentProps) {
41
+ return (
42
+ <TooltipPrimitive.Portal>
43
+ <TooltipPrimitive.Content
44
+ data-slot="tooltip-content"
45
+ sideOffset={sideOffset}
46
+ className={cn(
47
+ "z-[var(--z-tooltip)] max-w-64 rounded-md bg-foreground px-2.5 py-1.5 text-xs text-background shadow-md",
48
+ "origin-[var(--radix-tooltip-content-transform-origin)] text-balance",
49
+ "data-[state=closed]:animate-float-out data-[state=delayed-open]:animate-float-in",
50
+ className,
51
+ )}
52
+ {...props}
53
+ >
54
+ {children}
55
+ </TooltipPrimitive.Content>
56
+ </TooltipPrimitive.Portal>
57
+ );
58
+ }
package/src/index.ts ADDED
@@ -0,0 +1,50 @@
1
+ export * from "./components/accordion";
2
+ export * from "./components/activity-feed";
3
+ export * from "./components/ai-agent-status";
4
+ export * from "./components/ai-conversation";
5
+ export * from "./components/ai-message";
6
+ export * from "./components/ai-model-selector";
7
+ export * from "./components/ai-prompt-input";
8
+ export * from "./components/ai-reasoning";
9
+ export * from "./components/ai-response";
10
+ export * from "./components/ai-sources";
11
+ export * from "./components/ai-token-usage";
12
+ export * from "./components/ai-tool";
13
+ export * from "./components/alert";
14
+ export * from "./components/avatar";
15
+ export * from "./components/badge";
16
+ export * from "./components/button";
17
+ export * from "./components/calendar";
18
+ export * from "./components/card";
19
+ export * from "./components/checkbox";
20
+ export * from "./components/code-block";
21
+ export * from "./components/combobox";
22
+ export * from "./components/command";
23
+ export * from "./components/data-table";
24
+ export * from "./components/date-picker";
25
+ export * from "./components/dialog";
26
+ export * from "./components/drawer";
27
+ export * from "./components/dropdown-menu";
28
+ export * from "./components/empty-state";
29
+ export * from "./components/form";
30
+ export * from "./components/input";
31
+ export * from "./components/label";
32
+ export * from "./components/pagination";
33
+ export * from "./components/popover";
34
+ export * from "./components/progress";
35
+ export * from "./components/radio-group";
36
+ export * from "./components/select";
37
+ export * from "./components/separator";
38
+ export * from "./components/sheet";
39
+ export * from "./components/skeleton";
40
+ export * from "./components/slider";
41
+ export * from "./components/spinner";
42
+ export * from "./components/switch";
43
+ export * from "./components/table";
44
+ export * from "./components/tabs";
45
+ export * from "./components/toast";
46
+ export * from "./components/tooltip";
47
+
48
+ export { cn } from "./lib/utils";
49
+ export * from "./lib/styles";
50
+ export * from "./registry/schema";
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Style fragments shared across components.
3
+ *
4
+ * These exist so interaction states are defined once. If focus rings or
5
+ * disabled treatment need to change, they change here and every component
6
+ * follows — which is what keeps the system visually coherent (design spec §12).
7
+ */
8
+
9
+ /** Keyboard focus ring. Deliberately not applied on pointer focus. */
10
+ export const focusRing =
11
+ "outline-none focus-visible:ring-2 focus-visible:ring-ring/55 focus-visible:ring-offset-2 focus-visible:ring-offset-background";
12
+
13
+ /** Focus ring for controls that sit flush inside a bordered container. */
14
+ export const focusRingInset = "outline-none focus-visible:ring-2 focus-visible:ring-ring/55";
15
+
16
+ /** Applied to natively disabled elements and `aria-disabled` ones alike. */
17
+ export const disabledStyles =
18
+ "disabled:pointer-events-none disabled:opacity-55 aria-disabled:pointer-events-none aria-disabled:opacity-55";
19
+
20
+ /** Invalid-state treatment driven by `aria-invalid`, never by a bespoke prop. */
21
+ export const invalidStyles =
22
+ "aria-invalid:border-destructive aria-invalid:focus-visible:ring-destructive/40";
23
+
24
+ /** Sizes any icon rendered as a direct child of a control. */
25
+ export const iconSlot =
26
+ "[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4";
@@ -0,0 +1,32 @@
1
+ import { describe, expect, it } from "vitest";
2
+
3
+ import { cn } from "./utils";
4
+
5
+ describe("cn", () => {
6
+ it("joins class names", () => {
7
+ expect(cn("a", "b")).toBe("a b");
8
+ });
9
+
10
+ it("drops falsy values", () => {
11
+ expect(cn("a", false, undefined, null, "b")).toBe("a b");
12
+ });
13
+
14
+ it("lets the later Tailwind utility win a conflict", () => {
15
+ expect(cn("px-2", "px-4")).toBe("px-4");
16
+ });
17
+
18
+ it("resolves conflicts across our custom font-size scale", () => {
19
+ // Without the extendTailwindMerge config this returns "text-sm text-2xs",
20
+ // and a consumer's size override would silently do nothing.
21
+ expect(cn("text-sm", "text-2xs")).toBe("text-2xs");
22
+ expect(cn("text-2xs", "text-lg")).toBe("text-lg");
23
+ });
24
+
25
+ it("keeps non-conflicting utilities", () => {
26
+ expect(cn("rounded-md border", "bg-primary")).toBe("rounded-md border bg-primary");
27
+ });
28
+
29
+ it("accepts arrays and objects", () => {
30
+ expect(cn(["a", { b: true, c: false }])).toBe("a b");
31
+ });
32
+ });
@@ -0,0 +1,24 @@
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { extendTailwindMerge } from "tailwind-merge";
3
+
4
+ /**
5
+ * tailwind-merge does not know about scales we add on top of Tailwind's
6
+ * defaults, so `text-2xs` would be misclassified and fail to override
7
+ * `text-sm`. Registering our additions keeps class conflict resolution correct.
8
+ */
9
+ const twMerge = extendTailwindMerge({
10
+ extend: {
11
+ classGroups: {
12
+ "font-size": [{ text: ["2xs"] }],
13
+ },
14
+ },
15
+ });
16
+
17
+ /**
18
+ * Merges class names, with later Tailwind utilities winning over earlier
19
+ * conflicting ones. Every component runs its `className` prop through this so
20
+ * consumers can override any style without `!important`.
21
+ */
22
+ export function cn(...inputs: ClassValue[]): string {
23
+ return twMerge(clsx(inputs));
24
+ }
@@ -0,0 +1,30 @@
1
+ import type { ComponentMeta } from "./schema";
2
+
3
+ import { meta as adminUsersMeta } from "@/blocks/admin-users/meta";
4
+ import { meta as aiChatMeta } from "@/blocks/ai-chat/meta";
5
+ import { meta as dashboardMeta } from "@/blocks/dashboard/meta";
6
+ import { meta as forgotPasswordMeta } from "@/blocks/forgot-password/meta";
7
+ import { meta as loginMeta } from "@/blocks/login/meta";
8
+ import { meta as pricingMeta } from "@/blocks/pricing/meta";
9
+ import { meta as settingsMeta } from "@/blocks/settings/meta";
10
+ import { meta as signupMeta } from "@/blocks/signup/meta";
11
+
12
+ /**
13
+ * Every block in the registry.
14
+ *
15
+ * Kept separate from `componentMetas` for the same reason blocks install into a
16
+ * different directory: they are whole page sections, browsed and used
17
+ * differently from the components they are assembled out of.
18
+ *
19
+ * `meta.test.ts` fails if a block directory exists that is missing from here.
20
+ */
21
+ export const blockMetas: ComponentMeta[] = [
22
+ adminUsersMeta,
23
+ aiChatMeta,
24
+ dashboardMeta,
25
+ forgotPasswordMeta,
26
+ loginMeta,
27
+ pricingMeta,
28
+ settingsMeta,
29
+ signupMeta,
30
+ ];
@@ -0,0 +1,114 @@
1
+ import type { ComponentMeta } from "./schema";
2
+
3
+ import { meta as accordionMeta } from "@/components/accordion/meta";
4
+ import { meta as activityFeedMeta } from "@/components/activity-feed/meta";
5
+ import { meta as aiAgentStatusMeta } from "@/components/ai-agent-status/meta";
6
+ import { meta as aiConversationMeta } from "@/components/ai-conversation/meta";
7
+ import { meta as aiMessageMeta } from "@/components/ai-message/meta";
8
+ import { meta as aiModelSelectorMeta } from "@/components/ai-model-selector/meta";
9
+ import { meta as aiPromptInputMeta } from "@/components/ai-prompt-input/meta";
10
+ import { meta as aiReasoningMeta } from "@/components/ai-reasoning/meta";
11
+ import { meta as aiResponseMeta } from "@/components/ai-response/meta";
12
+ import { meta as aiSourcesMeta } from "@/components/ai-sources/meta";
13
+ import { meta as aiTokenUsageMeta } from "@/components/ai-token-usage/meta";
14
+ import { meta as aiToolMeta } from "@/components/ai-tool/meta";
15
+ import { meta as alertMeta } from "@/components/alert/meta";
16
+ import { meta as avatarMeta } from "@/components/avatar/meta";
17
+ import { meta as badgeMeta } from "@/components/badge/meta";
18
+ import { meta as buttonMeta } from "@/components/button/meta";
19
+ import { meta as calendarMeta } from "@/components/calendar/meta";
20
+ import { meta as cardMeta } from "@/components/card/meta";
21
+ import { meta as checkboxMeta } from "@/components/checkbox/meta";
22
+ import { meta as codeBlockMeta } from "@/components/code-block/meta";
23
+ import { meta as comboboxMeta } from "@/components/combobox/meta";
24
+ import { meta as commandMeta } from "@/components/command/meta";
25
+ import { meta as dataTableMeta } from "@/components/data-table/meta";
26
+ import { meta as datePickerMeta } from "@/components/date-picker/meta";
27
+ import { meta as dialogMeta } from "@/components/dialog/meta";
28
+ import { meta as drawerMeta } from "@/components/drawer/meta";
29
+ import { meta as dropdownMenuMeta } from "@/components/dropdown-menu/meta";
30
+ import { meta as emptyStateMeta } from "@/components/empty-state/meta";
31
+ import { meta as formMeta } from "@/components/form/meta";
32
+ import { meta as inputMeta } from "@/components/input/meta";
33
+ import { meta as labelMeta } from "@/components/label/meta";
34
+ import { meta as paginationMeta } from "@/components/pagination/meta";
35
+ import { meta as popoverMeta } from "@/components/popover/meta";
36
+ import { meta as progressMeta } from "@/components/progress/meta";
37
+ import { meta as radioGroupMeta } from "@/components/radio-group/meta";
38
+ import { meta as selectMeta } from "@/components/select/meta";
39
+ import { meta as separatorMeta } from "@/components/separator/meta";
40
+ import { meta as sheetMeta } from "@/components/sheet/meta";
41
+ import { meta as skeletonMeta } from "@/components/skeleton/meta";
42
+ import { meta as sliderMeta } from "@/components/slider/meta";
43
+ import { meta as spinnerMeta } from "@/components/spinner/meta";
44
+ import { meta as switchMeta } from "@/components/switch/meta";
45
+ import { meta as tableMeta } from "@/components/table/meta";
46
+ import { meta as tabsMeta } from "@/components/tabs/meta";
47
+ import { meta as toastMeta } from "@/components/toast/meta";
48
+ import { meta as tooltipMeta } from "@/components/tooltip/meta";
49
+
50
+ /**
51
+ * Every component in the registry.
52
+ *
53
+ * An explicit list rather than a glob: the registry build runs in plain Node,
54
+ * where bundler-only globbing is unavailable, and a static list is also what
55
+ * lets the bundle tree-shake. `meta.test.ts` fails if a component directory
56
+ * exists that is missing from here, so it cannot silently fall out of date.
57
+ *
58
+ * Identifiers carry a `Meta` suffix because component names include reserved
59
+ * words — `switch` cannot be a binding name.
60
+ */
61
+ export const componentMetas: ComponentMeta[] = [
62
+ accordionMeta,
63
+ activityFeedMeta,
64
+ aiAgentStatusMeta,
65
+ aiConversationMeta,
66
+ aiMessageMeta,
67
+ aiModelSelectorMeta,
68
+ aiPromptInputMeta,
69
+ aiReasoningMeta,
70
+ aiResponseMeta,
71
+ aiSourcesMeta,
72
+ aiTokenUsageMeta,
73
+ aiToolMeta,
74
+ alertMeta,
75
+ avatarMeta,
76
+ badgeMeta,
77
+ buttonMeta,
78
+ calendarMeta,
79
+ cardMeta,
80
+ checkboxMeta,
81
+ codeBlockMeta,
82
+ comboboxMeta,
83
+ commandMeta,
84
+ dataTableMeta,
85
+ datePickerMeta,
86
+ dialogMeta,
87
+ drawerMeta,
88
+ dropdownMenuMeta,
89
+ emptyStateMeta,
90
+ formMeta,
91
+ inputMeta,
92
+ labelMeta,
93
+ paginationMeta,
94
+ popoverMeta,
95
+ progressMeta,
96
+ radioGroupMeta,
97
+ selectMeta,
98
+ separatorMeta,
99
+ sheetMeta,
100
+ skeletonMeta,
101
+ sliderMeta,
102
+ spinnerMeta,
103
+ switchMeta,
104
+ tableMeta,
105
+ tabsMeta,
106
+ toastMeta,
107
+ tooltipMeta,
108
+ ];
109
+
110
+ // This file is the `@dowel-ui/react/registry` entry point, so the block barrel is
111
+ // re-exported here — the registry build reads both through one import.
112
+ export { blockMetas } from "./blocks";
113
+ export { COMPONENT_CATEGORIES, COMPONENT_STATUSES } from "./schema";
114
+ export type { ComponentCategory, ComponentMeta, ComponentStatus } from "./schema";