|
|
|
|
| import * as React from 'react'; |
| import { ScrollArea as ScrollAreaPrimitive } from 'radix-ui'; |
|
|
| 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" |
| data-orientation={orientation} |
| orientation={orientation} |
| className={cn( |
| 'data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none', |
| className, |
| )} |
| {...props} |
| > |
| <ScrollAreaPrimitive.ScrollAreaThumb |
| data-slot="scroll-area-thumb" |
| className="rounded-full bg-border relative flex-1" |
| /> |
| </ScrollAreaPrimitive.ScrollAreaScrollbar> |
| ); |
| } |
|
|
| export { ScrollArea, ScrollBar }; |
|
|