@neynar/ui 0.1.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 (364) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -0
  3. package/dist/components/ui/accordion.d.ts +229 -0
  4. package/dist/components/ui/accordion.d.ts.map +1 -0
  5. package/dist/components/ui/alert-dialog.d.ts +247 -0
  6. package/dist/components/ui/alert-dialog.d.ts.map +1 -0
  7. package/dist/components/ui/alert.d.ts +187 -0
  8. package/dist/components/ui/alert.d.ts.map +1 -0
  9. package/dist/components/ui/aspect-ratio.d.ts +94 -0
  10. package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
  11. package/dist/components/ui/avatar.d.ts +244 -0
  12. package/dist/components/ui/avatar.d.ts.map +1 -0
  13. package/dist/components/ui/badge.d.ts +163 -0
  14. package/dist/components/ui/badge.d.ts.map +1 -0
  15. package/dist/components/ui/breadcrumb.d.ts +281 -0
  16. package/dist/components/ui/breadcrumb.d.ts.map +1 -0
  17. package/dist/components/ui/button.d.ts +129 -0
  18. package/dist/components/ui/button.d.ts.map +1 -0
  19. package/dist/components/ui/calendar.d.ts +169 -0
  20. package/dist/components/ui/calendar.d.ts.map +1 -0
  21. package/dist/components/ui/card.d.ts +365 -0
  22. package/dist/components/ui/card.d.ts.map +1 -0
  23. package/dist/components/ui/carousel.d.ts +369 -0
  24. package/dist/components/ui/carousel.d.ts.map +1 -0
  25. package/dist/components/ui/chart.d.ts +442 -0
  26. package/dist/components/ui/chart.d.ts.map +1 -0
  27. package/dist/components/ui/checkbox.d.ts +88 -0
  28. package/dist/components/ui/checkbox.d.ts.map +1 -0
  29. package/dist/components/ui/collapsible.d.ts +182 -0
  30. package/dist/components/ui/collapsible.d.ts.map +1 -0
  31. package/dist/components/ui/combobox.d.ts +270 -0
  32. package/dist/components/ui/combobox.d.ts.map +1 -0
  33. package/dist/components/ui/command.d.ts +355 -0
  34. package/dist/components/ui/command.d.ts.map +1 -0
  35. package/dist/components/ui/container.d.ts +102 -0
  36. package/dist/components/ui/container.d.ts.map +1 -0
  37. package/dist/components/ui/context-menu.d.ts +339 -0
  38. package/dist/components/ui/context-menu.d.ts.map +1 -0
  39. package/dist/components/ui/date-picker.d.ts +145 -0
  40. package/dist/components/ui/date-picker.d.ts.map +1 -0
  41. package/dist/components/ui/dialog.d.ts +322 -0
  42. package/dist/components/ui/dialog.d.ts.map +1 -0
  43. package/dist/components/ui/drawer.d.ts +154 -0
  44. package/dist/components/ui/drawer.d.ts.map +1 -0
  45. package/dist/components/ui/dropdown-menu.d.ts +349 -0
  46. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  47. package/dist/components/ui/empty-state.d.ts +133 -0
  48. package/dist/components/ui/empty-state.d.ts.map +1 -0
  49. package/dist/components/ui/hover-card.d.ts +109 -0
  50. package/dist/components/ui/hover-card.d.ts.map +1 -0
  51. package/dist/components/ui/input.d.ts +89 -0
  52. package/dist/components/ui/input.d.ts.map +1 -0
  53. package/dist/components/ui/label.d.ts +93 -0
  54. package/dist/components/ui/label.d.ts.map +1 -0
  55. package/dist/components/ui/menubar.d.ts +306 -0
  56. package/dist/components/ui/menubar.d.ts.map +1 -0
  57. package/dist/components/ui/navigation-menu.d.ts +318 -0
  58. package/dist/components/ui/navigation-menu.d.ts.map +1 -0
  59. package/dist/components/ui/pagination.d.ts +343 -0
  60. package/dist/components/ui/pagination.d.ts.map +1 -0
  61. package/dist/components/ui/popover.d.ts +178 -0
  62. package/dist/components/ui/popover.d.ts.map +1 -0
  63. package/dist/components/ui/progress.d.ts +64 -0
  64. package/dist/components/ui/progress.d.ts.map +1 -0
  65. package/dist/components/ui/radio-group.d.ts +144 -0
  66. package/dist/components/ui/radio-group.d.ts.map +1 -0
  67. package/dist/components/ui/resizable.d.ts +164 -0
  68. package/dist/components/ui/resizable.d.ts.map +1 -0
  69. package/dist/components/ui/scroll-area.d.ts +82 -0
  70. package/dist/components/ui/scroll-area.d.ts.map +1 -0
  71. package/dist/components/ui/select.d.ts +316 -0
  72. package/dist/components/ui/select.d.ts.map +1 -0
  73. package/dist/components/ui/separator.d.ts +80 -0
  74. package/dist/components/ui/separator.d.ts.map +1 -0
  75. package/dist/components/ui/sheet.d.ts +346 -0
  76. package/dist/components/ui/sheet.d.ts.map +1 -0
  77. package/dist/components/ui/sidebar.d.ts +1561 -0
  78. package/dist/components/ui/sidebar.d.ts.map +1 -0
  79. package/dist/components/ui/skeleton.d.ts +66 -0
  80. package/dist/components/ui/skeleton.d.ts.map +1 -0
  81. package/dist/components/ui/slider.d.ts +95 -0
  82. package/dist/components/ui/slider.d.ts.map +1 -0
  83. package/dist/components/ui/sonner.d.ts +101 -0
  84. package/dist/components/ui/sonner.d.ts.map +1 -0
  85. package/dist/components/ui/stack.d.ts +192 -0
  86. package/dist/components/ui/stack.d.ts.map +1 -0
  87. package/dist/components/ui/stories/accordion.stories.d.ts +71 -0
  88. package/dist/components/ui/stories/accordion.stories.d.ts.map +1 -0
  89. package/dist/components/ui/stories/alert-dialog.stories.d.ts +39 -0
  90. package/dist/components/ui/stories/alert-dialog.stories.d.ts.map +1 -0
  91. package/dist/components/ui/stories/alert.stories.d.ts +48 -0
  92. package/dist/components/ui/stories/alert.stories.d.ts.map +1 -0
  93. package/dist/components/ui/stories/aspect-ratio.stories.d.ts +53 -0
  94. package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -0
  95. package/dist/components/ui/stories/avatar.stories.d.ts +49 -0
  96. package/dist/components/ui/stories/avatar.stories.d.ts.map +1 -0
  97. package/dist/components/ui/stories/badge.stories.d.ts +64 -0
  98. package/dist/components/ui/stories/badge.stories.d.ts.map +1 -0
  99. package/dist/components/ui/stories/breadcrumb.stories.d.ts +27 -0
  100. package/dist/components/ui/stories/breadcrumb.stories.d.ts.map +1 -0
  101. package/dist/components/ui/stories/button.stories.d.ts +92 -0
  102. package/dist/components/ui/stories/button.stories.d.ts.map +1 -0
  103. package/dist/components/ui/stories/calendar.stories.d.ts +94 -0
  104. package/dist/components/ui/stories/calendar.stories.d.ts.map +1 -0
  105. package/dist/components/ui/stories/card.stories.d.ts +29 -0
  106. package/dist/components/ui/stories/card.stories.d.ts.map +1 -0
  107. package/dist/components/ui/stories/carousel.stories.d.ts +42 -0
  108. package/dist/components/ui/stories/carousel.stories.d.ts.map +1 -0
  109. package/dist/components/ui/stories/chart.stories.d.ts +51 -0
  110. package/dist/components/ui/stories/chart.stories.d.ts.map +1 -0
  111. package/dist/components/ui/stories/checkbox.stories.d.ts +72 -0
  112. package/dist/components/ui/stories/checkbox.stories.d.ts.map +1 -0
  113. package/dist/components/ui/stories/cn.stories.d.ts +19 -0
  114. package/dist/components/ui/stories/cn.stories.d.ts.map +1 -0
  115. package/dist/components/ui/stories/collapsible.stories.d.ts +51 -0
  116. package/dist/components/ui/stories/collapsible.stories.d.ts.map +1 -0
  117. package/dist/components/ui/stories/colors.stories.d.ts +31 -0
  118. package/dist/components/ui/stories/colors.stories.d.ts.map +1 -0
  119. package/dist/components/ui/stories/combobox.stories.d.ts +89 -0
  120. package/dist/components/ui/stories/combobox.stories.d.ts.map +1 -0
  121. package/dist/components/ui/stories/command.stories.d.ts +69 -0
  122. package/dist/components/ui/stories/command.stories.d.ts.map +1 -0
  123. package/dist/components/ui/stories/container.stories.d.ts +42 -0
  124. package/dist/components/ui/stories/container.stories.d.ts.map +1 -0
  125. package/dist/components/ui/stories/context-menu.stories.d.ts +32 -0
  126. package/dist/components/ui/stories/context-menu.stories.d.ts.map +1 -0
  127. package/dist/components/ui/stories/date-picker.stories.d.ts +67 -0
  128. package/dist/components/ui/stories/date-picker.stories.d.ts.map +1 -0
  129. package/dist/components/ui/stories/dialog.stories.d.ts +48 -0
  130. package/dist/components/ui/stories/dialog.stories.d.ts.map +1 -0
  131. package/dist/components/ui/stories/drawer.stories.d.ts +33 -0
  132. package/dist/components/ui/stories/drawer.stories.d.ts.map +1 -0
  133. package/dist/components/ui/stories/dropdown-menu.stories.d.ts +31 -0
  134. package/dist/components/ui/stories/dropdown-menu.stories.d.ts.map +1 -0
  135. package/dist/components/ui/stories/empty-state.stories.d.ts +74 -0
  136. package/dist/components/ui/stories/empty-state.stories.d.ts.map +1 -0
  137. package/dist/components/ui/stories/hover-card.stories.d.ts +35 -0
  138. package/dist/components/ui/stories/hover-card.stories.d.ts.map +1 -0
  139. package/dist/components/ui/stories/input.stories.d.ts +69 -0
  140. package/dist/components/ui/stories/input.stories.d.ts.map +1 -0
  141. package/dist/components/ui/stories/label.stories.d.ts +47 -0
  142. package/dist/components/ui/stories/label.stories.d.ts.map +1 -0
  143. package/dist/components/ui/stories/menubar.stories.d.ts +39 -0
  144. package/dist/components/ui/stories/menubar.stories.d.ts.map +1 -0
  145. package/dist/components/ui/stories/navigation-menu.stories.d.ts +44 -0
  146. package/dist/components/ui/stories/navigation-menu.stories.d.ts.map +1 -0
  147. package/dist/components/ui/stories/pagination.stories.d.ts +33 -0
  148. package/dist/components/ui/stories/pagination.stories.d.ts.map +1 -0
  149. package/dist/components/ui/stories/popover.stories.d.ts +36 -0
  150. package/dist/components/ui/stories/popover.stories.d.ts.map +1 -0
  151. package/dist/components/ui/stories/progress.stories.d.ts +38 -0
  152. package/dist/components/ui/stories/progress.stories.d.ts.map +1 -0
  153. package/dist/components/ui/stories/radio-group.stories.d.ts +76 -0
  154. package/dist/components/ui/stories/radio-group.stories.d.ts.map +1 -0
  155. package/dist/components/ui/stories/resizable.stories.d.ts +49 -0
  156. package/dist/components/ui/stories/resizable.stories.d.ts.map +1 -0
  157. package/dist/components/ui/stories/scroll-area.stories.d.ts +35 -0
  158. package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -0
  159. package/dist/components/ui/stories/select.stories.d.ts +51 -0
  160. package/dist/components/ui/stories/select.stories.d.ts.map +1 -0
  161. package/dist/components/ui/stories/separator.stories.d.ts +58 -0
  162. package/dist/components/ui/stories/separator.stories.d.ts.map +1 -0
  163. package/dist/components/ui/stories/sheet.stories.d.ts +43 -0
  164. package/dist/components/ui/stories/sheet.stories.d.ts.map +1 -0
  165. package/dist/components/ui/stories/sidebar.stories.d.ts +60 -0
  166. package/dist/components/ui/stories/sidebar.stories.d.ts.map +1 -0
  167. package/dist/components/ui/stories/skeleton.stories.d.ts +42 -0
  168. package/dist/components/ui/stories/skeleton.stories.d.ts.map +1 -0
  169. package/dist/components/ui/stories/slider.stories.d.ts +99 -0
  170. package/dist/components/ui/stories/slider.stories.d.ts.map +1 -0
  171. package/dist/components/ui/stories/sonner.stories.d.ts +9 -0
  172. package/dist/components/ui/stories/sonner.stories.d.ts.map +1 -0
  173. package/dist/components/ui/stories/stack.stories.d.ts +39 -0
  174. package/dist/components/ui/stories/stack.stories.d.ts.map +1 -0
  175. package/dist/components/ui/stories/switch.stories.d.ts +71 -0
  176. package/dist/components/ui/stories/switch.stories.d.ts.map +1 -0
  177. package/dist/components/ui/stories/table.stories.d.ts +40 -0
  178. package/dist/components/ui/stories/table.stories.d.ts.map +1 -0
  179. package/dist/components/ui/stories/tabs.stories.d.ts +62 -0
  180. package/dist/components/ui/stories/tabs.stories.d.ts.map +1 -0
  181. package/dist/components/ui/stories/text-field.stories.d.ts +78 -0
  182. package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -0
  183. package/dist/components/ui/stories/textarea.stories.d.ts +57 -0
  184. package/dist/components/ui/stories/textarea.stories.d.ts.map +1 -0
  185. package/dist/components/ui/stories/theme-toggle.stories.d.ts +71 -0
  186. package/dist/components/ui/stories/theme-toggle.stories.d.ts.map +1 -0
  187. package/dist/components/ui/stories/theme.stories.d.ts +51 -0
  188. package/dist/components/ui/stories/theme.stories.d.ts.map +1 -0
  189. package/dist/components/ui/stories/toggle-group.stories.d.ts +71 -0
  190. package/dist/components/ui/stories/toggle-group.stories.d.ts.map +1 -0
  191. package/dist/components/ui/stories/toggle.stories.d.ts +78 -0
  192. package/dist/components/ui/stories/toggle.stories.d.ts.map +1 -0
  193. package/dist/components/ui/stories/tooltip.stories.d.ts +37 -0
  194. package/dist/components/ui/stories/tooltip.stories.d.ts.map +1 -0
  195. package/dist/components/ui/stories/typography.stories.d.ts +137 -0
  196. package/dist/components/ui/stories/typography.stories.d.ts.map +1 -0
  197. package/dist/components/ui/stories/use-mobile.stories.d.ts +20 -0
  198. package/dist/components/ui/stories/use-mobile.stories.d.ts.map +1 -0
  199. package/dist/components/ui/stories/use-theme.stories.d.ts +23 -0
  200. package/dist/components/ui/stories/use-theme.stories.d.ts.map +1 -0
  201. package/dist/components/ui/switch.d.ts +84 -0
  202. package/dist/components/ui/switch.d.ts.map +1 -0
  203. package/dist/components/ui/table.d.ts +321 -0
  204. package/dist/components/ui/table.d.ts.map +1 -0
  205. package/dist/components/ui/tabs.d.ts +260 -0
  206. package/dist/components/ui/tabs.d.ts.map +1 -0
  207. package/dist/components/ui/text-field.d.ts +157 -0
  208. package/dist/components/ui/text-field.d.ts.map +1 -0
  209. package/dist/components/ui/textarea.d.ts +84 -0
  210. package/dist/components/ui/textarea.d.ts.map +1 -0
  211. package/dist/components/ui/theme-toggle.d.ts +105 -0
  212. package/dist/components/ui/theme-toggle.d.ts.map +1 -0
  213. package/dist/components/ui/theme.d.ts +110 -0
  214. package/dist/components/ui/theme.d.ts.map +1 -0
  215. package/dist/components/ui/toggle-group.d.ts +133 -0
  216. package/dist/components/ui/toggle-group.d.ts.map +1 -0
  217. package/dist/components/ui/toggle.d.ts +84 -0
  218. package/dist/components/ui/toggle.d.ts.map +1 -0
  219. package/dist/components/ui/tooltip.d.ts +202 -0
  220. package/dist/components/ui/tooltip.d.ts.map +1 -0
  221. package/dist/components/ui/typography.d.ts +287 -0
  222. package/dist/components/ui/typography.d.ts.map +1 -0
  223. package/dist/hooks/use-mobile.d.ts +74 -0
  224. package/dist/hooks/use-mobile.d.ts.map +1 -0
  225. package/dist/hooks/use-theme.d.ts +142 -0
  226. package/dist/hooks/use-theme.d.ts.map +1 -0
  227. package/dist/index.d.ts +57 -0
  228. package/dist/index.d.ts.map +1 -0
  229. package/dist/index.js +27498 -0
  230. package/dist/index.js.map +1 -0
  231. package/dist/lib/utils.d.ts +43 -0
  232. package/dist/lib/utils.d.ts.map +1 -0
  233. package/dist/tsconfig.tsbuildinfo +1 -0
  234. package/docs/llm/colors.md +273 -0
  235. package/docs/llm/components/buttons.md +68 -0
  236. package/docs/llm/components/cards.md +53 -0
  237. package/docs/llm/components/display.md +134 -0
  238. package/docs/llm/components/feedback.md +96 -0
  239. package/docs/llm/components/forms.md +90 -0
  240. package/docs/llm/components/layout.md +59 -0
  241. package/docs/llm/components/menus.md +70 -0
  242. package/docs/llm/components/navigation.md +80 -0
  243. package/docs/llm/components/overlays.md +83 -0
  244. package/docs/llm/components/tables.md +73 -0
  245. package/docs/llm/components/typography.md +199 -0
  246. package/docs/llm/components/utilities.md +114 -0
  247. package/docs/llm/guide.md +165 -0
  248. package/llms.txt +122 -0
  249. package/package.json +104 -0
  250. package/src/components/ui/accordion.tsx +285 -0
  251. package/src/components/ui/alert-dialog.tsx +387 -0
  252. package/src/components/ui/alert.tsx +243 -0
  253. package/src/components/ui/aspect-ratio.tsx +99 -0
  254. package/src/components/ui/avatar.tsx +288 -0
  255. package/src/components/ui/badge.tsx +205 -0
  256. package/src/components/ui/breadcrumb.tsx +378 -0
  257. package/src/components/ui/button.tsx +195 -0
  258. package/src/components/ui/calendar.tsx +371 -0
  259. package/src/components/ui/card.tsx +447 -0
  260. package/src/components/ui/carousel.tsx +624 -0
  261. package/src/components/ui/chart.tsx +802 -0
  262. package/src/components/ui/checkbox.tsx +113 -0
  263. package/src/components/ui/collapsible.tsx +207 -0
  264. package/src/components/ui/combobox.tsx +373 -0
  265. package/src/components/ui/command.tsx +518 -0
  266. package/src/components/ui/container.tsx +114 -0
  267. package/src/components/ui/context-menu.tsx +563 -0
  268. package/src/components/ui/date-picker.tsx +213 -0
  269. package/src/components/ui/dialog.tsx +447 -0
  270. package/src/components/ui/drawer.tsx +273 -0
  271. package/src/components/ui/dropdown-menu.tsx +578 -0
  272. package/src/components/ui/empty-state.tsx +145 -0
  273. package/src/components/ui/hover-card.tsx +144 -0
  274. package/src/components/ui/input.tsx +106 -0
  275. package/src/components/ui/label.tsx +110 -0
  276. package/src/components/ui/menubar.tsx +553 -0
  277. package/src/components/ui/navigation-menu.tsx +471 -0
  278. package/src/components/ui/pagination.tsx +456 -0
  279. package/src/components/ui/popover.tsx +216 -0
  280. package/src/components/ui/progress.tsx +88 -0
  281. package/src/components/ui/radio-group.tsx +183 -0
  282. package/src/components/ui/resizable.tsx +209 -0
  283. package/src/components/ui/scroll-area.tsx +132 -0
  284. package/src/components/ui/select.tsx +485 -0
  285. package/src/components/ui/separator.tsx +101 -0
  286. package/src/components/ui/sheet.tsx +495 -0
  287. package/src/components/ui/sidebar.tsx +2211 -0
  288. package/src/components/ui/skeleton.tsx +76 -0
  289. package/src/components/ui/slider.tsx +147 -0
  290. package/src/components/ui/sonner.tsx +120 -0
  291. package/src/components/ui/stack.tsx +180 -0
  292. package/src/components/ui/stories/accordion.stories.tsx +429 -0
  293. package/src/components/ui/stories/alert-dialog.stories.tsx +519 -0
  294. package/src/components/ui/stories/alert.stories.tsx +228 -0
  295. package/src/components/ui/stories/aspect-ratio.stories.tsx +200 -0
  296. package/src/components/ui/stories/avatar.stories.tsx +317 -0
  297. package/src/components/ui/stories/badge.stories.tsx +260 -0
  298. package/src/components/ui/stories/breadcrumb.stories.tsx +482 -0
  299. package/src/components/ui/stories/button.stories.tsx +266 -0
  300. package/src/components/ui/stories/calendar.stories.tsx +375 -0
  301. package/src/components/ui/stories/card.stories.tsx +308 -0
  302. package/src/components/ui/stories/carousel.stories.tsx +328 -0
  303. package/src/components/ui/stories/chart.stories.tsx +430 -0
  304. package/src/components/ui/stories/checkbox.stories.tsx +297 -0
  305. package/src/components/ui/stories/cn.stories.tsx +433 -0
  306. package/src/components/ui/stories/collapsible.stories.tsx +256 -0
  307. package/src/components/ui/stories/colors.stories.tsx +502 -0
  308. package/src/components/ui/stories/combobox.stories.tsx +301 -0
  309. package/src/components/ui/stories/command.stories.tsx +632 -0
  310. package/src/components/ui/stories/container.stories.tsx +250 -0
  311. package/src/components/ui/stories/context-menu.stories.tsx +446 -0
  312. package/src/components/ui/stories/date-picker.stories.tsx +378 -0
  313. package/src/components/ui/stories/dialog.stories.tsx +535 -0
  314. package/src/components/ui/stories/drawer.stories.tsx +364 -0
  315. package/src/components/ui/stories/dropdown-menu.stories.tsx +374 -0
  316. package/src/components/ui/stories/empty-state.stories.tsx +244 -0
  317. package/src/components/ui/stories/hover-card.stories.tsx +355 -0
  318. package/src/components/ui/stories/input.stories.tsx +289 -0
  319. package/src/components/ui/stories/label.stories.tsx +294 -0
  320. package/src/components/ui/stories/menubar.stories.tsx +764 -0
  321. package/src/components/ui/stories/navigation-menu.stories.tsx +539 -0
  322. package/src/components/ui/stories/pagination.stories.tsx +604 -0
  323. package/src/components/ui/stories/popover.stories.tsx +392 -0
  324. package/src/components/ui/stories/progress.stories.tsx +218 -0
  325. package/src/components/ui/stories/radio-group.stories.tsx +400 -0
  326. package/src/components/ui/stories/resizable.stories.tsx +417 -0
  327. package/src/components/ui/stories/scroll-area.stories.tsx +180 -0
  328. package/src/components/ui/stories/select.stories.tsx +389 -0
  329. package/src/components/ui/stories/separator.stories.tsx +192 -0
  330. package/src/components/ui/stories/sheet.stories.tsx +468 -0
  331. package/src/components/ui/stories/sidebar.stories.tsx +731 -0
  332. package/src/components/ui/stories/skeleton.stories.tsx +216 -0
  333. package/src/components/ui/stories/slider.stories.tsx +321 -0
  334. package/src/components/ui/stories/sonner.stories.tsx +373 -0
  335. package/src/components/ui/stories/stack.stories.tsx +222 -0
  336. package/src/components/ui/stories/switch.stories.tsx +202 -0
  337. package/src/components/ui/stories/table.stories.tsx +541 -0
  338. package/src/components/ui/stories/tabs.stories.tsx +544 -0
  339. package/src/components/ui/stories/text-field.stories.tsx +280 -0
  340. package/src/components/ui/stories/textarea.stories.tsx +245 -0
  341. package/src/components/ui/stories/theme-toggle.stories.tsx +275 -0
  342. package/src/components/ui/stories/theme.stories.tsx +412 -0
  343. package/src/components/ui/stories/toggle-group.stories.tsx +337 -0
  344. package/src/components/ui/stories/toggle.stories.tsx +325 -0
  345. package/src/components/ui/stories/tooltip.stories.tsx +444 -0
  346. package/src/components/ui/stories/typography.stories.tsx +1586 -0
  347. package/src/components/ui/stories/use-mobile.stories.tsx +420 -0
  348. package/src/components/ui/stories/use-theme.stories.tsx +531 -0
  349. package/src/components/ui/switch.tsx +106 -0
  350. package/src/components/ui/table.tsx +424 -0
  351. package/src/components/ui/tabs.tsx +316 -0
  352. package/src/components/ui/text-field.tsx +206 -0
  353. package/src/components/ui/textarea.tsx +98 -0
  354. package/src/components/ui/theme-toggle.tsx +185 -0
  355. package/src/components/ui/theme.tsx +148 -0
  356. package/src/components/ui/toggle-group.tsx +196 -0
  357. package/src/components/ui/toggle.tsx +115 -0
  358. package/src/components/ui/tooltip.tsx +253 -0
  359. package/src/components/ui/typography.tsx +468 -0
  360. package/src/hooks/use-mobile.ts +91 -0
  361. package/src/hooks/use-theme.ts +319 -0
  362. package/src/index.ts +77 -0
  363. package/src/lib/utils.ts +57 -0
  364. package/src/styles/globals.css +160 -0
@@ -0,0 +1,373 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import React from "react";
3
+ import { toast } from "sonner";
4
+ import { Toaster } from "../sonner";
5
+ import { Button } from "../button";
6
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../card";
7
+
8
+ const meta: Meta<typeof Toaster> = {
9
+ title: "Data Display/Sonner",
10
+ component: Toaster,
11
+ parameters: {
12
+ layout: "centered",
13
+ docs: {
14
+ description: {
15
+ component:
16
+ "An opinionated toast component for React built on Sonner. Provides beautiful, accessible notifications with minimal setup and automatic theme integration.",
17
+ },
18
+ },
19
+ },
20
+ tags: ["autodocs"],
21
+ argTypes: {
22
+ position: {
23
+ control: "select",
24
+ options: ["top-left", "top-center", "top-right", "bottom-left", "bottom-center", "bottom-right"],
25
+ description: "Position of toasts on screen",
26
+ },
27
+ richColors: {
28
+ control: "boolean",
29
+ description: "Enable enhanced colors for different toast types",
30
+ },
31
+ expand: {
32
+ control: "boolean",
33
+ description: "Expand toasts by default to show full content",
34
+ },
35
+ duration: {
36
+ control: "number",
37
+ description: "Default duration in milliseconds before auto-dismiss",
38
+ },
39
+ gap: {
40
+ control: "number",
41
+ description: "Spacing between toasts in pixels",
42
+ },
43
+ visibleToasts: {
44
+ control: "number",
45
+ description: "Maximum number of toasts visible at once",
46
+ },
47
+ closeButton: {
48
+ control: "boolean",
49
+ description: "Show close button on each toast",
50
+ },
51
+ },
52
+ decorators: [
53
+ (Story) => (
54
+ <>
55
+ <Story />
56
+ <Toaster position="bottom-right" />
57
+ </>
58
+ ),
59
+ ],
60
+ } satisfies Meta<typeof Toaster>;
61
+
62
+ export default meta;
63
+ type Story = StoryObj<typeof meta>;
64
+
65
+ export const Interactive: Story = {
66
+ args: {
67
+ position: "bottom-right",
68
+ richColors: false,
69
+ expand: false,
70
+ duration: 4000,
71
+ gap: 14,
72
+ visibleToasts: 3,
73
+ closeButton: false,
74
+ },
75
+ render: (args) => (
76
+ <div className="space-y-4">
77
+ <Toaster {...args} />
78
+ <div className="grid grid-cols-2 gap-4">
79
+ <Button onClick={() => toast("Basic notification")}>
80
+ Basic Toast
81
+ </Button>
82
+ <Button
83
+ variant="outline"
84
+ onClick={() => toast.success("Operation completed successfully")}
85
+ >
86
+ Success Toast
87
+ </Button>
88
+ <Button
89
+ variant="outline"
90
+ onClick={() => toast.error("Something went wrong")}
91
+ >
92
+ Error Toast
93
+ </Button>
94
+ <Button
95
+ variant="outline"
96
+ onClick={() => toast("Event created", {
97
+ description: "Your event has been scheduled",
98
+ action: {
99
+ label: "View",
100
+ onClick: () => console.log("View event")
101
+ }
102
+ })}
103
+ >
104
+ With Action
105
+ </Button>
106
+ <Button
107
+ variant="outline"
108
+ onClick={() => {
109
+ const promise = new Promise((resolve) => setTimeout(resolve, 2000));
110
+ toast.promise(promise, {
111
+ loading: "Processing...",
112
+ success: "Complete!",
113
+ error: "Failed to process"
114
+ });
115
+ }}
116
+ >
117
+ Promise Toast
118
+ </Button>
119
+ <Button
120
+ variant="outline"
121
+ onClick={() => toast.dismiss()}
122
+ >
123
+ Dismiss All
124
+ </Button>
125
+ </div>
126
+ </div>
127
+ ),
128
+ };
129
+
130
+ export const Variants: Story = {
131
+ render: () => (
132
+ <div className="space-y-6">
133
+ <div>
134
+ <h3 className="mb-3 text-lg font-semibold">Toast Types</h3>
135
+ <div className="grid grid-cols-3 gap-3">
136
+ <Button
137
+ size="sm"
138
+ onClick={() => toast("Default notification")}
139
+ >
140
+ Default
141
+ </Button>
142
+ <Button
143
+ size="sm"
144
+ variant="outline"
145
+ onClick={() => toast.success("Success message")}
146
+ >
147
+ Success
148
+ </Button>
149
+ <Button
150
+ size="sm"
151
+ variant="outline"
152
+ onClick={() => toast.error("Error message")}
153
+ >
154
+ Error
155
+ </Button>
156
+ <Button
157
+ size="sm"
158
+ variant="outline"
159
+ onClick={() => toast.warning("Warning message")}
160
+ >
161
+ Warning
162
+ </Button>
163
+ <Button
164
+ size="sm"
165
+ variant="outline"
166
+ onClick={() => toast.info("Info message")}
167
+ >
168
+ Info
169
+ </Button>
170
+ <Button
171
+ size="sm"
172
+ variant="outline"
173
+ onClick={() => toast.loading("Loading...")}
174
+ >
175
+ Loading
176
+ </Button>
177
+ </div>
178
+ </div>
179
+
180
+ <div>
181
+ <h3 className="mb-3 text-lg font-semibold">Positions</h3>
182
+ <div className="grid grid-cols-3 gap-3">
183
+ <Button
184
+ size="sm"
185
+ variant="secondary"
186
+ onClick={() => toast.success("Top Left", { position: "top-left" })}
187
+ >
188
+ Top Left
189
+ </Button>
190
+ <Button
191
+ size="sm"
192
+ variant="secondary"
193
+ onClick={() => toast.success("Top Center", { position: "top-center" })}
194
+ >
195
+ Top Center
196
+ </Button>
197
+ <Button
198
+ size="sm"
199
+ variant="secondary"
200
+ onClick={() => toast.success("Top Right", { position: "top-right" })}
201
+ >
202
+ Top Right
203
+ </Button>
204
+ <Button
205
+ size="sm"
206
+ variant="secondary"
207
+ onClick={() => toast.success("Bottom Left", { position: "bottom-left" })}
208
+ >
209
+ Bottom Left
210
+ </Button>
211
+ <Button
212
+ size="sm"
213
+ variant="secondary"
214
+ onClick={() => toast.success("Bottom Center", { position: "bottom-center" })}
215
+ >
216
+ Bottom Center
217
+ </Button>
218
+ <Button
219
+ size="sm"
220
+ variant="secondary"
221
+ onClick={() => toast.success("Bottom Right", { position: "bottom-right" })}
222
+ >
223
+ Bottom Right
224
+ </Button>
225
+ </div>
226
+ </div>
227
+
228
+ <div>
229
+ <h3 className="mb-3 text-lg font-semibold">Durations</h3>
230
+ <div className="flex gap-3">
231
+ <Button
232
+ size="sm"
233
+ variant="ghost"
234
+ onClick={() => toast("Quick (1s)", { duration: 1000 })}
235
+ >
236
+ Quick (1s)
237
+ </Button>
238
+ <Button
239
+ size="sm"
240
+ variant="ghost"
241
+ onClick={() => toast("Standard (4s)", { duration: 4000 })}
242
+ >
243
+ Standard (4s)
244
+ </Button>
245
+ <Button
246
+ size="sm"
247
+ variant="ghost"
248
+ onClick={() => toast("Long (8s)", { duration: 8000 })}
249
+ >
250
+ Long (8s)
251
+ </Button>
252
+ <Button
253
+ size="sm"
254
+ variant="ghost"
255
+ onClick={() => toast("Persistent", { duration: Infinity })}
256
+ >
257
+ Persistent
258
+ </Button>
259
+ </div>
260
+ </div>
261
+ </div>
262
+ ),
263
+ };
264
+
265
+ export const InContext: Story = {
266
+ render: () => (
267
+ <Card className="w-[500px]">
268
+ <CardHeader>
269
+ <CardTitle>Farcaster Dashboard</CardTitle>
270
+ <CardDescription>
271
+ Manage your Farcaster presence and interactions
272
+ </CardDescription>
273
+ </CardHeader>
274
+ <CardContent className="space-y-4">
275
+ <div className="grid grid-cols-2 gap-3">
276
+ <Button
277
+ onClick={() =>
278
+ toast.success("Cast published", {
279
+ description: "Your cast has been published to /farcaster",
280
+ action: {
281
+ label: "View Cast",
282
+ onClick: () => console.log("Opening cast...")
283
+ }
284
+ })
285
+ }
286
+ >
287
+ Publish Cast
288
+ </Button>
289
+ <Button
290
+ variant="outline"
291
+ onClick={() =>
292
+ toast("New follower: @vitalik.eth", {
293
+ description: "They followed you 2 minutes ago",
294
+ action: {
295
+ label: "Follow Back",
296
+ onClick: () => toast.success("Followed @vitalik.eth")
297
+ }
298
+ })
299
+ }
300
+ >
301
+ Follow Notification
302
+ </Button>
303
+ <Button
304
+ variant="outline"
305
+ onClick={() => {
306
+ const mintPromise = new Promise((resolve) => setTimeout(resolve, 3000));
307
+ toast.promise(mintPromise, {
308
+ loading: "Minting Frame NFT...",
309
+ success: "NFT minted successfully! View on OpenSea",
310
+ error: "Failed to mint NFT"
311
+ });
312
+ }}
313
+ >
314
+ Mint Frame NFT
315
+ </Button>
316
+ <Button
317
+ variant="outline"
318
+ onClick={() =>
319
+ toast.warning("API rate limit approaching", {
320
+ description: "85% of your hourly limit used",
321
+ action: {
322
+ label: "Upgrade Plan",
323
+ onClick: () => console.log("Opening billing...")
324
+ }
325
+ })
326
+ }
327
+ >
328
+ Rate Limit Warning
329
+ </Button>
330
+ <Button
331
+ variant="outline"
332
+ onClick={() =>
333
+ toast("Cast deleted", {
334
+ description: "Your cast has been removed from the feed",
335
+ action: {
336
+ label: "Undo",
337
+ onClick: () => toast.success("Cast restored")
338
+ }
339
+ })
340
+ }
341
+ >
342
+ Delete Cast
343
+ </Button>
344
+ <Button
345
+ variant="outline"
346
+ onClick={() =>
347
+ toast.info("Frame analytics ready", {
348
+ description: "View engagement data for your latest Frame",
349
+ action: {
350
+ label: "View Analytics",
351
+ onClick: () => console.log("Opening analytics...")
352
+ }
353
+ })
354
+ }
355
+ >
356
+ Analytics Update
357
+ </Button>
358
+ </div>
359
+
360
+ <div className="border-t pt-4">
361
+ <Button
362
+ variant="ghost"
363
+ size="sm"
364
+ className="w-full"
365
+ onClick={() => toast.dismiss()}
366
+ >
367
+ Clear All Notifications
368
+ </Button>
369
+ </div>
370
+ </CardContent>
371
+ </Card>
372
+ ),
373
+ };
@@ -0,0 +1,222 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Stack } from "../stack";
3
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../card";
4
+ import { Button } from "../button";
5
+ import { Badge } from "../badge";
6
+ import { Avatar, AvatarFallback, AvatarImage } from "../avatar";
7
+ import { Input } from "../input";
8
+
9
+ const meta = {
10
+ title: "Layout and Structure/Stack",
11
+ component: Stack,
12
+ parameters: {
13
+ layout: "centered",
14
+ docs: {
15
+ description: {
16
+ component:
17
+ "A layout component that arranges children with consistent spacing. Useful for creating vertical or horizontal layouts with predefined spacing values.",
18
+ },
19
+ },
20
+ },
21
+ tags: ["autodocs"],
22
+ argTypes: {
23
+ spacing: {
24
+ control: { type: "select" },
25
+ options: [1, 2, 3, 4, 6, 8, 12],
26
+ description: "The spacing between children",
27
+ },
28
+ direction: {
29
+ control: { type: "radio" },
30
+ options: ["vertical", "horizontal"],
31
+ description: "The direction of the stack",
32
+ },
33
+ },
34
+ } satisfies Meta<typeof Stack>;
35
+
36
+ export default meta;
37
+ type Story = StoryObj<typeof meta>;
38
+
39
+ export const Interactive: Story = {
40
+ args: {
41
+ spacing: 4,
42
+ direction: "vertical",
43
+ className: "w-[300px]",
44
+ },
45
+ render: (args) => (
46
+ <Stack {...args}>
47
+ <Card>
48
+ <CardHeader>
49
+ <CardTitle>First Card</CardTitle>
50
+ <CardDescription>This is the first card in the stack</CardDescription>
51
+ </CardHeader>
52
+ </Card>
53
+ <Card>
54
+ <CardHeader>
55
+ <CardTitle>Second Card</CardTitle>
56
+ <CardDescription>This is the second card in the stack</CardDescription>
57
+ </CardHeader>
58
+ </Card>
59
+ <Card>
60
+ <CardHeader>
61
+ <CardTitle>Third Card</CardTitle>
62
+ <CardDescription>This is the third card in the stack</CardDescription>
63
+ </CardHeader>
64
+ </Card>
65
+ </Stack>
66
+ ),
67
+ };
68
+
69
+ export const Variants: Story = {
70
+ render: () => (
71
+ <div className="space-y-8">
72
+ {/* Direction Variants */}
73
+ <div>
74
+ <h3 className="text-lg font-semibold mb-4">Direction Variants</h3>
75
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-8">
76
+ <div>
77
+ <p className="text-sm font-medium mb-3">Vertical (Default)</p>
78
+ <Stack spacing={3}>
79
+ <Button>First Button</Button>
80
+ <Button variant="outline">Second Button</Button>
81
+ <Button variant="ghost">Third Button</Button>
82
+ </Stack>
83
+ </div>
84
+ <div>
85
+ <p className="text-sm font-medium mb-3">Horizontal</p>
86
+ <Stack direction="horizontal" spacing={3}>
87
+ <Button>First</Button>
88
+ <Button variant="outline">Second</Button>
89
+ <Button variant="ghost">Third</Button>
90
+ </Stack>
91
+ </div>
92
+ </div>
93
+ </div>
94
+
95
+ {/* Spacing Variants */}
96
+ <div>
97
+ <h3 className="text-lg font-semibold mb-4">Spacing Variants</h3>
98
+ <div className="grid grid-cols-2 md:grid-cols-4 gap-6">
99
+ {[1, 2, 4, 8].map((spacing) => (
100
+ <div key={spacing}>
101
+ <p className="text-sm font-medium mb-2">Spacing {spacing}</p>
102
+ <Stack spacing={spacing as 1 | 2 | 4 | 8}>
103
+ <Badge>Item 1</Badge>
104
+ <Badge variant="outline">Item 2</Badge>
105
+ <Badge variant="secondary">Item 3</Badge>
106
+ </Stack>
107
+ </div>
108
+ ))}
109
+ </div>
110
+ </div>
111
+
112
+ {/* Combined Variants */}
113
+ <div>
114
+ <h3 className="text-lg font-semibold mb-4">Combined Usage</h3>
115
+ <div className="grid grid-cols-1 md:grid-cols-2 gap-6">
116
+ <div>
117
+ <p className="text-sm font-medium mb-2">Vertical + Large Spacing</p>
118
+ <Stack spacing={6} className="p-4 border rounded-lg">
119
+ <Input placeholder="Email" />
120
+ <Input placeholder="Password" />
121
+ <Button>Sign In</Button>
122
+ </Stack>
123
+ </div>
124
+ <div>
125
+ <p className="text-sm font-medium mb-2">Horizontal + Tight Spacing</p>
126
+ <Stack direction="horizontal" spacing={1} className="p-4 border rounded-lg">
127
+ <Button size="sm">❤️</Button>
128
+ <Button size="sm" variant="outline">🔄</Button>
129
+ <Button size="sm" variant="outline">💬</Button>
130
+ <Button size="sm" variant="outline">📤</Button>
131
+ </Stack>
132
+ </div>
133
+ </div>
134
+ </div>
135
+ </div>
136
+ ),
137
+ };
138
+
139
+ export const InContext: Story = {
140
+ render: () => (
141
+ <div className="max-w-md mx-auto">
142
+ {/* User Profile Card - Real-world usage example */}
143
+ <Card>
144
+ <CardHeader>
145
+ <Stack spacing={4}>
146
+ {/* Header with avatar and info */}
147
+ <Stack direction="horizontal" spacing={4} className="items-center">
148
+ <Avatar className="h-16 w-16">
149
+ <AvatarImage src="https://github.com/shadcn.png" />
150
+ <AvatarFallback>DW</AvatarFallback>
151
+ </Avatar>
152
+ <Stack spacing={1}>
153
+ <h3 className="font-semibold text-lg">Dan Williams</h3>
154
+ <p className="text-sm text-muted-foreground">@dwr.eth</p>
155
+ <Stack direction="horizontal" spacing={2}>
156
+ <Badge variant="secondary">Verified</Badge>
157
+ <Badge variant="outline">Active</Badge>
158
+ </Stack>
159
+ </Stack>
160
+ </Stack>
161
+
162
+ {/* Bio section */}
163
+ <p className="text-sm">
164
+ Building the future of decentralized social networks.
165
+ Previously co-founded Coinbase. Passionate about crypto,
166
+ developer tools, and community building.
167
+ </p>
168
+
169
+ {/* Stats section */}
170
+ <Stack direction="horizontal" spacing={6} className="justify-center">
171
+ <Stack spacing={1} className="items-center">
172
+ <p className="font-semibold text-lg">12.5k</p>
173
+ <p className="text-xs text-muted-foreground">Followers</p>
174
+ </Stack>
175
+ <Stack spacing={1} className="items-center">
176
+ <p className="font-semibold text-lg">842</p>
177
+ <p className="text-xs text-muted-foreground">Following</p>
178
+ </Stack>
179
+ <Stack spacing={1} className="items-center">
180
+ <p className="font-semibold text-lg">1.2k</p>
181
+ <p className="text-xs text-muted-foreground">Casts</p>
182
+ </Stack>
183
+ </Stack>
184
+
185
+ {/* Action buttons */}
186
+ <Stack direction="horizontal" spacing={3}>
187
+ <Button className="flex-1">Follow</Button>
188
+ <Button variant="outline" className="flex-1">Message</Button>
189
+ <Button variant="ghost" size="icon">⋯</Button>
190
+ </Stack>
191
+ </Stack>
192
+ </CardHeader>
193
+ </Card>
194
+
195
+ {/* Recent Activity - showing nested stacks */}
196
+ <Card className="mt-6">
197
+ <CardHeader>
198
+ <CardTitle>Recent Activity</CardTitle>
199
+ </CardHeader>
200
+ <CardContent>
201
+ <Stack spacing={4}>
202
+ {[
203
+ { action: "Published a new cast", time: "2 hours ago", content: "Just shipped a major update to Farcaster frames!" },
204
+ { action: "Liked a cast", time: "4 hours ago", content: "Great insights on decentralized identity" },
205
+ { action: "Followed 3 new users", time: "1 day ago", content: "" }
206
+ ].map((activity, i) => (
207
+ <Stack key={i} spacing={2} className="p-3 border rounded-lg">
208
+ <Stack direction="horizontal" spacing={2} className="items-center justify-between">
209
+ <p className="text-sm font-medium">{activity.action}</p>
210
+ <p className="text-xs text-muted-foreground">{activity.time}</p>
211
+ </Stack>
212
+ {activity.content && (
213
+ <p className="text-sm text-muted-foreground">{activity.content}</p>
214
+ )}
215
+ </Stack>
216
+ ))}
217
+ </Stack>
218
+ </CardContent>
219
+ </Card>
220
+ </div>
221
+ ),
222
+ };