@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,374 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import {
|
|
4
|
+
Settings,
|
|
5
|
+
User,
|
|
6
|
+
Users,
|
|
7
|
+
MoreHorizontal,
|
|
8
|
+
Edit,
|
|
9
|
+
Copy,
|
|
10
|
+
Trash2,
|
|
11
|
+
Mail,
|
|
12
|
+
MessageSquare,
|
|
13
|
+
PlusCircle,
|
|
14
|
+
CreditCard,
|
|
15
|
+
LogOut,
|
|
16
|
+
UserPlus,
|
|
17
|
+
} from "lucide-react";
|
|
18
|
+
import {
|
|
19
|
+
DropdownMenu,
|
|
20
|
+
DropdownMenuContent,
|
|
21
|
+
DropdownMenuGroup,
|
|
22
|
+
DropdownMenuItem,
|
|
23
|
+
DropdownMenuLabel,
|
|
24
|
+
DropdownMenuPortal,
|
|
25
|
+
DropdownMenuSeparator,
|
|
26
|
+
DropdownMenuShortcut,
|
|
27
|
+
DropdownMenuSub,
|
|
28
|
+
DropdownMenuSubContent,
|
|
29
|
+
DropdownMenuSubTrigger,
|
|
30
|
+
DropdownMenuTrigger,
|
|
31
|
+
DropdownMenuCheckboxItem,
|
|
32
|
+
DropdownMenuRadioGroup,
|
|
33
|
+
DropdownMenuRadioItem,
|
|
34
|
+
} from "../dropdown-menu";
|
|
35
|
+
import { Button } from "../button";
|
|
36
|
+
|
|
37
|
+
const meta = {
|
|
38
|
+
title: "Navigation & Menus/DropdownMenu",
|
|
39
|
+
component: DropdownMenu,
|
|
40
|
+
parameters: {
|
|
41
|
+
layout: "centered",
|
|
42
|
+
docs: {
|
|
43
|
+
description: {
|
|
44
|
+
component:
|
|
45
|
+
"A versatile dropdown menu component built on Radix UI primitives. Displays a list of actions or options when triggered by a button. Supports sub-menus, checkboxes, radio groups, keyboard shortcuts, and full keyboard navigation. Perfect for context menus, action lists, and complex menu hierarchies.",
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
tags: ["autodocs"],
|
|
50
|
+
argTypes: {
|
|
51
|
+
// These would be controlled at the individual component level
|
|
52
|
+
// since DropdownMenu itself is just a wrapper
|
|
53
|
+
},
|
|
54
|
+
} satisfies Meta<typeof DropdownMenu>;
|
|
55
|
+
|
|
56
|
+
export default meta;
|
|
57
|
+
type Story = StoryObj<typeof meta>;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Interactive playground for testing all dropdown menu features
|
|
61
|
+
*/
|
|
62
|
+
export const Interactive: Story = {
|
|
63
|
+
render: function InteractiveDropdownMenu() {
|
|
64
|
+
const [showStatusBar, setShowStatusBar] = React.useState(true);
|
|
65
|
+
const [showActivityBar, setShowActivityBar] = React.useState(false);
|
|
66
|
+
const [position, setPosition] = React.useState("bottom");
|
|
67
|
+
|
|
68
|
+
return (
|
|
69
|
+
<DropdownMenu>
|
|
70
|
+
<DropdownMenuTrigger asChild>
|
|
71
|
+
<Button variant="outline">Interactive Menu</Button>
|
|
72
|
+
</DropdownMenuTrigger>
|
|
73
|
+
<DropdownMenuContent className="w-56">
|
|
74
|
+
<DropdownMenuLabel>My Account</DropdownMenuLabel>
|
|
75
|
+
<DropdownMenuSeparator />
|
|
76
|
+
<DropdownMenuGroup>
|
|
77
|
+
<DropdownMenuItem>
|
|
78
|
+
<User className="mr-2 h-4 w-4" />
|
|
79
|
+
<span>Profile</span>
|
|
80
|
+
<DropdownMenuShortcut>⇧⌘P</DropdownMenuShortcut>
|
|
81
|
+
</DropdownMenuItem>
|
|
82
|
+
<DropdownMenuItem>
|
|
83
|
+
<Settings className="mr-2 h-4 w-4" />
|
|
84
|
+
<span>Settings</span>
|
|
85
|
+
<DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
|
|
86
|
+
</DropdownMenuItem>
|
|
87
|
+
</DropdownMenuGroup>
|
|
88
|
+
<DropdownMenuSeparator />
|
|
89
|
+
<DropdownMenuLabel>View Options</DropdownMenuLabel>
|
|
90
|
+
<DropdownMenuCheckboxItem
|
|
91
|
+
checked={showStatusBar}
|
|
92
|
+
onCheckedChange={setShowStatusBar}
|
|
93
|
+
>
|
|
94
|
+
Status Bar
|
|
95
|
+
</DropdownMenuCheckboxItem>
|
|
96
|
+
<DropdownMenuCheckboxItem
|
|
97
|
+
checked={showActivityBar}
|
|
98
|
+
onCheckedChange={setShowActivityBar}
|
|
99
|
+
>
|
|
100
|
+
Activity Bar
|
|
101
|
+
</DropdownMenuCheckboxItem>
|
|
102
|
+
<DropdownMenuSeparator />
|
|
103
|
+
<DropdownMenuLabel>Position</DropdownMenuLabel>
|
|
104
|
+
<DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
|
|
105
|
+
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
|
|
106
|
+
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
|
|
107
|
+
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
|
|
108
|
+
</DropdownMenuRadioGroup>
|
|
109
|
+
<DropdownMenuSeparator />
|
|
110
|
+
<DropdownMenuSub>
|
|
111
|
+
<DropdownMenuSubTrigger>
|
|
112
|
+
<UserPlus className="mr-2 h-4 w-4" />
|
|
113
|
+
<span>Invite users</span>
|
|
114
|
+
</DropdownMenuSubTrigger>
|
|
115
|
+
<DropdownMenuPortal>
|
|
116
|
+
<DropdownMenuSubContent>
|
|
117
|
+
<DropdownMenuItem>
|
|
118
|
+
<Mail className="mr-2 h-4 w-4" />
|
|
119
|
+
<span>Email</span>
|
|
120
|
+
</DropdownMenuItem>
|
|
121
|
+
<DropdownMenuItem>
|
|
122
|
+
<MessageSquare className="mr-2 h-4 w-4" />
|
|
123
|
+
<span>Message</span>
|
|
124
|
+
</DropdownMenuItem>
|
|
125
|
+
</DropdownMenuSubContent>
|
|
126
|
+
</DropdownMenuPortal>
|
|
127
|
+
</DropdownMenuSub>
|
|
128
|
+
<DropdownMenuSeparator />
|
|
129
|
+
<DropdownMenuItem disabled>
|
|
130
|
+
Disabled Item
|
|
131
|
+
</DropdownMenuItem>
|
|
132
|
+
<DropdownMenuItem variant="destructive">
|
|
133
|
+
<Trash2 className="mr-2 h-4 w-4" />
|
|
134
|
+
Delete Account
|
|
135
|
+
</DropdownMenuItem>
|
|
136
|
+
</DropdownMenuContent>
|
|
137
|
+
</DropdownMenu>
|
|
138
|
+
);
|
|
139
|
+
},
|
|
140
|
+
parameters: {
|
|
141
|
+
docs: {
|
|
142
|
+
description: {
|
|
143
|
+
story:
|
|
144
|
+
"Interactive dropdown menu showcasing all available features: basic items, checkboxes, radio groups, submenus, shortcuts, disabled items, and destructive variants. Use this to test all component functionality.",
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Showcase of all dropdown menu variants and item types
|
|
152
|
+
*/
|
|
153
|
+
export const Variants: Story = {
|
|
154
|
+
render: () => (
|
|
155
|
+
<div className="grid grid-cols-2 gap-8">
|
|
156
|
+
{/* Basic Menu */}
|
|
157
|
+
<div className="space-y-2">
|
|
158
|
+
<h3 className="text-sm font-medium">Basic Menu</h3>
|
|
159
|
+
<DropdownMenu>
|
|
160
|
+
<DropdownMenuTrigger asChild>
|
|
161
|
+
<Button variant="outline">Basic Menu</Button>
|
|
162
|
+
</DropdownMenuTrigger>
|
|
163
|
+
<DropdownMenuContent className="w-48">
|
|
164
|
+
<DropdownMenuLabel>Actions</DropdownMenuLabel>
|
|
165
|
+
<DropdownMenuSeparator />
|
|
166
|
+
<DropdownMenuItem>
|
|
167
|
+
<Edit className="mr-2 h-4 w-4" />
|
|
168
|
+
Edit
|
|
169
|
+
</DropdownMenuItem>
|
|
170
|
+
<DropdownMenuItem>
|
|
171
|
+
<Copy className="mr-2 h-4 w-4" />
|
|
172
|
+
Copy
|
|
173
|
+
</DropdownMenuItem>
|
|
174
|
+
<DropdownMenuItem disabled>
|
|
175
|
+
Disabled Item
|
|
176
|
+
</DropdownMenuItem>
|
|
177
|
+
<DropdownMenuSeparator />
|
|
178
|
+
<DropdownMenuItem variant="destructive">
|
|
179
|
+
<Trash2 className="mr-2 h-4 w-4" />
|
|
180
|
+
Delete
|
|
181
|
+
</DropdownMenuItem>
|
|
182
|
+
</DropdownMenuContent>
|
|
183
|
+
</DropdownMenu>
|
|
184
|
+
</div>
|
|
185
|
+
|
|
186
|
+
{/* Menu with Sub-items */}
|
|
187
|
+
<div className="space-y-2">
|
|
188
|
+
<h3 className="text-sm font-medium">With Submenus</h3>
|
|
189
|
+
<DropdownMenu>
|
|
190
|
+
<DropdownMenuTrigger asChild>
|
|
191
|
+
<Button variant="outline">Submenu Example</Button>
|
|
192
|
+
</DropdownMenuTrigger>
|
|
193
|
+
<DropdownMenuContent className="w-48">
|
|
194
|
+
<DropdownMenuItem>Simple Item</DropdownMenuItem>
|
|
195
|
+
<DropdownMenuSub>
|
|
196
|
+
<DropdownMenuSubTrigger>
|
|
197
|
+
<UserPlus className="mr-2 h-4 w-4" />
|
|
198
|
+
<span>Share</span>
|
|
199
|
+
</DropdownMenuSubTrigger>
|
|
200
|
+
<DropdownMenuPortal>
|
|
201
|
+
<DropdownMenuSubContent>
|
|
202
|
+
<DropdownMenuItem>
|
|
203
|
+
<Mail className="mr-2 h-4 w-4" />
|
|
204
|
+
<span>Email</span>
|
|
205
|
+
</DropdownMenuItem>
|
|
206
|
+
<DropdownMenuItem>
|
|
207
|
+
<MessageSquare className="mr-2 h-4 w-4" />
|
|
208
|
+
<span>Message</span>
|
|
209
|
+
</DropdownMenuItem>
|
|
210
|
+
<DropdownMenuItem>
|
|
211
|
+
<PlusCircle className="mr-2 h-4 w-4" />
|
|
212
|
+
<span>More...</span>
|
|
213
|
+
</DropdownMenuItem>
|
|
214
|
+
</DropdownMenuSubContent>
|
|
215
|
+
</DropdownMenuPortal>
|
|
216
|
+
</DropdownMenuSub>
|
|
217
|
+
</DropdownMenuContent>
|
|
218
|
+
</DropdownMenu>
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
{/* Menu with Checkboxes */}
|
|
222
|
+
<div className="space-y-2">
|
|
223
|
+
<h3 className="text-sm font-medium">Checkbox Items</h3>
|
|
224
|
+
<DropdownMenu>
|
|
225
|
+
<DropdownMenuTrigger asChild>
|
|
226
|
+
<Button variant="outline">View Options</Button>
|
|
227
|
+
</DropdownMenuTrigger>
|
|
228
|
+
<DropdownMenuContent className="w-48">
|
|
229
|
+
<DropdownMenuLabel>Display</DropdownMenuLabel>
|
|
230
|
+
<DropdownMenuSeparator />
|
|
231
|
+
<DropdownMenuCheckboxItem checked={true}>
|
|
232
|
+
Status Bar
|
|
233
|
+
</DropdownMenuCheckboxItem>
|
|
234
|
+
<DropdownMenuCheckboxItem checked={false}>
|
|
235
|
+
Activity Bar
|
|
236
|
+
</DropdownMenuCheckboxItem>
|
|
237
|
+
<DropdownMenuCheckboxItem checked={true} disabled>
|
|
238
|
+
Panel (disabled)
|
|
239
|
+
</DropdownMenuCheckboxItem>
|
|
240
|
+
</DropdownMenuContent>
|
|
241
|
+
</DropdownMenu>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
{/* Menu with Radio Group */}
|
|
245
|
+
<div className="space-y-2">
|
|
246
|
+
<h3 className="text-sm font-medium">Radio Group</h3>
|
|
247
|
+
<DropdownMenu>
|
|
248
|
+
<DropdownMenuTrigger asChild>
|
|
249
|
+
<Button variant="outline">Position</Button>
|
|
250
|
+
</DropdownMenuTrigger>
|
|
251
|
+
<DropdownMenuContent className="w-48">
|
|
252
|
+
<DropdownMenuLabel>Panel Position</DropdownMenuLabel>
|
|
253
|
+
<DropdownMenuSeparator />
|
|
254
|
+
<DropdownMenuRadioGroup value="bottom">
|
|
255
|
+
<DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
|
|
256
|
+
<DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
|
|
257
|
+
<DropdownMenuRadioItem value="right">Right</DropdownMenuRadioItem>
|
|
258
|
+
</DropdownMenuRadioGroup>
|
|
259
|
+
</DropdownMenuContent>
|
|
260
|
+
</DropdownMenu>
|
|
261
|
+
</div>
|
|
262
|
+
</div>
|
|
263
|
+
),
|
|
264
|
+
parameters: {
|
|
265
|
+
docs: {
|
|
266
|
+
description: {
|
|
267
|
+
story:
|
|
268
|
+
"Comprehensive showcase of all dropdown menu variants: basic menus, submenus, checkbox items, radio groups, disabled states, and destructive actions.",
|
|
269
|
+
},
|
|
270
|
+
},
|
|
271
|
+
},
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* Real-world usage example in a user profile context
|
|
276
|
+
*/
|
|
277
|
+
export const InContext: Story = {
|
|
278
|
+
render: () => (
|
|
279
|
+
<div className="max-w-md mx-auto p-6 bg-card rounded-lg border">
|
|
280
|
+
{/* User Profile Header */}
|
|
281
|
+
<div className="flex items-center justify-between mb-4">
|
|
282
|
+
<div className="flex items-center space-x-3">
|
|
283
|
+
<div className="w-10 h-10 bg-gradient-to-br from-blue-500 to-purple-600 rounded-full flex items-center justify-center text-white font-semibold">
|
|
284
|
+
JD
|
|
285
|
+
</div>
|
|
286
|
+
<div>
|
|
287
|
+
<h3 className="font-semibold">John Doe</h3>
|
|
288
|
+
<p className="text-sm text-muted-foreground">john@example.com</p>
|
|
289
|
+
</div>
|
|
290
|
+
</div>
|
|
291
|
+
|
|
292
|
+
{/* Profile Actions Menu */}
|
|
293
|
+
<DropdownMenu>
|
|
294
|
+
<DropdownMenuTrigger asChild>
|
|
295
|
+
<Button variant="ghost" size="icon" className="h-8 w-8">
|
|
296
|
+
<MoreHorizontal className="h-4 w-4" />
|
|
297
|
+
<span className="sr-only">Open profile menu</span>
|
|
298
|
+
</Button>
|
|
299
|
+
</DropdownMenuTrigger>
|
|
300
|
+
<DropdownMenuContent align="end" className="w-56">
|
|
301
|
+
<DropdownMenuLabel>Profile Actions</DropdownMenuLabel>
|
|
302
|
+
<DropdownMenuSeparator />
|
|
303
|
+
<DropdownMenuGroup>
|
|
304
|
+
<DropdownMenuItem>
|
|
305
|
+
<User className="mr-2 h-4 w-4" />
|
|
306
|
+
<span>View Profile</span>
|
|
307
|
+
<DropdownMenuShortcut>⌘P</DropdownMenuShortcut>
|
|
308
|
+
</DropdownMenuItem>
|
|
309
|
+
<DropdownMenuItem>
|
|
310
|
+
<Settings className="mr-2 h-4 w-4" />
|
|
311
|
+
<span>Account Settings</span>
|
|
312
|
+
</DropdownMenuItem>
|
|
313
|
+
<DropdownMenuItem>
|
|
314
|
+
<CreditCard className="mr-2 h-4 w-4" />
|
|
315
|
+
<span>Billing</span>
|
|
316
|
+
</DropdownMenuItem>
|
|
317
|
+
</DropdownMenuGroup>
|
|
318
|
+
<DropdownMenuSeparator />
|
|
319
|
+
<DropdownMenuGroup>
|
|
320
|
+
<DropdownMenuSub>
|
|
321
|
+
<DropdownMenuSubTrigger>
|
|
322
|
+
<Users className="mr-2 h-4 w-4" />
|
|
323
|
+
<span>Team</span>
|
|
324
|
+
</DropdownMenuSubTrigger>
|
|
325
|
+
<DropdownMenuPortal>
|
|
326
|
+
<DropdownMenuSubContent>
|
|
327
|
+
<DropdownMenuItem>
|
|
328
|
+
<UserPlus className="mr-2 h-4 w-4" />
|
|
329
|
+
<span>Invite Members</span>
|
|
330
|
+
</DropdownMenuItem>
|
|
331
|
+
<DropdownMenuItem>
|
|
332
|
+
<Settings className="mr-2 h-4 w-4" />
|
|
333
|
+
<span>Team Settings</span>
|
|
334
|
+
</DropdownMenuItem>
|
|
335
|
+
</DropdownMenuSubContent>
|
|
336
|
+
</DropdownMenuPortal>
|
|
337
|
+
</DropdownMenuSub>
|
|
338
|
+
</DropdownMenuGroup>
|
|
339
|
+
<DropdownMenuSeparator />
|
|
340
|
+
<DropdownMenuItem>
|
|
341
|
+
<LogOut className="mr-2 h-4 w-4" />
|
|
342
|
+
<span>Log out</span>
|
|
343
|
+
<DropdownMenuShortcut>⇧⌘Q</DropdownMenuShortcut>
|
|
344
|
+
</DropdownMenuItem>
|
|
345
|
+
</DropdownMenuContent>
|
|
346
|
+
</DropdownMenu>
|
|
347
|
+
</div>
|
|
348
|
+
|
|
349
|
+
{/* Profile Content */}
|
|
350
|
+
<div className="space-y-2 text-sm">
|
|
351
|
+
<div className="flex justify-between">
|
|
352
|
+
<span className="text-muted-foreground">Role:</span>
|
|
353
|
+
<span>Product Manager</span>
|
|
354
|
+
</div>
|
|
355
|
+
<div className="flex justify-between">
|
|
356
|
+
<span className="text-muted-foreground">Team:</span>
|
|
357
|
+
<span>Engineering</span>
|
|
358
|
+
</div>
|
|
359
|
+
<div className="flex justify-between">
|
|
360
|
+
<span className="text-muted-foreground">Last active:</span>
|
|
361
|
+
<span>2 minutes ago</span>
|
|
362
|
+
</div>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
),
|
|
366
|
+
parameters: {
|
|
367
|
+
docs: {
|
|
368
|
+
description: {
|
|
369
|
+
story:
|
|
370
|
+
"Real-world example showing a dropdown menu in a user profile context. Demonstrates how the component integrates naturally into application interfaces with proper spacing, alignment, and visual hierarchy.",
|
|
371
|
+
},
|
|
372
|
+
},
|
|
373
|
+
},
|
|
374
|
+
};
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import {
|
|
3
|
+
Search,
|
|
4
|
+
FileX,
|
|
5
|
+
Inbox,
|
|
6
|
+
Users,
|
|
7
|
+
Plus,
|
|
8
|
+
FolderOpen,
|
|
9
|
+
ShoppingCart,
|
|
10
|
+
} from "lucide-react";
|
|
11
|
+
import { EmptyState } from "../empty-state";
|
|
12
|
+
import { Card } from "../card";
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: "Data Display/EmptyState",
|
|
16
|
+
component: EmptyState,
|
|
17
|
+
parameters: {
|
|
18
|
+
layout: "centered",
|
|
19
|
+
docs: {
|
|
20
|
+
description: {
|
|
21
|
+
component:
|
|
22
|
+
"A versatile component for displaying empty or no-data states with optional icons, descriptions, and action buttons. Commonly used in lists, tables, search results, and dashboards to guide users when content is unavailable.",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
tags: ["autodocs"],
|
|
27
|
+
argTypes: {
|
|
28
|
+
title: {
|
|
29
|
+
control: { type: "text" },
|
|
30
|
+
description: "Main title text displayed prominently (required)",
|
|
31
|
+
},
|
|
32
|
+
description: {
|
|
33
|
+
control: { type: "text" },
|
|
34
|
+
description: "Optional descriptive text providing additional context",
|
|
35
|
+
},
|
|
36
|
+
icon: {
|
|
37
|
+
control: false,
|
|
38
|
+
description: "Optional icon or React element displayed above the title",
|
|
39
|
+
},
|
|
40
|
+
action: {
|
|
41
|
+
control: false,
|
|
42
|
+
description:
|
|
43
|
+
"Optional action button configuration with label and onClick handler",
|
|
44
|
+
},
|
|
45
|
+
className: {
|
|
46
|
+
control: { type: "text" },
|
|
47
|
+
description: "Additional CSS classes for custom styling",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
} satisfies Meta<typeof EmptyState>;
|
|
51
|
+
|
|
52
|
+
export default meta;
|
|
53
|
+
type Story = StoryObj<typeof meta>;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Interactive Playground - Test all props and variations
|
|
57
|
+
*
|
|
58
|
+
* Use the controls below to test different combinations of props
|
|
59
|
+
* and see how the EmptyState component responds to various configurations.
|
|
60
|
+
*/
|
|
61
|
+
export const Interactive: Story = {
|
|
62
|
+
args: {
|
|
63
|
+
title: "No items found",
|
|
64
|
+
description:
|
|
65
|
+
"Try adjusting your search or filter to find what you're looking for.",
|
|
66
|
+
icon: <Search className="h-12 w-12" />,
|
|
67
|
+
},
|
|
68
|
+
parameters: {
|
|
69
|
+
docs: {
|
|
70
|
+
description: {
|
|
71
|
+
story:
|
|
72
|
+
"Interactive playground for testing all EmptyState props. Use the controls to modify title, description, and other properties.",
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Variants Showcase - Display all common empty state patterns
|
|
80
|
+
*
|
|
81
|
+
* Shows the most common empty state variations that design teams
|
|
82
|
+
* typically need: basic text-only, with icon, and with action button.
|
|
83
|
+
*/
|
|
84
|
+
export const Variants: Story = {
|
|
85
|
+
args: {
|
|
86
|
+
title: "No data available",
|
|
87
|
+
description: "Check back later or contact support for assistance",
|
|
88
|
+
},
|
|
89
|
+
render: () => (
|
|
90
|
+
<div className="space-y-8">
|
|
91
|
+
<div>
|
|
92
|
+
<h3 className="mb-4 text-lg font-semibold">Text Only</h3>
|
|
93
|
+
<Card className="p-6">
|
|
94
|
+
<EmptyState
|
|
95
|
+
title="No data available"
|
|
96
|
+
description="Check back later or contact support for assistance"
|
|
97
|
+
/>
|
|
98
|
+
</Card>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
<div>
|
|
102
|
+
<h3 className="mb-4 text-lg font-semibold">With Icon</h3>
|
|
103
|
+
<Card className="p-6">
|
|
104
|
+
<EmptyState
|
|
105
|
+
icon={<Inbox className="h-12 w-12" />}
|
|
106
|
+
title="Your inbox is empty"
|
|
107
|
+
description="When you receive new messages, they'll appear here"
|
|
108
|
+
/>
|
|
109
|
+
</Card>
|
|
110
|
+
</div>
|
|
111
|
+
|
|
112
|
+
<div>
|
|
113
|
+
<h3 className="mb-4 text-lg font-semibold">With Action Button</h3>
|
|
114
|
+
<Card className="p-6">
|
|
115
|
+
<EmptyState
|
|
116
|
+
icon={<FolderOpen className="h-12 w-12" />}
|
|
117
|
+
title="No projects yet"
|
|
118
|
+
description="Create your first project to get started"
|
|
119
|
+
action={{
|
|
120
|
+
label: "Create Project",
|
|
121
|
+
onClick: () => console.log("Create project clicked"),
|
|
122
|
+
}}
|
|
123
|
+
/>
|
|
124
|
+
</Card>
|
|
125
|
+
</div>
|
|
126
|
+
|
|
127
|
+
<div>
|
|
128
|
+
<h3 className="mb-4 text-lg font-semibold">Custom Styled</h3>
|
|
129
|
+
<Card className="bg-muted/30 p-8">
|
|
130
|
+
<EmptyState
|
|
131
|
+
className="py-8"
|
|
132
|
+
icon={
|
|
133
|
+
<div className="rounded-full bg-primary/10 p-4">
|
|
134
|
+
<Plus className="h-8 w-8 text-primary" />
|
|
135
|
+
</div>
|
|
136
|
+
}
|
|
137
|
+
title="Custom styled state"
|
|
138
|
+
description="Example with custom background and icon styling"
|
|
139
|
+
action={{
|
|
140
|
+
label: "Get Started",
|
|
141
|
+
onClick: () => console.log("Get started clicked"),
|
|
142
|
+
}}
|
|
143
|
+
/>
|
|
144
|
+
</Card>
|
|
145
|
+
</div>
|
|
146
|
+
</div>
|
|
147
|
+
),
|
|
148
|
+
parameters: {
|
|
149
|
+
layout: "padded",
|
|
150
|
+
docs: {
|
|
151
|
+
description: {
|
|
152
|
+
story:
|
|
153
|
+
"Comprehensive showcase of all EmptyState variants for design teams to understand available options and styling patterns.",
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
},
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Real-world Context - EmptyState in realistic application scenarios
|
|
161
|
+
*
|
|
162
|
+
* Shows how EmptyState looks and behaves in actual application contexts
|
|
163
|
+
* that business teams and designers would recognize from real products.
|
|
164
|
+
*/
|
|
165
|
+
export const InContext: Story = {
|
|
166
|
+
args: {
|
|
167
|
+
title: "No items found",
|
|
168
|
+
description:
|
|
169
|
+
"Try adjusting your search or filter to find what you're looking for.",
|
|
170
|
+
icon: <Search className="h-12 w-12" />,
|
|
171
|
+
},
|
|
172
|
+
render: () => (
|
|
173
|
+
<div className="space-y-8">
|
|
174
|
+
<div>
|
|
175
|
+
<h3 className="mb-4 text-lg font-semibold">E-commerce Cart</h3>
|
|
176
|
+
<Card className="w-full max-w-md p-6">
|
|
177
|
+
<EmptyState
|
|
178
|
+
icon={<ShoppingCart className="h-12 w-12" />}
|
|
179
|
+
title="Your cart is empty"
|
|
180
|
+
description="Add items to your cart to see them here"
|
|
181
|
+
action={{
|
|
182
|
+
label: "Continue Shopping",
|
|
183
|
+
onClick: () => console.log("Continue shopping clicked"),
|
|
184
|
+
}}
|
|
185
|
+
/>
|
|
186
|
+
</Card>
|
|
187
|
+
</div>
|
|
188
|
+
|
|
189
|
+
<div>
|
|
190
|
+
<h3 className="mb-4 text-lg font-semibold">Search Results</h3>
|
|
191
|
+
<Card className="w-full max-w-2xl p-8">
|
|
192
|
+
<EmptyState
|
|
193
|
+
icon={<Search className="h-12 w-12" />}
|
|
194
|
+
title="No results found for 'advanced widgets'"
|
|
195
|
+
description="Try different keywords or browse our categories"
|
|
196
|
+
action={{
|
|
197
|
+
label: "Clear Search",
|
|
198
|
+
onClick: () => console.log("Clear search clicked"),
|
|
199
|
+
}}
|
|
200
|
+
/>
|
|
201
|
+
</Card>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div>
|
|
205
|
+
<h3 className="mb-4 text-lg font-semibold">Team Management</h3>
|
|
206
|
+
<Card className="w-full max-w-lg p-6">
|
|
207
|
+
<EmptyState
|
|
208
|
+
icon={<Users className="h-12 w-12" />}
|
|
209
|
+
title="No team members yet"
|
|
210
|
+
description="Invite colleagues to collaborate on this workspace"
|
|
211
|
+
action={{
|
|
212
|
+
label: "Invite Team Members",
|
|
213
|
+
onClick: () => console.log("Invite members clicked"),
|
|
214
|
+
}}
|
|
215
|
+
/>
|
|
216
|
+
</Card>
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<div>
|
|
220
|
+
<h3 className="mb-4 text-lg font-semibold">File Upload Area</h3>
|
|
221
|
+
<Card className="w-full max-w-lg border-2 border-dashed p-8">
|
|
222
|
+
<EmptyState
|
|
223
|
+
icon={<FileX className="h-12 w-12" />}
|
|
224
|
+
title="No files uploaded"
|
|
225
|
+
description="Drag and drop files here or click to browse"
|
|
226
|
+
action={{
|
|
227
|
+
label: "Choose Files",
|
|
228
|
+
onClick: () => console.log("Choose files clicked"),
|
|
229
|
+
}}
|
|
230
|
+
/>
|
|
231
|
+
</Card>
|
|
232
|
+
</div>
|
|
233
|
+
</div>
|
|
234
|
+
),
|
|
235
|
+
parameters: {
|
|
236
|
+
layout: "padded",
|
|
237
|
+
docs: {
|
|
238
|
+
description: {
|
|
239
|
+
story:
|
|
240
|
+
"Real-world examples showing EmptyState in common application scenarios like e-commerce, search, team management, and file uploads.",
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
},
|
|
244
|
+
};
|