scroll-area.tsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import * as React from 'react'
  2. import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'
  3. import { cn } from '@/lib/utils'
  4. function ScrollArea({
  5. className,
  6. children,
  7. ...props
  8. }: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {
  9. return (
  10. <ScrollAreaPrimitive.Root className={cn('relative overflow-hidden', className)} {...props}>
  11. <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]">
  12. {children}
  13. </ScrollAreaPrimitive.Viewport>
  14. <ScrollBar />
  15. <ScrollAreaPrimitive.Corner />
  16. </ScrollAreaPrimitive.Root>
  17. )
  18. }
  19. function ScrollBar({
  20. className,
  21. orientation = 'vertical',
  22. ...props
  23. }: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {
  24. return (
  25. <ScrollAreaPrimitive.ScrollAreaScrollbar
  26. orientation={orientation}
  27. className={cn(
  28. 'flex touch-none select-none p-px transition-colors',
  29. orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent',
  30. orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent',
  31. className,
  32. )}
  33. {...props}
  34. >
  35. <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" />
  36. </ScrollAreaPrimitive.ScrollAreaScrollbar>
  37. )
  38. }
  39. export { ScrollArea, ScrollBar }