@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,764 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import React from "react";
3
+ import {
4
+ FileText,
5
+ Folder,
6
+ Save,
7
+ Download,
8
+ Upload,
9
+ Copy,
10
+ ClipboardPaste,
11
+ Scissors,
12
+ Undo,
13
+ Redo,
14
+ Bold,
15
+ Italic,
16
+ Underline,
17
+ Settings,
18
+ HelpCircle,
19
+ Info,
20
+ Zap,
21
+ Search,
22
+ Plus,
23
+ Minus,
24
+ Maximize,
25
+ Minimize,
26
+ RotateCcw,
27
+ RefreshCw,
28
+ Clock,
29
+ Filter,
30
+ } from "lucide-react";
31
+ import {
32
+ Menubar,
33
+ MenubarContent,
34
+ MenubarItem,
35
+ MenubarMenu,
36
+ MenubarSeparator,
37
+ MenubarShortcut,
38
+ MenubarTrigger,
39
+ MenubarSub,
40
+ MenubarSubContent,
41
+ MenubarSubTrigger,
42
+ MenubarCheckboxItem,
43
+ MenubarRadioGroup,
44
+ MenubarRadioItem,
45
+ MenubarLabel,
46
+ } from "../menubar";
47
+
48
+ const meta = {
49
+ title: "Navigation & Menus/Menubar",
50
+ component: Menubar,
51
+ parameters: {
52
+ layout: "centered",
53
+ docs: {
54
+ description: {
55
+ component:
56
+ "A visually persistent menu common in desktop applications that provides access to a consistent set of commands. Built on Radix UI Menubar primitive with full keyboard navigation and accessibility support.",
57
+ },
58
+ },
59
+ },
60
+ tags: ["autodocs"],
61
+ argTypes: {
62
+ className: {
63
+ control: "text",
64
+ description: "Additional CSS classes to apply to the menubar",
65
+ },
66
+ },
67
+ } satisfies Meta<typeof Menubar>;
68
+
69
+ export default meta;
70
+ type Story = StoryObj<typeof meta>;
71
+
72
+ /**
73
+ * Interactive playground for testing all menubar features and configurations.
74
+ * Experiment with different combinations of menu items, shortcuts, and interactions.
75
+ */
76
+ export const Interactive: Story = {
77
+ render: function InteractiveMenubar() {
78
+ const [showToolbar, setShowToolbar] = React.useState(true);
79
+ const [showSidebar, setShowSidebar] = React.useState(false);
80
+ const [showFooter, setShowFooter] = React.useState(true);
81
+ const [theme, setTheme] = React.useState("light");
82
+ const [fontSize, setFontSize] = React.useState("medium");
83
+ const [recentFiles] = React.useState([
84
+ "project1.json",
85
+ "document.pdf",
86
+ "spreadsheet.xlsx",
87
+ ]);
88
+
89
+ return (
90
+ <div className="w-full max-w-4xl">
91
+ <Menubar>
92
+ <MenubarMenu>
93
+ <MenubarTrigger>File</MenubarTrigger>
94
+ <MenubarContent>
95
+ <MenubarItem>
96
+ <FileText className="mr-2 h-4 w-4" />
97
+ New File
98
+ <MenubarShortcut>⌘N</MenubarShortcut>
99
+ </MenubarItem>
100
+ <MenubarItem>
101
+ <Folder className="mr-2 h-4 w-4" />
102
+ Open
103
+ <MenubarShortcut>⌘O</MenubarShortcut>
104
+ </MenubarItem>
105
+ <MenubarSub>
106
+ <MenubarSubTrigger>
107
+ <Clock className="mr-2 h-4 w-4" />
108
+ Recent Files
109
+ </MenubarSubTrigger>
110
+ <MenubarSubContent className="w-48">
111
+ {recentFiles.map((file, index) => (
112
+ <MenubarItem key={index}>
113
+ <FileText className="mr-2 h-4 w-4" />
114
+ {file}
115
+ </MenubarItem>
116
+ ))}
117
+ <MenubarSeparator />
118
+ <MenubarItem>Clear Recent Files</MenubarItem>
119
+ </MenubarSubContent>
120
+ </MenubarSub>
121
+ <MenubarSeparator />
122
+ <MenubarItem>
123
+ <Save className="mr-2 h-4 w-4" />
124
+ Save
125
+ <MenubarShortcut>⌘S</MenubarShortcut>
126
+ </MenubarItem>
127
+ <MenubarItem disabled>
128
+ <Upload className="mr-2 h-4 w-4" />
129
+ Import (Coming Soon)
130
+ </MenubarItem>
131
+ <MenubarSeparator />
132
+ <MenubarItem variant="destructive">
133
+ Delete File
134
+ <MenubarShortcut>⌫</MenubarShortcut>
135
+ </MenubarItem>
136
+ </MenubarContent>
137
+ </MenubarMenu>
138
+
139
+ <MenubarMenu>
140
+ <MenubarTrigger>Edit</MenubarTrigger>
141
+ <MenubarContent>
142
+ <MenubarItem>
143
+ <Undo className="mr-2 h-4 w-4" />
144
+ Undo
145
+ <MenubarShortcut>⌘Z</MenubarShortcut>
146
+ </MenubarItem>
147
+ <MenubarItem>
148
+ <Redo className="mr-2 h-4 w-4" />
149
+ Redo
150
+ <MenubarShortcut>⇧⌘Z</MenubarShortcut>
151
+ </MenubarItem>
152
+ <MenubarSeparator />
153
+ <MenubarItem>
154
+ <Scissors className="mr-2 h-4 w-4" />
155
+ Cut
156
+ <MenubarShortcut>⌘X</MenubarShortcut>
157
+ </MenubarItem>
158
+ <MenubarItem>
159
+ <Copy className="mr-2 h-4 w-4" />
160
+ Copy
161
+ <MenubarShortcut>⌘C</MenubarShortcut>
162
+ </MenubarItem>
163
+ <MenubarItem>
164
+ <ClipboardPaste className="mr-2 h-4 w-4" />
165
+ Paste
166
+ <MenubarShortcut>⌘V</MenubarShortcut>
167
+ </MenubarItem>
168
+ <MenubarSeparator />
169
+ <MenubarSub>
170
+ <MenubarSubTrigger>Text Style</MenubarSubTrigger>
171
+ <MenubarSubContent>
172
+ <MenubarItem>
173
+ <Bold className="mr-2 h-4 w-4" />
174
+ Bold
175
+ <MenubarShortcut>⌘B</MenubarShortcut>
176
+ </MenubarItem>
177
+ <MenubarItem>
178
+ <Italic className="mr-2 h-4 w-4" />
179
+ Italic
180
+ <MenubarShortcut>⌘I</MenubarShortcut>
181
+ </MenubarItem>
182
+ <MenubarItem>
183
+ <Underline className="mr-2 h-4 w-4" />
184
+ Underline
185
+ <MenubarShortcut>⌘U</MenubarShortcut>
186
+ </MenubarItem>
187
+ </MenubarSubContent>
188
+ </MenubarSub>
189
+ </MenubarContent>
190
+ </MenubarMenu>
191
+
192
+ <MenubarMenu>
193
+ <MenubarTrigger>View</MenubarTrigger>
194
+ <MenubarContent>
195
+ <MenubarLabel>Interface</MenubarLabel>
196
+ <MenubarSeparator />
197
+ <MenubarCheckboxItem
198
+ checked={showToolbar}
199
+ onCheckedChange={setShowToolbar}
200
+ >
201
+ Show Toolbar
202
+ <MenubarShortcut>⌘T</MenubarShortcut>
203
+ </MenubarCheckboxItem>
204
+ <MenubarCheckboxItem
205
+ checked={showSidebar}
206
+ onCheckedChange={setShowSidebar}
207
+ >
208
+ Show Sidebar
209
+ <MenubarShortcut>⌘B</MenubarShortcut>
210
+ </MenubarCheckboxItem>
211
+ <MenubarCheckboxItem
212
+ checked={showFooter}
213
+ onCheckedChange={setShowFooter}
214
+ >
215
+ Show Footer
216
+ </MenubarCheckboxItem>
217
+ <MenubarSeparator />
218
+ <MenubarItem>
219
+ <Maximize className="mr-2 h-4 w-4" />
220
+ Zoom In
221
+ <MenubarShortcut>⌘+</MenubarShortcut>
222
+ </MenubarItem>
223
+ <MenubarItem>
224
+ <Minimize className="mr-2 h-4 w-4" />
225
+ Zoom Out
226
+ <MenubarShortcut>⌘-</MenubarShortcut>
227
+ </MenubarItem>
228
+ <MenubarItem>
229
+ <RefreshCw className="mr-2 h-4 w-4" />
230
+ Refresh
231
+ <MenubarShortcut>⌘R</MenubarShortcut>
232
+ </MenubarItem>
233
+ </MenubarContent>
234
+ </MenubarMenu>
235
+
236
+ <MenubarMenu>
237
+ <MenubarTrigger>Preferences</MenubarTrigger>
238
+ <MenubarContent>
239
+ <MenubarLabel>Theme</MenubarLabel>
240
+ <MenubarSeparator />
241
+ <MenubarRadioGroup value={theme} onValueChange={setTheme}>
242
+ <MenubarRadioItem value="light">Light</MenubarRadioItem>
243
+ <MenubarRadioItem value="dark">Dark</MenubarRadioItem>
244
+ <MenubarRadioItem value="auto">Auto</MenubarRadioItem>
245
+ </MenubarRadioGroup>
246
+ <MenubarSeparator />
247
+ <MenubarLabel>Font Size</MenubarLabel>
248
+ <MenubarSeparator />
249
+ <MenubarRadioGroup value={fontSize} onValueChange={setFontSize}>
250
+ <MenubarRadioItem value="small">Small</MenubarRadioItem>
251
+ <MenubarRadioItem value="medium">Medium</MenubarRadioItem>
252
+ <MenubarRadioItem value="large">Large</MenubarRadioItem>
253
+ </MenubarRadioGroup>
254
+ <MenubarSeparator />
255
+ <MenubarItem>
256
+ <Settings className="mr-2 h-4 w-4" />
257
+ Advanced Settings
258
+ <MenubarShortcut>⌘,</MenubarShortcut>
259
+ </MenubarItem>
260
+ </MenubarContent>
261
+ </MenubarMenu>
262
+
263
+ <MenubarMenu>
264
+ <MenubarTrigger>Help</MenubarTrigger>
265
+ <MenubarContent>
266
+ <MenubarItem>
267
+ <HelpCircle className="mr-2 h-4 w-4" />
268
+ Documentation
269
+ </MenubarItem>
270
+ <MenubarItem>
271
+ Keyboard Shortcuts
272
+ <MenubarShortcut>⌘/</MenubarShortcut>
273
+ </MenubarItem>
274
+ <MenubarSeparator />
275
+ <MenubarItem>
276
+ <Info className="mr-2 h-4 w-4" />
277
+ About
278
+ </MenubarItem>
279
+ </MenubarContent>
280
+ </MenubarMenu>
281
+ </Menubar>
282
+
283
+ <div className="mt-6 p-4 rounded-md border bg-muted/50">
284
+ <p className="text-sm text-muted-foreground">
285
+ State: Toolbar: {showToolbar ? 'On' : 'Off'}, Sidebar: {showSidebar ? 'On' : 'Off'},
286
+ Footer: {showFooter ? 'On' : 'Off'}, Theme: {theme}, Font: {fontSize}
287
+ </p>
288
+ </div>
289
+ </div>
290
+ );
291
+ },
292
+ parameters: {
293
+ docs: {
294
+ description: {
295
+ story:
296
+ "A comprehensive interactive example showcasing all menubar features including basic items, shortcuts, checkboxes, radio groups, submenus, disabled items, and destructive variants. Use this to test different configurations and interactions.",
297
+ },
298
+ },
299
+ },
300
+ };
301
+
302
+ /**
303
+ * Systematic showcase of all menubar variants and combinations.
304
+ * Demonstrates different menu types, item styles, and layout patterns.
305
+ */
306
+ export const Variants: Story = {
307
+ render: () => (
308
+ <div className="space-y-8">
309
+ {/* Basic Menubar */}
310
+ <div>
311
+ <h3 className="text-sm font-medium mb-2">Basic Application Menu</h3>
312
+ <Menubar>
313
+ <MenubarMenu>
314
+ <MenubarTrigger>File</MenubarTrigger>
315
+ <MenubarContent>
316
+ <MenubarItem>
317
+ <FileText className="mr-2 h-4 w-4" />
318
+ New
319
+ <MenubarShortcut>⌘N</MenubarShortcut>
320
+ </MenubarItem>
321
+ <MenubarItem>
322
+ <Folder className="mr-2 h-4 w-4" />
323
+ Open
324
+ <MenubarShortcut>⌘O</MenubarShortcut>
325
+ </MenubarItem>
326
+ <MenubarSeparator />
327
+ <MenubarItem>
328
+ <Save className="mr-2 h-4 w-4" />
329
+ Save
330
+ <MenubarShortcut>⌘S</MenubarShortcut>
331
+ </MenubarItem>
332
+ </MenubarContent>
333
+ </MenubarMenu>
334
+ <MenubarMenu>
335
+ <MenubarTrigger>Edit</MenubarTrigger>
336
+ <MenubarContent>
337
+ <MenubarItem>
338
+ <Undo className="mr-2 h-4 w-4" />
339
+ Undo
340
+ <MenubarShortcut>⌘Z</MenubarShortcut>
341
+ </MenubarItem>
342
+ <MenubarItem>
343
+ <Redo className="mr-2 h-4 w-4" />
344
+ Redo
345
+ <MenubarShortcut>⇧⌘Z</MenubarShortcut>
346
+ </MenubarItem>
347
+ </MenubarContent>
348
+ </MenubarMenu>
349
+ </Menubar>
350
+ </div>
351
+
352
+ {/* Single Menu */}
353
+ <div>
354
+ <h3 className="text-sm font-medium mb-2">Single Menu</h3>
355
+ <Menubar>
356
+ <MenubarMenu>
357
+ <MenubarTrigger>Actions</MenubarTrigger>
358
+ <MenubarContent>
359
+ <MenubarItem>
360
+ <Plus className="mr-2 h-4 w-4" />
361
+ Add Item
362
+ </MenubarItem>
363
+ <MenubarItem>
364
+ <Minus className="mr-2 h-4 w-4" />
365
+ Remove Item
366
+ </MenubarItem>
367
+ <MenubarSeparator />
368
+ <MenubarItem>
369
+ <Settings className="mr-2 h-4 w-4" />
370
+ Settings
371
+ </MenubarItem>
372
+ </MenubarContent>
373
+ </MenubarMenu>
374
+ </Menubar>
375
+ </div>
376
+
377
+ {/* With Submenus */}
378
+ <div>
379
+ <h3 className="text-sm font-medium mb-2">With Nested Submenus</h3>
380
+ <Menubar>
381
+ <MenubarMenu>
382
+ <MenubarTrigger>Tools</MenubarTrigger>
383
+ <MenubarContent>
384
+ <MenubarItem>
385
+ <Search className="mr-2 h-4 w-4" />
386
+ Quick Search
387
+ <MenubarShortcut>⌘K</MenubarShortcut>
388
+ </MenubarItem>
389
+ <MenubarSub>
390
+ <MenubarSubTrigger>
391
+ <Download className="mr-2 h-4 w-4" />
392
+ Export
393
+ </MenubarSubTrigger>
394
+ <MenubarSubContent>
395
+ <MenubarItem>Export as PDF</MenubarItem>
396
+ <MenubarItem>Export as CSV</MenubarItem>
397
+ <MenubarItem>Export as JSON</MenubarItem>
398
+ </MenubarSubContent>
399
+ </MenubarSub>
400
+ <MenubarSub>
401
+ <MenubarSubTrigger>
402
+ <Filter className="mr-2 h-4 w-4" />
403
+ Filters
404
+ </MenubarSubTrigger>
405
+ <MenubarSubContent>
406
+ <MenubarSub>
407
+ <MenubarSubTrigger>By Date</MenubarSubTrigger>
408
+ <MenubarSubContent>
409
+ <MenubarItem>Today</MenubarItem>
410
+ <MenubarItem>This Week</MenubarItem>
411
+ <MenubarItem>This Month</MenubarItem>
412
+ </MenubarSubContent>
413
+ </MenubarSub>
414
+ <MenubarSub>
415
+ <MenubarSubTrigger>By Type</MenubarSubTrigger>
416
+ <MenubarSubContent>
417
+ <MenubarItem>Documents</MenubarItem>
418
+ <MenubarItem>Images</MenubarItem>
419
+ <MenubarItem>Videos</MenubarItem>
420
+ </MenubarSubContent>
421
+ </MenubarSub>
422
+ </MenubarSubContent>
423
+ </MenubarSub>
424
+ </MenubarContent>
425
+ </MenubarMenu>
426
+ </Menubar>
427
+ </div>
428
+
429
+ {/* Destructive Variants */}
430
+ <div>
431
+ <h3 className="text-sm font-medium mb-2">With Destructive Actions</h3>
432
+ <Menubar>
433
+ <MenubarMenu>
434
+ <MenubarTrigger>Actions</MenubarTrigger>
435
+ <MenubarContent>
436
+ <MenubarItem>
437
+ <Copy className="mr-2 h-4 w-4" />
438
+ Duplicate
439
+ </MenubarItem>
440
+ <MenubarItem>
441
+ <Settings className="mr-2 h-4 w-4" />
442
+ Edit Properties
443
+ </MenubarItem>
444
+ <MenubarSeparator />
445
+ <MenubarItem variant="destructive">
446
+ Delete Item
447
+ <MenubarShortcut>⌫</MenubarShortcut>
448
+ </MenubarItem>
449
+ <MenubarItem variant="destructive">
450
+ Clear All Data
451
+ <MenubarShortcut>⇧⌫</MenubarShortcut>
452
+ </MenubarItem>
453
+ </MenubarContent>
454
+ </MenubarMenu>
455
+ </Menubar>
456
+ </div>
457
+
458
+ {/* Disabled States */}
459
+ <div>
460
+ <h3 className="text-sm font-medium mb-2">With Disabled Items</h3>
461
+ <Menubar>
462
+ <MenubarMenu>
463
+ <MenubarTrigger>File</MenubarTrigger>
464
+ <MenubarContent>
465
+ <MenubarItem>
466
+ <FileText className="mr-2 h-4 w-4" />
467
+ New File
468
+ <MenubarShortcut>⌘N</MenubarShortcut>
469
+ </MenubarItem>
470
+ <MenubarItem disabled>
471
+ <Save className="mr-2 h-4 w-4" />
472
+ Save (No changes)
473
+ <MenubarShortcut>⌘S</MenubarShortcut>
474
+ </MenubarItem>
475
+ <MenubarItem disabled>
476
+ <Upload className="mr-2 h-4 w-4" />
477
+ Import (Coming Soon)
478
+ </MenubarItem>
479
+ </MenubarContent>
480
+ </MenubarMenu>
481
+ <MenubarMenu>
482
+ <MenubarTrigger disabled>Premium Features</MenubarTrigger>
483
+ </MenubarMenu>
484
+ </Menubar>
485
+ </div>
486
+
487
+ {/* Inset Items */}
488
+ <div>
489
+ <h3 className="text-sm font-medium mb-2">With Inset Alignment</h3>
490
+ <Menubar>
491
+ <MenubarMenu>
492
+ <MenubarTrigger>View</MenubarTrigger>
493
+ <MenubarContent>
494
+ <MenubarLabel inset>Display Options</MenubarLabel>
495
+ <MenubarSeparator />
496
+ <MenubarItem inset>List View</MenubarItem>
497
+ <MenubarItem>
498
+ <Settings className="mr-2 h-4 w-4" />
499
+ Grid View
500
+ </MenubarItem>
501
+ <MenubarItem inset>Compact View</MenubarItem>
502
+ </MenubarContent>
503
+ </MenubarMenu>
504
+ </Menubar>
505
+ </div>
506
+ </div>
507
+ ),
508
+ parameters: {
509
+ docs: {
510
+ description: {
511
+ story:
512
+ "Comprehensive showcase of all menubar variants including basic menus, single menus, nested submenus, destructive actions, disabled states, and inset alignment patterns.",
513
+ },
514
+ },
515
+ },
516
+ };
517
+
518
+ /**
519
+ * Real-world context showing menubar in a typical application interface.
520
+ * Demonstrates how menubar fits within a complete UI layout.
521
+ */
522
+ export const InContext: Story = {
523
+ render: function ContextualMenubar() {
524
+ const [currentProject, setCurrentProject] = React.useState("My Project");
525
+ const [isProjectSaved, setIsProjectSaved] = React.useState(true);
526
+
527
+ const handleSave = () => {
528
+ setIsProjectSaved(true);
529
+ };
530
+
531
+ const handleEdit = () => {
532
+ setIsProjectSaved(false);
533
+ };
534
+
535
+ return (
536
+ <div className="w-full max-w-5xl mx-auto border rounded-lg overflow-hidden bg-background">
537
+ {/* Application Header with Menubar */}
538
+ <div className="border-b bg-muted/30 p-2">
539
+ <Menubar>
540
+ <MenubarMenu>
541
+ <MenubarTrigger>File</MenubarTrigger>
542
+ <MenubarContent>
543
+ <MenubarItem onClick={() => setCurrentProject("New Project")}>
544
+ <FileText className="mr-2 h-4 w-4" />
545
+ New Project
546
+ <MenubarShortcut>⌘N</MenubarShortcut>
547
+ </MenubarItem>
548
+ <MenubarItem>
549
+ <Folder className="mr-2 h-4 w-4" />
550
+ Open Project
551
+ <MenubarShortcut>⌘O</MenubarShortcut>
552
+ </MenubarItem>
553
+ <MenubarSeparator />
554
+ <MenubarItem
555
+ onClick={handleSave}
556
+ disabled={isProjectSaved}
557
+ >
558
+ <Save className="mr-2 h-4 w-4" />
559
+ Save Project
560
+ <MenubarShortcut>⌘S</MenubarShortcut>
561
+ </MenubarItem>
562
+ <MenubarSub>
563
+ <MenubarSubTrigger>
564
+ <Download className="mr-2 h-4 w-4" />
565
+ Export
566
+ </MenubarSubTrigger>
567
+ <MenubarSubContent>
568
+ <MenubarItem>Export as ZIP</MenubarItem>
569
+ <MenubarItem>Export as JSON</MenubarItem>
570
+ <MenubarItem>Export to Cloud</MenubarItem>
571
+ </MenubarSubContent>
572
+ </MenubarSub>
573
+ <MenubarSeparator />
574
+ <MenubarItem>
575
+ Project Settings
576
+ <MenubarShortcut>⌘,</MenubarShortcut>
577
+ </MenubarItem>
578
+ </MenubarContent>
579
+ </MenubarMenu>
580
+
581
+ <MenubarMenu>
582
+ <MenubarTrigger>Edit</MenubarTrigger>
583
+ <MenubarContent>
584
+ <MenubarItem onClick={handleEdit}>
585
+ <Undo className="mr-2 h-4 w-4" />
586
+ Undo
587
+ <MenubarShortcut>⌘Z</MenubarShortcut>
588
+ </MenubarItem>
589
+ <MenubarItem onClick={handleEdit}>
590
+ <Redo className="mr-2 h-4 w-4" />
591
+ Redo
592
+ <MenubarShortcut>⇧⌘Z</MenubarShortcut>
593
+ </MenubarItem>
594
+ <MenubarSeparator />
595
+ <MenubarItem onClick={handleEdit}>
596
+ <Copy className="mr-2 h-4 w-4" />
597
+ Copy Selection
598
+ <MenubarShortcut>⌘C</MenubarShortcut>
599
+ </MenubarItem>
600
+ <MenubarItem onClick={handleEdit}>
601
+ <ClipboardPaste className="mr-2 h-4 w-4" />
602
+ Paste
603
+ <MenubarShortcut>⌘V</MenubarShortcut>
604
+ </MenubarItem>
605
+ <MenubarSeparator />
606
+ <MenubarItem>
607
+ <Search className="mr-2 h-4 w-4" />
608
+ Find in Project
609
+ <MenubarShortcut>⌘F</MenubarShortcut>
610
+ </MenubarItem>
611
+ </MenubarContent>
612
+ </MenubarMenu>
613
+
614
+ <MenubarMenu>
615
+ <MenubarTrigger>View</MenubarTrigger>
616
+ <MenubarContent>
617
+ <MenubarCheckboxItem checked={true}>
618
+ Show Sidebar
619
+ <MenubarShortcut>⌘B</MenubarShortcut>
620
+ </MenubarCheckboxItem>
621
+ <MenubarCheckboxItem checked={false}>
622
+ Show Minimap
623
+ <MenubarShortcut>⌘M</MenubarShortcut>
624
+ </MenubarCheckboxItem>
625
+ <MenubarSeparator />
626
+ <MenubarItem>
627
+ <Maximize className="mr-2 h-4 w-4" />
628
+ Zoom In
629
+ <MenubarShortcut>⌘+</MenubarShortcut>
630
+ </MenubarItem>
631
+ <MenubarItem>
632
+ <Minimize className="mr-2 h-4 w-4" />
633
+ Zoom Out
634
+ <MenubarShortcut>⌘-</MenubarShortcut>
635
+ </MenubarItem>
636
+ <MenubarItem>
637
+ <RotateCcw className="mr-2 h-4 w-4" />
638
+ Reset Zoom
639
+ <MenubarShortcut>⌘0</MenubarShortcut>
640
+ </MenubarItem>
641
+ </MenubarContent>
642
+ </MenubarMenu>
643
+
644
+ <MenubarMenu>
645
+ <MenubarTrigger>Tools</MenubarTrigger>
646
+ <MenubarContent>
647
+ <MenubarItem>
648
+ <Zap className="mr-2 h-4 w-4" />
649
+ Quick Actions
650
+ <MenubarShortcut>⌘K</MenubarShortcut>
651
+ </MenubarItem>
652
+ <MenubarItem>
653
+ <Filter className="mr-2 h-4 w-4" />
654
+ Filter Results
655
+ </MenubarItem>
656
+ <MenubarSeparator />
657
+ <MenubarItem>
658
+ <Settings className="mr-2 h-4 w-4" />
659
+ Preferences
660
+ <MenubarShortcut>⌘,</MenubarShortcut>
661
+ </MenubarItem>
662
+ </MenubarContent>
663
+ </MenubarMenu>
664
+
665
+ <MenubarMenu>
666
+ <MenubarTrigger>Help</MenubarTrigger>
667
+ <MenubarContent>
668
+ <MenubarItem>
669
+ <HelpCircle className="mr-2 h-4 w-4" />
670
+ Documentation
671
+ </MenubarItem>
672
+ <MenubarItem>
673
+ <Info className="mr-2 h-4 w-4" />
674
+ Keyboard Shortcuts
675
+ <MenubarShortcut>⌘/</MenubarShortcut>
676
+ </MenubarItem>
677
+ <MenubarSeparator />
678
+ <MenubarItem>
679
+ Contact Support
680
+ </MenubarItem>
681
+ <MenubarItem>
682
+ <Info className="mr-2 h-4 w-4" />
683
+ About
684
+ </MenubarItem>
685
+ </MenubarContent>
686
+ </MenubarMenu>
687
+ </Menubar>
688
+ </div>
689
+
690
+ {/* Application Content */}
691
+ <div className="flex">
692
+ {/* Sidebar */}
693
+ <div className="w-48 border-r bg-muted/20 p-4">
694
+ <h3 className="font-medium text-sm mb-3">Project Files</h3>
695
+ <div className="space-y-1 text-sm">
696
+ <div className="flex items-center gap-2 p-1 rounded hover:bg-muted/50">
697
+ <FileText className="h-4 w-4 text-muted-foreground" />
698
+ index.html
699
+ </div>
700
+ <div className="flex items-center gap-2 p-1 rounded hover:bg-muted/50">
701
+ <FileText className="h-4 w-4 text-muted-foreground" />
702
+ styles.css
703
+ </div>
704
+ <div className="flex items-center gap-2 p-1 rounded hover:bg-muted/50">
705
+ <FileText className="h-4 w-4 text-muted-foreground" />
706
+ script.js
707
+ </div>
708
+ </div>
709
+ </div>
710
+
711
+ {/* Main Content */}
712
+ <div className="flex-1 p-6">
713
+ <div className="mb-4 flex items-center justify-between">
714
+ <h1 className="text-xl font-semibold">
715
+ {currentProject}
716
+ {!isProjectSaved && <span className="text-muted-foreground ml-2">•</span>}
717
+ </h1>
718
+ <div className="text-sm text-muted-foreground">
719
+ {isProjectSaved ? "All changes saved" : "Unsaved changes"}
720
+ </div>
721
+ </div>
722
+
723
+ <div className="space-y-4">
724
+ <div className="border rounded-lg p-4 bg-muted/10">
725
+ <h3 className="font-medium mb-2">Welcome to your project</h3>
726
+ <p className="text-sm text-muted-foreground">
727
+ Use the menubar above to create, edit, and manage your project files.
728
+ All standard keyboard shortcuts are supported for efficient workflow.
729
+ </p>
730
+ </div>
731
+
732
+ <div className="border rounded-lg p-4 bg-muted/10">
733
+ <h3 className="font-medium mb-2">Quick Actions</h3>
734
+ <div className="text-sm text-muted-foreground space-y-1">
735
+ <p>• Press <kbd className="px-1 py-0.5 text-xs bg-muted rounded">⌘N</kbd> to create a new project</p>
736
+ <p>• Press <kbd className="px-1 py-0.5 text-xs bg-muted rounded">⌘S</kbd> to save your work</p>
737
+ <p>• Press <kbd className="px-1 py-0.5 text-xs bg-muted rounded">⌘K</kbd> for quick actions</p>
738
+ </div>
739
+ </div>
740
+ </div>
741
+ </div>
742
+ </div>
743
+
744
+ {/* Status Bar */}
745
+ <div className="border-t bg-muted/30 px-4 py-2 text-xs text-muted-foreground flex items-center justify-between">
746
+ <div>Ready</div>
747
+ <div className="flex items-center gap-4">
748
+ <span>Line 1, Column 1</span>
749
+ <span>UTF-8</span>
750
+ <span>JavaScript</span>
751
+ </div>
752
+ </div>
753
+ </div>
754
+ );
755
+ },
756
+ parameters: {
757
+ docs: {
758
+ description: {
759
+ story:
760
+ "A complete application interface showing how menubar integrates with other UI elements. This example demonstrates a project management application with file operations, state management, and real-world interactions that designers and business teams would encounter.",
761
+ },
762
+ },
763
+ },
764
+ };