| import * as React from "react"; |
| import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"; |
|
|
| import { cn } from "@/lib/utils"; |
|
|
| function ScrollArea({ |
| className, |
| children, |
| ...props |
| }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) { |
| return ( |
| <ScrollAreaPrimitive.Root |
| data-slot="scroll-area" |
| className={cn("relative", className)} |
| {...props} |
| > |
| <ScrollAreaPrimitive.Viewport |
| data-slot="scroll-area-viewport" |
| className="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1" |
| > |
| {children} |
| </ScrollAreaPrimitive.Viewport> |
| <ScrollBar /> |
| <ScrollAreaPrimitive.Corner /> |
| </ScrollAreaPrimitive.Root> |
| ); |
| } |
|
|
| function ScrollBar({ |
| className, |
| orientation = "vertical", |
| ...props |
| }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) { |
| return ( |
| <ScrollAreaPrimitive.ScrollAreaScrollbar |
| data-slot="scroll-area-scrollbar" |
| orientation={orientation} |
| className={cn( |
| "flex touch-none p-px transition-colors select-none", |
| orientation === "vertical" && |
| "h-full w-2.5 border-l border-l-transparent", |
| orientation === "horizontal" && |
| "h-2.5 flex-col border-t border-t-transparent", |
| className |
| )} |
| {...props} |
| > |
| <ScrollAreaPrimitive.ScrollAreaThumb |
| data-slot="scroll-area-thumb" |
| className="bg-border relative flex-1 rounded-full" |
| /> |
| </ScrollAreaPrimitive.ScrollAreaScrollbar> |
| ); |
| } |
|
|
| export { ScrollArea, ScrollBar }; |
|
|