@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,378 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import { useState } from "react";
3
+ import { DatePicker } from "../date-picker";
4
+ import { Button } from "../button";
5
+ import { cn } from "@/lib/utils";
6
+
7
+ const meta = {
8
+ title: "Form & Input/DatePicker",
9
+ component: DatePicker,
10
+ parameters: {
11
+ layout: "centered",
12
+ docs: {
13
+ description: {
14
+ component:
15
+ "A comprehensive date selection component that combines an accessible button trigger with a full-featured calendar popover. Built on shadcn/ui design principles with proper accessibility, keyboard navigation, and visual feedback.",
16
+ },
17
+ },
18
+ },
19
+ tags: ["autodocs"],
20
+ argTypes: {
21
+ date: {
22
+ control: { type: "date" },
23
+ description: "The currently selected date value. When undefined, no date is selected.",
24
+ },
25
+ onDateChange: {
26
+ action: "onDateChange",
27
+ description: "Callback function invoked when the user selects or clears a date.",
28
+ },
29
+ placeholder: {
30
+ control: { type: "text" },
31
+ description: "Placeholder text displayed when no date is selected.",
32
+ },
33
+ disabled: {
34
+ control: { type: "boolean" },
35
+ description: "When true, disables the date picker preventing user interaction.",
36
+ },
37
+ className: {
38
+ control: { type: "text" },
39
+ description: "Additional CSS classes to apply to the trigger button.",
40
+ },
41
+ },
42
+ args: {
43
+ placeholder: "Pick a date",
44
+ disabled: false,
45
+ },
46
+ } satisfies Meta<typeof DatePicker>;
47
+
48
+ export default meta;
49
+ type Story = StoryObj<typeof meta>;
50
+
51
+ /**
52
+ * Interactive playground for testing all DatePicker props and behaviors.
53
+ * Use the controls panel to experiment with different configurations.
54
+ */
55
+ export const Interactive: Story = {
56
+ render: (args) => {
57
+ const [date, setDate] = useState<Date | undefined>(args.date);
58
+
59
+ const handleClearDate = () => setDate(undefined);
60
+ const handleSetToday = () => setDate(new Date());
61
+ const handleSetRandomDate = () => {
62
+ const randomDate = new Date();
63
+ randomDate.setDate(randomDate.getDate() + Math.floor(Math.random() * 365) - 180);
64
+ setDate(randomDate);
65
+ };
66
+
67
+ return (
68
+ <div className="space-y-4">
69
+ <DatePicker
70
+ {...args}
71
+ date={date}
72
+ onDateChange={setDate}
73
+ />
74
+
75
+ <div className="flex gap-2 flex-wrap">
76
+ <Button
77
+ variant="outline"
78
+ size="sm"
79
+ onClick={handleSetToday}
80
+ >
81
+ Set Today
82
+ </Button>
83
+ <Button
84
+ variant="outline"
85
+ size="sm"
86
+ onClick={handleSetRandomDate}
87
+ >
88
+ Random Date
89
+ </Button>
90
+ <Button
91
+ variant="outline"
92
+ size="sm"
93
+ onClick={handleClearDate}
94
+ >
95
+ Clear
96
+ </Button>
97
+ </div>
98
+
99
+ <div className="text-sm text-muted-foreground space-y-1">
100
+ <div><strong>Selected:</strong> {date?.toDateString() || "No date selected"}</div>
101
+ <div><strong>ISO String:</strong> {date?.toISOString() || "N/A"}</div>
102
+ <div><strong>Locale String:</strong> {date?.toLocaleDateString() || "N/A"}</div>
103
+ </div>
104
+ </div>
105
+ );
106
+ },
107
+ args: {
108
+ placeholder: "Choose a date",
109
+ },
110
+ parameters: {
111
+ docs: {
112
+ description: {
113
+ story: "Interactive example with controls for testing all component props and helper buttons for common operations. Use the controls panel to modify props in real-time.",
114
+ },
115
+ },
116
+ },
117
+ };
118
+
119
+ /**
120
+ * Comprehensive showcase of all DatePicker variants and configurations.
121
+ * Displays different states, sizes, and styling options side by side.
122
+ */
123
+ export const Variants: Story = {
124
+ render: () => {
125
+ const [basicDate, setBasicDate] = useState<Date | undefined>();
126
+ const [preselectedDate, setPreselectedDate] = useState<Date | undefined>(new Date());
127
+ const [customDate, setCustomDate] = useState<Date | undefined>();
128
+
129
+ return (
130
+ <div className="space-y-6">
131
+ <div className="space-y-3">
132
+ <h3 className="text-lg font-semibold">Basic States</h3>
133
+ <div className="grid grid-cols-1 sm:grid-cols-2 gap-4">
134
+ <div className="space-y-2">
135
+ <label className="text-sm font-medium">Default (no date selected)</label>
136
+ <DatePicker
137
+ date={basicDate}
138
+ onDateChange={setBasicDate}
139
+ placeholder="Pick a date"
140
+ />
141
+ </div>
142
+
143
+ <div className="space-y-2">
144
+ <label className="text-sm font-medium">With preselected date</label>
145
+ <DatePicker
146
+ date={preselectedDate}
147
+ onDateChange={setPreselectedDate}
148
+ placeholder="Pick a date"
149
+ />
150
+ </div>
151
+
152
+ <div className="space-y-2">
153
+ <label className="text-sm font-medium">Disabled state</label>
154
+ <DatePicker
155
+ date={new Date()}
156
+ disabled={true}
157
+ placeholder="Date picker disabled"
158
+ />
159
+ </div>
160
+
161
+ <div className="space-y-2">
162
+ <label className="text-sm font-medium">Custom placeholder</label>
163
+ <DatePicker
164
+ date={customDate}
165
+ onDateChange={setCustomDate}
166
+ placeholder="Select your birthday"
167
+ />
168
+ </div>
169
+ </div>
170
+ </div>
171
+
172
+ <div className="space-y-3">
173
+ <h3 className="text-lg font-semibold">Width Variants</h3>
174
+ <div className="space-y-4">
175
+ <div className="space-y-2">
176
+ <label className="text-sm font-medium">Default width (240px)</label>
177
+ <DatePicker placeholder="Default width" />
178
+ </div>
179
+
180
+ <div className="space-y-2">
181
+ <label className="text-sm font-medium">Custom width (300px)</label>
182
+ <DatePicker
183
+ placeholder="Custom width"
184
+ className="w-[300px]"
185
+ />
186
+ </div>
187
+
188
+ <div className="space-y-2">
189
+ <label className="text-sm font-medium">Compact width (180px)</label>
190
+ <DatePicker
191
+ placeholder="Compact"
192
+ className="w-[180px]"
193
+ />
194
+ </div>
195
+
196
+ <div className="space-y-2">
197
+ <label className="text-sm font-medium">Full width</label>
198
+ <DatePicker
199
+ placeholder="Full width date picker"
200
+ className="w-full"
201
+ />
202
+ </div>
203
+ </div>
204
+ </div>
205
+ </div>
206
+ );
207
+ },
208
+ parameters: {
209
+ docs: {
210
+ description: {
211
+ story: "Comprehensive display of all DatePicker variants including different states (default, preselected, disabled), custom placeholders, and width configurations.",
212
+ },
213
+ },
214
+ },
215
+ };
216
+
217
+ /**
218
+ * Real-world usage examples showing DatePicker in typical application contexts.
219
+ * Demonstrates common patterns like date ranges, form integration, and validation.
220
+ */
221
+ export const InContext: Story = {
222
+ render: () => {
223
+ const [startDate, setStartDate] = useState<Date | undefined>();
224
+ const [endDate, setEndDate] = useState<Date | undefined>();
225
+ const [birthDate, setBirthDate] = useState<Date | undefined>();
226
+ const [appointmentDate, setAppointmentDate] = useState<Date | undefined>();
227
+
228
+ // Validation for birth date (must be in the past)
229
+ const today = new Date();
230
+ const isBirthDateInFuture = birthDate && birthDate > today;
231
+
232
+ // Validation for appointment (must be in the future)
233
+ const isAppointmentInPast = appointmentDate && appointmentDate < today;
234
+
235
+ return (
236
+ <div className="max-w-2xl space-y-8">
237
+ {/* Date Range Selection */}
238
+ <div className="space-y-3">
239
+ <h3 className="text-lg font-semibold">Event Date Range</h3>
240
+ <p className="text-sm text-muted-foreground">
241
+ Select start and end dates for your event or booking.
242
+ </p>
243
+ <div className="flex gap-3 items-center flex-wrap">
244
+ <DatePicker
245
+ date={startDate}
246
+ onDateChange={setStartDate}
247
+ placeholder="Start date"
248
+ className="w-[180px]"
249
+ />
250
+ <span className="text-muted-foreground">to</span>
251
+ <DatePicker
252
+ date={endDate}
253
+ onDateChange={setEndDate}
254
+ placeholder="End date"
255
+ className="w-[180px]"
256
+ />
257
+ </div>
258
+ {startDate && endDate && (
259
+ <div className="text-sm text-muted-foreground bg-muted p-3 rounded-md">
260
+ <strong>Duration:</strong> {Math.ceil((endDate.getTime() - startDate.getTime()) / (1000 * 60 * 60 * 24))} days
261
+ </div>
262
+ )}
263
+ </div>
264
+
265
+ {/* Form with Validation */}
266
+ <div className="space-y-3">
267
+ <h3 className="text-lg font-semibold">Profile Information</h3>
268
+ <p className="text-sm text-muted-foreground">
269
+ Date picker with validation in a form context.
270
+ </p>
271
+ <div className="space-y-4">
272
+ <div className="space-y-2">
273
+ <label className="text-sm font-medium">Birth Date</label>
274
+ <DatePicker
275
+ date={birthDate}
276
+ onDateChange={setBirthDate}
277
+ placeholder="Select your birth date"
278
+ className={cn(
279
+ "w-full",
280
+ isBirthDateInFuture && "border-destructive"
281
+ )}
282
+ />
283
+ {isBirthDateInFuture && (
284
+ <p className="text-sm text-destructive">
285
+ Birth date cannot be in the future.
286
+ </p>
287
+ )}
288
+ </div>
289
+
290
+ <div className="space-y-2">
291
+ <label className="text-sm font-medium">Appointment Date</label>
292
+ <DatePicker
293
+ date={appointmentDate}
294
+ onDateChange={setAppointmentDate}
295
+ placeholder="Schedule your appointment"
296
+ className={cn(
297
+ "w-full",
298
+ isAppointmentInPast && "border-destructive"
299
+ )}
300
+ />
301
+ {isAppointmentInPast && (
302
+ <p className="text-sm text-destructive">
303
+ Appointment must be scheduled for a future date.
304
+ </p>
305
+ )}
306
+ </div>
307
+ </div>
308
+ </div>
309
+
310
+ {/* Dashboard Context */}
311
+ <div className="space-y-3">
312
+ <h3 className="text-lg font-semibold">Analytics Dashboard</h3>
313
+ <p className="text-sm text-muted-foreground">
314
+ Date pickers in a dashboard context with preset actions.
315
+ </p>
316
+ <div className="border rounded-lg p-4 space-y-4">
317
+ <div className="flex gap-3 items-center flex-wrap">
318
+ <DatePicker
319
+ date={startDate}
320
+ onDateChange={setStartDate}
321
+ placeholder="From"
322
+ className="w-[140px]"
323
+ />
324
+ <DatePicker
325
+ date={endDate}
326
+ onDateChange={setEndDate}
327
+ placeholder="To"
328
+ className="w-[140px]"
329
+ />
330
+ <div className="flex gap-2">
331
+ <Button
332
+ variant="outline"
333
+ size="sm"
334
+ onClick={() => {
335
+ const today = new Date();
336
+ const lastWeek = new Date(today.getTime() - 7 * 24 * 60 * 60 * 1000);
337
+ setStartDate(lastWeek);
338
+ setEndDate(today);
339
+ }}
340
+ >
341
+ Last 7 days
342
+ </Button>
343
+ <Button
344
+ variant="outline"
345
+ size="sm"
346
+ onClick={() => {
347
+ const today = new Date();
348
+ const lastMonth = new Date(today.getTime() - 30 * 24 * 60 * 60 * 1000);
349
+ setStartDate(lastMonth);
350
+ setEndDate(today);
351
+ }}
352
+ >
353
+ Last 30 days
354
+ </Button>
355
+ </div>
356
+ </div>
357
+
358
+ <div className="bg-muted/50 p-3 rounded text-sm">
359
+ <strong>Selected Period:</strong>{" "}
360
+ {startDate && endDate
361
+ ? `${startDate.toLocaleDateString()} - ${endDate.toLocaleDateString()}`
362
+ : "No date range selected"
363
+ }
364
+ </div>
365
+ </div>
366
+ </div>
367
+ </div>
368
+ );
369
+ },
370
+ parameters: {
371
+ layout: "padded",
372
+ docs: {
373
+ description: {
374
+ story: "Real-world examples showing DatePicker in common application scenarios: date ranges for events, form validation, and dashboard analytics with preset date ranges.",
375
+ },
376
+ },
377
+ },
378
+ };