@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,731 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import {
3
+ Calendar,
4
+ ChevronRight,
5
+ Home,
6
+ Inbox,
7
+ LifeBuoy,
8
+ MoreHorizontal,
9
+ Plus,
10
+ Search,
11
+ Send,
12
+ Settings,
13
+ SquareTerminal,
14
+ User,
15
+ } from "lucide-react";
16
+ import {
17
+ Sidebar,
18
+ SidebarContent,
19
+ SidebarFooter,
20
+ SidebarGroup,
21
+ SidebarGroupAction,
22
+ SidebarGroupContent,
23
+ SidebarGroupLabel,
24
+ SidebarHeader,
25
+ SidebarInset,
26
+ SidebarInput,
27
+ SidebarMenu,
28
+ SidebarMenuAction,
29
+ SidebarMenuBadge,
30
+ SidebarMenuButton,
31
+ SidebarMenuItem,
32
+ SidebarMenuSkeleton,
33
+ SidebarMenuSub,
34
+ SidebarMenuSubButton,
35
+ SidebarMenuSubItem,
36
+ SidebarProvider,
37
+ SidebarRail,
38
+ SidebarSeparator,
39
+ SidebarTrigger,
40
+ } from "../sidebar";
41
+ import { Button } from "../button";
42
+
43
+ const meta = {
44
+ title: "Navigation & Menus/Sidebar",
45
+ component: Sidebar,
46
+ parameters: {
47
+ layout: "fullscreen",
48
+ docs: {
49
+ description: {
50
+ component:
51
+ "A comprehensive sidebar component built on shadcn/ui patterns. Features responsive design, multiple variants, collapsible states, and full keyboard accessibility. Perfect for complex navigation structures with support for icons, badges, actions, and hierarchical menus.",
52
+ },
53
+ },
54
+ },
55
+ tags: ["autodocs"],
56
+ argTypes: {
57
+ side: {
58
+ control: { type: "select" },
59
+ options: ["left", "right"],
60
+ description: "Which side of the screen the sidebar appears on",
61
+ },
62
+ variant: {
63
+ control: { type: "select" },
64
+ options: ["sidebar", "floating", "inset"],
65
+ description: "Visual variant affecting sidebar appearance and spacing",
66
+ },
67
+ collapsible: {
68
+ control: { type: "select" },
69
+ options: ["offcanvas", "icon", "none"],
70
+ description: "How the sidebar can be collapsed or hidden",
71
+ },
72
+ },
73
+ } satisfies Meta<typeof Sidebar>;
74
+
75
+ export default meta;
76
+ type Story = StoryObj<typeof meta>;
77
+
78
+ /**
79
+ * Interactive playground for testing all sidebar props and behaviors.
80
+ * Customize the sidebar configuration and see how it responds to different
81
+ * combinations of side, variant, and collapsible options.
82
+ */
83
+ export const Interactive: Story = {
84
+ args: {
85
+ side: "left",
86
+ variant: "sidebar",
87
+ collapsible: "offcanvas",
88
+ },
89
+ render: (args) => (
90
+ <SidebarProvider>
91
+ <div className="flex h-screen w-full">
92
+ <Sidebar {...args}>
93
+ <SidebarHeader>
94
+ <div className="flex items-center justify-between">
95
+ <h2 className="px-2 text-lg font-semibold">Interactive Demo</h2>
96
+ <SidebarTrigger />
97
+ </div>
98
+ <SidebarInput placeholder="Search navigation..." className="mt-2" />
99
+ </SidebarHeader>
100
+
101
+ <SidebarContent>
102
+ <SidebarGroup>
103
+ <SidebarGroupLabel>Main Navigation</SidebarGroupLabel>
104
+ <SidebarGroupAction>
105
+ <Plus className="h-4 w-4" />
106
+ <span className="sr-only">Add Item</span>
107
+ </SidebarGroupAction>
108
+ <SidebarGroupContent>
109
+ <SidebarMenu>
110
+ <SidebarMenuItem>
111
+ <SidebarMenuButton isActive tooltip="Go to Dashboard">
112
+ <Home className="h-4 w-4" />
113
+ <span>Dashboard</span>
114
+ </SidebarMenuButton>
115
+ </SidebarMenuItem>
116
+ <SidebarMenuItem>
117
+ <SidebarMenuButton tooltip="View Messages">
118
+ <Inbox className="h-4 w-4" />
119
+ <span>Messages</span>
120
+ </SidebarMenuButton>
121
+ <SidebarMenuBadge>12</SidebarMenuBadge>
122
+ </SidebarMenuItem>
123
+ <SidebarMenuItem>
124
+ <SidebarMenuButton tooltip="Open Calendar">
125
+ <Calendar className="h-4 w-4" />
126
+ <span>Calendar</span>
127
+ </SidebarMenuButton>
128
+ <SidebarMenuAction showOnHover>
129
+ <MoreHorizontal className="h-4 w-4" />
130
+ </SidebarMenuAction>
131
+ </SidebarMenuItem>
132
+ </SidebarMenu>
133
+ </SidebarGroupContent>
134
+ </SidebarGroup>
135
+
136
+ <SidebarSeparator />
137
+
138
+ <SidebarGroup>
139
+ <SidebarGroupLabel>Projects</SidebarGroupLabel>
140
+ <SidebarGroupContent>
141
+ <SidebarMenu>
142
+ <SidebarMenuItem>
143
+ <SidebarMenuButton tooltip="View Projects">
144
+ <SquareTerminal className="h-4 w-4" />
145
+ <span>Development</span>
146
+ <ChevronRight className="ml-auto h-4 w-4" />
147
+ </SidebarMenuButton>
148
+ <SidebarMenuSub>
149
+ <SidebarMenuSubItem>
150
+ <SidebarMenuSubButton>Web Application</SidebarMenuSubButton>
151
+ </SidebarMenuSubItem>
152
+ <SidebarMenuSubItem>
153
+ <SidebarMenuSubButton isActive>Mobile App</SidebarMenuSubButton>
154
+ </SidebarMenuSubItem>
155
+ <SidebarMenuSubItem>
156
+ <SidebarMenuSubButton>API Services</SidebarMenuSubButton>
157
+ </SidebarMenuSubItem>
158
+ </SidebarMenuSub>
159
+ </SidebarMenuItem>
160
+ </SidebarMenu>
161
+ </SidebarGroupContent>
162
+ </SidebarGroup>
163
+ </SidebarContent>
164
+
165
+ <SidebarFooter>
166
+ <SidebarMenu>
167
+ <SidebarMenuItem>
168
+ <SidebarMenuButton tooltip="Settings">
169
+ <Settings className="h-4 w-4" />
170
+ <span>Settings</span>
171
+ </SidebarMenuButton>
172
+ </SidebarMenuItem>
173
+ <SidebarMenuItem>
174
+ <SidebarMenuButton tooltip="Help & Support">
175
+ <LifeBuoy className="h-4 w-4" />
176
+ <span>Support</span>
177
+ </SidebarMenuButton>
178
+ </SidebarMenuItem>
179
+ </SidebarMenu>
180
+ </SidebarFooter>
181
+ <SidebarRail />
182
+ </Sidebar>
183
+
184
+ <SidebarInset>
185
+ <header className="flex h-16 shrink-0 items-center gap-2 px-4 border-b">
186
+ <SidebarTrigger />
187
+ <div className="flex flex-1 items-center gap-2">
188
+ <h1 className="text-lg font-semibold">Interactive Playground</h1>
189
+ </div>
190
+ </header>
191
+ <main className="flex-1 p-6">
192
+ <div className="space-y-4">
193
+ <p className="text-muted-foreground">
194
+ Use the controls below to experiment with different sidebar configurations:
195
+ </p>
196
+ <ul className="list-disc list-inside space-y-2 text-sm">
197
+ <li><strong>Side:</strong> Choose left or right positioning</li>
198
+ <li><strong>Variant:</strong> Try sidebar, floating, or inset styles</li>
199
+ <li><strong>Collapsible:</strong> Test offcanvas, icon, or none behaviors</li>
200
+ </ul>
201
+ <p className="text-sm text-muted-foreground">
202
+ Click the sidebar trigger button or use <kbd className="px-2 py-1 bg-muted rounded text-xs">Cmd+B</kbd> to toggle the sidebar.
203
+ </p>
204
+ </div>
205
+ </main>
206
+ </SidebarInset>
207
+ </div>
208
+ </SidebarProvider>
209
+ ),
210
+ };
211
+
212
+ /**
213
+ * Comprehensive showcase of all sidebar variants and configurations.
214
+ * Demonstrates the visual differences between sidebar, floating, and inset
215
+ * variants alongside different collapsible behaviors.
216
+ */
217
+ export const Variants: Story = {
218
+ render: () => (
219
+ <div className="grid gap-8">
220
+ {/* Standard Sidebar Variants */}
221
+ <div className="space-y-4">
222
+ <h3 className="text-lg font-semibold">Visual Variants</h3>
223
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
224
+ {/* Standard Sidebar */}
225
+ <div className="border rounded-lg overflow-hidden">
226
+ <div className="p-2 bg-muted text-sm font-medium">Standard Sidebar</div>
227
+ <div className="h-64">
228
+ <SidebarProvider>
229
+ <div className="flex h-full">
230
+ <Sidebar variant="sidebar" className="w-48">
231
+ <SidebarHeader>
232
+ <h4 className="px-2 text-sm font-medium">Standard</h4>
233
+ </SidebarHeader>
234
+ <SidebarContent>
235
+ <SidebarGroup>
236
+ <SidebarGroupContent>
237
+ <SidebarMenu>
238
+ <SidebarMenuItem>
239
+ <SidebarMenuButton>
240
+ <Home className="h-4 w-4" />
241
+ <span>Home</span>
242
+ </SidebarMenuButton>
243
+ </SidebarMenuItem>
244
+ <SidebarMenuItem>
245
+ <SidebarMenuButton>
246
+ <Settings className="h-4 w-4" />
247
+ <span>Settings</span>
248
+ </SidebarMenuButton>
249
+ </SidebarMenuItem>
250
+ </SidebarMenu>
251
+ </SidebarGroupContent>
252
+ </SidebarGroup>
253
+ </SidebarContent>
254
+ </Sidebar>
255
+ <SidebarInset>
256
+ <div className="p-4 text-sm">
257
+ Standard full-height sidebar with clean edges
258
+ </div>
259
+ </SidebarInset>
260
+ </div>
261
+ </SidebarProvider>
262
+ </div>
263
+ </div>
264
+
265
+ {/* Floating Sidebar */}
266
+ <div className="border rounded-lg overflow-hidden">
267
+ <div className="p-2 bg-muted text-sm font-medium">Floating Sidebar</div>
268
+ <div className="h-64">
269
+ <SidebarProvider>
270
+ <div className="flex h-full">
271
+ <Sidebar variant="floating" className="w-48">
272
+ <SidebarHeader>
273
+ <h4 className="px-2 text-sm font-medium">Floating</h4>
274
+ </SidebarHeader>
275
+ <SidebarContent>
276
+ <SidebarGroup>
277
+ <SidebarGroupContent>
278
+ <SidebarMenu>
279
+ <SidebarMenuItem>
280
+ <SidebarMenuButton>
281
+ <Home className="h-4 w-4" />
282
+ <span>Home</span>
283
+ </SidebarMenuButton>
284
+ </SidebarMenuItem>
285
+ <SidebarMenuItem>
286
+ <SidebarMenuButton>
287
+ <Settings className="h-4 w-4" />
288
+ <span>Settings</span>
289
+ </SidebarMenuButton>
290
+ </SidebarMenuItem>
291
+ </SidebarMenu>
292
+ </SidebarGroupContent>
293
+ </SidebarGroup>
294
+ </SidebarContent>
295
+ </Sidebar>
296
+ <SidebarInset>
297
+ <div className="p-4 text-sm">
298
+ Floating sidebar with padding, rounded corners, and shadow
299
+ </div>
300
+ </SidebarInset>
301
+ </div>
302
+ </SidebarProvider>
303
+ </div>
304
+ </div>
305
+
306
+ {/* Inset Sidebar */}
307
+ <div className="border rounded-lg overflow-hidden">
308
+ <div className="p-2 bg-muted text-sm font-medium">Inset Sidebar</div>
309
+ <div className="h-64">
310
+ <SidebarProvider>
311
+ <div className="flex h-full">
312
+ <Sidebar variant="inset" className="w-48">
313
+ <SidebarHeader>
314
+ <h4 className="px-2 text-sm font-medium">Inset</h4>
315
+ </SidebarHeader>
316
+ <SidebarContent>
317
+ <SidebarGroup>
318
+ <SidebarGroupContent>
319
+ <SidebarMenu>
320
+ <SidebarMenuItem>
321
+ <SidebarMenuButton>
322
+ <Home className="h-4 w-4" />
323
+ <span>Home</span>
324
+ </SidebarMenuButton>
325
+ </SidebarMenuItem>
326
+ <SidebarMenuItem>
327
+ <SidebarMenuButton>
328
+ <Settings className="h-4 w-4" />
329
+ <span>Settings</span>
330
+ </SidebarMenuButton>
331
+ </SidebarMenuItem>
332
+ </SidebarMenu>
333
+ </SidebarGroupContent>
334
+ </SidebarGroup>
335
+ </SidebarContent>
336
+ </Sidebar>
337
+ <SidebarInset>
338
+ <div className="p-4 text-sm">
339
+ Inset variant with margin affecting main content layout
340
+ </div>
341
+ </SidebarInset>
342
+ </div>
343
+ </SidebarProvider>
344
+ </div>
345
+ </div>
346
+ </div>
347
+ </div>
348
+
349
+ {/* Collapsible Behaviors */}
350
+ <div className="space-y-4">
351
+ <h3 className="text-lg font-semibold">Collapsible Behaviors</h3>
352
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
353
+ {/* Offcanvas */}
354
+ <div className="border rounded-lg overflow-hidden">
355
+ <div className="p-2 bg-muted text-sm font-medium">Offcanvas (Default)</div>
356
+ <div className="h-48">
357
+ <SidebarProvider defaultOpen={false}>
358
+ <div className="flex h-full">
359
+ <Sidebar collapsible="offcanvas" className="w-48">
360
+ <SidebarContent>
361
+ <SidebarGroup>
362
+ <SidebarGroupContent>
363
+ <SidebarMenu>
364
+ <SidebarMenuItem>
365
+ <SidebarMenuButton>
366
+ <Home className="h-4 w-4" />
367
+ <span>Home</span>
368
+ </SidebarMenuButton>
369
+ </SidebarMenuItem>
370
+ </SidebarMenu>
371
+ </SidebarGroupContent>
372
+ </SidebarGroup>
373
+ </SidebarContent>
374
+ </Sidebar>
375
+ <SidebarInset>
376
+ <div className="p-4 text-sm">
377
+ <SidebarTrigger />
378
+ <p className="mt-2">Slides completely off-screen when collapsed</p>
379
+ </div>
380
+ </SidebarInset>
381
+ </div>
382
+ </SidebarProvider>
383
+ </div>
384
+ </div>
385
+
386
+ {/* Icon Mode */}
387
+ <div className="border rounded-lg overflow-hidden">
388
+ <div className="p-2 bg-muted text-sm font-medium">Icon Mode</div>
389
+ <div className="h-48">
390
+ <SidebarProvider defaultOpen={false}>
391
+ <div className="flex h-full">
392
+ <Sidebar collapsible="icon" className="w-48">
393
+ <SidebarContent>
394
+ <SidebarGroup>
395
+ <SidebarGroupContent>
396
+ <SidebarMenu>
397
+ <SidebarMenuItem>
398
+ <SidebarMenuButton tooltip="Home">
399
+ <Home className="h-4 w-4" />
400
+ <span>Home</span>
401
+ </SidebarMenuButton>
402
+ </SidebarMenuItem>
403
+ <SidebarMenuItem>
404
+ <SidebarMenuButton tooltip="Settings">
405
+ <Settings className="h-4 w-4" />
406
+ <span>Settings</span>
407
+ </SidebarMenuButton>
408
+ </SidebarMenuItem>
409
+ </SidebarMenu>
410
+ </SidebarGroupContent>
411
+ </SidebarGroup>
412
+ </SidebarContent>
413
+ </Sidebar>
414
+ <SidebarInset>
415
+ <div className="p-4 text-sm">
416
+ <SidebarTrigger />
417
+ <p className="mt-2">Collapses to icon-only width with tooltips</p>
418
+ </div>
419
+ </SidebarInset>
420
+ </div>
421
+ </SidebarProvider>
422
+ </div>
423
+ </div>
424
+
425
+ {/* Non-collapsible */}
426
+ <div className="border rounded-lg overflow-hidden">
427
+ <div className="p-2 bg-muted text-sm font-medium">Non-collapsible</div>
428
+ <div className="h-48">
429
+ <SidebarProvider>
430
+ <div className="flex h-full">
431
+ <Sidebar collapsible="none" className="w-48">
432
+ <SidebarContent>
433
+ <SidebarGroup>
434
+ <SidebarGroupContent>
435
+ <SidebarMenu>
436
+ <SidebarMenuItem>
437
+ <SidebarMenuButton>
438
+ <Home className="h-4 w-4" />
439
+ <span>Home</span>
440
+ </SidebarMenuButton>
441
+ </SidebarMenuItem>
442
+ <SidebarMenuItem>
443
+ <SidebarMenuButton>
444
+ <Settings className="h-4 w-4" />
445
+ <span>Settings</span>
446
+ </SidebarMenuButton>
447
+ </SidebarMenuItem>
448
+ </SidebarMenu>
449
+ </SidebarGroupContent>
450
+ </SidebarGroup>
451
+ </SidebarContent>
452
+ </Sidebar>
453
+ <SidebarInset>
454
+ <div className="p-4 text-sm">
455
+ Always visible, cannot be collapsed or hidden
456
+ </div>
457
+ </SidebarInset>
458
+ </div>
459
+ </SidebarProvider>
460
+ </div>
461
+ </div>
462
+ </div>
463
+ </div>
464
+
465
+ {/* Loading States */}
466
+ <div className="space-y-4">
467
+ <h3 className="text-lg font-semibold">Loading States</h3>
468
+ <div className="border rounded-lg overflow-hidden w-96">
469
+ <div className="p-2 bg-muted text-sm font-medium">Skeleton Placeholders</div>
470
+ <div className="h-48">
471
+ <SidebarProvider>
472
+ <div className="flex h-full">
473
+ <Sidebar className="w-48">
474
+ <SidebarHeader>
475
+ <h4 className="px-2 text-sm font-medium">Loading...</h4>
476
+ </SidebarHeader>
477
+ <SidebarContent>
478
+ <SidebarGroup>
479
+ <SidebarGroupLabel>Navigation</SidebarGroupLabel>
480
+ <SidebarGroupContent>
481
+ <SidebarMenu>
482
+ <SidebarMenuItem><SidebarMenuSkeleton showIcon /></SidebarMenuItem>
483
+ <SidebarMenuItem><SidebarMenuSkeleton showIcon /></SidebarMenuItem>
484
+ <SidebarMenuItem><SidebarMenuSkeleton /></SidebarMenuItem>
485
+ <SidebarMenuItem><SidebarMenuSkeleton /></SidebarMenuItem>
486
+ </SidebarMenu>
487
+ </SidebarGroupContent>
488
+ </SidebarGroup>
489
+ </SidebarContent>
490
+ </Sidebar>
491
+ <SidebarInset>
492
+ <div className="p-4 text-sm">
493
+ Skeleton placeholders for loading states
494
+ </div>
495
+ </SidebarInset>
496
+ </div>
497
+ </SidebarProvider>
498
+ </div>
499
+ </div>
500
+ </div>
501
+ </div>
502
+ ),
503
+ };
504
+
505
+ /**
506
+ * Real-world sidebar implementation for a project management application.
507
+ * Shows how to structure complex navigation with multiple groups, search,
508
+ * user profile, and various interactive elements that designers and
509
+ * business teams would recognize from actual applications.
510
+ */
511
+ export const InContext: Story = {
512
+ render: () => (
513
+ <SidebarProvider>
514
+ <div className="flex h-screen w-full bg-background">
515
+ <Sidebar>
516
+ <SidebarHeader>
517
+ <SidebarMenu>
518
+ <SidebarMenuItem>
519
+ <SidebarMenuButton size="lg" className="data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground">
520
+ <div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground">
521
+ <SquareTerminal className="size-4" />
522
+ </div>
523
+ <div className="grid flex-1 text-left text-sm leading-tight">
524
+ <span className="truncate font-semibold">Project Hub</span>
525
+ <span className="truncate text-xs">Enterprise Plan</span>
526
+ </div>
527
+ </SidebarMenuButton>
528
+ </SidebarMenuItem>
529
+ </SidebarMenu>
530
+ <SidebarInput placeholder="Search projects..." className="mt-2" />
531
+ </SidebarHeader>
532
+
533
+ <SidebarContent>
534
+ <SidebarGroup>
535
+ <SidebarGroupLabel>Overview</SidebarGroupLabel>
536
+ <SidebarGroupContent>
537
+ <SidebarMenu>
538
+ <SidebarMenuItem>
539
+ <SidebarMenuButton isActive>
540
+ <Home className="h-4 w-4" />
541
+ <span>Dashboard</span>
542
+ </SidebarMenuButton>
543
+ </SidebarMenuItem>
544
+ <SidebarMenuItem>
545
+ <SidebarMenuButton>
546
+ <Inbox className="h-4 w-4" />
547
+ <span>Notifications</span>
548
+ </SidebarMenuButton>
549
+ <SidebarMenuBadge>3</SidebarMenuBadge>
550
+ </SidebarMenuItem>
551
+ <SidebarMenuItem>
552
+ <SidebarMenuButton>
553
+ <Calendar className="h-4 w-4" />
554
+ <span>Schedule</span>
555
+ </SidebarMenuButton>
556
+ </SidebarMenuItem>
557
+ </SidebarMenu>
558
+ </SidebarGroupContent>
559
+ </SidebarGroup>
560
+
561
+ <SidebarSeparator />
562
+
563
+ <SidebarGroup>
564
+ <SidebarGroupLabel>Projects</SidebarGroupLabel>
565
+ <SidebarGroupAction>
566
+ <Plus className="h-4 w-4" />
567
+ <span className="sr-only">Add Project</span>
568
+ </SidebarGroupAction>
569
+ <SidebarGroupContent>
570
+ <SidebarMenu>
571
+ <SidebarMenuItem>
572
+ <SidebarMenuButton>
573
+ <SquareTerminal className="h-4 w-4" />
574
+ <span>Mobile App Redesign</span>
575
+ </SidebarMenuButton>
576
+ <SidebarMenuAction showOnHover>
577
+ <MoreHorizontal className="h-4 w-4" />
578
+ </SidebarMenuAction>
579
+ </SidebarMenuItem>
580
+ <SidebarMenuItem>
581
+ <SidebarMenuButton>
582
+ <SquareTerminal className="h-4 w-4" />
583
+ <span>Web Platform v2.0</span>
584
+ <ChevronRight className="ml-auto h-4 w-4" />
585
+ </SidebarMenuButton>
586
+ <SidebarMenuSub>
587
+ <SidebarMenuSubItem>
588
+ <SidebarMenuSubButton>Frontend Development</SidebarMenuSubButton>
589
+ </SidebarMenuSubItem>
590
+ <SidebarMenuSubItem>
591
+ <SidebarMenuSubButton isActive>API Integration</SidebarMenuSubButton>
592
+ </SidebarMenuSubItem>
593
+ <SidebarMenuSubItem>
594
+ <SidebarMenuSubButton>Testing & QA</SidebarMenuSubButton>
595
+ </SidebarMenuSubItem>
596
+ </SidebarMenuSub>
597
+ </SidebarMenuItem>
598
+ <SidebarMenuItem>
599
+ <SidebarMenuButton>
600
+ <SquareTerminal className="h-4 w-4" />
601
+ <span>Documentation Update</span>
602
+ </SidebarMenuButton>
603
+ </SidebarMenuItem>
604
+ </SidebarMenu>
605
+ </SidebarGroupContent>
606
+ </SidebarGroup>
607
+
608
+ <SidebarSeparator />
609
+
610
+ <SidebarGroup>
611
+ <SidebarGroupLabel>Team</SidebarGroupLabel>
612
+ <SidebarGroupContent>
613
+ <SidebarMenu>
614
+ <SidebarMenuItem>
615
+ <SidebarMenuButton>
616
+ <User className="h-4 w-4" />
617
+ <span>Team Members</span>
618
+ </SidebarMenuButton>
619
+ </SidebarMenuItem>
620
+ <SidebarMenuItem>
621
+ <SidebarMenuButton>
622
+ <Send className="h-4 w-4" />
623
+ <span>Messages</span>
624
+ </SidebarMenuButton>
625
+ <SidebarMenuBadge>12</SidebarMenuBadge>
626
+ </SidebarMenuItem>
627
+ <SidebarMenuItem>
628
+ <SidebarMenuButton>
629
+ <Search className="h-4 w-4" />
630
+ <span>Activity Feed</span>
631
+ </SidebarMenuButton>
632
+ </SidebarMenuItem>
633
+ </SidebarMenu>
634
+ </SidebarGroupContent>
635
+ </SidebarGroup>
636
+ </SidebarContent>
637
+
638
+ <SidebarFooter>
639
+ <SidebarMenu>
640
+ <SidebarMenuItem>
641
+ <SidebarMenuButton>
642
+ <div className="flex aspect-square size-8 items-center justify-center rounded-lg bg-sidebar-primary text-sidebar-primary-foreground">
643
+ <User className="size-4" />
644
+ </div>
645
+ <div className="grid flex-1 text-left text-sm leading-tight">
646
+ <span className="truncate font-semibold">Sarah Johnson</span>
647
+ <span className="truncate text-xs">sarah@company.com</span>
648
+ </div>
649
+ </SidebarMenuButton>
650
+ <SidebarMenuAction>
651
+ <Settings className="h-4 w-4" />
652
+ </SidebarMenuAction>
653
+ </SidebarMenuItem>
654
+ </SidebarMenu>
655
+ </SidebarFooter>
656
+ <SidebarRail />
657
+ </Sidebar>
658
+
659
+ <SidebarInset>
660
+ <header className="flex h-16 shrink-0 items-center gap-2 px-6 border-b">
661
+ <SidebarTrigger />
662
+ <div className="flex flex-1 items-center gap-2">
663
+ <h1 className="text-lg font-semibold">Project Management Dashboard</h1>
664
+ </div>
665
+ <Button variant="outline" size="sm">
666
+ <Plus className="h-4 w-4 mr-2" />
667
+ New Task
668
+ </Button>
669
+ </header>
670
+
671
+ <main className="flex-1 p-6">
672
+ <div className="grid gap-6">
673
+ <div className="grid grid-cols-1 md:grid-cols-3 gap-4">
674
+ <div className="rounded-lg border p-4">
675
+ <h3 className="font-semibold mb-2">Active Projects</h3>
676
+ <p className="text-2xl font-bold text-primary">12</p>
677
+ <p className="text-sm text-muted-foreground">3 due this week</p>
678
+ </div>
679
+ <div className="rounded-lg border p-4">
680
+ <h3 className="font-semibold mb-2">Team Members</h3>
681
+ <p className="text-2xl font-bold text-primary">24</p>
682
+ <p className="text-sm text-muted-foreground">5 online now</p>
683
+ </div>
684
+ <div className="rounded-lg border p-4">
685
+ <h3 className="font-semibold mb-2">Completed Tasks</h3>
686
+ <p className="text-2xl font-bold text-primary">148</p>
687
+ <p className="text-sm text-muted-foreground">+12 this week</p>
688
+ </div>
689
+ </div>
690
+
691
+ <div className="rounded-lg border p-6">
692
+ <h3 className="font-semibold mb-4">Recent Activity</h3>
693
+ <div className="space-y-3">
694
+ <div className="flex items-center gap-3">
695
+ <div className="h-2 w-2 rounded-full bg-green-500"></div>
696
+ <span className="text-sm">API Integration completed by John Doe</span>
697
+ <span className="text-xs text-muted-foreground ml-auto">2 hours ago</span>
698
+ </div>
699
+ <div className="flex items-center gap-3">
700
+ <div className="h-2 w-2 rounded-full bg-blue-500"></div>
701
+ <span className="text-sm">New task assigned: Frontend Development</span>
702
+ <span className="text-xs text-muted-foreground ml-auto">4 hours ago</span>
703
+ </div>
704
+ <div className="flex items-center gap-3">
705
+ <div className="h-2 w-2 rounded-full bg-orange-500"></div>
706
+ <span className="text-sm">Mobile App Redesign milestone reached</span>
707
+ <span className="text-xs text-muted-foreground ml-auto">1 day ago</span>
708
+ </div>
709
+ </div>
710
+ </div>
711
+
712
+ <div className="text-sm text-muted-foreground">
713
+ <p>
714
+ This sidebar demonstrates a real-world project management interface with:
715
+ </p>
716
+ <ul className="list-disc list-inside mt-2 space-y-1">
717
+ <li>Branded header with company information</li>
718
+ <li>Search functionality for quick navigation</li>
719
+ <li>Hierarchical project organization with submenus</li>
720
+ <li>Notification badges and action buttons</li>
721
+ <li>User profile section with settings access</li>
722
+ <li>Consistent visual hierarchy and spacing</li>
723
+ </ul>
724
+ </div>
725
+ </div>
726
+ </main>
727
+ </SidebarInset>
728
+ </div>
729
+ </SidebarProvider>
730
+ ),
731
+ };