Scroll Area
retab-ui/scroll-areaFreeComponent
A custom scroll area built on Base UI.
Install it
npx shadcn@latest add https://ui.retab.com/r/scroll-area.jsonSource
1"use client";23import type React from "react";4import { ScrollArea as ScrollAreaPrimitive } from "@base-ui/react/scroll-area";56import { cn } from "@/lib/utils";78export function ScrollArea({9 className,10 children,11 orientation = "both",12 nativeScrollbar = false,13 scrollFade = false,14 scrollbarGutter = false,15 scrollbarOverflowOnly = false,16 viewportClassName,17 viewportProps,18 viewportRef,19 ...props20}: ScrollAreaPrimitive.Root.Props & {21 orientation?: "vertical" | "horizontal" | "both";22 nativeScrollbar?: boolean;23 scrollFade?: boolean;24 scrollbarGutter?: boolean;25 scrollbarOverflowOnly?: boolean;26 viewportClassName?: string;27 viewportProps?: ScrollAreaPrimitive.Viewport.Props;28 viewportRef?: React.Ref<HTMLDivElement>;29}): React.ReactElement {30 const {31 className: viewportPropsClassName,32 key: viewportKey,33 ref: viewportPropsRef,34 ...resolvedViewportProps35 } = viewportProps ?? {};36 const rootClassName = cn(37 "size-full min-h-0",38 scrollbarOverflowOnly && "scrollbar-overflow-only",39 className,40 );41 const resolvedViewportClassName = cn(42 "transition-shadows h-full rounded-[inherit] outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1 focus-visible:ring-offset-background data-has-overflow-x:overscroll-x-contain data-has-overflow-y:overscroll-y-contain",43 scrollFade &&44 "mask-t-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-start)))] mask-r-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-end)))] mask-b-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-y-end)))] mask-l-from-[calc(100%-min(var(--fade-size),var(--scroll-area-overflow-x-start)))] [--fade-size:1.5rem]",45 scrollbarGutter && "data-has-overflow-x:pb-2.5 data-has-overflow-y:pe-2.5",46 viewportPropsClassName,47 viewportClassName,48 );4950 if (nativeScrollbar || !canUsePrimitiveScrollArea()) {51 const { style: rootStyle, ...rootProps } = props;52 const { style: viewportStyle, ...viewportHtmlProps } =53 resolvedViewportProps;5455 return (56 <div57 className={rootClassName}58 style={typeof rootStyle === "function" ? undefined : rootStyle}59 {...rootProps}60 >61 <div62 key={viewportKey}63 {...viewportHtmlProps}64 ref={composeRefs(viewportPropsRef, viewportRef)}65 className={cn("overflow-auto", resolvedViewportClassName)}66 data-slot="scroll-area-viewport"67 style={68// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from retab-ui
All 130 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Alertalert | retab-ui | Components | Free | 1 dep | |
| Alert Dialogalert-dialog | retab-ui | Components | Free | 1 dep | |
| Aspect Ratioaspect-ratio | retab-ui | Components | Free | no deps | |
| Attachment Sidebarattachment-sidebar | retab-ui | Components | Free | 1 dep | |
| Autocompleteautocomplete | retab-ui | Components | Free | 2 deps | |
| Calendarcalendar | retab-ui | Components | Free | 2 deps | |
| Code Viewercode-viewer | retab-ui | Components | Free | 2 deps · 32 files | |
| Commandcommand | retab-ui | Components | Free | 2 deps |
