@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,553 @@
1
+ import * as React from "react";
2
+ import * as MenubarPrimitive from "@radix-ui/react-menubar";
3
+ import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
4
+
5
+ import { cn } from "@/lib/utils";
6
+
7
+ /**
8
+ * A visually persistent menu common in desktop applications that provides access to a consistent set of commands.
9
+ *
10
+ * Menubar provides a horizontal navigation structure similar to desktop application menus
11
+ * like those found in VS Code, Figma, or native applications. Each menu contains dropdown
12
+ * content with actions, checkboxes, radio groups, and nested submenus.
13
+ *
14
+ * Built on top of Radix UI Menubar primitive with full keyboard navigation and accessibility support.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * // Basic application menubar
19
+ * <Menubar>
20
+ * <MenubarMenu>
21
+ * <MenubarTrigger>File</MenubarTrigger>
22
+ * <MenubarContent>
23
+ * <MenubarItem>New File <MenubarShortcut>⌘N</MenubarShortcut></MenubarItem>
24
+ * <MenubarItem>Open <MenubarShortcut>⌘O</MenubarShortcut></MenubarItem>
25
+ * <MenubarSeparator />
26
+ * <MenubarItem>Exit</MenubarItem>
27
+ * </MenubarContent>
28
+ * </MenubarMenu>
29
+ * <MenubarMenu>
30
+ * <MenubarTrigger>Edit</MenubarTrigger>
31
+ * <MenubarContent>
32
+ * <MenubarItem>Undo <MenubarShortcut>⌘Z</MenubarShortcut></MenubarItem>
33
+ * <MenubarItem>Redo <MenubarShortcut>⇧⌘Z</MenubarShortcut></MenubarItem>
34
+ * </MenubarContent>
35
+ * </MenubarMenu>
36
+ * </Menubar>
37
+ * ```
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * // With checkboxes and submenus
42
+ * <Menubar>
43
+ * <MenubarMenu>
44
+ * <MenubarTrigger>View</MenubarTrigger>
45
+ * <MenubarContent>
46
+ * <MenubarCheckboxItem checked={showToolbar} onCheckedChange={setShowToolbar}>
47
+ * Show Toolbar
48
+ * </MenubarCheckboxItem>
49
+ * <MenubarSeparator />
50
+ * <MenubarSub>
51
+ * <MenubarSubTrigger>Panels</MenubarSubTrigger>
52
+ * <MenubarSubContent>
53
+ * <MenubarItem>Explorer</MenubarItem>
54
+ * <MenubarItem>Terminal</MenubarItem>
55
+ * </MenubarSubContent>
56
+ * </MenubarSub>
57
+ * </MenubarContent>
58
+ * </MenubarMenu>
59
+ * </Menubar>
60
+ * ```
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * // With radio groups for exclusive selections
65
+ * <Menubar>
66
+ * <MenubarMenu>
67
+ * <MenubarTrigger>Theme</MenubarTrigger>
68
+ * <MenubarContent>
69
+ * <MenubarRadioGroup value={theme} onValueChange={setTheme}>
70
+ * <MenubarRadioItem value="light">Light</MenubarRadioItem>
71
+ * <MenubarRadioItem value="dark">Dark</MenubarRadioItem>
72
+ * <MenubarRadioItem value="system">System</MenubarRadioItem>
73
+ * </MenubarRadioGroup>
74
+ * </MenubarContent>
75
+ * </MenubarMenu>
76
+ * </Menubar>
77
+ * ```
78
+ *
79
+ * @accessibility
80
+ * - Follows WAI-ARIA menubar pattern
81
+ * - Left/Right arrow keys navigate between menu triggers
82
+ * - Up/Down arrow keys navigate within menu content
83
+ * - Enter or Space activates menu items
84
+ * - Escape closes open menus
85
+ * - Tab moves focus to next focusable element outside menubar
86
+ * - Full keyboard navigation with arrow keys, Enter, and Escape
87
+ * - Screen reader support with proper ARIA labels and roles
88
+ *
89
+ * @see {@link https://www.w3.org/WAI/ARIA/apg/patterns/menubar/} ARIA Menubar Pattern
90
+ * @see {@link https://ui.shadcn.com/docs/components/menubar} shadcn/ui Menubar Documentation
91
+ * @since 1.0.0
92
+ */
93
+ /**
94
+ * Root container for the menubar component.
95
+ *
96
+ * @param className - Additional CSS classes to apply
97
+ * @param props - All props from Radix UI Menubar Root
98
+ */
99
+ function Menubar({
100
+ className,
101
+ ...props
102
+ }: React.ComponentProps<typeof MenubarPrimitive.Root>) {
103
+ return (
104
+ <MenubarPrimitive.Root
105
+ data-slot="menubar"
106
+ className={cn(
107
+ "bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs",
108
+ className,
109
+ )}
110
+ {...props}
111
+ />
112
+ );
113
+ }
114
+
115
+ /**
116
+ * Container for a single menu within the menubar.
117
+ *
118
+ * Each MenubarMenu represents one dropdown menu that can be triggered
119
+ * by its corresponding MenubarTrigger.
120
+ *
121
+ * @param props - All props from Radix UI Menubar Menu
122
+ */
123
+ function MenubarMenu({
124
+ ...props
125
+ }: React.ComponentProps<typeof MenubarPrimitive.Menu>) {
126
+ return <MenubarPrimitive.Menu data-slot="menubar-menu" {...props} />;
127
+ }
128
+
129
+ /**
130
+ * Groups related menu items together within MenubarContent.
131
+ *
132
+ * Used to create logical groupings of menu items, often separated
133
+ * by MenubarSeparator components.
134
+ *
135
+ * @param props - All props from Radix UI Menubar Group
136
+ */
137
+ function MenubarGroup({
138
+ ...props
139
+ }: React.ComponentProps<typeof MenubarPrimitive.Group>) {
140
+ return <MenubarPrimitive.Group data-slot="menubar-group" {...props} />;
141
+ }
142
+
143
+ /**
144
+ * Portal for rendering menu content outside the DOM hierarchy.
145
+ *
146
+ * Automatically used by MenubarContent to ensure proper layering
147
+ * and positioning of dropdown menus.
148
+ *
149
+ * @param props - All props from Radix UI Menubar Portal
150
+ */
151
+ function MenubarPortal({
152
+ ...props
153
+ }: React.ComponentProps<typeof MenubarPrimitive.Portal>) {
154
+ return <MenubarPrimitive.Portal data-slot="menubar-portal" {...props} />;
155
+ }
156
+
157
+ /**
158
+ * Container for mutually exclusive radio items.
159
+ *
160
+ * Use for single-selection scenarios like theme selection,
161
+ * view modes, or other settings where only one option can be active.
162
+ *
163
+ * @param props - All props from Radix UI Menubar RadioGroup
164
+ * @example
165
+ * ```tsx
166
+ * <MenubarRadioGroup value={theme} onValueChange={setTheme}>
167
+ * <MenubarRadioItem value="light">Light</MenubarRadioItem>
168
+ * <MenubarRadioItem value="dark">Dark</MenubarRadioItem>
169
+ * </MenubarRadioGroup>
170
+ * ```
171
+ */
172
+ function MenubarRadioGroup({
173
+ ...props
174
+ }: React.ComponentProps<typeof MenubarPrimitive.RadioGroup>) {
175
+ return (
176
+ <MenubarPrimitive.RadioGroup data-slot="menubar-radio-group" {...props} />
177
+ );
178
+ }
179
+
180
+ /**
181
+ * Button that opens a dropdown menu.
182
+ *
183
+ * The trigger text should be concise and descriptive of the menu contents.
184
+ * Common patterns include "File", "Edit", "View", "Tools", "Help".
185
+ *
186
+ * @param className - Additional CSS classes to apply
187
+ * @param props - All props from Radix UI Menubar Trigger
188
+ */
189
+ function MenubarTrigger({
190
+ className,
191
+ ...props
192
+ }: React.ComponentProps<typeof MenubarPrimitive.Trigger>) {
193
+ return (
194
+ <MenubarPrimitive.Trigger
195
+ data-slot="menubar-trigger"
196
+ className={cn(
197
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none",
198
+ className,
199
+ )}
200
+ {...props}
201
+ />
202
+ );
203
+ }
204
+
205
+ /**
206
+ * Dropdown content container for menu items.
207
+ *
208
+ * Contains the actual menu items, separators, and submenus that appear
209
+ * when a MenubarTrigger is activated.
210
+ *
211
+ * @param className - Additional CSS classes to apply
212
+ * @param align - Alignment relative to trigger (start, center, end)
213
+ * @param alignOffset - Offset from the aligned position
214
+ * @param sideOffset - Distance from the trigger
215
+ * @param props - All props from Radix UI Menubar Content
216
+ */
217
+ function MenubarContent({
218
+ className,
219
+ align = "start",
220
+ alignOffset = -4,
221
+ sideOffset = 8,
222
+ ...props
223
+ }: React.ComponentProps<typeof MenubarPrimitive.Content>) {
224
+ return (
225
+ <MenubarPortal>
226
+ <MenubarPrimitive.Content
227
+ data-slot="menubar-content"
228
+ align={align}
229
+ alignOffset={alignOffset}
230
+ sideOffset={sideOffset}
231
+ className={cn(
232
+ "bg-popover text-popover-foreground data-[state=open]:animate-in 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 z-50 min-w-[12rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md",
233
+ className,
234
+ )}
235
+ {...props}
236
+ />
237
+ </MenubarPortal>
238
+ );
239
+ }
240
+
241
+ /**
242
+ * A selectable menu item within MenubarContent.
243
+ *
244
+ * Can be enhanced with icons, keyboard shortcuts, and supports
245
+ * different variants including destructive actions.
246
+ *
247
+ * @param className - Additional CSS classes to apply
248
+ * @param inset - Whether to add left padding for alignment with items that have icons
249
+ * @param variant - Visual variant ("default" | "destructive")
250
+ * @param props - All props from Radix UI Menubar Item
251
+ * @example
252
+ * ```tsx
253
+ * <MenubarItem variant="destructive">
254
+ * Delete File
255
+ * <MenubarShortcut>⌫</MenubarShortcut>
256
+ * </MenubarItem>
257
+ * ```
258
+ */
259
+ function MenubarItem({
260
+ className,
261
+ inset,
262
+ variant = "default",
263
+ ...props
264
+ }: React.ComponentProps<typeof MenubarPrimitive.Item> & {
265
+ inset?: boolean;
266
+ variant?: "default" | "destructive";
267
+ }) {
268
+ return (
269
+ <MenubarPrimitive.Item
270
+ data-slot="menubar-item"
271
+ data-inset={inset}
272
+ data-variant={variant}
273
+ className={cn(
274
+ "focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
275
+ className,
276
+ )}
277
+ {...props}
278
+ />
279
+ );
280
+ }
281
+
282
+ /**
283
+ * A menu item that can be checked/unchecked.
284
+ *
285
+ * Perfect for toggle options like "Show Toolbar", "Enable Feature",
286
+ * or any binary setting that can be turned on/off.
287
+ *
288
+ * @param className - Additional CSS classes to apply
289
+ * @param children - The content of the checkbox item
290
+ * @param checked - Whether the item is checked
291
+ * @param props - All props from Radix UI Menubar CheckboxItem including onCheckedChange
292
+ * @example
293
+ * ```tsx
294
+ * <MenubarCheckboxItem checked={showToolbar} onCheckedChange={setShowToolbar}>
295
+ * Show Toolbar
296
+ * </MenubarCheckboxItem>
297
+ * ```
298
+ */
299
+ function MenubarCheckboxItem({
300
+ className,
301
+ children,
302
+ checked,
303
+ ...props
304
+ }: React.ComponentProps<typeof MenubarPrimitive.CheckboxItem>) {
305
+ return (
306
+ <MenubarPrimitive.CheckboxItem
307
+ data-slot="menubar-checkbox-item"
308
+ className={cn(
309
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 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",
310
+ className,
311
+ )}
312
+ checked={checked}
313
+ {...props}
314
+ >
315
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
316
+ <MenubarPrimitive.ItemIndicator>
317
+ <CheckIcon className="size-4" />
318
+ </MenubarPrimitive.ItemIndicator>
319
+ </span>
320
+ {children}
321
+ </MenubarPrimitive.CheckboxItem>
322
+ );
323
+ }
324
+
325
+ /**
326
+ * A menu item for single selection within a MenubarRadioGroup.
327
+ *
328
+ * Use within MenubarRadioGroup for mutually exclusive options.
329
+ * Only one radio item can be selected at a time within the group.
330
+ *
331
+ * @param className - Additional CSS classes to apply
332
+ * @param children - The content of the radio item
333
+ * @param props - All props from Radix UI Menubar RadioItem including value
334
+ * @example
335
+ * ```tsx
336
+ * <MenubarRadioItem value="dark">Dark Theme</MenubarRadioItem>
337
+ * ```
338
+ */
339
+ function MenubarRadioItem({
340
+ className,
341
+ children,
342
+ ...props
343
+ }: React.ComponentProps<typeof MenubarPrimitive.RadioItem>) {
344
+ return (
345
+ <MenubarPrimitive.RadioItem
346
+ data-slot="menubar-radio-item"
347
+ className={cn(
348
+ "focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 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",
349
+ className,
350
+ )}
351
+ {...props}
352
+ >
353
+ <span className="pointer-events-none absolute left-2 flex size-3.5 items-center justify-center">
354
+ <MenubarPrimitive.ItemIndicator>
355
+ <CircleIcon className="size-2 fill-current" />
356
+ </MenubarPrimitive.ItemIndicator>
357
+ </span>
358
+ {children}
359
+ </MenubarPrimitive.RadioItem>
360
+ );
361
+ }
362
+
363
+ /**
364
+ * A non-interactive label for grouping menu items.
365
+ *
366
+ * Used to provide section headings within menu content,
367
+ * helping users understand the organization of menu items.
368
+ *
369
+ * @param className - Additional CSS classes to apply
370
+ * @param inset - Whether to add left padding for alignment with items that have icons
371
+ * @param props - All props from Radix UI Menubar Label
372
+ * @example
373
+ * ```tsx
374
+ * <MenubarLabel>Recent Files</MenubarLabel>
375
+ * <MenubarSeparator />
376
+ * ```
377
+ */
378
+ function MenubarLabel({
379
+ className,
380
+ inset,
381
+ ...props
382
+ }: React.ComponentProps<typeof MenubarPrimitive.Label> & {
383
+ inset?: boolean;
384
+ }) {
385
+ return (
386
+ <MenubarPrimitive.Label
387
+ data-slot="menubar-label"
388
+ data-inset={inset}
389
+ className={cn(
390
+ "px-2 py-1.5 text-sm font-medium data-[inset]:pl-8",
391
+ className,
392
+ )}
393
+ {...props}
394
+ />
395
+ );
396
+ }
397
+
398
+ /**
399
+ * A visual divider between menu items.
400
+ *
401
+ * Use to create logical groupings and improve visual hierarchy
402
+ * within menu content.
403
+ *
404
+ * @param className - Additional CSS classes to apply
405
+ * @param props - All props from Radix UI Menubar Separator
406
+ */
407
+ function MenubarSeparator({
408
+ className,
409
+ ...props
410
+ }: React.ComponentProps<typeof MenubarPrimitive.Separator>) {
411
+ return (
412
+ <MenubarPrimitive.Separator
413
+ data-slot="menubar-separator"
414
+ className={cn("bg-border -mx-1 my-1 h-px", className)}
415
+ {...props}
416
+ />
417
+ );
418
+ }
419
+
420
+ /**
421
+ * Displays keyboard shortcut for a menu item.
422
+ *
423
+ * Shows keyboard shortcuts aligned to the right of menu items.
424
+ * Use standard platform conventions (⌘ for Mac, Ctrl+ for Windows/Linux).
425
+ *
426
+ * @param className - Additional CSS classes to apply
427
+ * @param props - All props from HTML span element
428
+ * @example
429
+ * ```tsx
430
+ * <MenubarItem>
431
+ * Save File
432
+ * <MenubarShortcut>⌘S</MenubarShortcut>
433
+ * </MenubarItem>
434
+ * ```
435
+ */
436
+ function MenubarShortcut({
437
+ className,
438
+ ...props
439
+ }: React.ComponentProps<"span">) {
440
+ return (
441
+ <span
442
+ data-slot="menubar-shortcut"
443
+ className={cn(
444
+ "text-muted-foreground ml-auto text-xs tracking-widest",
445
+ className,
446
+ )}
447
+ {...props}
448
+ />
449
+ );
450
+ }
451
+
452
+ /**
453
+ * Container for a submenu.
454
+ *
455
+ * Wraps MenubarSubTrigger and MenubarSubContent to create
456
+ * nested menu structures.
457
+ *
458
+ * @param props - All props from Radix UI Menubar Sub
459
+ * @example
460
+ * ```tsx
461
+ * <MenubarSub>
462
+ * <MenubarSubTrigger>Export</MenubarSubTrigger>
463
+ * <MenubarSubContent>
464
+ * <MenubarItem>Export as PDF</MenubarItem>
465
+ * <MenubarItem>Export as CSV</MenubarItem>
466
+ * </MenubarSubContent>
467
+ * </MenubarSub>
468
+ * ```
469
+ */
470
+ function MenubarSub({
471
+ ...props
472
+ }: React.ComponentProps<typeof MenubarPrimitive.Sub>) {
473
+ return <MenubarPrimitive.Sub data-slot="menubar-sub" {...props} />;
474
+ }
475
+
476
+ /**
477
+ * Menu item that opens a submenu.
478
+ *
479
+ * Automatically includes a right arrow indicator to show
480
+ * that it opens a submenu when hovered or focused.
481
+ *
482
+ * @param className - Additional CSS classes to apply
483
+ * @param inset - Whether to add left padding for alignment with items that have icons
484
+ * @param children - The content of the sub-trigger
485
+ * @param props - All props from Radix UI Menubar SubTrigger
486
+ */
487
+ function MenubarSubTrigger({
488
+ className,
489
+ inset,
490
+ children,
491
+ ...props
492
+ }: React.ComponentProps<typeof MenubarPrimitive.SubTrigger> & {
493
+ inset?: boolean;
494
+ }) {
495
+ return (
496
+ <MenubarPrimitive.SubTrigger
497
+ data-slot="menubar-sub-trigger"
498
+ data-inset={inset}
499
+ className={cn(
500
+ "focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[inset]:pl-8",
501
+ className,
502
+ )}
503
+ {...props}
504
+ >
505
+ {children}
506
+ <ChevronRightIcon className="ml-auto h-4 w-4" />
507
+ </MenubarPrimitive.SubTrigger>
508
+ );
509
+ }
510
+
511
+ /**
512
+ * Content container for a submenu.
513
+ *
514
+ * Contains the menu items that appear when a MenubarSubTrigger
515
+ * is hovered or focused. Supports all the same content as MenubarContent.
516
+ *
517
+ * @param className - Additional CSS classes to apply
518
+ * @param props - All props from Radix UI Menubar SubContent
519
+ */
520
+ function MenubarSubContent({
521
+ className,
522
+ ...props
523
+ }: React.ComponentProps<typeof MenubarPrimitive.SubContent>) {
524
+ return (
525
+ <MenubarPrimitive.SubContent
526
+ data-slot="menubar-sub-content"
527
+ className={cn(
528
+ "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 z-50 min-w-[8rem] origin-(--radix-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg",
529
+ className,
530
+ )}
531
+ {...props}
532
+ />
533
+ );
534
+ }
535
+
536
+ export {
537
+ Menubar,
538
+ MenubarPortal,
539
+ MenubarMenu,
540
+ MenubarTrigger,
541
+ MenubarContent,
542
+ MenubarGroup,
543
+ MenubarSeparator,
544
+ MenubarLabel,
545
+ MenubarItem,
546
+ MenubarShortcut,
547
+ MenubarCheckboxItem,
548
+ MenubarRadioGroup,
549
+ MenubarRadioItem,
550
+ MenubarSub,
551
+ MenubarSubTrigger,
552
+ MenubarSubContent,
553
+ };