Resizable
Resizable chia một vùng thành các panel mà người dùng kéo để đổi kích thước, thu gọn / mở rộng, theo chiều ngang hoặc dọc.
Import
Cài từ npm, chép mã nguồn vào dự án bằng @yugen-ui/cli hoặc shadcn CLI, hoặc import thẳng khi làm việc trong repo này.
// npm install yugen-uiimport { ResizablePanelGroup, ResizablePanel, ResizableHandle } from "yugen-ui";Biến thể
Mỗi ô là một mẫu độc lập: hover để Copy, hoặc bấm Code để xem mã nguồn.
Lưu bố cục
persistKey ghi bố cục vào localStorage sau mỗi lần kéo (bọc try/catch); đặt id cố định cho từng panel. Kéo rồi tải lại trang.
Dọc có grip
orientation="vertical" và ResizableHandle withHandle.
RTL lật thứ tự
Panel đầu tiên nằm bên phải; kéo và ArrowLeft / ArrowRight di chuyển đường chia đúng hướng nhìn thấy. mirrorInRtl={false} giữ bố cục LTR như bản cũ.
Cách dùng
- Đặt minSize để panel không bị kéo mất nội dung; collapsible cho panel phụ (thanh bên, terminal).
- Dùng collapseButton cho panel người dùng hay ẩn / hiện; Enter trên đường chia làm cùng việc.
- Đặt id cố định cho panel khi dùng persistKey; đặt khung chứa có chiều cao cố định cho group dọc.
- Không chia quá 3–4 panel trong một group.
- Không bỏ ResizableHandle giữa hai panel — ở RTL, chỉ đường chia mới được lật hướng kéo.
- Không dùng Resizable cho bố cục người dùng không cần tuỳ chỉnh.
Props
| Prop · Kiểu | Mặc định | Mô tả |
|---|---|---|
| ResizablePanelGroup | Mặc định: "horizontal" | Hướng chia panel. |
| ResizablePanelGroup | Mặc định: — | Lưu / khôi phục bố cục qua localStorage (khoá react-resizable-panels:<persistKey>). |
| ResizablePanelGroup | Mặc định: true | RTL: hiển thị nhóm ngang phải → trái (kéo / phím mũi tên theo hướng nhìn thấy); false = giữ bố cục LTR. |
| ResizablePanelGroup | Mặc định: — | Gọi sau khi kéo xong — dùng để lưu bố cục theo cách riêng. |
| ResizablePanel | Mặc định: — | Chuỗi “30%” = phần trăm, số = px. Nhấp đúp đường chia trả về defaultSize. |
| ResizablePanel | Mặc định: false / "0%" | Cho phép thu gọn panel (kéo qua minSize, Enter, hoặc nút). |
| ResizableHandle | Mặc định: false | Hiện grip ở giữa đường chia. |
| ResizableHandle | Mặc định: — | Nút thu gọn / mở rộng panel trước (trên / đầu dòng) hoặc sau đường chia; panel đó phải collapsible. |
| ResizableHandle | Mặc định: "Collapse panel" / "Expand panel" | Chú thích (title) của nút. |
| ResizableHandle | Mặc định: false | Khoá đường chia / tắt nhấp đúp để đặt lại. |
Messages
Chữ có sẵn của component: nhãn, aria-label, thông báo cho trình đọc màn hình.
Mặc định là tiếng Anh. Đổi qua prop messages của YugenProvider, theo namespace bên dưới; messagesVi chứa bản tiếng Việt. Xem Ngôn ngữ giao diện.
messages.resizable
| Khoá · Kiểu | Mặc định (tiếng Anh) | messagesVi |
|---|---|---|
| collapsestring Chú thích (title) nút thu gọn panel của ResizableHandle. | Mặc định (tiếng Anh)"Collapse panel" | messagesVi"Thu gọn panel" |
| expandstring Chú thích (title) nút mở rộng panel của ResizableHandle. | Mặc định (tiếng Anh)"Expand panel" | messagesVi"Mở rộng panel" |