@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,420 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import * as React from "react";
3
+ import { useIsMobile } from "@/hooks/use-mobile";
4
+ import {
5
+ Card,
6
+ CardContent,
7
+ CardDescription,
8
+ CardHeader,
9
+ CardTitle,
10
+ } from "../card";
11
+ import { Badge } from "../badge";
12
+ import { Button } from "../button";
13
+ import {
14
+ Sheet,
15
+ SheetContent,
16
+ SheetDescription,
17
+ SheetHeader,
18
+ SheetTitle,
19
+ SheetTrigger,
20
+ } from "../sheet";
21
+ import {
22
+ Dialog,
23
+ DialogContent,
24
+ DialogDescription,
25
+ DialogHeader,
26
+ DialogTitle,
27
+ DialogTrigger,
28
+ } from "../dialog";
29
+ import {
30
+ NavigationMenu,
31
+ NavigationMenuContent,
32
+ NavigationMenuItem,
33
+ NavigationMenuLink,
34
+ NavigationMenuList,
35
+ NavigationMenuTrigger,
36
+ } from "../navigation-menu";
37
+ import { Smartphone, Monitor, Menu, Search } from "lucide-react";
38
+
39
+ /**
40
+ * useIsMobile hook stories for design system documentation
41
+ *
42
+ * This story file demonstrates the useIsMobile hook's capabilities through three focused stories:
43
+ * - Interactive: Live playground showing current viewport state and breakpoint testing
44
+ * - Variants: Different responsive patterns and use cases for mobile detection
45
+ * - InContext: Real-world usage examples showing mobile vs desktop component selection
46
+ */
47
+
48
+ // Demo component for the Interactive story
49
+ function MobileDetector() {
50
+ const isMobile = useIsMobile();
51
+ const [windowWidth, setWindowWidth] = React.useState<number>(0);
52
+
53
+ React.useEffect(() => {
54
+ const updateWidth = () => setWindowWidth(window.innerWidth);
55
+ updateWidth();
56
+ window.addEventListener("resize", updateWidth);
57
+ return () => window.removeEventListener("resize", updateWidth);
58
+ }, []);
59
+
60
+ return (
61
+ <Card className="w-full max-w-md">
62
+ <CardHeader>
63
+ <CardTitle className="flex items-center gap-2">
64
+ {isMobile ? (
65
+ <Smartphone className="h-5 w-5" />
66
+ ) : (
67
+ <Monitor className="h-5 w-5" />
68
+ )}
69
+ Mobile Detection Status
70
+ </CardTitle>
71
+ <CardDescription>
72
+ Resize your browser window to see the hook respond to viewport changes
73
+ </CardDescription>
74
+ </CardHeader>
75
+ <CardContent className="space-y-4">
76
+ <div className="flex items-center justify-between">
77
+ <span>Current Width:</span>
78
+ <Badge variant="outline">{windowWidth}px</Badge>
79
+ </div>
80
+ <div className="flex items-center justify-between">
81
+ <span>Breakpoint (768px):</span>
82
+ <Badge variant="secondary">md</Badge>
83
+ </div>
84
+ <div className="flex items-center justify-between">
85
+ <span>Is Mobile:</span>
86
+ <Badge variant={isMobile ? "default" : "destructive"}>
87
+ {isMobile ? "true" : "false"}
88
+ </Badge>
89
+ </div>
90
+ <div className="pt-2 text-sm text-muted-foreground">
91
+ {isMobile
92
+ ? "Currently showing mobile layout (< 768px)"
93
+ : "Currently showing desktop layout (≥ 768px)"}
94
+ </div>
95
+ </CardContent>
96
+ </Card>
97
+ );
98
+ }
99
+
100
+ // Demo component for Variants story
101
+ function ResponsivePatterns() {
102
+ const isMobile = useIsMobile();
103
+
104
+ return (
105
+ <div className="space-y-6">
106
+ {/* Pattern 1: Conditional Component Rendering */}
107
+ <Card>
108
+ <CardHeader>
109
+ <CardTitle>Pattern 1: Conditional Component Rendering</CardTitle>
110
+ <CardDescription>
111
+ Different components for mobile vs desktop
112
+ </CardDescription>
113
+ </CardHeader>
114
+ <CardContent>
115
+ {isMobile ? (
116
+ <Badge className="bg-blue-500">Mobile Component Active</Badge>
117
+ ) : (
118
+ <Badge className="bg-green-500">Desktop Component Active</Badge>
119
+ )}
120
+ </CardContent>
121
+ </Card>
122
+
123
+ {/* Pattern 2: Layout Switching */}
124
+ <Card>
125
+ <CardHeader>
126
+ <CardTitle>Pattern 2: Layout Direction</CardTitle>
127
+ <CardDescription>
128
+ Vertical on mobile, horizontal on desktop
129
+ </CardDescription>
130
+ </CardHeader>
131
+ <CardContent>
132
+ <div className={`flex gap-2 ${isMobile ? "flex-col" : "flex-row"}`}>
133
+ <Button variant="outline" size="sm">
134
+ Action 1
135
+ </Button>
136
+ <Button variant="outline" size="sm">
137
+ Action 2
138
+ </Button>
139
+ <Button variant="outline" size="sm">
140
+ Action 3
141
+ </Button>
142
+ </div>
143
+ </CardContent>
144
+ </Card>
145
+
146
+ {/* Pattern 3: Content Density */}
147
+ <Card>
148
+ <CardHeader>
149
+ <CardTitle>Pattern 3: Content Density</CardTitle>
150
+ <CardDescription>
151
+ Less content on mobile for better UX
152
+ </CardDescription>
153
+ </CardHeader>
154
+ <CardContent>
155
+ <div className="space-y-2">
156
+ <div>Always visible content</div>
157
+ {!isMobile && (
158
+ <>
159
+ <div className="text-muted-foreground">
160
+ Desktop-only details
161
+ </div>
162
+ <div className="text-muted-foreground">
163
+ Additional information
164
+ </div>
165
+ </>
166
+ )}
167
+ </div>
168
+ </CardContent>
169
+ </Card>
170
+ </div>
171
+ );
172
+ }
173
+
174
+ // Demo component for InContext story
175
+ function ResponsiveNavigation() {
176
+ const isMobile = useIsMobile();
177
+
178
+ if (isMobile) {
179
+ return (
180
+ <Sheet>
181
+ <SheetTrigger asChild>
182
+ <Button variant="outline" size="icon">
183
+ <Menu className="h-4 w-4" />
184
+ </Button>
185
+ </SheetTrigger>
186
+ <SheetContent>
187
+ <SheetHeader>
188
+ <SheetTitle>Mobile Navigation</SheetTitle>
189
+ <SheetDescription>
190
+ Mobile-optimized navigation using Sheet component
191
+ </SheetDescription>
192
+ </SheetHeader>
193
+ <div className="mt-6 space-y-3">
194
+ <Button variant="ghost" className="w-full justify-start">
195
+ Home
196
+ </Button>
197
+ <Button variant="ghost" className="w-full justify-start">
198
+ Products
199
+ </Button>
200
+ <Button variant="ghost" className="w-full justify-start">
201
+ About
202
+ </Button>
203
+ <Button variant="ghost" className="w-full justify-start">
204
+ Contact
205
+ </Button>
206
+ </div>
207
+ </SheetContent>
208
+ </Sheet>
209
+ );
210
+ }
211
+
212
+ return (
213
+ <NavigationMenu>
214
+ <NavigationMenuList>
215
+ <NavigationMenuItem>
216
+ <NavigationMenuTrigger>Products</NavigationMenuTrigger>
217
+ <NavigationMenuContent>
218
+ <div className="p-4 w-48">
219
+ <NavigationMenuLink className="block p-2 hover:bg-accent rounded">
220
+ Web Apps
221
+ </NavigationMenuLink>
222
+ <NavigationMenuLink className="block p-2 hover:bg-accent rounded">
223
+ Mobile Apps
224
+ </NavigationMenuLink>
225
+ </div>
226
+ </NavigationMenuContent>
227
+ </NavigationMenuItem>
228
+ <NavigationMenuItem>
229
+ <NavigationMenuLink className="px-4 py-2">About</NavigationMenuLink>
230
+ </NavigationMenuItem>
231
+ <NavigationMenuItem>
232
+ <NavigationMenuLink className="px-4 py-2">Contact</NavigationMenuLink>
233
+ </NavigationMenuItem>
234
+ </NavigationMenuList>
235
+ </NavigationMenu>
236
+ );
237
+ }
238
+
239
+ function ResponsiveSearchDialog() {
240
+ const isMobile = useIsMobile();
241
+
242
+ if (isMobile) {
243
+ return (
244
+ <Sheet>
245
+ <SheetTrigger asChild>
246
+ <Button variant="outline" className="gap-2">
247
+ <Search className="h-4 w-4" />
248
+ Search
249
+ </Button>
250
+ </SheetTrigger>
251
+ <SheetContent side="top" className="h-[400px]">
252
+ <SheetHeader>
253
+ <SheetTitle>Search</SheetTitle>
254
+ <SheetDescription>
255
+ Mobile search interface using Sheet for better mobile UX
256
+ </SheetDescription>
257
+ </SheetHeader>
258
+ <div className="mt-6">
259
+ <input
260
+ type="text"
261
+ placeholder="Search everything..."
262
+ className="w-full p-3 border rounded-lg"
263
+ />
264
+ </div>
265
+ </SheetContent>
266
+ </Sheet>
267
+ );
268
+ }
269
+
270
+ return (
271
+ <Dialog>
272
+ <DialogTrigger asChild>
273
+ <Button variant="outline" className="gap-2">
274
+ <Search className="h-4 w-4" />
275
+ Search
276
+ </Button>
277
+ </DialogTrigger>
278
+ <DialogContent>
279
+ <DialogHeader>
280
+ <DialogTitle>Search</DialogTitle>
281
+ <DialogDescription>
282
+ Desktop search interface using Dialog for focused interaction
283
+ </DialogDescription>
284
+ </DialogHeader>
285
+ <div className="mt-4">
286
+ <input
287
+ type="text"
288
+ placeholder="Search everything..."
289
+ className="w-full p-3 border rounded-lg"
290
+ />
291
+ </div>
292
+ </DialogContent>
293
+ </Dialog>
294
+ );
295
+ }
296
+
297
+ function RealWorldExample() {
298
+ return (
299
+ <div className="space-y-8 max-w-4xl">
300
+ <Card>
301
+ <CardHeader>
302
+ <CardTitle>Responsive Navigation</CardTitle>
303
+ <CardDescription>
304
+ Navigation adapts to screen size: NavigationMenu on desktop, Sheet
305
+ on mobile
306
+ </CardDescription>
307
+ </CardHeader>
308
+ <CardContent>
309
+ <ResponsiveNavigation />
310
+ </CardContent>
311
+ </Card>
312
+
313
+ <Card>
314
+ <CardHeader>
315
+ <CardTitle>Responsive Search</CardTitle>
316
+ <CardDescription>
317
+ Search uses Dialog on desktop for focused interaction, Sheet on
318
+ mobile for better mobile UX
319
+ </CardDescription>
320
+ </CardHeader>
321
+ <CardContent>
322
+ <ResponsiveSearchDialog />
323
+ </CardContent>
324
+ </Card>
325
+
326
+ <Card>
327
+ <CardHeader>
328
+ <CardTitle>Implementation Notes</CardTitle>
329
+ </CardHeader>
330
+ <CardContent className="space-y-2 text-sm text-muted-foreground">
331
+ <p>• Hook uses 768px breakpoint (Tailwind&apos;s md breakpoint)</p>
332
+ <p>• SSR-safe: returns false on server, updates on client</p>
333
+ <p>• Automatically updates on window resize</p>
334
+ <p>• Pattern matches shadcn/ui&apos;s useSidebar hook behavior</p>
335
+ <p>• Ideal for component selection rather than CSS media queries</p>
336
+ </CardContent>
337
+ </Card>
338
+ </div>
339
+ );
340
+ }
341
+
342
+ const meta: Meta = {
343
+ title: "Utilities/useIsMobile",
344
+ parameters: {
345
+ layout: "centered",
346
+ docs: {
347
+ description: {
348
+ component: `
349
+ A React hook for detecting mobile viewport width based on Tailwind CSS breakpoints.
350
+ Returns true when viewport width is less than 768px (Tailwind's md breakpoint).
351
+
352
+ **Key Features:**
353
+ - Follows shadcn/ui responsive patterns
354
+ - SSR-safe implementation
355
+ - Automatic viewport resize handling
356
+ - Standard 768px breakpoint alignment
357
+ - Perfect for conditional component rendering
358
+
359
+ **Common Use Cases:**
360
+ - Mobile vs desktop navigation patterns
361
+ - Dialog vs Sheet component selection
362
+ - Responsive layout adjustments
363
+ - Content density optimization
364
+ `,
365
+ },
366
+ },
367
+ },
368
+ tags: ["autodocs"],
369
+ } satisfies Meta;
370
+
371
+ export default meta;
372
+ type Story = StoryObj<typeof meta>;
373
+
374
+ /**
375
+ * Interactive playground showing the hook's real-time response to viewport changes.
376
+ * Resize your browser window to see the mobile detection update dynamically.
377
+ */
378
+ export const Interactive: Story = {
379
+ render: () => <MobileDetector />,
380
+ parameters: {
381
+ docs: {
382
+ description: {
383
+ story:
384
+ "Live demonstration of mobile detection. Resize your browser window to see the hook respond to viewport changes in real-time.",
385
+ },
386
+ },
387
+ },
388
+ };
389
+
390
+ /**
391
+ * Different responsive patterns demonstrating various ways to use mobile detection
392
+ * for adaptive user interfaces and layout adjustments.
393
+ */
394
+ export const Variants: Story = {
395
+ render: () => <ResponsivePatterns />,
396
+ parameters: {
397
+ docs: {
398
+ description: {
399
+ story:
400
+ "Common responsive patterns: conditional rendering, layout switching, and content density adaptation.",
401
+ },
402
+ },
403
+ },
404
+ };
405
+
406
+ /**
407
+ * Real-world examples showing how to use mobile detection for component selection
408
+ * and responsive user experience patterns in production applications.
409
+ */
410
+ export const InContext: Story = {
411
+ render: () => <RealWorldExample />,
412
+ parameters: {
413
+ docs: {
414
+ description: {
415
+ story:
416
+ "Production-ready examples: responsive navigation with NavigationMenu/Sheet and search with Dialog/Sheet combinations.",
417
+ },
418
+ },
419
+ },
420
+ };