@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,216 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import { Skeleton } from "../skeleton";
|
|
3
|
+
import { Card, CardContent, CardFooter, CardHeader } from "../card";
|
|
4
|
+
|
|
5
|
+
const meta = {
|
|
6
|
+
title: "Data Display/Skeleton",
|
|
7
|
+
component: Skeleton,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: "centered",
|
|
10
|
+
docs: {
|
|
11
|
+
description: {
|
|
12
|
+
component:
|
|
13
|
+
"A skeleton component for displaying loading placeholders. Creates animated placeholders that mimic content structure and improve perceived performance during loading states.",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
},
|
|
17
|
+
tags: ["autodocs"],
|
|
18
|
+
argTypes: {
|
|
19
|
+
className: {
|
|
20
|
+
control: { type: "text" },
|
|
21
|
+
description: "Additional CSS classes for customizing size, shape, and appearance",
|
|
22
|
+
defaultValue: "h-4 w-[200px]",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
} satisfies Meta<typeof Skeleton>;
|
|
26
|
+
|
|
27
|
+
export default meta;
|
|
28
|
+
type Story = StoryObj<typeof meta>;
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Interactive playground for testing all skeleton variations and customizations.
|
|
32
|
+
* Use the controls to experiment with different className combinations.
|
|
33
|
+
*/
|
|
34
|
+
export const Interactive: Story = {
|
|
35
|
+
args: {
|
|
36
|
+
className: "h-4 w-[200px]",
|
|
37
|
+
},
|
|
38
|
+
render: (args) => <Skeleton {...args} />,
|
|
39
|
+
parameters: {
|
|
40
|
+
docs: {
|
|
41
|
+
description: {
|
|
42
|
+
story: "Interactive playground to experiment with different skeleton sizes, shapes, and styles using the className prop.",
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Comprehensive showcase of all available skeleton variants and common use cases.
|
|
50
|
+
* Demonstrates different shapes, sizes, and composition patterns.
|
|
51
|
+
*/
|
|
52
|
+
export const Variants: Story = {
|
|
53
|
+
render: () => (
|
|
54
|
+
<div className="space-y-8">
|
|
55
|
+
{/* Basic Text Skeletons */}
|
|
56
|
+
<div className="space-y-3">
|
|
57
|
+
<h3 className="text-lg font-semibold">Text Content</h3>
|
|
58
|
+
<div className="space-y-2">
|
|
59
|
+
<Skeleton className="h-8 w-48" /> {/* Large heading */}
|
|
60
|
+
<Skeleton className="h-6 w-36" /> {/* Subheading */}
|
|
61
|
+
<div className="space-y-1">
|
|
62
|
+
<Skeleton className="h-4 w-full" /> {/* Body text */}
|
|
63
|
+
<Skeleton className="h-4 w-5/6" />
|
|
64
|
+
<Skeleton className="h-4 w-4/6" />
|
|
65
|
+
</div>
|
|
66
|
+
<Skeleton className="h-3 w-24" /> {/* Caption */}
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
{/* Shape Variants */}
|
|
71
|
+
<div className="space-y-3">
|
|
72
|
+
<h3 className="text-lg font-semibold">Shape Variants</h3>
|
|
73
|
+
<div className="flex items-center gap-4">
|
|
74
|
+
<div className="space-y-2 text-center">
|
|
75
|
+
<Skeleton className="h-12 w-12 rounded-full" />
|
|
76
|
+
<p className="text-xs text-muted-foreground">Avatar</p>
|
|
77
|
+
</div>
|
|
78
|
+
<div className="space-y-2 text-center">
|
|
79
|
+
<Skeleton className="h-9 w-24 rounded-md" />
|
|
80
|
+
<p className="text-xs text-muted-foreground">Button</p>
|
|
81
|
+
</div>
|
|
82
|
+
<div className="space-y-2 text-center">
|
|
83
|
+
<Skeleton className="h-5 w-16 rounded-full" />
|
|
84
|
+
<p className="text-xs text-muted-foreground">Badge</p>
|
|
85
|
+
</div>
|
|
86
|
+
<div className="space-y-2 text-center">
|
|
87
|
+
<Skeleton className="h-10 w-32 rounded-md" />
|
|
88
|
+
<p className="text-xs text-muted-foreground">Input</p>
|
|
89
|
+
</div>
|
|
90
|
+
<div className="space-y-2 text-center">
|
|
91
|
+
<Skeleton className="h-24 w-32 rounded-lg" />
|
|
92
|
+
<p className="text-xs text-muted-foreground">Image</p>
|
|
93
|
+
</div>
|
|
94
|
+
</div>
|
|
95
|
+
</div>
|
|
96
|
+
|
|
97
|
+
{/* Size Variants */}
|
|
98
|
+
<div className="space-y-3">
|
|
99
|
+
<h3 className="text-lg font-semibold">Size Variants</h3>
|
|
100
|
+
<div className="space-y-2">
|
|
101
|
+
<Skeleton className="h-8 w-8 rounded-full" /> {/* Small avatar */}
|
|
102
|
+
<Skeleton className="h-10 w-10 rounded-full" /> {/* Medium avatar */}
|
|
103
|
+
<Skeleton className="h-12 w-12 rounded-full" /> {/* Large avatar */}
|
|
104
|
+
<Skeleton className="h-16 w-16 rounded-full" /> {/* Extra large avatar */}
|
|
105
|
+
</div>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
),
|
|
109
|
+
parameters: {
|
|
110
|
+
docs: {
|
|
111
|
+
description: {
|
|
112
|
+
story: "Complete showcase of all skeleton variants including text content, different shapes, and sizes. Use these patterns as building blocks for your loading states.",
|
|
113
|
+
},
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Real-world example showing skeleton in context of a typical application layout.
|
|
120
|
+
* Demonstrates how to compose skeletons for complex UI structures.
|
|
121
|
+
*/
|
|
122
|
+
export const InContext: Story = {
|
|
123
|
+
render: () => (
|
|
124
|
+
<div className="w-[800px] space-y-6">
|
|
125
|
+
{/* Page Header */}
|
|
126
|
+
<div className="flex items-center justify-between">
|
|
127
|
+
<Skeleton className="h-8 w-48" />
|
|
128
|
+
<div className="flex gap-2">
|
|
129
|
+
<Skeleton className="h-9 w-24" />
|
|
130
|
+
<Skeleton className="h-9 w-24" />
|
|
131
|
+
</div>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
{/* Main Content Grid */}
|
|
135
|
+
<div className="grid grid-cols-3 gap-4">
|
|
136
|
+
{Array.from({ length: 6 }).map((_, i) => (
|
|
137
|
+
<Card key={i} className="overflow-hidden">
|
|
138
|
+
<CardHeader className="pb-3">
|
|
139
|
+
<div className="flex items-center gap-3">
|
|
140
|
+
<Skeleton className="h-8 w-8 rounded-full" />
|
|
141
|
+
<div className="space-y-1">
|
|
142
|
+
<Skeleton className="h-4 w-24" />
|
|
143
|
+
<Skeleton className="h-3 w-16" />
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
</CardHeader>
|
|
147
|
+
|
|
148
|
+
{/* Featured Image */}
|
|
149
|
+
<Skeleton className="h-32 w-full" />
|
|
150
|
+
|
|
151
|
+
<CardContent className="pt-3">
|
|
152
|
+
<div className="space-y-2">
|
|
153
|
+
<Skeleton className="h-5 w-3/4" />
|
|
154
|
+
<Skeleton className="h-4 w-full" />
|
|
155
|
+
<Skeleton className="h-4 w-5/6" />
|
|
156
|
+
</div>
|
|
157
|
+
</CardContent>
|
|
158
|
+
|
|
159
|
+
<CardFooter className="flex justify-between">
|
|
160
|
+
<div className="flex gap-2">
|
|
161
|
+
<Skeleton className="h-6 w-6 rounded" />
|
|
162
|
+
<Skeleton className="h-6 w-6 rounded" />
|
|
163
|
+
<Skeleton className="h-6 w-6 rounded" />
|
|
164
|
+
</div>
|
|
165
|
+
<Skeleton className="h-6 w-12" />
|
|
166
|
+
</CardFooter>
|
|
167
|
+
</Card>
|
|
168
|
+
))}
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
{/* Sidebar Content */}
|
|
172
|
+
<div className="grid grid-cols-4 gap-6 mt-8">
|
|
173
|
+
<div className="col-span-3">
|
|
174
|
+
<Card>
|
|
175
|
+
<CardHeader>
|
|
176
|
+
<div className="flex items-center gap-3">
|
|
177
|
+
<Skeleton className="h-10 w-10 rounded-full" />
|
|
178
|
+
<div className="space-y-2">
|
|
179
|
+
<Skeleton className="h-5 w-32" />
|
|
180
|
+
<Skeleton className="h-4 w-24" />
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</CardHeader>
|
|
184
|
+
<CardContent className="space-y-3">
|
|
185
|
+
<Skeleton className="h-4 w-full" />
|
|
186
|
+
<Skeleton className="h-4 w-4/5" />
|
|
187
|
+
<Skeleton className="h-4 w-3/5" />
|
|
188
|
+
<Skeleton className="h-40 w-full rounded-md" />
|
|
189
|
+
</CardContent>
|
|
190
|
+
</Card>
|
|
191
|
+
</div>
|
|
192
|
+
|
|
193
|
+
<div className="space-y-4">
|
|
194
|
+
<h4 className="text-sm font-medium text-muted-foreground">Recent Activity</h4>
|
|
195
|
+
{Array.from({ length: 4 }).map((_, i) => (
|
|
196
|
+
<div key={i} className="flex items-center gap-3">
|
|
197
|
+
<Skeleton className="h-8 w-8 rounded-full" />
|
|
198
|
+
<div className="space-y-1">
|
|
199
|
+
<Skeleton className="h-3 w-20" />
|
|
200
|
+
<Skeleton className="h-3 w-16" />
|
|
201
|
+
</div>
|
|
202
|
+
</div>
|
|
203
|
+
))}
|
|
204
|
+
</div>
|
|
205
|
+
</div>
|
|
206
|
+
</div>
|
|
207
|
+
),
|
|
208
|
+
parameters: {
|
|
209
|
+
layout: "fullscreen",
|
|
210
|
+
docs: {
|
|
211
|
+
description: {
|
|
212
|
+
story: "Realistic application layout showing how to compose skeleton components for complex UI structures. This example demonstrates loading states for dashboards, feeds, and content management interfaces.",
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
};
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import type { Meta, StoryObj } from "@storybook/react-vite";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Slider } from "../slider";
|
|
4
|
+
import { Button } from "../button";
|
|
5
|
+
import {
|
|
6
|
+
Card,
|
|
7
|
+
CardContent,
|
|
8
|
+
CardDescription,
|
|
9
|
+
CardHeader,
|
|
10
|
+
CardTitle,
|
|
11
|
+
} from "../card";
|
|
12
|
+
import { Label } from "../label";
|
|
13
|
+
|
|
14
|
+
const meta = {
|
|
15
|
+
title: "Interactive Controls/Slider",
|
|
16
|
+
component: Slider,
|
|
17
|
+
parameters: {
|
|
18
|
+
layout: "centered",
|
|
19
|
+
docs: {
|
|
20
|
+
description: {
|
|
21
|
+
component:
|
|
22
|
+
"A versatile range input control built on Radix UI Slider primitives. Supports single or multiple values, custom ranges, step intervals, and both horizontal and vertical orientations with full accessibility support.",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
tags: ["autodocs"],
|
|
27
|
+
argTypes: {
|
|
28
|
+
value: {
|
|
29
|
+
control: { type: "object" },
|
|
30
|
+
description: "The controlled value of the slider",
|
|
31
|
+
},
|
|
32
|
+
defaultValue: {
|
|
33
|
+
control: { type: "object" },
|
|
34
|
+
description: "The default value of the slider",
|
|
35
|
+
},
|
|
36
|
+
min: {
|
|
37
|
+
control: { type: "number" },
|
|
38
|
+
description: "The minimum value of the slider",
|
|
39
|
+
},
|
|
40
|
+
max: {
|
|
41
|
+
control: { type: "number" },
|
|
42
|
+
description: "The maximum value of the slider",
|
|
43
|
+
},
|
|
44
|
+
step: {
|
|
45
|
+
control: { type: "number" },
|
|
46
|
+
description: "The step interval of the slider",
|
|
47
|
+
},
|
|
48
|
+
orientation: {
|
|
49
|
+
control: { type: "select" },
|
|
50
|
+
options: ["horizontal", "vertical"],
|
|
51
|
+
description: "The orientation of the slider",
|
|
52
|
+
},
|
|
53
|
+
disabled: {
|
|
54
|
+
control: { type: "boolean" },
|
|
55
|
+
description: "Whether the slider is disabled",
|
|
56
|
+
},
|
|
57
|
+
minStepsBetweenThumbs: {
|
|
58
|
+
control: { type: "number" },
|
|
59
|
+
description: "Minimum steps between thumbs in range mode",
|
|
60
|
+
},
|
|
61
|
+
className: {
|
|
62
|
+
control: { type: "text" },
|
|
63
|
+
description: "Additional CSS classes",
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
args: {
|
|
67
|
+
min: 0,
|
|
68
|
+
max: 100,
|
|
69
|
+
step: 1,
|
|
70
|
+
defaultValue: [33],
|
|
71
|
+
},
|
|
72
|
+
} satisfies Meta<typeof Slider>;
|
|
73
|
+
|
|
74
|
+
export default meta;
|
|
75
|
+
type Story = StoryObj<typeof meta>;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Interactive playground with all slider properties and controls.
|
|
79
|
+
* Use the controls panel to experiment with different configurations,
|
|
80
|
+
* values, orientations, and ranges.
|
|
81
|
+
*/
|
|
82
|
+
export const Interactive: Story = {
|
|
83
|
+
args: {
|
|
84
|
+
defaultValue: [33],
|
|
85
|
+
min: 0,
|
|
86
|
+
max: 100,
|
|
87
|
+
step: 1,
|
|
88
|
+
orientation: "horizontal",
|
|
89
|
+
disabled: false,
|
|
90
|
+
minStepsBetweenThumbs: 1,
|
|
91
|
+
},
|
|
92
|
+
render: (args) => (
|
|
93
|
+
<div
|
|
94
|
+
className={args.orientation === "vertical" ? "h-[200px]" : "w-[300px]"}
|
|
95
|
+
>
|
|
96
|
+
<Slider {...args} />
|
|
97
|
+
</div>
|
|
98
|
+
),
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Showcase of all slider variants and configurations.
|
|
103
|
+
* Demonstrates single value, range, vertical orientation,
|
|
104
|
+
* disabled state, and different step intervals.
|
|
105
|
+
*/
|
|
106
|
+
export const Variants: Story = {
|
|
107
|
+
render: () => (
|
|
108
|
+
<div className="space-y-8 w-full max-w-2xl">
|
|
109
|
+
{/* Single Value Sliders */}
|
|
110
|
+
<div className="space-y-4">
|
|
111
|
+
<h3 className="text-lg font-semibold">Single Value</h3>
|
|
112
|
+
<div className="grid gap-4">
|
|
113
|
+
<div className="space-y-2">
|
|
114
|
+
<Label>Basic (0-100, step 1)</Label>
|
|
115
|
+
<div className="w-[300px]">
|
|
116
|
+
<Slider defaultValue={[33]} max={100} step={1} />
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
119
|
+
<div className="space-y-2">
|
|
120
|
+
<Label>Custom range (0-1000, step 50)</Label>
|
|
121
|
+
<div className="w-[300px]">
|
|
122
|
+
<Slider defaultValue={[500]} min={0} max={1000} step={50} />
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
<div className="space-y-2">
|
|
126
|
+
<Label>Large steps (0-100, step 10)</Label>
|
|
127
|
+
<div className="w-[300px]">
|
|
128
|
+
<Slider defaultValue={[50]} max={100} step={10} />
|
|
129
|
+
</div>
|
|
130
|
+
</div>
|
|
131
|
+
<div className="space-y-2">
|
|
132
|
+
<Label>Disabled</Label>
|
|
133
|
+
<div className="w-[300px]">
|
|
134
|
+
<Slider defaultValue={[60]} disabled />
|
|
135
|
+
</div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</div>
|
|
139
|
+
|
|
140
|
+
{/* Range Sliders */}
|
|
141
|
+
<div className="space-y-4">
|
|
142
|
+
<h3 className="text-lg font-semibold">Range Selection</h3>
|
|
143
|
+
<div className="grid gap-4">
|
|
144
|
+
<div className="space-y-2">
|
|
145
|
+
<Label>Basic range</Label>
|
|
146
|
+
<div className="w-[300px]">
|
|
147
|
+
<Slider defaultValue={[25, 75]} max={100} step={1} />
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
<div className="space-y-2">
|
|
151
|
+
<Label>With minimum gap (min 10 steps)</Label>
|
|
152
|
+
<div className="w-[300px]">
|
|
153
|
+
<Slider
|
|
154
|
+
defaultValue={[20, 80]}
|
|
155
|
+
max={100}
|
|
156
|
+
step={1}
|
|
157
|
+
minStepsBetweenThumbs={10}
|
|
158
|
+
/>
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
|
|
164
|
+
{/* Orientations */}
|
|
165
|
+
<div className="space-y-4">
|
|
166
|
+
<h3 className="text-lg font-semibold">Orientations</h3>
|
|
167
|
+
<div className="flex gap-8 items-start">
|
|
168
|
+
<div className="space-y-2">
|
|
169
|
+
<Label>Horizontal</Label>
|
|
170
|
+
<div className="w-[200px]">
|
|
171
|
+
<Slider defaultValue={[60]} />
|
|
172
|
+
</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div className="space-y-2">
|
|
175
|
+
<Label>Vertical</Label>
|
|
176
|
+
<div className="h-[150px]">
|
|
177
|
+
<Slider defaultValue={[40]} orientation="vertical" />
|
|
178
|
+
</div>
|
|
179
|
+
</div>
|
|
180
|
+
</div>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
),
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Real-world usage example showing the slider in a practical UI context.
|
|
188
|
+
* Features a audio settings panel with volume control, visual feedback,
|
|
189
|
+
* and control buttons for common interactions.
|
|
190
|
+
*/
|
|
191
|
+
export const InContext: Story = {
|
|
192
|
+
render: function AudioSettingsPanel() {
|
|
193
|
+
const [volume, setVolume] = React.useState([75]);
|
|
194
|
+
const [bassBoost, setBassBoost] = React.useState([25]);
|
|
195
|
+
const [trebleBoost, setTrebleBoost] = React.useState([15]);
|
|
196
|
+
|
|
197
|
+
const getVolumeIcon = (vol: number) => {
|
|
198
|
+
if (vol === 0) return "🔇";
|
|
199
|
+
if (vol < 30) return "🔈";
|
|
200
|
+
if (vol < 70) return "🔉";
|
|
201
|
+
return "🔊";
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
return (
|
|
205
|
+
<Card className="w-[400px]">
|
|
206
|
+
<CardHeader>
|
|
207
|
+
<CardTitle>Audio Settings</CardTitle>
|
|
208
|
+
<CardDescription>
|
|
209
|
+
Adjust your audio preferences and equalizer settings
|
|
210
|
+
</CardDescription>
|
|
211
|
+
</CardHeader>
|
|
212
|
+
<CardContent className="space-y-6">
|
|
213
|
+
{/* Master Volume */}
|
|
214
|
+
<div className="space-y-3">
|
|
215
|
+
<div className="flex items-center justify-between">
|
|
216
|
+
<Label className="flex items-center gap-2">
|
|
217
|
+
<span className="text-lg">
|
|
218
|
+
{getVolumeIcon(volume[0] ?? 75)}
|
|
219
|
+
</span>
|
|
220
|
+
Master Volume
|
|
221
|
+
</Label>
|
|
222
|
+
<span className="text-sm text-muted-foreground font-mono">
|
|
223
|
+
{volume[0]}%
|
|
224
|
+
</span>
|
|
225
|
+
</div>
|
|
226
|
+
<Slider
|
|
227
|
+
value={volume}
|
|
228
|
+
onValueChange={setVolume}
|
|
229
|
+
max={100}
|
|
230
|
+
step={1}
|
|
231
|
+
className="[&>div]:bg-gradient-to-r [&>div]:from-green-500 [&>div]:to-blue-500"
|
|
232
|
+
/>
|
|
233
|
+
<div className="flex gap-2">
|
|
234
|
+
<Button
|
|
235
|
+
size="sm"
|
|
236
|
+
variant="outline"
|
|
237
|
+
onClick={() => setVolume([0])}
|
|
238
|
+
>
|
|
239
|
+
Mute
|
|
240
|
+
</Button>
|
|
241
|
+
<Button
|
|
242
|
+
size="sm"
|
|
243
|
+
variant="outline"
|
|
244
|
+
onClick={() => setVolume([50])}
|
|
245
|
+
>
|
|
246
|
+
50%
|
|
247
|
+
</Button>
|
|
248
|
+
<Button
|
|
249
|
+
size="sm"
|
|
250
|
+
variant="outline"
|
|
251
|
+
onClick={() => setVolume([100])}
|
|
252
|
+
>
|
|
253
|
+
Max
|
|
254
|
+
</Button>
|
|
255
|
+
</div>
|
|
256
|
+
</div>
|
|
257
|
+
|
|
258
|
+
{/* Equalizer */}
|
|
259
|
+
<div className="space-y-4">
|
|
260
|
+
<h4 className="font-medium">Equalizer</h4>
|
|
261
|
+
|
|
262
|
+
<div className="space-y-3">
|
|
263
|
+
<div className="flex items-center justify-between">
|
|
264
|
+
<Label>Bass Boost</Label>
|
|
265
|
+
<span className="text-sm text-muted-foreground">
|
|
266
|
+
{bassBoost[0] && bassBoost[0] > 0
|
|
267
|
+
? `+${bassBoost[0]}`
|
|
268
|
+
: bassBoost[0]}{" "}
|
|
269
|
+
dB
|
|
270
|
+
</span>
|
|
271
|
+
</div>
|
|
272
|
+
<Slider
|
|
273
|
+
value={bassBoost}
|
|
274
|
+
onValueChange={setBassBoost}
|
|
275
|
+
min={-12}
|
|
276
|
+
max={12}
|
|
277
|
+
step={1}
|
|
278
|
+
className="[&>div]:bg-red-500"
|
|
279
|
+
/>
|
|
280
|
+
</div>
|
|
281
|
+
|
|
282
|
+
<div className="space-y-3">
|
|
283
|
+
<div className="flex items-center justify-between">
|
|
284
|
+
<Label>Treble Boost</Label>
|
|
285
|
+
<span className="text-sm text-muted-foreground">
|
|
286
|
+
{trebleBoost[0] && trebleBoost[0] > 0
|
|
287
|
+
? `+${trebleBoost[0]}`
|
|
288
|
+
: trebleBoost[0]}{" "}
|
|
289
|
+
dB
|
|
290
|
+
</span>
|
|
291
|
+
</div>
|
|
292
|
+
<Slider
|
|
293
|
+
value={trebleBoost}
|
|
294
|
+
onValueChange={setTrebleBoost}
|
|
295
|
+
min={-12}
|
|
296
|
+
max={12}
|
|
297
|
+
step={1}
|
|
298
|
+
className="[&>div]:bg-blue-500"
|
|
299
|
+
/>
|
|
300
|
+
</div>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
{/* Reset Button */}
|
|
304
|
+
<div className="pt-2">
|
|
305
|
+
<Button
|
|
306
|
+
variant="outline"
|
|
307
|
+
onClick={() => {
|
|
308
|
+
setVolume([75]);
|
|
309
|
+
setBassBoost([0]);
|
|
310
|
+
setTrebleBoost([0]);
|
|
311
|
+
}}
|
|
312
|
+
className="w-full"
|
|
313
|
+
>
|
|
314
|
+
Reset to Defaults
|
|
315
|
+
</Button>
|
|
316
|
+
</div>
|
|
317
|
+
</CardContent>
|
|
318
|
+
</Card>
|
|
319
|
+
);
|
|
320
|
+
},
|
|
321
|
+
};
|