apps/eclipse/content/design-system/components/files.mdx
import { Files, File, Folder } from "@prisma/eclipse";
Basic File Structure
The Files component displays file and folder hierarchies with an interactive tree structure.
import { Files, File, Folder } from "@prisma/eclipse";
export function FileTree() {
return (
<Files>
<Folder name="app" defaultOpen>
<File name="layout.tsx" />
<File name="page.tsx" />
<File name="globals.css" />
</Folder>
<Folder name="components">
<File name="button.tsx" />
<File name="tabs.tsx" />
</Folder>
<File name="package.json" />
</Files>
);
}
Live Example:
<Files> <Folder name="app" defaultOpen> <File name="layout.tsx" /> <File name="page.tsx" /> <File name="globals.css" /> </Folder> <Folder name="components"> <File name="button.tsx" /> <File name="tabs.tsx" /> </Folder> <File name="package.json" /> </Files>Nested Folders
You can nest folders to represent complex directory structures:
import { Files, File, Folder } from "@prisma/eclipse";
export function NestedStructure() {
return (
<Files>
<Folder name="src" defaultOpen>
<Folder name="components" defaultOpen>
<File name="Button.tsx" />
<File name="Input.tsx" />
</Folder>
<Folder name="utils">
<File name="helpers.ts" />
<File name="validators.ts" />
</Folder>
<File name="index.tsx" />
</Folder>
<File name="package.json" />
<File name="tsconfig.json" />
</Files>
);
}
Live Example:
<Files> <Folder name="src" defaultOpen> <Folder name="components" defaultOpen> <File name="Button.tsx" /> <File name="Input.tsx" /> </Folder> <Folder name="utils"> <File name="helpers.ts" /> <File name="validators.ts" /> </Folder> <File name="index.tsx" /> </Folder> <File name="package.json" /> <File name="tsconfig.json" /> </Files>All Folders Collapsed
By default, folders are collapsed:
import { Files, File, Folder } from "@prisma/eclipse";
export function CollapsedFolders() {
return (
<Files>
<Folder name="app">
<File name="layout.tsx" />
<File name="page.tsx" />
</Folder>
<Folder name="components">
<File name="button.tsx" />
<File name="tabs.tsx" />
</Folder>
<Folder name="lib">
<File name="utils.ts" />
</Folder>
</Files>
);
}
Live Example:
<Files> <Folder name="app"> <File name="layout.tsx" /> <File name="page.tsx" /> </Folder> <Folder name="components"> <File name="button.tsx" /> <File name="tabs.tsx" /> </Folder> <Folder name="lib"> <File name="utils.ts" /> </Folder> </Files>With Custom Icons
You can add custom icons to files:
import { Files, File, Folder } from "@prisma/eclipse";
import { FileIcon, FileTextIcon } from "lucide-react";
export function CustomIcons() {
return (
<Files>
<File name="README.md" icon={<FileTextIcon />} />
<File name="index.ts" icon={<FileIcon />} />
</Files>
);
}
Project Structure Example
A complete project structure:
import { Files, File, Folder } from "@prisma/eclipse";
export function ProjectStructure() {
return (
<Files>
<Folder name="app" defaultOpen>
<Folder name="api">
<Folder name="users">
<File name="route.ts" />
</Folder>
</Folder>
<File name="layout.tsx" />
<File name="page.tsx" />
</Folder>
<Folder name="components">
<File name="Header.tsx" />
<File name="Footer.tsx" />
</Folder>
<Folder name="lib">
<File name="db.ts" />
<File name="utils.ts" />
</Folder>
<File name=".env.local" />
<File name="next.config.js" />
<File name="package.json" />
</Files>
);
}
Live Example:
<Files> <Folder name="app" defaultOpen> <Folder name="api"> <Folder name="users"> <File name="route.ts" /> </Folder> </Folder> <File name="layout.tsx" /> <File name="page.tsx" /> </Folder> <Folder name="components"> <File name="Header.tsx" /> <File name="Footer.tsx" /> </Folder> <Folder name="lib"> <File name="db.ts" /> <File name="utils.ts" /> </Folder> <File name=".env.local" /> <File name="next.config.js" /> <File name="package.json" /> </Files>Disabled Folder
You can disable folders to prevent them from being opened:
import { Files, File, Folder } from "@prisma/eclipse";
export function DisabledFolder() {
return (
<Files>
<Folder name="node_modules" disabled>
<File name="..." />
</Folder>
<Folder name="src" defaultOpen>
<File name="index.ts" />
</Folder>
</Files>
);
}
children - File and Folder components (ReactNode, required)className - Additional CSS classes (optional)name - Name of the file (string, required)icon - Optional icon to display before the file name (ReactNode, optional)className - Additional CSS classes (optional)name - Name of the folder (string, required)disabled - Whether the folder is disabled and cannot be opened/closed (boolean, default: false)defaultOpen - Whether the folder is open by default (boolean, default: false)children - Folder contents - File and Folder components (ReactNode, optional)className - Additional CSS classes (optional)defaultOpen on top-level folders to show important structurenode_modules)Next.js App Router Structure
<Files>
<Folder name="app" defaultOpen>
<Folder name="(auth)">
<Folder name="login">
<File name="page.tsx" />
</Folder>
</Folder>
<File name="layout.tsx" />
<File name="page.tsx" />
</Folder>
</Files>
Monorepo Structure
<Files>
<Folder name="packages" defaultOpen>
<Folder name="ui">
<File name="package.json" />
<Folder name="src">
<File name="index.ts" />
</Folder>
</Folder>
<Folder name="api">
<File name="package.json" />
<Folder name="src">
<File name="index.ts" />
</Folder>
</Folder>
</Folder>
<File name="package.json" />
<File name="turbo.json" />
</Files>
Configuration Files
<Files>
<File name=".env.local" />
<File name=".eslintrc.json" />
<File name=".gitignore" />
<File name="next.config.js" />
<File name="package.json" />
<File name="tsconfig.json" />
</Files>