आकार बदलने योग्य
कोड संपादकों, फ़ाइल ट्री और डैशबोर्ड लेआउट के लिए खींचने योग्य विभाजित पैन — नियोब्रूटलिस्ट शैली के बॉर्डर और शैडो ट्रीटमेंट के साथ।
import {
ResizableHandle,
ResizablePanel,रिसाइज़ेबल कंपोनेंट किसी क्षेत्र को ऐसे पैनलों में बाँटता है जिनका अनुपात उपयोगकर्ता खींचकर बदल सकता है — हॉरिज़ॉन्टल या वर्टिकल, एक-दूसरे में नेस्ट किए जा सकने वाले, और कीबोर्ड से चलने वाले हैंडल के साथ। दोनों वैरिएंट bvaughn की react-resizable-panels को रैप करते हैं और नियोब्रूटलिस्ट रेसिपी के अनुसार स्टाइल किए गए हैं: मोटे बॉर्डर, कठोर छायाएँ और बोल्ड टाइपोग्राफ़ी।
इसे इन स्थितियों में चुनें:
- कोड एडिटर और IDE जैसे लेआउट — फ़ाइल ट्री, एडिटर और प्रीव्यू पेन, जिनका आकार उपयोगकर्ता अपनी पसंद से तय करे।
- मास्टर–डिटेल व्यू — इनबॉक्स और थ्रेड, टेबल और रिकॉर्ड इंस्पेक्टर, जहाँ डिवाइडर वहीं रहे जहाँ उपयोगकर्ता चाहे।
- डैशबोर्ड और कंसोल — किसी लॉग पेन या टर्मिनल को मुख्य व्यू से ऊँचाई लेने दें, वह भी किसी मोडल के बिना।
परिचय#
Resizable कंपोनेंट bvaughn द्वारा बनाए गए react-resizable-panels पर आधारित है.
इंस्टॉलेशन#
pnpm dlx shadcn@latest add https://neobrutalism.com/r/base/resizable.jsonnpx shadcn@latest add https://neobrutalism.com/r/base/resizable.jsonyarn dlx shadcn@latest add https://neobrutalism.com/r/base/resizable.jsonbunx --bun shadcn@latest add https://neobrutalism.com/r/base/resizable.json
निम्नलिखित डिपेंडेंसी इंस्टॉल करें:
pnpm add react-resizable-panelsnpm install react-resizable-panelsyarn add react-resizable-panelsbun add react-resizable-panels
निम्नलिखित कोड को अपने प्रोजेक्ट में कॉपी और पेस्ट करें.
"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 की प्रिमिटिव का सीधे उपयोग कर रहे हैं, तो निम्नलिखित बदलावों का ध्यान रखें:
| v3 | v4 |
|---|---|
PanelGroup | Group |
PanelResizeHandle | Separator |
direction prop | orientation prop |
defaultSize={50} | defaultSize="50%" |
onLayout | onLayoutChange |
ImperativePanelHandle | PanelImperativeHandle |
ref prop on Panel | panelRef prop |
data-panel-group-direction | aria-orientation |
Neobrutalism के रैपर कंपोनेंट (ResizablePanelGroup, ResizablePanel,
ResizableHandle) अपरिवर्तित रहते हैं.