@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,349 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
|
|
3
|
+
/**
|
|
4
|
+
* A versatile dropdown menu component built on Radix UI primitives
|
|
5
|
+
*
|
|
6
|
+
* Dropdown menus display a list of actions or options that a user can choose from.
|
|
7
|
+
* They're typically triggered by a button and appear as a floating panel with full
|
|
8
|
+
* keyboard navigation support, submenus, and various interactive item types.
|
|
9
|
+
*
|
|
10
|
+
* Based on the shadcn/ui dropdown-menu component with additional enhancements for
|
|
11
|
+
* better integration with design systems and improved accessibility.
|
|
12
|
+
*
|
|
13
|
+
* @component
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* // Basic dropdown menu
|
|
17
|
+
* <DropdownMenu>
|
|
18
|
+
* <DropdownMenuTrigger asChild>
|
|
19
|
+
* <Button variant="outline">Options</Button>
|
|
20
|
+
* </DropdownMenuTrigger>
|
|
21
|
+
* <DropdownMenuContent>
|
|
22
|
+
* <DropdownMenuItem>Profile</DropdownMenuItem>
|
|
23
|
+
* <DropdownMenuItem>Settings</DropdownMenuItem>
|
|
24
|
+
* <DropdownMenuSeparator />
|
|
25
|
+
* <DropdownMenuItem>Logout</DropdownMenuItem>
|
|
26
|
+
* </DropdownMenuContent>
|
|
27
|
+
* </DropdownMenu>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```tsx
|
|
32
|
+
* // Context menu with alignment and destructive actions
|
|
33
|
+
* <DropdownMenu>
|
|
34
|
+
* <DropdownMenuTrigger asChild>
|
|
35
|
+
* <Button variant="ghost" size="icon">
|
|
36
|
+
* <MoreHorizontal />
|
|
37
|
+
* </Button>
|
|
38
|
+
* </DropdownMenuTrigger>
|
|
39
|
+
* <DropdownMenuContent align="end">
|
|
40
|
+
* <DropdownMenuItem>Edit</DropdownMenuItem>
|
|
41
|
+
* <DropdownMenuItem>Duplicate</DropdownMenuItem>
|
|
42
|
+
* <DropdownMenuSeparator />
|
|
43
|
+
* <DropdownMenuItem variant="destructive">Delete</DropdownMenuItem>
|
|
44
|
+
* </DropdownMenuContent>
|
|
45
|
+
* </DropdownMenu>
|
|
46
|
+
* ```
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```tsx
|
|
50
|
+
* // Complex menu with checkboxes, radio groups, and submenus
|
|
51
|
+
* <DropdownMenu>
|
|
52
|
+
* <DropdownMenuTrigger asChild>
|
|
53
|
+
* <Button>Advanced Menu</Button>
|
|
54
|
+
* </DropdownMenuTrigger>
|
|
55
|
+
* <DropdownMenuContent className="w-56">
|
|
56
|
+
* <DropdownMenuLabel>View Options</DropdownMenuLabel>
|
|
57
|
+
* <DropdownMenuSeparator />
|
|
58
|
+
* <DropdownMenuCheckboxItem checked={showPanel} onCheckedChange={setShowPanel}>
|
|
59
|
+
* Show Panel
|
|
60
|
+
* </DropdownMenuCheckboxItem>
|
|
61
|
+
* <DropdownMenuSeparator />
|
|
62
|
+
* <DropdownMenuRadioGroup value={position} onValueChange={setPosition}>
|
|
63
|
+
* <DropdownMenuRadioItem value="top">Top</DropdownMenuRadioItem>
|
|
64
|
+
* <DropdownMenuRadioItem value="bottom">Bottom</DropdownMenuRadioItem>
|
|
65
|
+
* </DropdownMenuRadioGroup>
|
|
66
|
+
* <DropdownMenuSeparator />
|
|
67
|
+
* <DropdownMenuSub>
|
|
68
|
+
* <DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
|
|
69
|
+
* <DropdownMenuSubContent>
|
|
70
|
+
* <DropdownMenuItem>Email</DropdownMenuItem>
|
|
71
|
+
* <DropdownMenuItem>Copy Link</DropdownMenuItem>
|
|
72
|
+
* </DropdownMenuSubContent>
|
|
73
|
+
* </DropdownMenuSub>
|
|
74
|
+
* </DropdownMenuContent>
|
|
75
|
+
* </DropdownMenu>
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* @accessibility
|
|
79
|
+
* - Full keyboard navigation with arrow keys (Up/Down for navigation)
|
|
80
|
+
* - Enter/Space to activate items
|
|
81
|
+
* - Escape key closes the menu and restores focus
|
|
82
|
+
* - Home/End keys navigate to first/last item
|
|
83
|
+
* - Type-ahead search to jump to items by first letter
|
|
84
|
+
* - Left/Right arrow keys for submenu navigation
|
|
85
|
+
* - Proper ARIA roles (menu, menuitem, menuitemcheckbox, menuitemradio)
|
|
86
|
+
* - Focus management with focus trapping and restoration
|
|
87
|
+
* - Screen reader announcements for state changes
|
|
88
|
+
*
|
|
89
|
+
* @see {@link ContextMenu} - For right-click context menus
|
|
90
|
+
* @see {@link Popover} - For rich content overlays
|
|
91
|
+
* @see {@link Select} - For single selection dropdowns
|
|
92
|
+
* @see {@link https://ui.shadcn.com/docs/components/dropdown-menu} - shadcn/ui documentation
|
|
93
|
+
* @since 1.0.0
|
|
94
|
+
*/
|
|
95
|
+
declare function DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
96
|
+
/**
|
|
97
|
+
* Portal component for rendering menu content in a different DOM location
|
|
98
|
+
*
|
|
99
|
+
* Renders dropdown content outside of the normal DOM hierarchy to avoid
|
|
100
|
+
* z-index and overflow issues. Automatically used by DropdownMenuContent
|
|
101
|
+
* but can be used explicitly for submenus.
|
|
102
|
+
*
|
|
103
|
+
* @component
|
|
104
|
+
* @param container - Optional container element for portal rendering
|
|
105
|
+
* @since 1.0.0
|
|
106
|
+
*/
|
|
107
|
+
declare function DropdownMenuPortal({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>): import("react/jsx-runtime").JSX.Element;
|
|
108
|
+
/**
|
|
109
|
+
* DropdownMenuTrigger - The element that triggers the dropdown menu
|
|
110
|
+
*
|
|
111
|
+
* @component
|
|
112
|
+
* @example
|
|
113
|
+
* ```tsx
|
|
114
|
+
* <DropdownMenuTrigger asChild>
|
|
115
|
+
* <Button>Menu</Button>
|
|
116
|
+
* </DropdownMenuTrigger>
|
|
117
|
+
* ```
|
|
118
|
+
* @since 1.0.0
|
|
119
|
+
*/
|
|
120
|
+
declare function DropdownMenuTrigger({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
121
|
+
/**
|
|
122
|
+
* DropdownMenuContent - The content container for dropdown menu items
|
|
123
|
+
*
|
|
124
|
+
* @component
|
|
125
|
+
* @example
|
|
126
|
+
* ```tsx
|
|
127
|
+
* <DropdownMenuContent align="end" sideOffset={5}>
|
|
128
|
+
* <DropdownMenuItem>Item 1</DropdownMenuItem>
|
|
129
|
+
* </DropdownMenuContent>
|
|
130
|
+
* ```
|
|
131
|
+
* @since 1.0.0
|
|
132
|
+
*/
|
|
133
|
+
declare function DropdownMenuContent({ className, sideOffset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
134
|
+
/**
|
|
135
|
+
* Groups related dropdown menu items together
|
|
136
|
+
*
|
|
137
|
+
* Used to create logical groupings of menu items, typically separated by
|
|
138
|
+
* DropdownMenuSeparator components. Helps with semantic organization and
|
|
139
|
+
* keyboard navigation.
|
|
140
|
+
*
|
|
141
|
+
* @component
|
|
142
|
+
* @example
|
|
143
|
+
* ```tsx
|
|
144
|
+
* <DropdownMenuGroup>
|
|
145
|
+
* <DropdownMenuItem>Profile</DropdownMenuItem>
|
|
146
|
+
* <DropdownMenuItem>Settings</DropdownMenuItem>
|
|
147
|
+
* </DropdownMenuGroup>
|
|
148
|
+
* ```
|
|
149
|
+
* @since 1.0.0
|
|
150
|
+
*/
|
|
151
|
+
declare function DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>): import("react/jsx-runtime").JSX.Element;
|
|
152
|
+
/**
|
|
153
|
+
* DropdownMenuItem - A single item in the dropdown menu
|
|
154
|
+
*
|
|
155
|
+
* @component
|
|
156
|
+
* @example
|
|
157
|
+
* ```tsx
|
|
158
|
+
* <DropdownMenuItem onClick={handleClick}>
|
|
159
|
+
* Edit
|
|
160
|
+
* </DropdownMenuItem>
|
|
161
|
+
* <DropdownMenuItem variant="destructive">
|
|
162
|
+
* Delete
|
|
163
|
+
* </DropdownMenuItem>
|
|
164
|
+
* ```
|
|
165
|
+
* @since 1.0.0
|
|
166
|
+
*/
|
|
167
|
+
declare function DropdownMenuItem({ className, inset, variant, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {
|
|
168
|
+
inset?: boolean;
|
|
169
|
+
variant?: "default" | "destructive";
|
|
170
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
171
|
+
/**
|
|
172
|
+
* A checkable menu item with visual state indication
|
|
173
|
+
*
|
|
174
|
+
* Displays a checkbox that can be toggled on/off. The checked state is
|
|
175
|
+
* visually indicated with a checkmark icon. Useful for menu options that
|
|
176
|
+
* represent toggleable settings or features.
|
|
177
|
+
*
|
|
178
|
+
* @component
|
|
179
|
+
* @param checked - Whether the checkbox is checked
|
|
180
|
+
* @param onCheckedChange - Callback when the checked state changes
|
|
181
|
+
* @param disabled - Whether the item is disabled
|
|
182
|
+
*
|
|
183
|
+
* @example
|
|
184
|
+
* ```tsx
|
|
185
|
+
* const [showSidebar, setShowSidebar] = useState(true);
|
|
186
|
+
*
|
|
187
|
+
* <DropdownMenuCheckboxItem
|
|
188
|
+
* checked={showSidebar}
|
|
189
|
+
* onCheckedChange={setShowSidebar}
|
|
190
|
+
* >
|
|
191
|
+
* Show Sidebar
|
|
192
|
+
* </DropdownMenuCheckboxItem>
|
|
193
|
+
* ```
|
|
194
|
+
* @since 1.0.0
|
|
195
|
+
*/
|
|
196
|
+
declare function DropdownMenuCheckboxItem({ className, children, checked, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>): import("react/jsx-runtime").JSX.Element;
|
|
197
|
+
/**
|
|
198
|
+
* Groups radio items for single selection
|
|
199
|
+
*
|
|
200
|
+
* Creates a group where only one radio item can be selected at a time.
|
|
201
|
+
* Use with DropdownMenuRadioItem components to create single-choice options.
|
|
202
|
+
*
|
|
203
|
+
* @component
|
|
204
|
+
* @param value - Currently selected value
|
|
205
|
+
* @param onValueChange - Callback when selection changes
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* ```tsx
|
|
209
|
+
* const [theme, setTheme] = useState("light");
|
|
210
|
+
*
|
|
211
|
+
* <DropdownMenuRadioGroup value={theme} onValueChange={setTheme}>
|
|
212
|
+
* <DropdownMenuRadioItem value="light">Light</DropdownMenuRadioItem>
|
|
213
|
+
* <DropdownMenuRadioItem value="dark">Dark</DropdownMenuRadioItem>
|
|
214
|
+
* <DropdownMenuRadioItem value="system">System</DropdownMenuRadioItem>
|
|
215
|
+
* </DropdownMenuRadioGroup>
|
|
216
|
+
* ```
|
|
217
|
+
* @since 1.0.0
|
|
218
|
+
*/
|
|
219
|
+
declare function DropdownMenuRadioGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>): import("react/jsx-runtime").JSX.Element;
|
|
220
|
+
/**
|
|
221
|
+
* A radio button menu item for single selection within a group
|
|
222
|
+
*
|
|
223
|
+
* Must be used within a DropdownMenuRadioGroup. Shows a filled circle
|
|
224
|
+
* indicator when selected. Only one radio item can be selected per group.
|
|
225
|
+
*
|
|
226
|
+
* @component
|
|
227
|
+
* @param value - The value this radio item represents
|
|
228
|
+
* @param disabled - Whether the item is disabled
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```tsx
|
|
232
|
+
* <DropdownMenuRadioGroup value={selectedTheme} onValueChange={setSelectedTheme}>
|
|
233
|
+
* <DropdownMenuRadioItem value="light">
|
|
234
|
+
* Light Theme
|
|
235
|
+
* </DropdownMenuRadioItem>
|
|
236
|
+
* <DropdownMenuRadioItem value="dark">
|
|
237
|
+
* Dark Theme
|
|
238
|
+
* </DropdownMenuRadioItem>
|
|
239
|
+
* </DropdownMenuRadioGroup>
|
|
240
|
+
* ```
|
|
241
|
+
* @since 1.0.0
|
|
242
|
+
*/
|
|
243
|
+
declare function DropdownMenuRadioItem({ className, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>): import("react/jsx-runtime").JSX.Element;
|
|
244
|
+
/**
|
|
245
|
+
* DropdownMenuLabel - A label for grouping menu items
|
|
246
|
+
*
|
|
247
|
+
* @component
|
|
248
|
+
* @example
|
|
249
|
+
* ```tsx
|
|
250
|
+
* <DropdownMenuLabel>Actions</DropdownMenuLabel>
|
|
251
|
+
* ```
|
|
252
|
+
* @since 1.0.0
|
|
253
|
+
*/
|
|
254
|
+
declare function DropdownMenuLabel({ className, inset, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {
|
|
255
|
+
inset?: boolean;
|
|
256
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
257
|
+
/**
|
|
258
|
+
* DropdownMenuSeparator - A visual separator between menu items
|
|
259
|
+
*
|
|
260
|
+
* @component
|
|
261
|
+
* @since 1.0.0
|
|
262
|
+
*/
|
|
263
|
+
declare function DropdownMenuSeparator({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>): import("react/jsx-runtime").JSX.Element;
|
|
264
|
+
/**
|
|
265
|
+
* Displays keyboard shortcut hints in menu items
|
|
266
|
+
*
|
|
267
|
+
* Shows keyboard shortcut text aligned to the right side of menu items.
|
|
268
|
+
* Purely visual - does not implement the actual keyboard functionality.
|
|
269
|
+
* Use standard keyboard shortcut notation (⌘, ⌃, ⌥, ⇧).
|
|
270
|
+
*
|
|
271
|
+
* @component
|
|
272
|
+
* @example
|
|
273
|
+
* ```tsx
|
|
274
|
+
* <DropdownMenuItem>
|
|
275
|
+
* Save Document
|
|
276
|
+
* <DropdownMenuShortcut>⌘S</DropdownMenuShortcut>
|
|
277
|
+
* </DropdownMenuItem>
|
|
278
|
+
* ```
|
|
279
|
+
* @since 1.0.0
|
|
280
|
+
*/
|
|
281
|
+
declare function DropdownMenuShortcut({ className, ...props }: React.ComponentProps<"span">): import("react/jsx-runtime").JSX.Element;
|
|
282
|
+
/**
|
|
283
|
+
* Container for creating nested submenus
|
|
284
|
+
*
|
|
285
|
+
* Wraps a submenu trigger and content to create hierarchical menu structures.
|
|
286
|
+
* Use with DropdownMenuSubTrigger and DropdownMenuSubContent.
|
|
287
|
+
*
|
|
288
|
+
* @component
|
|
289
|
+
* @example
|
|
290
|
+
* ```tsx
|
|
291
|
+
* <DropdownMenuSub>
|
|
292
|
+
* <DropdownMenuSubTrigger>Share</DropdownMenuSubTrigger>
|
|
293
|
+
* <DropdownMenuSubContent>
|
|
294
|
+
* <DropdownMenuItem>Email</DropdownMenuItem>
|
|
295
|
+
* <DropdownMenuItem>Copy Link</DropdownMenuItem>
|
|
296
|
+
* </DropdownMenuSubContent>
|
|
297
|
+
* </DropdownMenuSub>
|
|
298
|
+
* ```
|
|
299
|
+
* @since 1.0.0
|
|
300
|
+
*/
|
|
301
|
+
declare function DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>): import("react/jsx-runtime").JSX.Element;
|
|
302
|
+
/**
|
|
303
|
+
* Trigger element for opening a submenu
|
|
304
|
+
*
|
|
305
|
+
* Displays an arrow indicator and opens the associated submenu on hover or click.
|
|
306
|
+
* Must be used within a DropdownMenuSub component.
|
|
307
|
+
*
|
|
308
|
+
* @component
|
|
309
|
+
* @param inset - Whether to add left padding to align with items that have icons
|
|
310
|
+
*
|
|
311
|
+
* @example
|
|
312
|
+
* ```tsx
|
|
313
|
+
* <DropdownMenuSub>
|
|
314
|
+
* <DropdownMenuSubTrigger>
|
|
315
|
+
* <Share className="mr-2 h-4 w-4" />
|
|
316
|
+
* Share Options
|
|
317
|
+
* </DropdownMenuSubTrigger>
|
|
318
|
+
* <DropdownMenuSubContent>
|
|
319
|
+
* <DropdownMenuItem>Email</DropdownMenuItem>
|
|
320
|
+
* <DropdownMenuItem>Copy Link</DropdownMenuItem>
|
|
321
|
+
* </DropdownMenuSubContent>
|
|
322
|
+
* </DropdownMenuSub>
|
|
323
|
+
* ```
|
|
324
|
+
* @since 1.0.0
|
|
325
|
+
*/
|
|
326
|
+
declare function DropdownMenuSubTrigger({ className, inset, children, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {
|
|
327
|
+
inset?: boolean;
|
|
328
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
329
|
+
/**
|
|
330
|
+
* Content container for submenu items
|
|
331
|
+
*
|
|
332
|
+
* Contains the items displayed when a submenu is opened. Positioned relative
|
|
333
|
+
* to the trigger and supports the same item types as the main menu.
|
|
334
|
+
*
|
|
335
|
+
* @component
|
|
336
|
+
* @example
|
|
337
|
+
* ```tsx
|
|
338
|
+
* <DropdownMenuSubContent>
|
|
339
|
+
* <DropdownMenuItem>Submenu Item 1</DropdownMenuItem>
|
|
340
|
+
* <DropdownMenuItem>Submenu Item 2</DropdownMenuItem>
|
|
341
|
+
* <DropdownMenuSeparator />
|
|
342
|
+
* <DropdownMenuItem>Submenu Item 3</DropdownMenuItem>
|
|
343
|
+
* </DropdownMenuSubContent>
|
|
344
|
+
* ```
|
|
345
|
+
* @since 1.0.0
|
|
346
|
+
*/
|
|
347
|
+
declare function DropdownMenuSubContent({ className, ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>): import("react/jsx-runtime").JSX.Element;
|
|
348
|
+
export { DropdownMenu, DropdownMenuPortal, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuGroup, DropdownMenuLabel, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, };
|
|
349
|
+
//# sourceMappingURL=dropdown-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdown-menu.d.ts","sourceRoot":"","sources":["../../../src/components/ui/dropdown-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Props for the EmptyState component
|
|
4
|
+
*
|
|
5
|
+
* Extends standard HTML div attributes to support all native div functionality
|
|
6
|
+
* while providing specific props for empty state content and behavior.
|
|
7
|
+
*
|
|
8
|
+
* @type EmptyStateProps
|
|
9
|
+
* @extends {React.HTMLAttributes<HTMLDivElement>}
|
|
10
|
+
*/
|
|
11
|
+
export type EmptyStateProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
12
|
+
/** Main title text displayed prominently in the empty state */
|
|
13
|
+
title: string;
|
|
14
|
+
/** Optional descriptive text providing additional context or guidance */
|
|
15
|
+
description?: string;
|
|
16
|
+
/** Optional icon, illustration, or React element displayed above the title */
|
|
17
|
+
icon?: React.ReactNode;
|
|
18
|
+
/** Optional action button configuration for primary user action */
|
|
19
|
+
action?: {
|
|
20
|
+
/** Text label for the action button */
|
|
21
|
+
label: string;
|
|
22
|
+
/** Click handler function executed when the action button is pressed */
|
|
23
|
+
onClick: () => void;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* EmptyState component for displaying empty or no-data states
|
|
28
|
+
*
|
|
29
|
+
* A versatile component that provides a consistent way to show empty states when there's
|
|
30
|
+
* no content to display. Commonly used in lists, tables, search results, dashboards,
|
|
31
|
+
* or any area where data might be absent. Follows standard empty state UX patterns
|
|
32
|
+
* with support for icons, descriptions, and call-to-action buttons to guide users.
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```tsx
|
|
36
|
+
* // Basic empty state with title and description
|
|
37
|
+
* <EmptyState
|
|
38
|
+
* title="No results found"
|
|
39
|
+
* description="Try adjusting your search or filters to find what you're looking for"
|
|
40
|
+
* />
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```tsx
|
|
45
|
+
* // Empty state with icon and action button
|
|
46
|
+
* import { Search } from 'lucide-react';
|
|
47
|
+
*
|
|
48
|
+
* <EmptyState
|
|
49
|
+
* icon={<Search className="w-12 h-12" />}
|
|
50
|
+
* title="No search results"
|
|
51
|
+
* description="We couldn't find anything matching your search criteria"
|
|
52
|
+
* action={{
|
|
53
|
+
* label: "Clear search",
|
|
54
|
+
* onClick: () => handleClearSearch()
|
|
55
|
+
* }}
|
|
56
|
+
* />
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* // Inbox empty state with contextual messaging
|
|
62
|
+
* import { Inbox } from 'lucide-react';
|
|
63
|
+
*
|
|
64
|
+
* <EmptyState
|
|
65
|
+
* icon={<Inbox className="w-16 h-16" />}
|
|
66
|
+
* title="Your inbox is empty"
|
|
67
|
+
* description="When you receive new messages, they'll appear here"
|
|
68
|
+
* action={{
|
|
69
|
+
* label: "Compose message",
|
|
70
|
+
* onClick: () => openComposer()
|
|
71
|
+
* }}
|
|
72
|
+
* />
|
|
73
|
+
* ```
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```tsx
|
|
77
|
+
* // Custom styled empty state for data visualization
|
|
78
|
+
* import { Database } from 'lucide-react';
|
|
79
|
+
*
|
|
80
|
+
* <EmptyState
|
|
81
|
+
* className="min-h-[400px] bg-muted/30 rounded-lg"
|
|
82
|
+
* icon={<Database className="w-14 h-14 opacity-50" />}
|
|
83
|
+
* title="No data available"
|
|
84
|
+
* description="Import data or connect a data source to get started"
|
|
85
|
+
* action={{
|
|
86
|
+
* label: "Import data",
|
|
87
|
+
* onClick: () => showImportDialog()
|
|
88
|
+
* }}
|
|
89
|
+
* />
|
|
90
|
+
* ```
|
|
91
|
+
*
|
|
92
|
+
* @param props - Component props extending HTMLDivElement attributes
|
|
93
|
+
* @param props.title - Main title text displayed prominently (required)
|
|
94
|
+
* @param props.description - Optional descriptive text providing context
|
|
95
|
+
* @param props.icon - Optional icon or React element displayed above title
|
|
96
|
+
* @param props.action - Optional action button configuration
|
|
97
|
+
* @param props.className - Additional CSS classes for styling
|
|
98
|
+
* @param ref - Forwarded ref to the container div element
|
|
99
|
+
*
|
|
100
|
+
* @remarks
|
|
101
|
+
* **Accessibility Features:**
|
|
102
|
+
* - Uses semantic HTML structure with proper heading hierarchy
|
|
103
|
+
* - Title rendered as h3 element for screen reader navigation
|
|
104
|
+
* - Action button follows Button component accessibility patterns
|
|
105
|
+
* - Supports keyboard navigation and focus management
|
|
106
|
+
* - Screen reader friendly text content structure
|
|
107
|
+
*
|
|
108
|
+
* **Design Guidelines:**
|
|
109
|
+
* - Icon should be 48-64px (w-12 h-12 to w-16 h-16) for optimal visual balance
|
|
110
|
+
* - Keep titles concise and action-oriented
|
|
111
|
+
* - Use descriptions to provide helpful context or next steps
|
|
112
|
+
* - Action buttons should have clear, specific labels
|
|
113
|
+
*
|
|
114
|
+
* @see {@link Button} for action button styling and behavior
|
|
115
|
+
* @since 1.0.0
|
|
116
|
+
*/
|
|
117
|
+
declare const EmptyState: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
118
|
+
/** Main title text displayed prominently in the empty state */
|
|
119
|
+
title: string;
|
|
120
|
+
/** Optional descriptive text providing additional context or guidance */
|
|
121
|
+
description?: string;
|
|
122
|
+
/** Optional icon, illustration, or React element displayed above the title */
|
|
123
|
+
icon?: React.ReactNode;
|
|
124
|
+
/** Optional action button configuration for primary user action */
|
|
125
|
+
action?: {
|
|
126
|
+
/** Text label for the action button */
|
|
127
|
+
label: string;
|
|
128
|
+
/** Click handler function executed when the action button is pressed */
|
|
129
|
+
onClick: () => void;
|
|
130
|
+
};
|
|
131
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
132
|
+
export { EmptyState };
|
|
133
|
+
//# sourceMappingURL=empty-state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"empty-state.d.ts","sourceRoot":"","sources":["../../../src/components/ui/empty-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;GAQG;AACH,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,GAAG;IACnE,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,mEAAmE;IACnE,MAAM,CAAC,EAAE;QACP,uCAAuC;QACvC,KAAK,EAAE,MAAM,CAAC;QACd,wEAAwE;QACxE,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB,CAAC;CACH,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0FG;AACH,QAAA,MAAM,UAAU;IA1Gd,+DAA+D;WACxD,MAAM;IACb,yEAAyE;kBAC3D,MAAM;IACpB,8EAA8E;WACvE,KAAK,CAAC,SAAS;IACtB,mEAAmE;aAC1D;QACP,uCAAuC;QACvC,KAAK,EAAE,MAAM,CAAC;QACd,wEAAwE;QACxE,OAAO,EAAE,MAAM,IAAI,CAAC;KACrB;wCAkHF,CAAC;AAIF,OAAO,EAAE,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
|
|
3
|
+
/**
|
|
4
|
+
* HoverCard component for previewing content available behind a link
|
|
5
|
+
*
|
|
6
|
+
* For sighted users to preview content available behind a link. Displays rich content
|
|
7
|
+
* when users hover over a trigger element. Ideal for showing previews, user profiles,
|
|
8
|
+
* repository information, or contextual details without requiring navigation.
|
|
9
|
+
*
|
|
10
|
+
* Built on Radix UI Hover Card primitive with custom styling and animations.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* // Basic user profile hover card
|
|
15
|
+
* <HoverCard>
|
|
16
|
+
* <HoverCardTrigger asChild>
|
|
17
|
+
* <Button variant="link">@nextjs</Button>
|
|
18
|
+
* </HoverCardTrigger>
|
|
19
|
+
* <HoverCardContent className="w-80">
|
|
20
|
+
* <div className="flex justify-between gap-4">
|
|
21
|
+
* <Avatar>
|
|
22
|
+
* <AvatarImage src="https://github.com/vercel.png" />
|
|
23
|
+
* <AvatarFallback>VC</AvatarFallback>
|
|
24
|
+
* </Avatar>
|
|
25
|
+
* <div className="space-y-1">
|
|
26
|
+
* <h4 className="text-sm font-semibold">@nextjs</h4>
|
|
27
|
+
* <p className="text-sm">
|
|
28
|
+
* The React Framework – created and maintained by @vercel.
|
|
29
|
+
* </p>
|
|
30
|
+
* <div className="text-muted-foreground text-xs">
|
|
31
|
+
* Joined December 2021
|
|
32
|
+
* </div>
|
|
33
|
+
* </div>
|
|
34
|
+
* </div>
|
|
35
|
+
* </HoverCardContent>
|
|
36
|
+
* </HoverCard>
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```tsx
|
|
41
|
+
* // With custom positioning and delays
|
|
42
|
+
* <HoverCard openDelay={500} closeDelay={200}>
|
|
43
|
+
* <HoverCardTrigger asChild>
|
|
44
|
+
* <Button>Hover me</Button>
|
|
45
|
+
* </HoverCardTrigger>
|
|
46
|
+
* <HoverCardContent side="top" align="start">
|
|
47
|
+
* Content appears above with custom alignment
|
|
48
|
+
* </HoverCardContent>
|
|
49
|
+
* </HoverCard>
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```tsx
|
|
54
|
+
* // Interactive content
|
|
55
|
+
* <HoverCard>
|
|
56
|
+
* <HoverCardTrigger asChild>
|
|
57
|
+
* <Button>Settings</Button>
|
|
58
|
+
* </HoverCardTrigger>
|
|
59
|
+
* <HoverCardContent>
|
|
60
|
+
* <div className="space-y-2">
|
|
61
|
+
* <h4 className="font-semibold">Quick Actions</h4>
|
|
62
|
+
* <Button size="sm">Manage Team</Button>
|
|
63
|
+
* <Button size="sm">View Reports</Button>
|
|
64
|
+
* </div>
|
|
65
|
+
* </HoverCardContent>
|
|
66
|
+
* </HoverCard>
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @accessibility
|
|
70
|
+
* **Important**: Hover cards are intended for sighted users only. The content will be
|
|
71
|
+
* inaccessible to keyboard users. Consider providing alternative access methods.
|
|
72
|
+
*
|
|
73
|
+
* - Opens on hover with configurable `openDelay`
|
|
74
|
+
* - Stays open when hovering over content
|
|
75
|
+
* - Closes with configurable `closeDelay`
|
|
76
|
+
* - Auto-positions to avoid viewport overflow
|
|
77
|
+
* - Supports focus-based interactions for some accessibility
|
|
78
|
+
*
|
|
79
|
+
* @see {@link https://ui.shadcn.com/docs/components/hover-card} shadcn/ui documentation
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
* @see {@link https://www.radix-ui.com/primitives/docs/components/hover-card} Radix UI Hover Card
|
|
82
|
+
*/
|
|
83
|
+
/**
|
|
84
|
+
* Root container for the hover card component
|
|
85
|
+
*
|
|
86
|
+
* @param openDelay - Delay in milliseconds before the hover card opens (default: 700)
|
|
87
|
+
* @param closeDelay - Delay in milliseconds before the hover card closes (default: 300)
|
|
88
|
+
* @param open - Controlled open state
|
|
89
|
+
* @param onOpenChange - Callback when open state changes
|
|
90
|
+
*/
|
|
91
|
+
declare function HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
92
|
+
/**
|
|
93
|
+
* Trigger element that opens the hover card on hover
|
|
94
|
+
*
|
|
95
|
+
* @param asChild - When true, merges props with immediate child element
|
|
96
|
+
*/
|
|
97
|
+
declare function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
98
|
+
/**
|
|
99
|
+
* Content container with built-in styling and animations
|
|
100
|
+
*
|
|
101
|
+
* @param side - Side of the trigger to position content ("top" | "right" | "bottom" | "left")
|
|
102
|
+
* @param align - Alignment relative to trigger ("start" | "center" | "end")
|
|
103
|
+
* @param sideOffset - Distance in pixels from the trigger (default: 4)
|
|
104
|
+
* @param alignOffset - Offset in pixels from the alignment axis
|
|
105
|
+
* @param className - Additional CSS classes
|
|
106
|
+
*/
|
|
107
|
+
declare function HoverCardContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
108
|
+
export { HoverCard, HoverCardTrigger, HoverCardContent };
|
|
109
|
+
//# sourceMappingURL=hover-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/hover-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,kBAAkB,MAAM,4BAA4B,CAAC;AAIjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+EG;AACH;;;;;;;GAOG;AACH,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAEtD;AAED;;;;GAIG;AACH,iBAAS,gBAAgB,CAAC,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAIzD;AAED;;;;;;;;GAQG;AACH,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAezD;AAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC"}
|