@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,485 @@
1
+ "use client";
2
+
3
+ import * as React from "react";
4
+ import * as SelectPrimitive from "@radix-ui/react-select";
5
+ import { CheckIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react";
6
+
7
+ import { cn } from "@/lib/utils";
8
+
9
+ /**
10
+ * Select - A dropdown selection component built on Radix UI primitives
11
+ *
12
+ * Provides a dropdown menu for selecting a single option from a list of choices.
13
+ * Features comprehensive keyboard navigation, grouping capabilities, accessibility
14
+ * compliance, and flexible styling options. Perfect for forms, filters, and
15
+ * configuration interfaces.
16
+ *
17
+ * @component
18
+ * @example
19
+ * ```tsx
20
+ * // Basic uncontrolled select
21
+ * <Select defaultValue="apple">
22
+ * <SelectTrigger className="w-[180px]">
23
+ * <SelectValue placeholder="Select a fruit" />
24
+ * </SelectTrigger>
25
+ * <SelectContent>
26
+ * <SelectItem value="apple">Apple</SelectItem>
27
+ * <SelectItem value="banana">Banana</SelectItem>
28
+ * <SelectItem value="orange">Orange</SelectItem>
29
+ * </SelectContent>
30
+ * </Select>
31
+ * ```
32
+ *
33
+ * @example
34
+ * ```tsx
35
+ * // Controlled select with state management
36
+ * const [value, setValue] = useState("");
37
+ *
38
+ * <Select value={value} onValueChange={setValue}>
39
+ * <SelectTrigger>
40
+ * <SelectValue placeholder="Choose an option" />
41
+ * </SelectTrigger>
42
+ * <SelectContent>
43
+ * <SelectItem value="option1">Option 1</SelectItem>
44
+ * <SelectItem value="option2">Option 2</SelectItem>
45
+ * </SelectContent>
46
+ * </Select>
47
+ * ```
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * // Grouped options with separators
52
+ * <Select>
53
+ * <SelectTrigger>
54
+ * <SelectValue placeholder="Select a timezone" />
55
+ * </SelectTrigger>
56
+ * <SelectContent>
57
+ * <SelectGroup>
58
+ * <SelectLabel>North America</SelectLabel>
59
+ * <SelectItem value="est">Eastern Time (EST)</SelectItem>
60
+ * <SelectItem value="cst">Central Time (CST)</SelectItem>
61
+ * </SelectGroup>
62
+ * <SelectSeparator />
63
+ * <SelectGroup>
64
+ * <SelectLabel>Europe</SelectLabel>
65
+ * <SelectItem value="gmt">Greenwich Mean Time (GMT)</SelectItem>
66
+ * <SelectItem value="cet">Central European Time (CET)</SelectItem>
67
+ * </SelectGroup>
68
+ * </SelectContent>
69
+ * </Select>
70
+ * ```
71
+ *
72
+ * @accessibility
73
+ * - Full keyboard navigation (Arrow keys, Enter, Space, Escape, Home, End)
74
+ * - ARIA compliant with proper roles, states, and properties
75
+ * - Screen reader announcements for selection changes and state updates
76
+ * - Focus management and trapping within dropdown
77
+ * - Support for disabled state on both trigger and individual items
78
+ * - Proper labeling and description associations
79
+ *
80
+ * @see {@link SelectTrigger} - The button that opens the dropdown
81
+ * @see {@link SelectContent} - The dropdown content container
82
+ * @see {@link SelectItem} - Individual selectable options
83
+ * @see {@link SelectGroup} - Container for grouping related items
84
+ * @see {@link SelectValue} - Displays selected value or placeholder
85
+ * @see {@link https://ui.shadcn.com/docs/components/select} for design patterns
86
+ * @since 1.0.0
87
+ */
88
+ function Select({
89
+ ...props
90
+ }: React.ComponentProps<typeof SelectPrimitive.Root>) {
91
+ return <SelectPrimitive.Root data-slot="select" {...props} />;
92
+ }
93
+
94
+ /**
95
+ * SelectGroup - Container for grouping related select items
96
+ *
97
+ * Groups related options together with an optional label for better organization
98
+ * and improved user experience when dealing with many options.
99
+ *
100
+ * @component
101
+ * @example
102
+ * ```tsx
103
+ * <SelectGroup>
104
+ * <SelectLabel>Fruits</SelectLabel>
105
+ * <SelectItem value="apple">Apple</SelectItem>
106
+ * <SelectItem value="banana">Banana</SelectItem>
107
+ * </SelectGroup>
108
+ * ```
109
+ *
110
+ * @see {@link SelectLabel} - Label for the group
111
+ * @see {@link SelectItem} - Items within the group
112
+ * @since 1.0.0
113
+ */
114
+ function SelectGroup({
115
+ ...props
116
+ }: React.ComponentProps<typeof SelectPrimitive.Group>) {
117
+ return <SelectPrimitive.Group data-slot="select-group" {...props} />;
118
+ }
119
+
120
+ /**
121
+ * SelectValue - Displays the selected value or placeholder
122
+ *
123
+ * Renders the currently selected option's text or a placeholder when no option
124
+ * is selected. Must be used inside SelectTrigger.
125
+ *
126
+ * @component
127
+ * @example
128
+ * ```tsx
129
+ * <SelectTrigger>
130
+ * <SelectValue placeholder="Choose an option" />
131
+ * </SelectTrigger>
132
+ * ```
133
+ *
134
+ * @see {@link SelectTrigger} - Parent container for the value
135
+ * @since 1.0.0
136
+ */
137
+ function SelectValue({
138
+ ...props
139
+ }: React.ComponentProps<typeof SelectPrimitive.Value>) {
140
+ return <SelectPrimitive.Value data-slot="select-value" {...props} />;
141
+ }
142
+
143
+ /**
144
+ * SelectTrigger - The button that opens the select dropdown
145
+ *
146
+ * A styled button that displays the current value and triggers the dropdown menu.
147
+ * Includes a chevron icon to indicate dropdown functionality and supports different
148
+ * size variants for various UI contexts.
149
+ *
150
+ * @component
151
+ * @example
152
+ * ```tsx
153
+ * // Basic trigger with custom width
154
+ * <SelectTrigger className="w-[200px]">
155
+ * <SelectValue placeholder="Select an option" />
156
+ * </SelectTrigger>
157
+ * ```
158
+ *
159
+ * @example
160
+ * ```tsx
161
+ * // Small size variant for compact layouts
162
+ * <SelectTrigger size="sm" className="w-[150px]">
163
+ * <SelectValue placeholder="Compact" />
164
+ * </SelectTrigger>
165
+ * ```
166
+ *
167
+ * @example
168
+ * ```tsx
169
+ * // With form integration
170
+ * <SelectTrigger id="user-role" aria-describedby="role-help">
171
+ * <SelectValue placeholder="Choose role" />
172
+ * </SelectTrigger>
173
+ * ```
174
+ *
175
+ * @accessibility
176
+ * - Keyboard accessible with Enter/Space to open dropdown
177
+ * - Arrow keys navigate when closed (opens and moves to first/last item)
178
+ * - Properly announces state changes to screen readers
179
+ * - Focus visible ring for keyboard navigation
180
+ * - Supports aria-describedby for additional context
181
+ * - Disabled state properly communicated to assistive technology
182
+ *
183
+ * @see {@link SelectValue} - Displays the selected value or placeholder
184
+ * @since 1.0.0
185
+ */
186
+ function SelectTrigger({
187
+ className,
188
+ size = "default",
189
+ children,
190
+ ...props
191
+ }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
192
+ /**
193
+ * The size variant of the trigger button
194
+ * @default "default"
195
+ */
196
+ size?: "sm" | "default";
197
+ }) {
198
+ return (
199
+ <SelectPrimitive.Trigger
200
+ data-slot="select-trigger"
201
+ data-size={size}
202
+ className={cn(
203
+ "border-input data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 dark:hover:bg-input/50 flex w-fit items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-2 text-sm whitespace-nowrap shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
204
+ className,
205
+ )}
206
+ {...props}
207
+ >
208
+ {children}
209
+ <SelectPrimitive.Icon asChild>
210
+ <ChevronDownIcon className="size-4 opacity-50" />
211
+ </SelectPrimitive.Icon>
212
+ </SelectPrimitive.Trigger>
213
+ );
214
+ }
215
+
216
+ /**
217
+ * SelectContent - Container for the dropdown content
218
+ *
219
+ * The dropdown panel that contains all selectable items, groups, and labels.
220
+ * Automatically handles scrolling for long lists and positioning relative to the trigger.
221
+ *
222
+ * @component
223
+ * @example
224
+ * ```tsx
225
+ * <SelectContent>
226
+ * <SelectItem value="1">Option 1</SelectItem>
227
+ * <SelectItem value="2">Option 2</SelectItem>
228
+ * <SelectItem value="3">Option 3</SelectItem>
229
+ * </SelectContent>
230
+ * ```
231
+ *
232
+ * @example
233
+ * ```tsx
234
+ * // With fixed positioning
235
+ * <SelectContent position="item-aligned">
236
+ * <SelectItem value="1">Option 1</SelectItem>
237
+ * </SelectContent>
238
+ * ```
239
+ *
240
+ * @accessibility
241
+ * - Focus trapped within dropdown when open
242
+ * - Scrollable with keyboard navigation
243
+ * - Escape key closes the dropdown
244
+ *
245
+ * @see {@link SelectItem} - Individual options
246
+ * @see {@link SelectGroup} - Group container
247
+ * @since 1.0.0
248
+ */
249
+ function SelectContent({
250
+ className,
251
+ children,
252
+ position = "popper",
253
+ ...props
254
+ }: React.ComponentProps<typeof SelectPrimitive.Content>) {
255
+ return (
256
+ <SelectPrimitive.Portal>
257
+ <SelectPrimitive.Content
258
+ data-slot="select-content"
259
+ className={cn(
260
+ "bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border shadow-md",
261
+ position === "popper" &&
262
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
263
+ className,
264
+ )}
265
+ position={position}
266
+ {...props}
267
+ >
268
+ <SelectScrollUpButton />
269
+ <SelectPrimitive.Viewport
270
+ className={cn(
271
+ "p-1",
272
+ position === "popper" &&
273
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1",
274
+ )}
275
+ >
276
+ {children}
277
+ </SelectPrimitive.Viewport>
278
+ <SelectScrollDownButton />
279
+ </SelectPrimitive.Content>
280
+ </SelectPrimitive.Portal>
281
+ );
282
+ }
283
+
284
+ /**
285
+ * SelectLabel - Label for a group of select items
286
+ *
287
+ * Provides a non-selectable label for categorizing groups of options.
288
+ * Helps users understand the context of the options below.
289
+ *
290
+ * @component
291
+ * @example
292
+ * ```tsx
293
+ * <SelectGroup>
294
+ * <SelectLabel>Countries</SelectLabel>
295
+ * <SelectItem value="us">United States</SelectItem>
296
+ * <SelectItem value="uk">United Kingdom</SelectItem>
297
+ * </SelectGroup>
298
+ * ```
299
+ *
300
+ * @accessibility
301
+ * - Properly associated with group for screen readers
302
+ * - Non-selectable and non-focusable
303
+ *
304
+ * @see {@link SelectGroup} - Parent container
305
+ * @since 1.0.0
306
+ */
307
+ function SelectLabel({
308
+ className,
309
+ ...props
310
+ }: React.ComponentProps<typeof SelectPrimitive.Label>) {
311
+ return (
312
+ <SelectPrimitive.Label
313
+ data-slot="select-label"
314
+ className={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
315
+ {...props}
316
+ />
317
+ );
318
+ }
319
+
320
+ /**
321
+ * SelectItem - Individual selectable option in the dropdown
322
+ *
323
+ * Represents a single option that users can select. Shows a checkmark
324
+ * when selected and supports keyboard navigation.
325
+ *
326
+ * @component
327
+ * @example
328
+ * ```tsx
329
+ * <SelectItem value="apple">Apple</SelectItem>
330
+ * ```
331
+ *
332
+ * @example
333
+ * ```tsx
334
+ * // Disabled item
335
+ * <SelectItem value="sold-out" disabled>
336
+ * Sold Out
337
+ * </SelectItem>
338
+ * ```
339
+ *
340
+ * @accessibility
341
+ * - Arrow keys navigate between items
342
+ * - Enter or Space selects the item
343
+ * - Shows checkmark icon when selected
344
+ * - Supports disabled state
345
+ *
346
+ * @see {@link SelectContent} - Parent container
347
+ * @since 1.0.0
348
+ */
349
+ function SelectItem({
350
+ className,
351
+ children,
352
+ ...props
353
+ }: React.ComponentProps<typeof SelectPrimitive.Item>) {
354
+ return (
355
+ <SelectPrimitive.Item
356
+ data-slot="select-item"
357
+ className={cn(
358
+ "focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2",
359
+ className,
360
+ )}
361
+ {...props}
362
+ >
363
+ <span className="absolute right-2 flex size-3.5 items-center justify-center">
364
+ <SelectPrimitive.ItemIndicator>
365
+ <CheckIcon className="size-4" />
366
+ </SelectPrimitive.ItemIndicator>
367
+ </span>
368
+ <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>
369
+ </SelectPrimitive.Item>
370
+ );
371
+ }
372
+
373
+ /**
374
+ * SelectSeparator - Visual divider between select groups
375
+ *
376
+ * A horizontal line that visually separates groups of options
377
+ * for better organization and clarity.
378
+ *
379
+ * @component
380
+ * @example
381
+ * ```tsx
382
+ * <SelectContent>
383
+ * <SelectGroup>
384
+ * <SelectItem value="1">Option 1</SelectItem>
385
+ * </SelectGroup>
386
+ * <SelectSeparator />
387
+ * <SelectGroup>
388
+ * <SelectItem value="2">Option 2</SelectItem>
389
+ * </SelectGroup>
390
+ * </SelectContent>
391
+ * ```
392
+ *
393
+ * @accessibility
394
+ * - Decorative element with no semantic meaning
395
+ * - Not focusable or interactive
396
+ *
397
+ * @since 1.0.0
398
+ */
399
+ function SelectSeparator({
400
+ className,
401
+ ...props
402
+ }: React.ComponentProps<typeof SelectPrimitive.Separator>) {
403
+ return (
404
+ <SelectPrimitive.Separator
405
+ data-slot="select-separator"
406
+ className={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}
407
+ {...props}
408
+ />
409
+ );
410
+ }
411
+
412
+ /**
413
+ * SelectScrollUpButton - Scroll button for navigating up in long lists
414
+ *
415
+ * Appears at the top of the dropdown when there are more items above
416
+ * the visible area. Allows scrolling through long option lists.
417
+ *
418
+ * @component
419
+ * @accessibility
420
+ * - Keyboard accessible
421
+ * - Only visible when scrolling is available
422
+ *
423
+ * @since 1.0.0
424
+ */
425
+ function SelectScrollUpButton({
426
+ className,
427
+ ...props
428
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {
429
+ return (
430
+ <SelectPrimitive.ScrollUpButton
431
+ data-slot="select-scroll-up-button"
432
+ className={cn(
433
+ "flex cursor-default items-center justify-center py-1",
434
+ className,
435
+ )}
436
+ {...props}
437
+ >
438
+ <ChevronUpIcon className="size-4" />
439
+ </SelectPrimitive.ScrollUpButton>
440
+ );
441
+ }
442
+
443
+ /**
444
+ * SelectScrollDownButton - Scroll button for navigating down in long lists
445
+ *
446
+ * Appears at the bottom of the dropdown when there are more items below
447
+ * the visible area. Allows scrolling through long option lists.
448
+ *
449
+ * @component
450
+ * @accessibility
451
+ * - Keyboard accessible
452
+ * - Only visible when scrolling is available
453
+ *
454
+ * @since 1.0.0
455
+ */
456
+ function SelectScrollDownButton({
457
+ className,
458
+ ...props
459
+ }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {
460
+ return (
461
+ <SelectPrimitive.ScrollDownButton
462
+ data-slot="select-scroll-down-button"
463
+ className={cn(
464
+ "flex cursor-default items-center justify-center py-1",
465
+ className,
466
+ )}
467
+ {...props}
468
+ >
469
+ <ChevronDownIcon className="size-4" />
470
+ </SelectPrimitive.ScrollDownButton>
471
+ );
472
+ }
473
+
474
+ export {
475
+ Select,
476
+ SelectContent,
477
+ SelectGroup,
478
+ SelectItem,
479
+ SelectLabel,
480
+ SelectScrollDownButton,
481
+ SelectScrollUpButton,
482
+ SelectSeparator,
483
+ SelectTrigger,
484
+ SelectValue,
485
+ };
@@ -0,0 +1,101 @@
1
+ import * as React from "react";
2
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
3
+
4
+ import { cn } from "@/lib/utils";
5
+
6
+ /**
7
+ * Separator component for visually dividing content sections
8
+ *
9
+ * A flexible separator component built on Radix UI primitives that creates
10
+ * visual or semantic divisions between content sections. Supports both horizontal
11
+ * and vertical orientations with full accessibility features including decorative
12
+ * and semantic separator modes for screen reader compatibility.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * // Basic horizontal separator
17
+ * <div>
18
+ * <p>Above content</p>
19
+ * <Separator />
20
+ * <p>Below content</p>
21
+ * </div>
22
+ * ```
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * // Vertical separator in toolbars
27
+ * <div className="flex items-center">
28
+ * <button>Bold</button>
29
+ * <Separator orientation="vertical" className="mx-2 h-6" />
30
+ * <button>Italic</button>
31
+ * </div>
32
+ * ```
33
+ *
34
+ * @example
35
+ * ```tsx
36
+ * // Semantic separator for navigation
37
+ * <nav className="flex items-center">
38
+ * <a href="/home">Home</a>
39
+ * <Separator
40
+ * orientation="vertical"
41
+ * decorative={false}
42
+ * aria-label="Navigation separator"
43
+ * className="mx-2 h-4"
44
+ * />
45
+ * <a href="/about">About</a>
46
+ * </nav>
47
+ * ```
48
+ *
49
+ * @example
50
+ * ```tsx
51
+ * // Custom styled separator
52
+ * <Separator className="my-6 h-0.5 bg-gradient-to-r from-transparent via-border to-transparent" />
53
+ * ```
54
+ *
55
+ * @see {@link https://ui.shadcn.com/docs/components/separator} for design patterns
56
+ * @since 1.0.0
57
+ * @see {@link https://www.radix-ui.com/primitives/docs/components/separator} for API reference
58
+ */
59
+ /**
60
+ * Props for the Separator component
61
+ */
62
+ type SeparatorProps = React.ComponentProps<typeof SeparatorPrimitive.Root> & {
63
+ /** Additional CSS class names to apply to the separator */
64
+ className?: string;
65
+ /** The orientation of the separator. @default "horizontal" */
66
+ orientation?: "horizontal" | "vertical";
67
+ /** Whether the separator is purely decorative (hidden from screen readers). @default true */
68
+ decorative?: boolean;
69
+ };
70
+
71
+ /**
72
+ * Separator component implementation
73
+ *
74
+ * @param className - Additional CSS class names to apply
75
+ * @param orientation - The orientation of the separator ("horizontal" | "vertical")
76
+ * @param decorative - Whether the separator is decorative (hidden from screen readers)
77
+ * @param props - Additional props passed to the underlying Radix Separator primitive
78
+ */
79
+ function Separator({
80
+ className,
81
+ orientation = "horizontal",
82
+ decorative = true,
83
+ ...props
84
+ }: SeparatorProps) {
85
+ return (
86
+ <SeparatorPrimitive.Root
87
+ data-slot="separator"
88
+ decorative={decorative}
89
+ orientation={orientation}
90
+ className={cn(
91
+ "bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",
92
+ className,
93
+ )}
94
+ {...props}
95
+ />
96
+ );
97
+ }
98
+
99
+ Separator.displayName = "Separator";
100
+
101
+ export { Separator, type SeparatorProps };