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

आकार बदलने योग्य

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

import {
  ResizableHandle,
  ResizablePanel,

रिसाइज़ेबल कंपोनेंट किसी क्षेत्र को ऐसे पैनलों में बाँटता है जिनका अनुपात उपयोगकर्ता खींचकर बदल सकता है — हॉरिज़ॉन्टल या वर्टिकल, एक-दूसरे में नेस्ट किए जा सकने वाले, और कीबोर्ड से चलने वाले हैंडल के साथ। दोनों वैरिएंट bvaughn की react-resizable-panels को रैप करते हैं और नियोब्रूटलिस्ट रेसिपी के अनुसार स्टाइल किए गए हैं: मोटे बॉर्डर, कठोर छायाएँ और बोल्ड टाइपोग्राफ़ी।

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

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

परिचय

Resizable कंपोनेंट bvaughn द्वारा बनाए गए react-resizable-panels पर आधारित है.

इंस्टॉलेशन

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

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

pnpm add react-resizable-panels
npm install react-resizable-panels
yarn add react-resizable-panels
bun add react-resizable-panels

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

components/ui/resizable.tsx
"use client"

import * as ResizablePrimitive from "react-resizable-panels"

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

function ResizablePanelGroup({
  className,
  ...props
}: ResizablePrimitive.GroupProps) {
  return (
    <ResizablePrimitive.Group
      data-slot="resizable-panel-group"
      className={cn(
        "flex h-full w-full aria-[orientation=vertical]:flex-col",
        className
      )}
      {...props}
    />
  )
}

function ResizablePanel({ ...props }: ResizablePrimitive.PanelProps) {
  return <ResizablePrimitive.Panel data-slot="resizable-panel" {...props} />
}

function ResizableHandle({
  withHandle,
  className,
  ...props
}: ResizablePrimitive.SeparatorProps & {
  withHandle?: boolean
}) {
  return (
    <ResizablePrimitive.Separator
      data-slot="resizable-handle"
      className={cn(
        "relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary aria-[orientation=horizontal]:h-px aria-[orientation=horizontal]:w-full aria-[orientation=horizontal]:after:left-0 aria-[orientation=horizontal]:after:h-1 aria-[orientation=horizontal]:after:w-full aria-[orientation=horizontal]:after:translate-x-0 aria-[orientation=horizontal]:after:-translate-y-1/2 [&[aria-orientation=horizontal]>div]:rotate-90",
        className
      )}
      {...props}
    >
      {withHandle && (
        <div className="z-10 flex h-6 w-1 shrink-0 rounded-lg bg-border" />
      )}
    </ResizablePrimitive.Separator>
  )
}

export { ResizableHandle, ResizablePanel, ResizablePanelGroup }

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

उपयोग

import {
  ResizableHandle,
  ResizablePanel,
  ResizablePanelGroup,
} from "@/components/ui/resizable"
<ResizablePanelGroup orientation="horizontal">
  <ResizablePanel>One</ResizablePanel>
  <ResizableHandle />
  <ResizablePanel>Two</ResizablePanel>
</ResizablePanelGroup>

कंपोज़िशन

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

ResizablePanelGroup
├── ResizablePanel
├── ResizableHandle
└── ResizablePanel

उदाहरण

वर्टिकल

वर्टिकल तरीके से आकार बदलने के लिए orientation="vertical" का उपयोग करें.

import {
  ResizableHandle,
  ResizablePanel,

हैंडल

एक दृश्य हैंडल दिखाने के लिए ResizableHandle पर withHandle prop का उपयोग करें.

import {
  ResizableHandle,
  ResizablePanel,

RTL

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

"use client"

import * as React from "react"

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

हैंडल WAI-ARIA Window Splitter पैटर्न का पालन करता है: react-resizable-panels हर हैंडल को फ़ोकस-योग्य role="separator" के रूप में रेंडर करता है, जिसमें aria-valuenow / aria-valuemin / aria-valuemax होते हैं और aria-controls उस पैनल की ओर इशारा करता है जिसका आकार वह बदलता है, इसलिए स्क्रीन रीडर स्प्लिट की स्थिति बदलते ही उसकी घोषणा करते हैं।

कीबोर्ड इंटरैक्शन:

कुंजीक्रिया
Tab / Shift + Tabफ़ोकस किसी रिसाइज़ हैंडल पर लाएँ / उससे हटाएँ
ArrowLeft / ArrowRightहॉरिज़ॉन्टल ग्रुप का आकार एक स्टेप बदलें
ArrowUp / ArrowDownवर्टिकल ग्रुप का आकार एक स्टेप बदलें
Homeहैंडल से पहले वाले पैनल को उसके न्यूनतम आकार तक सिकोड़ें
Endहैंडल से पहले वाले पैनल को उसके अधिकतम आकार तक बढ़ाएँ
Enterकोलैप्सिबल पैनल को कोलैप्स और एक्सपैंड के बीच टॉगल करें

API रेफ़रेंस

react-resizable-panels दस्तावेज़ देखें.

चेंजलॉग

2025-02-02 react-resizable-panels v4

react-resizable-panels v4 में अपडेट किया गया. पूरी जानकारी के लिए v4.0.0 रिलीज़ नोट्स देखें.

यदि आप react-resizable-panels की प्रिमिटिव का सीधे उपयोग कर रहे हैं, तो निम्नलिखित बदलावों का ध्यान रखें:

v3v4
PanelGroupGroup
PanelResizeHandleSeparator
direction proporientation prop
defaultSize={50}defaultSize="50%"
onLayoutonLayoutChange
ImperativePanelHandlePanelImperativeHandle
ref prop on PanelpanelRef prop
data-panel-group-directionaria-orientation