Scroll Area
Augments native scroll functionality for custom, cross-browser styling.
Installation
Install the following dependencies:
pnpm add @radix-ui/react-scroll-area
Copy and paste the following code into your project.
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
import { cn } from "~/utils/tailwind";
function ScrollArea({
className,
children,
...props
}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {
return (
<ScrollAreaPrimitive.Root
className={cn("relative overflow-hidden", className)}
{...props}
>
<ScrollAreaPrimitive.Viewport className="size-full rounded-[inherit]">
{children}
</ScrollAreaPrimitive.Viewport>
<ScrollAreaPrimitive.Corner />
</ScrollAreaPrimitive.Root>
);
}
function ScrollAreaBar({
className,
orientation = "vertical",
...props
}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {
return (
<ScrollAreaPrimitive.ScrollAreaScrollbar
orientation={orientation}
className={cn(
"flex touch-none select-none transition-colors [&>div]:bg-border",
orientation === "vertical" &&
"h-full w-2.5 border-l border-l-transparent p-0.25",
orientation === "horizontal" &&
"h-2.5 flex-col border-t border-t-transparent p-0.25",
className,
)}
{...props}
>
<ScrollAreaPrimitive.ScrollAreaThumb className="relative flex-1 rounded-full" />
</ScrollAreaPrimitive.ScrollAreaScrollbar>
);
}
export { ScrollArea, ScrollAreaBar };
Update the import paths to match your project setup.
Usage
import { ScrollArea } from "~/components/ui/ScrollArea";
<ScrollArea className="h-48 w-[350px] rounded-md border p-4">
Jokester began sneaking into the castle in the middle of the night and leaving
jokes all over the place: under the king's pillow, in his soup, even in the
royal toilet. The king was furious, but he couldn't seem to stop Jokester. And
then, one day, the people of the kingdom discovered that the jokes left by
Jokester were so funny that they couldn't help but laugh. And once they
started laughing, they couldn't stop.
</ScrollArea>
Examples
Vertical Scrolling
By default, <ScrollArea>
will scroll vertically.
Horizontal Scrolling
Add <ScrollAreaBar orientation="horizontal" />
as a child of <ScrollArea>
to enable horizontal scrolling.