सामग्री पर जाएँ

स्क्रॉल क्षेत्र

चैट पैन, साइडबार और फ़ाइल ट्री के लिए कस्टम, क्रॉस-ब्राउज़र स्क्रॉलबार वाला एक स्क्रॉल करने योग्य कंटेनर — एक मोटे नियोब्रूटलिस्ट थंब के साथ।

import * as React from "react"

import { ScrollArea } from "@/components/ui/scroll-area"

स्क्रॉल एरिया ब्राउज़र के डिफ़ॉल्ट स्क्रॉलबार की जगह ऐसे स्क्रॉलबार देता है जिन्हें आप ख़ुद स्टाइल करते हैं — नेटिव स्क्रॉलिंग नीचे बनी रहती है, इसलिए व्हील, टच और मोमेंटम का बर्ताव जस का तस रहता है। यह Base UI Scroll Area कंपोनेंट पर बना है और नियोब्रूटलिस्ट रेसिपी के अनुसार स्टाइल किया गया है: बॉर्डर के रंग का ठोस, चौड़ा थंब और व्यूपोर्ट पर कठोर फ़ोकस रिंग।

इसे इन स्थितियों में चुनें:

  • चैट और लॉग पेन — ऊँचाई तय कर दें और मैसेज को पेज के बजाय पैनल के भीतर स्क्रॉल होने दें।
  • साइडबार और फ़ाइल ट्री — लंबी नेविगेशन सूचियाँ, जो मुख्य कंटेंट से अलग स्क्रॉल होती हैं।
  • हॉरिज़ॉन्टल स्ट्रिपorientation="horizontal" से टैग की पंक्तियाँ, कार्ड गैलरी और चौड़ी टेबल।

इंस्टॉलेशन

pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/scroll-area.json
npx shadcn@latest add https://neobrutalism.com/r/base/scroll-area.json
yarn dlx shadcn@latest add https://neobrutalism.com/r/base/scroll-area.json
bunx --bun shadcn@latest add https://neobrutalism.com/r/base/scroll-area.json

निम्नलिखित डिपेंडेंसी इंस्टॉल करें:

pnpm add @base-ui/react
npm install @base-ui/react
yarn add @base-ui/react
bun add @base-ui/react

निम्नलिखित कोड को अपने प्रोजेक्ट में कॉपी और पेस्ट करें.

components/ui/scroll-area.tsx
"use client"

import * as React from "react"
import { ScrollArea as ScrollAreaPrimitive } from "radix-ui"

import { cn } from "@/lib/utils"

function ScrollArea({
  className,
  children,
  ...props
}: React.ComponentProps<typeof ScrollAreaPrimitive.Root>) {
  return (
    <ScrollAreaPrimitive.Root
      data-slot="scroll-area"
      className={cn("relative", className)}
      {...props}
    >
      <ScrollAreaPrimitive.Viewport
        data-slot="scroll-area-viewport"
        className="size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary"
      >
        {children}
      </ScrollAreaPrimitive.Viewport>
      <ScrollBar />
      <ScrollAreaPrimitive.Corner />
    </ScrollAreaPrimitive.Root>
  )
}

function ScrollBar({
  className,
  orientation = "vertical",
  ...props
}: React.ComponentProps<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>) {
  return (
    <ScrollAreaPrimitive.ScrollAreaScrollbar
      data-slot="scroll-area-scrollbar"
      data-orientation={orientation}
      orientation={orientation}
      className={cn(
        "flex touch-none p-px transition-colors select-none data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent",
        className
      )}
      {...props}
    >
      <ScrollAreaPrimitive.ScrollAreaThumb
        data-slot="scroll-area-thumb"
        className="relative flex-1 rounded bg-border"
      />
    </ScrollAreaPrimitive.ScrollAreaScrollbar>
  )
}

export { ScrollArea, ScrollBar }

अपने प्रोजेक्ट सेटअप के अनुसार इंपोर्ट पाथ अपडेट करें.

उपयोग

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

कंपोज़िशन

ScrollArea बनाने के लिए निम्नलिखित कंपोज़िशन का उपयोग करें:

ScrollArea
└── ScrollBar

उदाहरण

हॉरिज़ॉन्टल

हॉरिज़ॉन्टल स्क्रॉलिंग के लिए orientation="horizontal" के साथ ScrollBar का उपयोग करें.

import * as React from "react"
import Image from "next/image"

RTL

Neobrutalism में RTL समर्थन सक्षम करने के लिए, RTL कॉन्फ़िगरेशन गाइड देखें.

"use client"

import * as React from "react"

एक्सेसिबिलिटी

स्क्रॉल एरिया के लिए कोई WAI-ARIA पैटर्न नहीं है — और ज़रूरत भी नहीं, क्योंकि Base UI कंपोनेंट नीचे एक असली नेटिव स्क्रॉल कंटेनर बनाए रखता है, इसलिए व्हील, टच और कीबोर्ड स्क्रॉलिंग ठीक वैसे ही चलती है जैसे ब्राउज़र की अपनी। हर ब्राउज़र स्क्रॉल कंटेनर को अपने आप कीबोर्ड-फ़ोकस-योग्य नहीं बनाता: अगर कंटेंट में कोई फ़ोकस-योग्य एलिमेंट न हो, तो व्यूपोर्ट पर tabIndex={0} और एक aria-label जोड़ें, ताकि कीबोर्ड उपयोगकर्ता उस तक पहुँचकर स्क्रॉल कर सकें — इस स्थिति के लिए दिखने वाली फ़ोकस रिंग स्टाइल्स में पहले से मौजूद है। कस्टम स्क्रॉलबार और थंब सिर्फ़ पॉइंटर के लिए हैं; वे स्क्रॉल करने का एकमात्र ज़रिया कभी नहीं होने चाहिए।

API रेफ़रेंस

Base UI Scroll Area दस्तावेज़ देखें.