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.

1<script lang="ts">
2import { ScrollArea } from "@/components/ui/scroll-area"
3import { Separator } from "@/components/ui/separator"
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/svelte
npm install @sprawlify/primitives @sprawlify/svelte
yarn add @sprawlify/primitives @sprawlify/svelte
bun add @sprawlify/primitives @sprawlify/svelte

Add the following files to your project:

scroll-area/index.ts
1export { default as ScrollArea } from "./scroll-area.svelte";2export { default as ScrollBar } from "./scroll-bar.svelte";3
scroll-area/scroll-area.svelte
1<script lang="ts">
2import { ScrollArea as ScrollAreaPrimitive } from "@sprawlify/svelte/scroll-area"
3import { cn } from "@/lib/utils"
4import ScrollBar from "./scroll-bar.svelte"
5import type { ComponentProps } from "svelte"
6
7interface Props extends ComponentProps<typeof ScrollAreaPrimitive.Root> {}
8
9let { class: className, children, ...rest }: Props = $props()
10</script>
11
12<ScrollAreaPrimitive.Root
13  data-slot="scroll-area"
14  class={cn("relative", className)}
15  {...rest}
16>
17  <ScrollAreaPrimitive.Viewport
18    data-slot="scroll-area-viewport"
19    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"
20  >
21    {@render children?.()}
22  </ScrollAreaPrimitive.Viewport>
23  <ScrollBar />
24  <ScrollAreaPrimitive.Corner />
25</ScrollAreaPrimitive.Root>
scroll-area/scroll-bar.svelte
1<script lang="ts">
2import { ScrollArea as ScrollAreaPrimitive } from "@sprawlify/svelte/scroll-area"
3import { cn } from "@/lib/utils"
4import type { ComponentProps } from "svelte"
5
6interface Props extends ComponentProps<typeof ScrollAreaPrimitive.Scrollbar> {}
7
8let { class: className, orientation = "vertical", ...rest }: Props = $props()
9</script>
10
11<ScrollAreaPrimitive.Scrollbar
12  data-slot="scroll-area-scrollbar"
13  data-orientation={orientation}
14  {orientation}
15  class={cn(
16    "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",
17    className
18  )}
19  {...rest}
20>
21  <ScrollAreaPrimitive.Thumb
22    data-slot="scroll-area-thumb"
23    class="rounded-full bg-border relative flex-1"
24  />
25</ScrollAreaPrimitive.Scrollbar>

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.

1<script lang="ts">
2import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"
3
4interface Artwork {

Vertical

1<script lang="ts">
2import { ScrollArea } from "@/components/ui/scroll-area"
3import { Separator } from "@/components/ui/separator"
4

On This Page

InstallationUsageExamplesHorizontalVertical

Get PRO

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