Scroll Area
adn-ui/scroll-areaFreeComponent
A native scroll container with custom scrollbars.
Live preview
live · rendered by the registry
Rendered by adn-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.awaiden.com/r/scroll-area.jsonSource
1"use client";23import "./scroll-area.css";4import { ScrollArea as BaseScrollArea } from "@base-ui/react/scroll-area";5import type React from "react";6import { cn } from "tailwind-variants";78import { ScrollAreaContext, useScrollAreaContext } from "./scroll-area.context";9import { scrollAreaVariants, type ScrollAreaVariants } from "./scroll-area.variants";1011export type ScrollAreaProps = ScrollAreaVariants & React.ComponentProps<typeof BaseScrollArea.Root>;1213export const ScrollAreaRoot = ({ children, className, size, ...props }: ScrollAreaProps) => {14 const slots = scrollAreaVariants({ size });1516 return (17 <ScrollAreaContext.Provider value={{ slots }}>18 <BaseScrollArea.Root className={cn(slots.root(), className)} {...props}>19 {children}20 </BaseScrollArea.Root>21 </ScrollAreaContext.Provider>22 );23};2425export type ScrollAreaViewportProps = React.ComponentProps<typeof BaseScrollArea.Viewport>;2627export const ScrollAreaViewport = ({ className, ...props }: ScrollAreaViewportProps) => {28 const { slots } = useScrollAreaContext();29 return <BaseScrollArea.Viewport className={cn(slots.viewport(), className)} {...props} />;30};3132export type ScrollAreaContentProps = React.ComponentProps<typeof BaseScrollArea.Content>;3334export const ScrollAreaContent = ({ className, ...props }: ScrollAreaContentProps) => {35 const { slots } = useScrollAreaContext();36 return <BaseScrollArea.Content className={cn(slots.content(), className)} {...props} />;37};3839export type ScrollAreaScrollbarProps = React.ComponentProps<typeof BaseScrollArea.Scrollbar>;4041export const ScrollAreaScrollbar = ({ className, ...props }: ScrollAreaScrollbarProps) => {42 const { slots } = useScrollAreaContext();43 return <BaseScrollArea.Scrollbar className={cn(slots.scrollbar(), className)} {...props} />;44};4546export type ScrollAreaThumbProps = React.ComponentProps<typeof BaseScrollArea.Thumb>;4748export const ScrollAreaThumb = ({ className, ...props }: ScrollAreaThumbProps) => {49 const { slots } = useScrollAreaContext();50 return <BaseScrollArea.Thumb className={cn(slots.thumb(), className)} {...props} />;51};5253export type ScrollAreaCornerProps = React.ComponentProps<typeof BaseScrollArea.Corner>;5455export const ScrollAreaCorner = ({ className, ...props }: ScrollAreaCornerProps) => {56 const { slots } = useScrollAreaContext();57 return <BaseScrollArea.Corner className={cn(slots.corner(), className)} {...props} />;58};
What it pulls in
npm packages
Files it writes
More from adn-ui
All 46 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | adn-ui | Components | Free | 2 deps · 5 files | |
| Alert Dialogalert-dialog | adn-ui | Components | Free | 2 deps · 5 files | |
| Aspect Ratioaspect-ratio | adn-ui | Components | Free | 1 dep · 5 files | |
| Autocompleteautocomplete | adn-ui | Components | Free | 2 deps · 5 files | |
| Avataravatar | adn-ui | Components | Free | 2 deps · 5 files | |
| Badgebadge | adn-ui | Components | Free | 1 dep · 5 files | |
| Breadcrumbbreadcrumb | adn-ui | Components | Free | 1 dep · 5 files | |
| Buttonbutton | adn-ui | Components | Free | 1 dep · 4 files |
