@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,317 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { User } from "lucide-react";
|
|
3
|
+
import { Avatar, AvatarFallback, AvatarImage } from "../avatar";
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: "Data Display/Avatar",
|
|
7
|
+
component: Avatar,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "centered",
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component:
|
|
13
|
+
"A flexible avatar component for displaying user profile pictures with fallback support. Built on Radix UI primitives with automatic loading states and accessibility features.",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tags: ["autodocs"],
|
|
18
|
+
argTypes: {
|
|
19
|
+
className: {
|
|
20
|
+
control: { type: "text" },
|
|
21
|
+
description: "Additional CSS classes for styling and sizing",
|
|
22
|
+
table: {
|
|
23
|
+
type: { summary: "string" },
|
|
24
|
+
defaultValue: { summary: "" },
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
} satisfies Meta<typeof Avatar>;
|
|
29
|
+
|
|
30
|
+
export default meta;
|
|
31
|
+
type Story = StoryObj<typeof meta>;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Interactive playground for testing all Avatar props and variants.
|
|
35
|
+
* Use the controls panel to experiment with different sizes, styles, and content.
|
|
36
|
+
*/
|
|
37
|
+
export const Interactive: Story = {
|
|
38
|
+
args: {
|
|
39
|
+
className: "size-10",
|
|
40
|
+
},
|
|
41
|
+
argTypes: {
|
|
42
|
+
className: {
|
|
43
|
+
control: { type: "select" },
|
|
44
|
+
options: [
|
|
45
|
+
"size-6",
|
|
46
|
+
"size-8",
|
|
47
|
+
"size-10",
|
|
48
|
+
"size-12",
|
|
49
|
+
"size-16",
|
|
50
|
+
"size-10 rounded-lg",
|
|
51
|
+
"size-10 rounded-md",
|
|
52
|
+
"size-10 rounded-none",
|
|
53
|
+
],
|
|
54
|
+
description: "Size and shape variants",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
render: (args) => (
|
|
58
|
+
<Avatar {...args}>
|
|
59
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="shadcn" />
|
|
60
|
+
<AvatarFallback>CN</AvatarFallback>
|
|
61
|
+
</Avatar>
|
|
62
|
+
),
|
|
63
|
+
parameters: {
|
|
64
|
+
docs: {
|
|
65
|
+
description: {
|
|
66
|
+
story: "Experiment with different Avatar sizes and styles using the controls panel.",
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Comprehensive showcase of all Avatar variants and combinations.
|
|
74
|
+
* Displays different sizes, fallback types, shapes, and grouping patterns.
|
|
75
|
+
*/
|
|
76
|
+
export const Variants: Story = {
|
|
77
|
+
render: () => (
|
|
78
|
+
<div className="space-y-8">
|
|
79
|
+
{/* Size Variants */}
|
|
80
|
+
<div className="space-y-4">
|
|
81
|
+
<h3 className="font-semibold">Size Variants</h3>
|
|
82
|
+
<div className="flex items-end gap-4">
|
|
83
|
+
<div className="text-center space-y-2">
|
|
84
|
+
<Avatar className="size-6">
|
|
85
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="XS" />
|
|
86
|
+
<AvatarFallback className="text-xs">XS</AvatarFallback>
|
|
87
|
+
</Avatar>
|
|
88
|
+
<div className="text-xs text-muted-foreground">size-6</div>
|
|
89
|
+
</div>
|
|
90
|
+
<div className="text-center space-y-2">
|
|
91
|
+
<Avatar className="size-8">
|
|
92
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="SM" />
|
|
93
|
+
<AvatarFallback className="text-xs">SM</AvatarFallback>
|
|
94
|
+
</Avatar>
|
|
95
|
+
<div className="text-xs text-muted-foreground">size-8</div>
|
|
96
|
+
</div>
|
|
97
|
+
<div className="text-center space-y-2">
|
|
98
|
+
<Avatar className="size-10">
|
|
99
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="MD" />
|
|
100
|
+
<AvatarFallback>MD</AvatarFallback>
|
|
101
|
+
</Avatar>
|
|
102
|
+
<div className="text-xs text-muted-foreground">size-10</div>
|
|
103
|
+
</div>
|
|
104
|
+
<div className="text-center space-y-2">
|
|
105
|
+
<Avatar className="size-12">
|
|
106
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="LG" />
|
|
107
|
+
<AvatarFallback>LG</AvatarFallback>
|
|
108
|
+
</Avatar>
|
|
109
|
+
<div className="text-xs text-muted-foreground">size-12</div>
|
|
110
|
+
</div>
|
|
111
|
+
<div className="text-center space-y-2">
|
|
112
|
+
<Avatar className="size-16">
|
|
113
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="XL" />
|
|
114
|
+
<AvatarFallback className="text-lg">XL</AvatarFallback>
|
|
115
|
+
</Avatar>
|
|
116
|
+
<div className="text-xs text-muted-foreground">size-16</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
|
|
121
|
+
{/* Fallback Types */}
|
|
122
|
+
<div className="space-y-4">
|
|
123
|
+
<h3 className="font-semibold">Fallback Types</h3>
|
|
124
|
+
<div className="flex items-center gap-4">
|
|
125
|
+
<div className="text-center space-y-2">
|
|
126
|
+
<Avatar>
|
|
127
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="With Image" />
|
|
128
|
+
<AvatarFallback>WI</AvatarFallback>
|
|
129
|
+
</Avatar>
|
|
130
|
+
<div className="text-xs text-muted-foreground">With Image</div>
|
|
131
|
+
</div>
|
|
132
|
+
<div className="text-center space-y-2">
|
|
133
|
+
<Avatar>
|
|
134
|
+
<AvatarImage src="" alt="Initials" />
|
|
135
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
136
|
+
</Avatar>
|
|
137
|
+
<div className="text-xs text-muted-foreground">Initials</div>
|
|
138
|
+
</div>
|
|
139
|
+
<div className="text-center space-y-2">
|
|
140
|
+
<Avatar>
|
|
141
|
+
<AvatarImage src="" alt="Icon" />
|
|
142
|
+
<AvatarFallback>
|
|
143
|
+
<User className="size-4" />
|
|
144
|
+
</AvatarFallback>
|
|
145
|
+
</Avatar>
|
|
146
|
+
<div className="text-xs text-muted-foreground">Icon</div>
|
|
147
|
+
</div>
|
|
148
|
+
<div className="text-center space-y-2">
|
|
149
|
+
<Avatar>
|
|
150
|
+
<AvatarImage src="" alt="Colored" />
|
|
151
|
+
<AvatarFallback className="bg-blue-500 text-white">CB</AvatarFallback>
|
|
152
|
+
</Avatar>
|
|
153
|
+
<div className="text-xs text-muted-foreground">Colored</div>
|
|
154
|
+
</div>
|
|
155
|
+
</div>
|
|
156
|
+
</div>
|
|
157
|
+
|
|
158
|
+
{/* Shape Variants */}
|
|
159
|
+
<div className="space-y-4">
|
|
160
|
+
<h3 className="font-semibold">Shape Variants</h3>
|
|
161
|
+
<div className="flex items-center gap-4">
|
|
162
|
+
<div className="text-center space-y-2">
|
|
163
|
+
<Avatar>
|
|
164
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="Round" />
|
|
165
|
+
<AvatarFallback>RO</AvatarFallback>
|
|
166
|
+
</Avatar>
|
|
167
|
+
<div className="text-xs text-muted-foreground">Default Round</div>
|
|
168
|
+
</div>
|
|
169
|
+
<div className="text-center space-y-2">
|
|
170
|
+
<Avatar className="rounded-lg">
|
|
171
|
+
<AvatarImage src="https://github.com/vercel.png" alt="Rounded" />
|
|
172
|
+
<AvatarFallback>RL</AvatarFallback>
|
|
173
|
+
</Avatar>
|
|
174
|
+
<div className="text-xs text-muted-foreground">Rounded Large</div>
|
|
175
|
+
</div>
|
|
176
|
+
<div className="text-center space-y-2">
|
|
177
|
+
<Avatar className="rounded-md">
|
|
178
|
+
<AvatarImage src="" alt="Medium" />
|
|
179
|
+
<AvatarFallback>RM</AvatarFallback>
|
|
180
|
+
</Avatar>
|
|
181
|
+
<div className="text-xs text-muted-foreground">Rounded Medium</div>
|
|
182
|
+
</div>
|
|
183
|
+
<div className="text-center space-y-2">
|
|
184
|
+
<Avatar className="rounded-none">
|
|
185
|
+
<AvatarImage src="" alt="Square" />
|
|
186
|
+
<AvatarFallback>SQ</AvatarFallback>
|
|
187
|
+
</Avatar>
|
|
188
|
+
<div className="text-xs text-muted-foreground">Square</div>
|
|
189
|
+
</div>
|
|
190
|
+
</div>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
{/* Avatar Group */}
|
|
194
|
+
<div className="space-y-4">
|
|
195
|
+
<h3 className="font-semibold">Avatar Group</h3>
|
|
196
|
+
<div className="flex -space-x-2">
|
|
197
|
+
<Avatar className="border-2 border-background">
|
|
198
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="User 1" />
|
|
199
|
+
<AvatarFallback>U1</AvatarFallback>
|
|
200
|
+
</Avatar>
|
|
201
|
+
<Avatar className="border-2 border-background">
|
|
202
|
+
<AvatarImage src="https://github.com/vercel.png" alt="User 2" />
|
|
203
|
+
<AvatarFallback>U2</AvatarFallback>
|
|
204
|
+
</Avatar>
|
|
205
|
+
<Avatar className="border-2 border-background">
|
|
206
|
+
<AvatarImage src="" alt="User 3" />
|
|
207
|
+
<AvatarFallback>U3</AvatarFallback>
|
|
208
|
+
</Avatar>
|
|
209
|
+
<Avatar className="border-2 border-background">
|
|
210
|
+
<AvatarFallback>+5</AvatarFallback>
|
|
211
|
+
</Avatar>
|
|
212
|
+
</div>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
),
|
|
216
|
+
parameters: {
|
|
217
|
+
docs: {
|
|
218
|
+
description: {
|
|
219
|
+
story: "Complete showcase of all Avatar variants including sizes, fallback types, shapes, and grouping patterns.",
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
/**
|
|
226
|
+
* Real-world usage example showing Avatar in a user profile context.
|
|
227
|
+
* Demonstrates how the component integrates with other UI elements in production scenarios.
|
|
228
|
+
*/
|
|
229
|
+
export const InContext: Story = {
|
|
230
|
+
render: () => (
|
|
231
|
+
<div className="space-y-6 max-w-md">
|
|
232
|
+
{/* User Profile Header */}
|
|
233
|
+
<div className="flex items-center gap-4 p-4 border rounded-lg">
|
|
234
|
+
<Avatar className="size-16">
|
|
235
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="John Doe" />
|
|
236
|
+
<AvatarFallback>JD</AvatarFallback>
|
|
237
|
+
</Avatar>
|
|
238
|
+
<div className="flex-1">
|
|
239
|
+
<h3 className="font-semibold text-lg">John Doe</h3>
|
|
240
|
+
<p className="text-sm text-muted-foreground">Product Designer</p>
|
|
241
|
+
<p className="text-sm text-muted-foreground">john.doe@company.com</p>
|
|
242
|
+
</div>
|
|
243
|
+
<div className="relative">
|
|
244
|
+
<Avatar className="size-3 absolute -bottom-1 -right-1">
|
|
245
|
+
<div className="size-3 bg-green-500 rounded-full border-2 border-background" />
|
|
246
|
+
</Avatar>
|
|
247
|
+
</div>
|
|
248
|
+
</div>
|
|
249
|
+
|
|
250
|
+
{/* Comment Section */}
|
|
251
|
+
<div className="space-y-4">
|
|
252
|
+
<h4 className="font-medium">Recent Comments</h4>
|
|
253
|
+
<div className="space-y-3">
|
|
254
|
+
<div className="flex gap-3">
|
|
255
|
+
<Avatar className="size-8">
|
|
256
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="Alice" />
|
|
257
|
+
<AvatarFallback>AL</AvatarFallback>
|
|
258
|
+
</Avatar>
|
|
259
|
+
<div className="flex-1">
|
|
260
|
+
<div className="flex items-center gap-2">
|
|
261
|
+
<span className="font-medium text-sm">Alice Cooper</span>
|
|
262
|
+
<span className="text-xs text-muted-foreground">2 hours ago</span>
|
|
263
|
+
</div>
|
|
264
|
+
<p className="text-sm text-muted-foreground">Great work on the new design! The user flow is much clearer now.</p>
|
|
265
|
+
</div>
|
|
266
|
+
</div>
|
|
267
|
+
|
|
268
|
+
<div className="flex gap-3">
|
|
269
|
+
<Avatar className="size-8">
|
|
270
|
+
<AvatarImage src="" alt="Bob" />
|
|
271
|
+
<AvatarFallback>BC</AvatarFallback>
|
|
272
|
+
</Avatar>
|
|
273
|
+
<div className="flex-1">
|
|
274
|
+
<div className="flex items-center gap-2">
|
|
275
|
+
<span className="font-medium text-sm">Bob Chen</span>
|
|
276
|
+
<span className="text-xs text-muted-foreground">4 hours ago</span>
|
|
277
|
+
</div>
|
|
278
|
+
<p className="text-sm text-muted-foreground">Could we adjust the spacing on mobile? It feels a bit cramped.</p>
|
|
279
|
+
</div>
|
|
280
|
+
</div>
|
|
281
|
+
</div>
|
|
282
|
+
</div>
|
|
283
|
+
|
|
284
|
+
{/* Team Members */}
|
|
285
|
+
<div className="space-y-4">
|
|
286
|
+
<h4 className="font-medium">Team Members</h4>
|
|
287
|
+
<div className="flex items-center justify-between">
|
|
288
|
+
<div className="flex -space-x-2">
|
|
289
|
+
<Avatar className="size-8 border-2 border-background">
|
|
290
|
+
<AvatarImage src="https://github.com/shadcn.png" alt="Team member" />
|
|
291
|
+
<AvatarFallback>TM</AvatarFallback>
|
|
292
|
+
</Avatar>
|
|
293
|
+
<Avatar className="size-8 border-2 border-background">
|
|
294
|
+
<AvatarImage src="https://github.com/vercel.png" alt="Team member" />
|
|
295
|
+
<AvatarFallback>TM</AvatarFallback>
|
|
296
|
+
</Avatar>
|
|
297
|
+
<Avatar className="size-8 border-2 border-background">
|
|
298
|
+
<AvatarImage src="" alt="Team member" />
|
|
299
|
+
<AvatarFallback>TM</AvatarFallback>
|
|
300
|
+
</Avatar>
|
|
301
|
+
<Avatar className="size-8 border-2 border-background">
|
|
302
|
+
<AvatarFallback className="text-xs">+12</AvatarFallback>
|
|
303
|
+
</Avatar>
|
|
304
|
+
</div>
|
|
305
|
+
<button className="text-sm text-blue-600 hover:text-blue-500">View all</button>
|
|
306
|
+
</div>
|
|
307
|
+
</div>
|
|
308
|
+
</div>
|
|
309
|
+
),
|
|
310
|
+
parameters: {
|
|
311
|
+
docs: {
|
|
312
|
+
description: {
|
|
313
|
+
story: "Real-world example showing Avatar in user profiles, comment sections, and team member displays with proper spacing and interactions.",
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
};
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { AlertTriangle, Check, X, Star, Bell } from "lucide-react";
|
|
3
|
+
import { Badge } from "../badge";
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: "Data Display/Badge",
|
|
7
|
+
component: Badge,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "centered",
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component:
|
|
13
|
+
"A versatile badge component for displaying status indicators, labels, counts, and notifications. Built with accessibility in mind and supports multiple visual variants for different semantic meanings.",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tags: ["autodocs"],
|
|
18
|
+
argTypes: {
|
|
19
|
+
variant: {
|
|
20
|
+
control: { type: "select" },
|
|
21
|
+
options: ["default", "secondary", "destructive", "outline"],
|
|
22
|
+
description: "The visual style variant of the badge",
|
|
23
|
+
},
|
|
24
|
+
asChild: {
|
|
25
|
+
control: { type: "boolean" },
|
|
26
|
+
description: "When true, renders as its child element instead of a span",
|
|
27
|
+
},
|
|
28
|
+
children: {
|
|
29
|
+
control: { type: "text" },
|
|
30
|
+
description: "The content of the badge",
|
|
31
|
+
},
|
|
32
|
+
className: {
|
|
33
|
+
control: { type: "text" },
|
|
34
|
+
description: "Additional CSS classes to apply",
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
args: {
|
|
38
|
+
children: "Badge",
|
|
39
|
+
asChild: false,
|
|
40
|
+
},
|
|
41
|
+
} satisfies Meta<typeof Badge>;
|
|
42
|
+
|
|
43
|
+
export default meta;
|
|
44
|
+
type Story = StoryObj<typeof meta>;
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Interactive playground for testing all badge props and variants.
|
|
48
|
+
* Use the controls panel to experiment with different configurations.
|
|
49
|
+
*/
|
|
50
|
+
export const Interactive: Story = {
|
|
51
|
+
args: {
|
|
52
|
+
variant: "default",
|
|
53
|
+
children: "Interactive Badge",
|
|
54
|
+
},
|
|
55
|
+
parameters: {
|
|
56
|
+
docs: {
|
|
57
|
+
description: {
|
|
58
|
+
story: "Use the controls panel to test different badge configurations and see how they affect the appearance and behavior.",
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Complete showcase of all available badge variants and their combinations.
|
|
66
|
+
* This demonstrates the visual hierarchy and semantic meaning of each variant.
|
|
67
|
+
*/
|
|
68
|
+
export const Variants: Story = {
|
|
69
|
+
render: () => (
|
|
70
|
+
<div className="space-y-6">
|
|
71
|
+
{/* Basic Variants */}
|
|
72
|
+
<div className="space-y-2">
|
|
73
|
+
<h3 className="text-sm font-medium text-muted-foreground">Basic Variants</h3>
|
|
74
|
+
<div className="flex flex-wrap gap-2">
|
|
75
|
+
<Badge variant="default">Default</Badge>
|
|
76
|
+
<Badge variant="secondary">Secondary</Badge>
|
|
77
|
+
<Badge variant="destructive">Destructive</Badge>
|
|
78
|
+
<Badge variant="outline">Outline</Badge>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
{/* With Icons */}
|
|
83
|
+
<div className="space-y-2">
|
|
84
|
+
<h3 className="text-sm font-medium text-muted-foreground">With Icons</h3>
|
|
85
|
+
<div className="flex flex-wrap gap-2">
|
|
86
|
+
<Badge>
|
|
87
|
+
<Check />
|
|
88
|
+
Success
|
|
89
|
+
</Badge>
|
|
90
|
+
<Badge variant="destructive">
|
|
91
|
+
<X />
|
|
92
|
+
Error
|
|
93
|
+
</Badge>
|
|
94
|
+
<Badge variant="secondary">
|
|
95
|
+
<AlertTriangle />
|
|
96
|
+
Warning
|
|
97
|
+
</Badge>
|
|
98
|
+
<Badge variant="outline">
|
|
99
|
+
<Star />
|
|
100
|
+
Featured
|
|
101
|
+
</Badge>
|
|
102
|
+
</div>
|
|
103
|
+
</div>
|
|
104
|
+
|
|
105
|
+
{/* Status Indicators */}
|
|
106
|
+
<div className="space-y-2">
|
|
107
|
+
<h3 className="text-sm font-medium text-muted-foreground">Status Indicators</h3>
|
|
108
|
+
<div className="flex flex-wrap gap-2">
|
|
109
|
+
<Badge className="bg-green-500 hover:bg-green-600">
|
|
110
|
+
<Check />
|
|
111
|
+
Active
|
|
112
|
+
</Badge>
|
|
113
|
+
<Badge className="bg-yellow-500 hover:bg-yellow-600 text-black">
|
|
114
|
+
<AlertTriangle />
|
|
115
|
+
Pending
|
|
116
|
+
</Badge>
|
|
117
|
+
<Badge variant="destructive">
|
|
118
|
+
<X />
|
|
119
|
+
Inactive
|
|
120
|
+
</Badge>
|
|
121
|
+
<Badge variant="secondary">Draft</Badge>
|
|
122
|
+
</div>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
{/* Notification Badges */}
|
|
126
|
+
<div className="space-y-2">
|
|
127
|
+
<h3 className="text-sm font-medium text-muted-foreground">Notification Counts</h3>
|
|
128
|
+
<div className="flex items-center gap-6">
|
|
129
|
+
<div className="relative">
|
|
130
|
+
<Bell className="size-6" />
|
|
131
|
+
<Badge className="absolute -top-2 -right-2 size-5 p-0 text-xs">3</Badge>
|
|
132
|
+
</div>
|
|
133
|
+
<div className="relative">
|
|
134
|
+
<Bell className="size-6" />
|
|
135
|
+
<Badge variant="destructive" className="absolute -top-2 -right-2 size-5 p-0 text-xs">
|
|
136
|
+
12
|
|
137
|
+
</Badge>
|
|
138
|
+
</div>
|
|
139
|
+
<div className="relative">
|
|
140
|
+
<Bell className="size-6" />
|
|
141
|
+
<Badge className="absolute -top-2 -right-2 size-2 p-0 bg-green-500" />
|
|
142
|
+
</div>
|
|
143
|
+
</div>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
{/* Removable Tags */}
|
|
147
|
+
<div className="space-y-2">
|
|
148
|
+
<h3 className="text-sm font-medium text-muted-foreground">Removable Tags</h3>
|
|
149
|
+
<div className="flex flex-wrap gap-2">
|
|
150
|
+
<Badge className="pr-1">
|
|
151
|
+
React
|
|
152
|
+
<button className="ml-1 hover:bg-primary-foreground/20 rounded-full p-0.5">
|
|
153
|
+
<X className="size-3" />
|
|
154
|
+
</button>
|
|
155
|
+
</Badge>
|
|
156
|
+
<Badge variant="secondary" className="pr-1">
|
|
157
|
+
TypeScript
|
|
158
|
+
<button className="ml-1 hover:bg-secondary-foreground/20 rounded-full p-0.5">
|
|
159
|
+
<X className="size-3" />
|
|
160
|
+
</button>
|
|
161
|
+
</Badge>
|
|
162
|
+
<Badge variant="outline" className="pr-1">
|
|
163
|
+
Next.js
|
|
164
|
+
<button className="ml-1 hover:bg-accent rounded-full p-0.5">
|
|
165
|
+
<X className="size-3" />
|
|
166
|
+
</button>
|
|
167
|
+
</Badge>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
</div>
|
|
171
|
+
),
|
|
172
|
+
parameters: {
|
|
173
|
+
docs: {
|
|
174
|
+
description: {
|
|
175
|
+
story: "Complete showcase of all badge variants including basic styles, icons, status indicators, notification counts, and removable tags. This demonstrates the full range of badge capabilities and their appropriate use cases.",
|
|
176
|
+
},
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Real-world example showing badges in a typical application context.
|
|
183
|
+
* This demonstrates how badges integrate with other UI elements in practical scenarios.
|
|
184
|
+
*/
|
|
185
|
+
export const InContext: Story = {
|
|
186
|
+
render: () => (
|
|
187
|
+
<div className="max-w-md mx-auto space-y-6 p-4 border rounded-lg bg-card">
|
|
188
|
+
{/* User Profile Section */}
|
|
189
|
+
<div className="flex items-center justify-between">
|
|
190
|
+
<div className="flex items-center gap-3">
|
|
191
|
+
<div className="size-10 rounded-full bg-muted flex items-center justify-center font-medium">
|
|
192
|
+
JD
|
|
193
|
+
</div>
|
|
194
|
+
<div>
|
|
195
|
+
<h3 className="font-medium">John Doe</h3>
|
|
196
|
+
<p className="text-sm text-muted-foreground">Product Manager</p>
|
|
197
|
+
</div>
|
|
198
|
+
</div>
|
|
199
|
+
<Badge variant="secondary">Pro</Badge>
|
|
200
|
+
</div>
|
|
201
|
+
|
|
202
|
+
{/* Project Status */}
|
|
203
|
+
<div className="space-y-3">
|
|
204
|
+
<h4 className="font-medium">Recent Projects</h4>
|
|
205
|
+
<div className="space-y-2">
|
|
206
|
+
<div className="flex items-center justify-between p-2 rounded border">
|
|
207
|
+
<span className="text-sm">Website Redesign</span>
|
|
208
|
+
<Badge className="bg-green-500">
|
|
209
|
+
<Check />
|
|
210
|
+
Complete
|
|
211
|
+
</Badge>
|
|
212
|
+
</div>
|
|
213
|
+
<div className="flex items-center justify-between p-2 rounded border">
|
|
214
|
+
<span className="text-sm">Mobile App</span>
|
|
215
|
+
<Badge className="bg-yellow-500 text-black">
|
|
216
|
+
<AlertTriangle />
|
|
217
|
+
In Progress
|
|
218
|
+
</Badge>
|
|
219
|
+
</div>
|
|
220
|
+
<div className="flex items-center justify-between p-2 rounded border">
|
|
221
|
+
<span className="text-sm">API Integration</span>
|
|
222
|
+
<Badge variant="outline">Planning</Badge>
|
|
223
|
+
</div>
|
|
224
|
+
</div>
|
|
225
|
+
</div>
|
|
226
|
+
|
|
227
|
+
{/* Skills/Tags */}
|
|
228
|
+
<div className="space-y-3">
|
|
229
|
+
<h4 className="font-medium">Skills</h4>
|
|
230
|
+
<div className="flex flex-wrap gap-1.5">
|
|
231
|
+
<Badge variant="outline">React</Badge>
|
|
232
|
+
<Badge variant="outline">TypeScript</Badge>
|
|
233
|
+
<Badge variant="outline">Design Systems</Badge>
|
|
234
|
+
<Badge variant="outline">Product Strategy</Badge>
|
|
235
|
+
</div>
|
|
236
|
+
</div>
|
|
237
|
+
|
|
238
|
+
{/* Notifications */}
|
|
239
|
+
<div className="space-y-3">
|
|
240
|
+
<div className="flex items-center justify-between">
|
|
241
|
+
<h4 className="font-medium">Notifications</h4>
|
|
242
|
+
<div className="relative">
|
|
243
|
+
<Bell className="size-5" />
|
|
244
|
+
<Badge className="absolute -top-1 -right-1 size-4 p-0 text-xs">5</Badge>
|
|
245
|
+
</div>
|
|
246
|
+
</div>
|
|
247
|
+
<div className="text-sm text-muted-foreground">
|
|
248
|
+
You have unread messages and project updates.
|
|
249
|
+
</div>
|
|
250
|
+
</div>
|
|
251
|
+
</div>
|
|
252
|
+
),
|
|
253
|
+
parameters: {
|
|
254
|
+
docs: {
|
|
255
|
+
description: {
|
|
256
|
+
story: "Real-world example showing how badges work in a typical user interface. This includes user status indicators, project statuses, skill tags, and notification counts within a cohesive design context.",
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
},
|
|
260
|
+
};
|