@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,389 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import React from "react";
3
+ import {
4
+ Select,
5
+ SelectContent,
6
+ SelectGroup,
7
+ SelectItem,
8
+ SelectLabel,
9
+ SelectSeparator,
10
+ SelectTrigger,
11
+ SelectValue,
12
+ } from "../select";
13
+ import { Label } from "../label";
14
+ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "../card";
15
+
16
+ const meta = {
17
+ title: "Form & Input/Select",
18
+ component: Select,
19
+ parameters: {
20
+ layout: "centered",
21
+ docs: {
22
+ description: {
23
+ component:
24
+ "A dropdown selection component built on Radix UI that displays a list of options for users to pick from. Features keyboard navigation, grouping, accessibility support, and flexible styling.",
25
+ },
26
+ },
27
+ },
28
+ tags: ["autodocs"],
29
+ argTypes: {
30
+ value: {
31
+ control: "text",
32
+ description: "The controlled value of the select",
33
+ },
34
+ defaultValue: {
35
+ control: "text",
36
+ description: "The default value when uncontrolled",
37
+ },
38
+ disabled: {
39
+ control: "boolean",
40
+ description: "Whether the select is disabled",
41
+ },
42
+ required: {
43
+ control: "boolean",
44
+ description: "Whether the select is required in forms",
45
+ },
46
+ },
47
+ } satisfies Meta<typeof Select>;
48
+
49
+ export default meta;
50
+ type Story = StoryObj<typeof meta>;
51
+
52
+ /**
53
+ * Interactive playground for testing all Select component features.
54
+ * Use the controls panel to experiment with different props and states.
55
+ */
56
+ export const Interactive: Story = {
57
+ args: {
58
+ defaultValue: "apple",
59
+ disabled: false,
60
+ required: false,
61
+ },
62
+ render: (args) => (
63
+ <div className="space-y-4">
64
+ <Select {...args}>
65
+ <SelectTrigger className="w-[280px]">
66
+ <SelectValue placeholder="Select a fruit" />
67
+ </SelectTrigger>
68
+ <SelectContent>
69
+ <SelectGroup>
70
+ <SelectLabel>Citrus Fruits</SelectLabel>
71
+ <SelectItem value="orange">Orange</SelectItem>
72
+ <SelectItem value="lemon">Lemon</SelectItem>
73
+ <SelectItem value="lime">Lime</SelectItem>
74
+ <SelectItem value="grapefruit">Grapefruit</SelectItem>
75
+ </SelectGroup>
76
+ <SelectSeparator />
77
+ <SelectGroup>
78
+ <SelectLabel>Stone Fruits</SelectLabel>
79
+ <SelectItem value="apple">Apple</SelectItem>
80
+ <SelectItem value="banana">Banana</SelectItem>
81
+ <SelectItem value="peach">Peach</SelectItem>
82
+ <SelectItem value="pear" disabled>
83
+ Pear (Out of season)
84
+ </SelectItem>
85
+ </SelectGroup>
86
+ <SelectSeparator />
87
+ <SelectGroup>
88
+ <SelectLabel>Berries</SelectLabel>
89
+ <SelectItem value="strawberry">Strawberry</SelectItem>
90
+ <SelectItem value="blueberry">Blueberry</SelectItem>
91
+ <SelectItem value="raspberry">Raspberry</SelectItem>
92
+ </SelectGroup>
93
+ </SelectContent>
94
+ </Select>
95
+
96
+ <div className="space-y-2">
97
+ <Label>Size Variants</Label>
98
+ <div className="flex items-center gap-4">
99
+ <Select defaultValue="sm">
100
+ <SelectTrigger size="sm" className="w-[120px]">
101
+ <SelectValue />
102
+ </SelectTrigger>
103
+ <SelectContent>
104
+ <SelectItem value="sm">Small</SelectItem>
105
+ <SelectItem value="other">Other</SelectItem>
106
+ </SelectContent>
107
+ </Select>
108
+
109
+ <Select defaultValue="default">
110
+ <SelectTrigger className="w-[120px]">
111
+ <SelectValue />
112
+ </SelectTrigger>
113
+ <SelectContent>
114
+ <SelectItem value="default">Default</SelectItem>
115
+ <SelectItem value="other">Other</SelectItem>
116
+ </SelectContent>
117
+ </Select>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ ),
122
+ };
123
+
124
+ /**
125
+ * Showcase of all Select variants, states, and composition patterns.
126
+ * Demonstrates grouping, separators, disabled items, sizes, and styling options.
127
+ */
128
+ export const Variants: Story = {
129
+ render: () => (
130
+ <div className="grid grid-cols-2 gap-8 w-full max-w-4xl">
131
+ {/* Basic Select */}
132
+ <div className="space-y-2">
133
+ <Label>Basic Select</Label>
134
+ <Select defaultValue="option2">
135
+ <SelectTrigger className="w-[200px]">
136
+ <SelectValue placeholder="Choose option" />
137
+ </SelectTrigger>
138
+ <SelectContent>
139
+ <SelectItem value="option1">Option 1</SelectItem>
140
+ <SelectItem value="option2">Option 2</SelectItem>
141
+ <SelectItem value="option3">Option 3</SelectItem>
142
+ </SelectContent>
143
+ </Select>
144
+ </div>
145
+
146
+ {/* With Groups */}
147
+ <div className="space-y-2">
148
+ <Label>Grouped Options</Label>
149
+ <Select>
150
+ <SelectTrigger className="w-[200px]">
151
+ <SelectValue placeholder="Select client" />
152
+ </SelectTrigger>
153
+ <SelectContent>
154
+ <SelectGroup>
155
+ <SelectLabel>Official</SelectLabel>
156
+ <SelectItem value="warpcast">Warpcast</SelectItem>
157
+ </SelectGroup>
158
+ <SelectSeparator />
159
+ <SelectGroup>
160
+ <SelectLabel>Community</SelectLabel>
161
+ <SelectItem value="supercast">Supercast</SelectItem>
162
+ <SelectItem value="yup">Yup</SelectItem>
163
+ </SelectGroup>
164
+ </SelectContent>
165
+ </Select>
166
+ </div>
167
+
168
+ {/* Disabled State */}
169
+ <div className="space-y-2">
170
+ <Label>Disabled Select</Label>
171
+ <Select disabled>
172
+ <SelectTrigger className="w-[200px]">
173
+ <SelectValue placeholder="Disabled" />
174
+ </SelectTrigger>
175
+ <SelectContent>
176
+ <SelectItem value="item1">Item 1</SelectItem>
177
+ </SelectContent>
178
+ </Select>
179
+ </div>
180
+
181
+ {/* With Disabled Items */}
182
+ <div className="space-y-2">
183
+ <Label>Disabled Items</Label>
184
+ <Select>
185
+ <SelectTrigger className="w-[200px]">
186
+ <SelectValue placeholder="Select feature" />
187
+ </SelectTrigger>
188
+ <SelectContent>
189
+ <SelectItem value="available">Available</SelectItem>
190
+ <SelectItem value="coming" disabled>
191
+ Coming Soon
192
+ </SelectItem>
193
+ <SelectItem value="beta" disabled>
194
+ Beta Feature
195
+ </SelectItem>
196
+ </SelectContent>
197
+ </Select>
198
+ </div>
199
+
200
+ {/* Size Variants */}
201
+ <div className="space-y-2">
202
+ <Label>Size Variants</Label>
203
+ <div className="flex items-center gap-2">
204
+ <Select>
205
+ <SelectTrigger size="sm" className="w-[100px]">
206
+ <SelectValue placeholder="SM" />
207
+ </SelectTrigger>
208
+ <SelectContent>
209
+ <SelectItem value="small">Small</SelectItem>
210
+ </SelectContent>
211
+ </Select>
212
+ <Select>
213
+ <SelectTrigger className="w-[100px]">
214
+ <SelectValue placeholder="Default" />
215
+ </SelectTrigger>
216
+ <SelectContent>
217
+ <SelectItem value="default">Default</SelectItem>
218
+ </SelectContent>
219
+ </Select>
220
+ </div>
221
+ </div>
222
+
223
+ {/* Custom Styling */}
224
+ <div className="space-y-2">
225
+ <Label>Custom Styled</Label>
226
+ <Select>
227
+ <SelectTrigger className="w-[200px] border-primary/50 bg-primary/5">
228
+ <SelectValue placeholder="Custom style" />
229
+ </SelectTrigger>
230
+ <SelectContent className="border-primary/50">
231
+ <SelectItem value="styled">Styled option</SelectItem>
232
+ <SelectItem value="another">Another option</SelectItem>
233
+ </SelectContent>
234
+ </Select>
235
+ </div>
236
+ </div>
237
+ ),
238
+ };
239
+
240
+ /**
241
+ * Real-world usage example showing Select in a practical Farcaster application context.
242
+ * Demonstrates form integration, controlled state, and typical user workflows.
243
+ */
244
+ export const InContext: Story = {
245
+ render: function SelectInContext() {
246
+ const [formData, setFormData] = React.useState({
247
+ channel: "dev",
248
+ visibility: "public",
249
+ client: "warpcast",
250
+ });
251
+
252
+ const handleSubmit = (e: React.FormEvent) => {
253
+ e.preventDefault();
254
+ console.log("Cast configuration:", formData);
255
+ };
256
+
257
+ return (
258
+ <Card className="w-[500px]">
259
+ <CardHeader>
260
+ <CardTitle>Create Farcaster Cast</CardTitle>
261
+ <CardDescription>
262
+ Configure your cast settings before publishing to the Farcaster network
263
+ </CardDescription>
264
+ </CardHeader>
265
+ <CardContent>
266
+ <form onSubmit={handleSubmit} className="space-y-6">
267
+ {/* Channel Selection */}
268
+ <div className="space-y-2">
269
+ <Label htmlFor="channel-select">Post to Channel</Label>
270
+ <Select
271
+ value={formData.channel}
272
+ onValueChange={(value) =>
273
+ setFormData((prev) => ({ ...prev, channel: value }))
274
+ }
275
+ >
276
+ <SelectTrigger id="channel-select">
277
+ <SelectValue />
278
+ </SelectTrigger>
279
+ <SelectContent>
280
+ <SelectItem value="home">Home Feed</SelectItem>
281
+ <SelectSeparator />
282
+ <SelectGroup>
283
+ <SelectLabel>Popular Channels</SelectLabel>
284
+ <SelectItem value="dev">/dev</SelectItem>
285
+ <SelectItem value="design">/design</SelectItem>
286
+ <SelectItem value="founders">/founders</SelectItem>
287
+ <SelectItem value="product">/product</SelectItem>
288
+ </SelectGroup>
289
+ <SelectSeparator />
290
+ <SelectGroup>
291
+ <SelectLabel>Community</SelectLabel>
292
+ <SelectItem value="farcaster">/farcaster</SelectItem>
293
+ <SelectItem value="neynar">/neynar</SelectItem>
294
+ <SelectItem value="frames">/frames</SelectItem>
295
+ </SelectGroup>
296
+ </SelectContent>
297
+ </Select>
298
+ </div>
299
+
300
+ {/* Visibility Selection */}
301
+ <div className="space-y-2">
302
+ <Label htmlFor="visibility-select">Cast Visibility</Label>
303
+ <Select
304
+ value={formData.visibility}
305
+ onValueChange={(value) =>
306
+ setFormData((prev) => ({ ...prev, visibility: value }))
307
+ }
308
+ >
309
+ <SelectTrigger id="visibility-select">
310
+ <SelectValue />
311
+ </SelectTrigger>
312
+ <SelectContent>
313
+ <SelectItem value="public">
314
+ <span className="flex items-center gap-2">
315
+ 🌐 Public
316
+ </span>
317
+ </SelectItem>
318
+ <SelectItem value="followers">
319
+ <span className="flex items-center gap-2">
320
+ 👥 Followers Only
321
+ </span>
322
+ </SelectItem>
323
+ <SelectItem value="mentioned">
324
+ <span className="flex items-center gap-2">
325
+ @ Mentioned Only
326
+ </span>
327
+ </SelectItem>
328
+ </SelectContent>
329
+ </Select>
330
+ </div>
331
+
332
+ {/* Client Selection */}
333
+ <div className="space-y-2">
334
+ <Label htmlFor="client-select">Preferred Client</Label>
335
+ <Select
336
+ value={formData.client}
337
+ onValueChange={(value) =>
338
+ setFormData((prev) => ({ ...prev, client: value }))
339
+ }
340
+ >
341
+ <SelectTrigger id="client-select">
342
+ <SelectValue />
343
+ </SelectTrigger>
344
+ <SelectContent>
345
+ <SelectGroup>
346
+ <SelectLabel>Official Clients</SelectLabel>
347
+ <SelectItem value="warpcast">Warpcast</SelectItem>
348
+ </SelectGroup>
349
+ <SelectSeparator />
350
+ <SelectGroup>
351
+ <SelectLabel>Community Clients</SelectLabel>
352
+ <SelectItem value="supercast">Supercast</SelectItem>
353
+ <SelectItem value="yup">Yup</SelectItem>
354
+ <SelectItem value="launchcaster">Launchcaster</SelectItem>
355
+ </SelectGroup>
356
+ </SelectContent>
357
+ </Select>
358
+ </div>
359
+
360
+ {/* Configuration Summary */}
361
+ <div className="p-4 bg-muted/50 rounded-md space-y-1">
362
+ <h4 className="text-sm font-medium">Configuration Summary</h4>
363
+ <div className="text-sm text-muted-foreground space-y-1">
364
+ <p>Channel: <span className="font-medium">/{formData.channel}</span></p>
365
+ <p>Visibility: <span className="font-medium">{formData.visibility}</span></p>
366
+ <p>Client: <span className="font-medium">{formData.client}</span></p>
367
+ </div>
368
+ </div>
369
+
370
+ <div className="flex gap-2">
371
+ <button
372
+ type="button"
373
+ className="flex-1 rounded-md border px-3 py-2 text-sm font-medium hover:bg-muted"
374
+ >
375
+ Save Draft
376
+ </button>
377
+ <button
378
+ type="submit"
379
+ className="flex-1 rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground hover:bg-primary/90"
380
+ >
381
+ Publish Cast
382
+ </button>
383
+ </div>
384
+ </form>
385
+ </CardContent>
386
+ </Card>
387
+ );
388
+ },
389
+ };
@@ -0,0 +1,192 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { Separator } from "../separator";
3
+
4
+ const meta = {
5
+ title: "Layout and Structure/Separator",
6
+ component: Separator,
7
+ parameters: {
8
+ layout: "centered",
9
+ docs: {
10
+ description: {
11
+ component:
12
+ "A visual or semantic separator for dividing content sections. Built on Radix UI primitives with support for both horizontal and vertical orientations, decorative and semantic modes for accessibility.",
13
+ },
14
+ },
15
+ },
16
+ tags: ["autodocs"],
17
+ argTypes: {
18
+ orientation: {
19
+ control: { type: "select" },
20
+ options: ["horizontal", "vertical"],
21
+ description: "The orientation of the separator",
22
+ },
23
+ decorative: {
24
+ control: { type: "boolean" },
25
+ description: "Whether the separator is decorative (hidden from screen readers)",
26
+ },
27
+ className: {
28
+ control: { type: "text" },
29
+ description: "Additional CSS classes to apply",
30
+ },
31
+ },
32
+ args: {
33
+ orientation: "horizontal",
34
+ decorative: true,
35
+ },
36
+ } satisfies Meta<typeof Separator>;
37
+
38
+ export default meta;
39
+ type Story = StoryObj<typeof meta>;
40
+
41
+ /**
42
+ * Interactive playground for testing all separator props and variations.
43
+ * Use the controls panel to experiment with different orientations and decorative settings.
44
+ */
45
+ export const Interactive: Story = {
46
+ args: {
47
+ orientation: "horizontal",
48
+ decorative: true,
49
+ },
50
+ render: (args) => (
51
+ <div className="w-96 space-y-4">
52
+ <p className="text-sm text-muted-foreground">Content above the separator</p>
53
+ <Separator {...args} />
54
+ <p className="text-sm text-muted-foreground">Content below the separator</p>
55
+ </div>
56
+ ),
57
+ parameters: {
58
+ docs: {
59
+ description: {
60
+ story: "Interactive separator where you can control orientation and decorative properties using the controls panel.",
61
+ },
62
+ },
63
+ },
64
+ };
65
+
66
+ /**
67
+ * Showcase of all separator variants and orientations available.
68
+ * Demonstrates horizontal and vertical separators in different contexts.
69
+ */
70
+ export const Variants: Story = {
71
+ render: () => (
72
+ <div className="space-y-8">
73
+ {/* Horizontal Separators */}
74
+ <div>
75
+ <h4 className="text-sm font-semibold mb-4">Horizontal Separators</h4>
76
+ <div className="w-96 space-y-4">
77
+ <div>
78
+ <p className="text-sm">Default horizontal separator</p>
79
+ <Separator className="my-4" />
80
+ <p className="text-sm">Content after separator</p>
81
+ </div>
82
+
83
+ <div>
84
+ <p className="text-sm">Thick separator</p>
85
+ <Separator className="my-4 h-1 bg-primary" />
86
+ <p className="text-sm">With custom styling</p>
87
+ </div>
88
+
89
+ <div>
90
+ <p className="text-sm">Semantic separator (non-decorative)</p>
91
+ <Separator
92
+ decorative={false}
93
+ aria-label="Section divider"
94
+ className="my-4"
95
+ />
96
+ <p className="text-sm">Announced to screen readers</p>
97
+ </div>
98
+ </div>
99
+ </div>
100
+
101
+ {/* Vertical Separators */}
102
+ <div>
103
+ <h4 className="text-sm font-semibold mb-4">Vertical Separators</h4>
104
+ <div className="space-y-6">
105
+ <div className="flex items-center h-12 space-x-4">
106
+ <span className="text-sm">Left</span>
107
+ <Separator orientation="vertical" />
108
+ <span className="text-sm">Center</span>
109
+ <Separator orientation="vertical" />
110
+ <span className="text-sm">Right</span>
111
+ </div>
112
+
113
+ <div className="flex items-center p-2 border rounded-lg">
114
+ <button className="px-3 py-1 text-sm hover:bg-muted rounded">Bold</button>
115
+ <button className="px-3 py-1 text-sm hover:bg-muted rounded">Italic</button>
116
+ <Separator orientation="vertical" className="mx-2 h-6" />
117
+ <button className="px-3 py-1 text-sm hover:bg-muted rounded">Link</button>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </div>
122
+ ),
123
+ parameters: {
124
+ docs: {
125
+ description: {
126
+ story: "Complete showcase of horizontal and vertical separators with different styling options and use cases.",
127
+ },
128
+ },
129
+ },
130
+ };
131
+
132
+ /**
133
+ * Real-world usage example showing separator in a dashboard-style interface.
134
+ * Demonstrates how separators improve content organization in business applications.
135
+ */
136
+ export const InContext: Story = {
137
+ render: () => (
138
+ <div className="max-w-md mx-auto p-6 border rounded-lg bg-card">
139
+ {/* Header Section */}
140
+ <div className="mb-4">
141
+ <h2 className="text-xl font-semibold">User Dashboard</h2>
142
+ <p className="text-sm text-muted-foreground">Welcome back, John Doe</p>
143
+ </div>
144
+
145
+ <Separator className="my-4" />
146
+
147
+ {/* Navigation Menu */}
148
+ <nav className="mb-4">
149
+ <h3 className="text-sm font-medium mb-2">Navigation</h3>
150
+ <div className="space-y-1">
151
+ <a href="#" className="block py-2 text-sm hover:text-primary">Dashboard</a>
152
+ <a href="#" className="block py-2 text-sm hover:text-primary">Projects</a>
153
+ <a href="#" className="block py-2 text-sm hover:text-primary">Settings</a>
154
+ </div>
155
+ </nav>
156
+
157
+ <Separator className="my-4" />
158
+
159
+ {/* Actions Section */}
160
+ <div className="mb-4">
161
+ <h3 className="text-sm font-medium mb-2">Quick Actions</h3>
162
+ <div className="flex items-center space-x-2">
163
+ <button className="px-3 py-1 text-xs bg-primary text-primary-foreground rounded">
164
+ New Project
165
+ </button>
166
+ <Separator orientation="vertical" className="h-6" />
167
+ <button className="px-3 py-1 text-xs border rounded">
168
+ Import
169
+ </button>
170
+ <Separator orientation="vertical" className="h-6" />
171
+ <button className="px-3 py-1 text-xs border rounded">
172
+ Export
173
+ </button>
174
+ </div>
175
+ </div>
176
+
177
+ <Separator className="my-4" />
178
+
179
+ {/* Footer */}
180
+ <div className="text-center">
181
+ <p className="text-xs text-muted-foreground">Last updated: 2 minutes ago</p>
182
+ </div>
183
+ </div>
184
+ ),
185
+ parameters: {
186
+ docs: {
187
+ description: {
188
+ story: "Real-world dashboard interface showing how separators organize content sections and group related functionality for better user experience.",
189
+ },
190
+ },
191
+ },
192
+ };