@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.
- package/LICENSE +21 -0
- package/README.md +195 -0
- package/dist/components/ui/accordion.d.ts +229 -0
- package/dist/components/ui/accordion.d.ts.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +247 -0
- package/dist/components/ui/alert-dialog.d.ts.map +1 -0
- package/dist/components/ui/alert.d.ts +187 -0
- package/dist/components/ui/alert.d.ts.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +94 -0
- package/dist/components/ui/aspect-ratio.d.ts.map +1 -0
- package/dist/components/ui/avatar.d.ts +244 -0
- package/dist/components/ui/avatar.d.ts.map +1 -0
- package/dist/components/ui/badge.d.ts +163 -0
- package/dist/components/ui/badge.d.ts.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +281 -0
- package/dist/components/ui/breadcrumb.d.ts.map +1 -0
- package/dist/components/ui/button.d.ts +129 -0
- package/dist/components/ui/button.d.ts.map +1 -0
- package/dist/components/ui/calendar.d.ts +169 -0
- package/dist/components/ui/calendar.d.ts.map +1 -0
- package/dist/components/ui/card.d.ts +365 -0
- package/dist/components/ui/card.d.ts.map +1 -0
- package/dist/components/ui/carousel.d.ts +369 -0
- package/dist/components/ui/carousel.d.ts.map +1 -0
- package/dist/components/ui/chart.d.ts +442 -0
- package/dist/components/ui/chart.d.ts.map +1 -0
- package/dist/components/ui/checkbox.d.ts +88 -0
- package/dist/components/ui/checkbox.d.ts.map +1 -0
- package/dist/components/ui/collapsible.d.ts +182 -0
- package/dist/components/ui/collapsible.d.ts.map +1 -0
- package/dist/components/ui/combobox.d.ts +270 -0
- package/dist/components/ui/combobox.d.ts.map +1 -0
- package/dist/components/ui/command.d.ts +355 -0
- package/dist/components/ui/command.d.ts.map +1 -0
- package/dist/components/ui/container.d.ts +102 -0
- package/dist/components/ui/container.d.ts.map +1 -0
- package/dist/components/ui/context-menu.d.ts +339 -0
- package/dist/components/ui/context-menu.d.ts.map +1 -0
- package/dist/components/ui/date-picker.d.ts +145 -0
- package/dist/components/ui/date-picker.d.ts.map +1 -0
- package/dist/components/ui/dialog.d.ts +322 -0
- package/dist/components/ui/dialog.d.ts.map +1 -0
- package/dist/components/ui/drawer.d.ts +154 -0
- package/dist/components/ui/drawer.d.ts.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +349 -0
- package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
- package/dist/components/ui/empty-state.d.ts +133 -0
- package/dist/components/ui/empty-state.d.ts.map +1 -0
- package/dist/components/ui/hover-card.d.ts +109 -0
- package/dist/components/ui/hover-card.d.ts.map +1 -0
- package/dist/components/ui/input.d.ts +89 -0
- package/dist/components/ui/input.d.ts.map +1 -0
- package/dist/components/ui/label.d.ts +93 -0
- package/dist/components/ui/label.d.ts.map +1 -0
- package/dist/components/ui/menubar.d.ts +306 -0
- package/dist/components/ui/menubar.d.ts.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +318 -0
- package/dist/components/ui/navigation-menu.d.ts.map +1 -0
- package/dist/components/ui/pagination.d.ts +343 -0
- package/dist/components/ui/pagination.d.ts.map +1 -0
- package/dist/components/ui/popover.d.ts +178 -0
- package/dist/components/ui/popover.d.ts.map +1 -0
- package/dist/components/ui/progress.d.ts +64 -0
- package/dist/components/ui/progress.d.ts.map +1 -0
- package/dist/components/ui/radio-group.d.ts +144 -0
- package/dist/components/ui/radio-group.d.ts.map +1 -0
- package/dist/components/ui/resizable.d.ts +164 -0
- package/dist/components/ui/resizable.d.ts.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +82 -0
- package/dist/components/ui/scroll-area.d.ts.map +1 -0
- package/dist/components/ui/select.d.ts +316 -0
- package/dist/components/ui/select.d.ts.map +1 -0
- package/dist/components/ui/separator.d.ts +80 -0
- package/dist/components/ui/separator.d.ts.map +1 -0
- package/dist/components/ui/sheet.d.ts +346 -0
- package/dist/components/ui/sheet.d.ts.map +1 -0
- package/dist/components/ui/sidebar.d.ts +1561 -0
- package/dist/components/ui/sidebar.d.ts.map +1 -0
- package/dist/components/ui/skeleton.d.ts +66 -0
- package/dist/components/ui/skeleton.d.ts.map +1 -0
- package/dist/components/ui/slider.d.ts +95 -0
- package/dist/components/ui/slider.d.ts.map +1 -0
- package/dist/components/ui/sonner.d.ts +101 -0
- package/dist/components/ui/sonner.d.ts.map +1 -0
- package/dist/components/ui/stack.d.ts +192 -0
- package/dist/components/ui/stack.d.ts.map +1 -0
- package/dist/components/ui/stories/accordion.stories.d.ts +71 -0
- package/dist/components/ui/stories/accordion.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/alert-dialog.stories.d.ts +39 -0
- package/dist/components/ui/stories/alert-dialog.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/alert.stories.d.ts +48 -0
- package/dist/components/ui/stories/alert.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/aspect-ratio.stories.d.ts +53 -0
- package/dist/components/ui/stories/aspect-ratio.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/avatar.stories.d.ts +49 -0
- package/dist/components/ui/stories/avatar.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/badge.stories.d.ts +64 -0
- package/dist/components/ui/stories/badge.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/breadcrumb.stories.d.ts +27 -0
- package/dist/components/ui/stories/breadcrumb.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/button.stories.d.ts +92 -0
- package/dist/components/ui/stories/button.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/calendar.stories.d.ts +94 -0
- package/dist/components/ui/stories/calendar.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/card.stories.d.ts +29 -0
- package/dist/components/ui/stories/card.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/carousel.stories.d.ts +42 -0
- package/dist/components/ui/stories/carousel.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/chart.stories.d.ts +51 -0
- package/dist/components/ui/stories/chart.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/checkbox.stories.d.ts +72 -0
- package/dist/components/ui/stories/checkbox.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/cn.stories.d.ts +19 -0
- package/dist/components/ui/stories/cn.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/collapsible.stories.d.ts +51 -0
- package/dist/components/ui/stories/collapsible.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/colors.stories.d.ts +31 -0
- package/dist/components/ui/stories/colors.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/combobox.stories.d.ts +89 -0
- package/dist/components/ui/stories/combobox.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/command.stories.d.ts +69 -0
- package/dist/components/ui/stories/command.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/container.stories.d.ts +42 -0
- package/dist/components/ui/stories/container.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/context-menu.stories.d.ts +32 -0
- package/dist/components/ui/stories/context-menu.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/date-picker.stories.d.ts +67 -0
- package/dist/components/ui/stories/date-picker.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/dialog.stories.d.ts +48 -0
- package/dist/components/ui/stories/dialog.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/drawer.stories.d.ts +33 -0
- package/dist/components/ui/stories/drawer.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/dropdown-menu.stories.d.ts +31 -0
- package/dist/components/ui/stories/dropdown-menu.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/empty-state.stories.d.ts +74 -0
- package/dist/components/ui/stories/empty-state.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/hover-card.stories.d.ts +35 -0
- package/dist/components/ui/stories/hover-card.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/input.stories.d.ts +69 -0
- package/dist/components/ui/stories/input.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/label.stories.d.ts +47 -0
- package/dist/components/ui/stories/label.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/menubar.stories.d.ts +39 -0
- package/dist/components/ui/stories/menubar.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/navigation-menu.stories.d.ts +44 -0
- package/dist/components/ui/stories/navigation-menu.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/pagination.stories.d.ts +33 -0
- package/dist/components/ui/stories/pagination.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/popover.stories.d.ts +36 -0
- package/dist/components/ui/stories/popover.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/progress.stories.d.ts +38 -0
- package/dist/components/ui/stories/progress.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/radio-group.stories.d.ts +76 -0
- package/dist/components/ui/stories/radio-group.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/resizable.stories.d.ts +49 -0
- package/dist/components/ui/stories/resizable.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/scroll-area.stories.d.ts +35 -0
- package/dist/components/ui/stories/scroll-area.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/select.stories.d.ts +51 -0
- package/dist/components/ui/stories/select.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/separator.stories.d.ts +58 -0
- package/dist/components/ui/stories/separator.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/sheet.stories.d.ts +43 -0
- package/dist/components/ui/stories/sheet.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/sidebar.stories.d.ts +60 -0
- package/dist/components/ui/stories/sidebar.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/skeleton.stories.d.ts +42 -0
- package/dist/components/ui/stories/skeleton.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/slider.stories.d.ts +99 -0
- package/dist/components/ui/stories/slider.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/sonner.stories.d.ts +9 -0
- package/dist/components/ui/stories/sonner.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/stack.stories.d.ts +39 -0
- package/dist/components/ui/stories/stack.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/switch.stories.d.ts +71 -0
- package/dist/components/ui/stories/switch.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/table.stories.d.ts +40 -0
- package/dist/components/ui/stories/table.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/tabs.stories.d.ts +62 -0
- package/dist/components/ui/stories/tabs.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/text-field.stories.d.ts +78 -0
- package/dist/components/ui/stories/text-field.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/textarea.stories.d.ts +57 -0
- package/dist/components/ui/stories/textarea.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/theme-toggle.stories.d.ts +71 -0
- package/dist/components/ui/stories/theme-toggle.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/theme.stories.d.ts +51 -0
- package/dist/components/ui/stories/theme.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/toggle-group.stories.d.ts +71 -0
- package/dist/components/ui/stories/toggle-group.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/toggle.stories.d.ts +78 -0
- package/dist/components/ui/stories/toggle.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/tooltip.stories.d.ts +37 -0
- package/dist/components/ui/stories/tooltip.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/typography.stories.d.ts +137 -0
- package/dist/components/ui/stories/typography.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/use-mobile.stories.d.ts +20 -0
- package/dist/components/ui/stories/use-mobile.stories.d.ts.map +1 -0
- package/dist/components/ui/stories/use-theme.stories.d.ts +23 -0
- package/dist/components/ui/stories/use-theme.stories.d.ts.map +1 -0
- package/dist/components/ui/switch.d.ts +84 -0
- package/dist/components/ui/switch.d.ts.map +1 -0
- package/dist/components/ui/table.d.ts +321 -0
- package/dist/components/ui/table.d.ts.map +1 -0
- package/dist/components/ui/tabs.d.ts +260 -0
- package/dist/components/ui/tabs.d.ts.map +1 -0
- package/dist/components/ui/text-field.d.ts +157 -0
- package/dist/components/ui/text-field.d.ts.map +1 -0
- package/dist/components/ui/textarea.d.ts +84 -0
- package/dist/components/ui/textarea.d.ts.map +1 -0
- package/dist/components/ui/theme-toggle.d.ts +105 -0
- package/dist/components/ui/theme-toggle.d.ts.map +1 -0
- package/dist/components/ui/theme.d.ts +110 -0
- package/dist/components/ui/theme.d.ts.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +133 -0
- package/dist/components/ui/toggle-group.d.ts.map +1 -0
- package/dist/components/ui/toggle.d.ts +84 -0
- package/dist/components/ui/toggle.d.ts.map +1 -0
- package/dist/components/ui/tooltip.d.ts +202 -0
- package/dist/components/ui/tooltip.d.ts.map +1 -0
- package/dist/components/ui/typography.d.ts +287 -0
- package/dist/components/ui/typography.d.ts.map +1 -0
- package/dist/hooks/use-mobile.d.ts +74 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-theme.d.ts +142 -0
- package/dist/hooks/use-theme.d.ts.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27498 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/utils.d.ts +43 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/docs/llm/colors.md +273 -0
- package/docs/llm/components/buttons.md +68 -0
- package/docs/llm/components/cards.md +53 -0
- package/docs/llm/components/display.md +134 -0
- package/docs/llm/components/feedback.md +96 -0
- package/docs/llm/components/forms.md +90 -0
- package/docs/llm/components/layout.md +59 -0
- package/docs/llm/components/menus.md +70 -0
- package/docs/llm/components/navigation.md +80 -0
- package/docs/llm/components/overlays.md +83 -0
- package/docs/llm/components/tables.md +73 -0
- package/docs/llm/components/typography.md +199 -0
- package/docs/llm/components/utilities.md +114 -0
- package/docs/llm/guide.md +165 -0
- package/llms.txt +122 -0
- package/package.json +104 -0
- package/src/components/ui/accordion.tsx +285 -0
- package/src/components/ui/alert-dialog.tsx +387 -0
- package/src/components/ui/alert.tsx +243 -0
- package/src/components/ui/aspect-ratio.tsx +99 -0
- package/src/components/ui/avatar.tsx +288 -0
- package/src/components/ui/badge.tsx +205 -0
- package/src/components/ui/breadcrumb.tsx +378 -0
- package/src/components/ui/button.tsx +195 -0
- package/src/components/ui/calendar.tsx +371 -0
- package/src/components/ui/card.tsx +447 -0
- package/src/components/ui/carousel.tsx +624 -0
- package/src/components/ui/chart.tsx +802 -0
- package/src/components/ui/checkbox.tsx +113 -0
- package/src/components/ui/collapsible.tsx +207 -0
- package/src/components/ui/combobox.tsx +373 -0
- package/src/components/ui/command.tsx +518 -0
- package/src/components/ui/container.tsx +114 -0
- package/src/components/ui/context-menu.tsx +563 -0
- package/src/components/ui/date-picker.tsx +213 -0
- package/src/components/ui/dialog.tsx +447 -0
- package/src/components/ui/drawer.tsx +273 -0
- package/src/components/ui/dropdown-menu.tsx +578 -0
- package/src/components/ui/empty-state.tsx +145 -0
- package/src/components/ui/hover-card.tsx +144 -0
- package/src/components/ui/input.tsx +106 -0
- package/src/components/ui/label.tsx +110 -0
- package/src/components/ui/menubar.tsx +553 -0
- package/src/components/ui/navigation-menu.tsx +471 -0
- package/src/components/ui/pagination.tsx +456 -0
- package/src/components/ui/popover.tsx +216 -0
- package/src/components/ui/progress.tsx +88 -0
- package/src/components/ui/radio-group.tsx +183 -0
- package/src/components/ui/resizable.tsx +209 -0
- package/src/components/ui/scroll-area.tsx +132 -0
- package/src/components/ui/select.tsx +485 -0
- package/src/components/ui/separator.tsx +101 -0
- package/src/components/ui/sheet.tsx +495 -0
- package/src/components/ui/sidebar.tsx +2211 -0
- package/src/components/ui/skeleton.tsx +76 -0
- package/src/components/ui/slider.tsx +147 -0
- package/src/components/ui/sonner.tsx +120 -0
- package/src/components/ui/stack.tsx +180 -0
- package/src/components/ui/stories/accordion.stories.tsx +429 -0
- package/src/components/ui/stories/alert-dialog.stories.tsx +519 -0
- package/src/components/ui/stories/alert.stories.tsx +228 -0
- package/src/components/ui/stories/aspect-ratio.stories.tsx +200 -0
- package/src/components/ui/stories/avatar.stories.tsx +317 -0
- package/src/components/ui/stories/badge.stories.tsx +260 -0
- package/src/components/ui/stories/breadcrumb.stories.tsx +482 -0
- package/src/components/ui/stories/button.stories.tsx +266 -0
- package/src/components/ui/stories/calendar.stories.tsx +375 -0
- package/src/components/ui/stories/card.stories.tsx +308 -0
- package/src/components/ui/stories/carousel.stories.tsx +328 -0
- package/src/components/ui/stories/chart.stories.tsx +430 -0
- package/src/components/ui/stories/checkbox.stories.tsx +297 -0
- package/src/components/ui/stories/cn.stories.tsx +433 -0
- package/src/components/ui/stories/collapsible.stories.tsx +256 -0
- package/src/components/ui/stories/colors.stories.tsx +502 -0
- package/src/components/ui/stories/combobox.stories.tsx +301 -0
- package/src/components/ui/stories/command.stories.tsx +632 -0
- package/src/components/ui/stories/container.stories.tsx +250 -0
- package/src/components/ui/stories/context-menu.stories.tsx +446 -0
- package/src/components/ui/stories/date-picker.stories.tsx +378 -0
- package/src/components/ui/stories/dialog.stories.tsx +535 -0
- package/src/components/ui/stories/drawer.stories.tsx +364 -0
- package/src/components/ui/stories/dropdown-menu.stories.tsx +374 -0
- package/src/components/ui/stories/empty-state.stories.tsx +244 -0
- package/src/components/ui/stories/hover-card.stories.tsx +355 -0
- package/src/components/ui/stories/input.stories.tsx +289 -0
- package/src/components/ui/stories/label.stories.tsx +294 -0
- package/src/components/ui/stories/menubar.stories.tsx +764 -0
- package/src/components/ui/stories/navigation-menu.stories.tsx +539 -0
- package/src/components/ui/stories/pagination.stories.tsx +604 -0
- package/src/components/ui/stories/popover.stories.tsx +392 -0
- package/src/components/ui/stories/progress.stories.tsx +218 -0
- package/src/components/ui/stories/radio-group.stories.tsx +400 -0
- package/src/components/ui/stories/resizable.stories.tsx +417 -0
- package/src/components/ui/stories/scroll-area.stories.tsx +180 -0
- package/src/components/ui/stories/select.stories.tsx +389 -0
- package/src/components/ui/stories/separator.stories.tsx +192 -0
- package/src/components/ui/stories/sheet.stories.tsx +468 -0
- package/src/components/ui/stories/sidebar.stories.tsx +731 -0
- package/src/components/ui/stories/skeleton.stories.tsx +216 -0
- package/src/components/ui/stories/slider.stories.tsx +321 -0
- package/src/components/ui/stories/sonner.stories.tsx +373 -0
- package/src/components/ui/stories/stack.stories.tsx +222 -0
- package/src/components/ui/stories/switch.stories.tsx +202 -0
- package/src/components/ui/stories/table.stories.tsx +541 -0
- package/src/components/ui/stories/tabs.stories.tsx +544 -0
- package/src/components/ui/stories/text-field.stories.tsx +280 -0
- package/src/components/ui/stories/textarea.stories.tsx +245 -0
- package/src/components/ui/stories/theme-toggle.stories.tsx +275 -0
- package/src/components/ui/stories/theme.stories.tsx +412 -0
- package/src/components/ui/stories/toggle-group.stories.tsx +337 -0
- package/src/components/ui/stories/toggle.stories.tsx +325 -0
- package/src/components/ui/stories/tooltip.stories.tsx +444 -0
- package/src/components/ui/stories/typography.stories.tsx +1586 -0
- package/src/components/ui/stories/use-mobile.stories.tsx +420 -0
- package/src/components/ui/stories/use-theme.stories.tsx +531 -0
- package/src/components/ui/switch.tsx +106 -0
- package/src/components/ui/table.tsx +424 -0
- package/src/components/ui/tabs.tsx +316 -0
- package/src/components/ui/text-field.tsx +206 -0
- package/src/components/ui/textarea.tsx +98 -0
- package/src/components/ui/theme-toggle.tsx +185 -0
- package/src/components/ui/theme.tsx +148 -0
- package/src/components/ui/toggle-group.tsx +196 -0
- package/src/components/ui/toggle.tsx +115 -0
- package/src/components/ui/tooltip.tsx +253 -0
- package/src/components/ui/typography.tsx +468 -0
- package/src/hooks/use-mobile.ts +91 -0
- package/src/hooks/use-theme.ts +319 -0
- package/src/index.ts +77 -0
- package/src/lib/utils.ts +57 -0
- 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
|
+
};
|