UIPackage
Menu

Scroll Area

scroll-area ui
Edit on GitHub

Custom scrollbar that always renders the same way across OSes (no flashing native scrollbars on Windows). Use for sidebars, dropdown content, and any overflow region you want to feel consistent.

Also available for Vue ->

Installation

$ npx shadcn@latest add https://uipkge.dev/r/react/scroll-area.json
Named registry: npx shadcn@latest add @uipkge-react/scroll-area Installs to: components/ui/scroll-area/

Examples

npm dependencies

Used by

Files installed (2)

  • components/ui/scroll-area/scroll-area.tsx 1.9 kB
    'use client'
    
    import * as React from 'react'
    import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'
    import { cn } from '@/lib/utils'
    
    const ScrollArea = React.forwardRef<
      React.ElementRef<typeof ScrollAreaPrimitive.Root>,
      React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>
    >(({ className, children, ...props }, ref) => (
      <ScrollAreaPrimitive.Root
        ref={ref}
        data-uipkge=""
        data-slot="scroll-area"
        className={cn('relative', className)}
        {...props}
      >
        <ScrollAreaPrimitive.Viewport
          data-uipkge=""
          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>
    ))
    ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName
    
    const ScrollBar = React.forwardRef<
      React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,
      React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>
    >(({ className, orientation = 'vertical', ...props }, ref) => (
      <ScrollAreaPrimitive.ScrollAreaScrollbar
        ref={ref}
        data-uipkge=""
        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-uipkge=""
          data-slot="scroll-area-thumb"
          className="bg-border relative flex-1 rounded-full"
        />
      </ScrollAreaPrimitive.ScrollAreaScrollbar>
    ))
    ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName
    
    export { ScrollArea, ScrollBar }
  • components/ui/scroll-area/index.ts 0.1 kB
    export { ScrollArea, ScrollBar } from './scroll-area'

Raw manifest: https://uipkge.dev/r/react/scroll-area.json