Scroll Area

Custom scrollable area with styled scrollbars. Install Scroll Area from the VLLNT UI registry with the shadcn CLI.

Report a bug

Custom scrollable area with styled scrollbars. Part of the utility family in VLLNT UI, it ships as a machine-readable registry entry — copy the source directly into your app with the shadcn CLI and own it, no runtime dependency on a component library.

Preview

Switch between light and dark to inspect the embedded Storybook preview.

Installation

Add Scroll Area to your project with the shadcn CLI. The source lands in your codebase, ready to adapt:

pnpm dlx shadcn@latest add https://ui.vllnt.ai/r/scroll-area.json

Source

"use client"; import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area"; import { cn } from "../../lib/utils"; const ScrollArea = ({ children, className, ref, ...props }: React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root> & { ref?: React.Ref<React.ComponentRef<typeof ScrollAreaPrimitive.Root>>; }) => ( <ScrollAreaPrimitive.Root className={cn("relative overflow-hidden", className)} ref={ref} {...props} > <ScrollAreaPrimitive.Viewport className="h-full w-full rounded-[inherit]"> {children} </ScrollAreaPrimitive.Viewport> <ScrollBar /> <ScrollAreaPrimitive.Corner /> </ScrollAreaPrimitive.Root> ); ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName; const ScrollBar = ({ className, orientation = "vertical", ref, ...props }: React.ComponentPropsWithoutRef< typeof ScrollAreaPrimitive.ScrollAreaScrollbar > & { ref?: React.Ref< React.ComponentRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar> >; }) => ( <ScrollAreaPrimitive.ScrollAreaScrollbar className={cn( "flex touch-none select-none transition-colors", orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]", orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]", className, )} orientation={orientation} ref={ref} {...props} > <ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full bg-border" /> </ScrollAreaPrimitive.ScrollAreaScrollbar> ); ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName; export { ScrollArea, ScrollBar };

Stories

Explore every variant and state in the interactive Storybook:

Preview

Switch between light and dark to inspect the embedded Storybook preview.

Dependencies

  • @vllnt/ui@^0.3.0