ניתן לשינוי גודל
חלוניות מפוצלות הניתנות לגרירה עבור עורכי קוד, עצי קבצים ומערך לוחות מחוונים — עם עיצוב ניאו-ברוטליסטי הכולל מסגרות וצללים.
import {
ResizableHandle,
ResizablePanel,רכיב ה-resizable מפצל אזור לפאנלים שהמשתמשים גוררים כדי לשנות יחס — אופקי או אנכי, ניתן לקינון, עם ידיות שניתנות להפעלה במקלדת. שני הווריאנטים עוטפים את react-resizable-panels של bvaughn, מעוצב לפי המתכון הנאו-ברוטליסטי: מסגרות עבות, צללים חדים וטיפוגרפיה מודגשת.
השתמשו בו כש:
- עורכי קוד ופריסות בסגנון IDE — עץ קבצים, עורך ופאנלי תצוגה מקדימה שהמשתמשים מתאימים לגודל.
- תצוגות master–detail — תיבת דואר ושרשור, טבלה ובודק רשומה, עם המפריד במקום שהמשתמשים רוצים.
- לוחות מחוונים וקונסולות — מאפשרים לפאנל לוג או טרמינל לקחת גובה מהתצוגה הראשית בלי מודאל.
אודות#
רכיב Resizable בנוי על גבי react-resizable-panels של bvaughn.
התקנה#
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,ידית#
השתמשו במאפיין withHandle על ResizableHandle כדי להציג ידית גלויה.
import {
ResizableHandle,
ResizablePanel,RTL#
כדי להפעיל RTL ב-Neobrutalism, עיינו במדריך ההגדרה של RTL.
"use client"
import * as React from "react"נגישות#
הידית עוקבת אחרי דפוס Window Splitter של WAI-ARIA: 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.
Changelog#
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) נותרים ללא שינוי.