WebberUI

檔案管理網格

檔案/資料夾網格,框選多選、右鍵選單與檢視切換。

模擬桌面檔案管理器的網格面板:檔案卡依副檔名上色,支援單擊選取、cmd/ctrl 多選、在空白處拖曳框選矩形、右鍵開啟自訂操作選單,並可在網格與列表檢視間切換(項目以 layout 動畫平滑重排)。

載入預覽⋯

Playground

即時調整 props、程式碼片段同步更新——直接試出你要的樣子再複製。

<FileManagerGrid />

安裝

npx shadcn@latest add https://webberui.com/r/file-manager-grid.json

或在 components.json 設定 registries 後,改用 @webberui/file-manager-grid 安裝。

安裝依賴後,從 registry JSON(/r/file-manager-grid.jsonfiles[0].content)複製 file-manager-grid.tsx 原始碼到你的 components/ui/ 目錄:

npm install motion lucide-react clsx tailwind-merge

使用

import { FileManagerGrid, type FileItem } from "@/components/ui/file-manager-grid";

const files: FileItem[] = [
  { id: "1", name: "設計稿", kind: "folder" },
  { id: "2", name: "提案簡報.pdf", kind: "pdf", size: "4.2 MB", modified: "今天 11:03" },
];

<FileManagerGrid
  files={files}
  onOpen={(file) => console.log("開啟", file.name)}
  onSelectionChange={(ids) => console.log("已選取", ids)}
/>

Props

Prop型別預設值說明
filesFileItem[]要顯示的檔案與資料夾清單
defaultView"grid" | "list""grid"初始檢視模式
onSelectionChange(ids: string[]) => void選取集合變更時回呼
onOpen(file: FileItem) => void雙擊項目或右鍵「開啟」時回呼
onDelete(file: FileItem) => void右鍵「移至垃圾桶」時回呼
classNamestring透傳到最外層容器

FileItem 欄位:

欄位型別預設值說明
idstring唯一識別碼,作為選取狀態的 key
namestring檔案或資料夾名稱
kind"folder" | "doc" | "pdf" | "img" | "sheet" | "video" | "zip"檔案種類,決定圖示色系與副檔名籤
sizestring檔案大小的顯示字串(例如 "2.4 MB"
modifiedstring最後修改時間,列表檢視右側顯示

可及性

  • 檔案區使用 role="listbox" 並標記 aria-multiselectable,每個項目為 role="option" 且即時回報 aria-selected
  • 項目可鍵盤聚焦(tabIndex={0} + focus ring),Enter / Space 切換選取,Escape 清除選取並關閉右鍵選單
  • 工具列的項目與選取數量以 aria-live="polite" 播報,檢視切換按鈕帶 aria-pressed 與中文 aria-label
  • 使用者系統開啟「減少動態效果」時,檢視切換重排、選取徽章與選單動畫皆改為即時完成

On this page