Presets

Blocks

Get PRO

Need premium blocks and templates? Upgrade to PRO and get access.

Upgrade
JoinLogin
Presets
Monochrome
Overview
  • Introduction
  • Components
  • Installation
Components
  • Accordion
  • Alert
  • Alert Dialog
  • Aspect Ratio
  • Avatar
  • Badge
  • Breadcrumb
  • Button
  • Button Group
  • CalendarNEW
  • Card
  • CarouselNEW
  • Checkbox
  • Collapsible
  • Dialog
  • Dropdown Menu
  • Empty
  • Field
  • Input
  • Input Group
  • Item
  • Kbd
  • Label
  • Native Select
  • Scroll Area
  • SelectNEW
  • Separator
  • SwitchNEW
  • Table
  • Tabs
  • Textarea
  • TooltipNEW

Scroll Area

PreviousNext

Augments native scroll functionality for custom, cross-browser styling.

1import { ScrollArea } from "@/components/ui/scroll-area";2import { Separator } from "@/components/ui/separator";3import { For } from "solid-js";4

Installation

pnpm dlx sprawlify@latest add scroll-area
npx sprawlify@latest add scroll-area
yarn sprawlify@latest add scroll-area
bunx --bun sprawlify@latest add scroll-area

Install the following dependencies:

pnpm add @sprawlify/primitives @sprawlify/solid
npm install @sprawlify/primitives @sprawlify/solid
yarn add @sprawlify/primitives @sprawlify/solid
bun add @sprawlify/primitives @sprawlify/solid

Add the following files to your project:

scroll-area.tsx
1import { ScrollArea as ScrollAreaPrimitive } from "@sprawlify/solid/scroll-area";2import { cn } from "@/lib/utils";3import { type ComponentProps, splitProps } from "solid-js";45function ScrollArea(props: ComponentProps<typeof ScrollAreaPrimitive.Root>) {6  const [local, others] = splitProps(props, ["class", "children"]);78  return (9    <ScrollAreaPrimitive.Root10      data-slot="scroll-area"11      class={cn("relative", local.class)}12      {...others}13    >14      <ScrollAreaPrimitive.Viewport15        data-slot="scroll-area-viewport"16        class="focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1 scrollbar-none"17      >18        {local.children}19      </ScrollAreaPrimitive.Viewport>20      <ScrollBar />21      <ScrollAreaPrimitive.Corner />22    </ScrollAreaPrimitive.Root>23  );24}2526function ScrollBar(props: ComponentProps<typeof ScrollAreaPrimitive.Scrollbar>) {27  const [local, others] = splitProps(props, ["class", "orientation"]);28  const orientation = () => local.orientation ?? "vertical";2930  return (31    <ScrollAreaPrimitive.Scrollbar32      data-slot="scroll-area-scrollbar"33      data-orientation={orientation()}34      orientation={orientation()}35      class={cn(36        "data-[orientation=horizontal]:h-2.5 data-[orientation=horizontal]:flex-col data-[orientation=horizontal]:border-t data-[orientation=horizontal]:border-t-transparent data-[orientation=vertical]:h-full data-[orientation=vertical]:w-2.5 data-[orientation=vertical]:border-l data-[orientation=vertical]:border-l-transparent flex touch-none p-px transition-colors select-none",37        local.class,38      )}39      {...others}40    >41      <ScrollAreaPrimitive.Thumb42        data-slot="scroll-area-thumb"43        class="rounded-full bg-border relative flex-1"44      />45    </ScrollAreaPrimitive.Scrollbar>46  );47}4849export { ScrollArea, ScrollBar };50

Update the import paths to match your project setup.

Usage

1import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"
1<ScrollArea class="h-[200px] w-[350px] rounded-md border p-4">
2  Your scrollable content here.
3</ScrollArea>

Examples

Horizontal

Use ScrollBar with orientation="horizontal" for horizontal scrolling.

1import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area";2import { For } from "solid-js";34export interface Artwork {

Vertical

1import { ScrollArea } from "@/components/ui/scroll-area";2import { Separator } from "@/components/ui/separator";3import { For } from "solid-js";4

On This Page

InstallationUsageExamplesHorizontalVertical

Get PRO

Need premium blocks and templates? Upgrade to PRO and get access.