Examples
Basic Example
A simple file tree example
This example shows a basic file tree with folders and files.
- src
- public
- package.json
- README.md
Code
import * as React from "react";
import { TreeView, TreeViewItem, flattenTree } from "shadcn-treeview";
import { FileIcon, FolderIcon, FolderOpenIcon } from "lucide-react";
const FolderOpenClosedIcon = ({ isOpen }: { isOpen?: boolean }) => {
const Icon = isOpen ? FolderOpenIcon : FolderIcon;
return <Icon className="h-4 w-4 shrink-0 text-muted-foreground" />;
};
export function BasicTreeView() {
const data = React.useMemo(
() =>
flattenTree({
name: "Project",
children: [
{
name: "src",
children: [
{ name: "components", children: [{ name: "tree-view.tsx" }] },
{ name: "app.tsx" },
{ name: "index.tsx" }
]
},
{
name: "public",
children: [{ name: "index.html" }, { name: "favicon.ico" }]
},
{ name: "package.json" },
{ name: "README.md" }
]
}),
[]
);
return (
<TreeView
data={data}
aria-label="Basic file tree"
className="w-64 rounded border p-2"
nodeRenderer={({
element,
isBranch,
isExpanded,
isSelected,
getNodeProps,
level
}) => (
<TreeViewItem
{...getNodeProps()}
name={element.name}
isBranch={isBranch}
isExpanded={isExpanded}
isSelected={isSelected}
level={level}
indentation={16}
icon={
isBranch ? (
<FolderOpenClosedIcon isOpen={isExpanded} />
) : (
<FileIcon className="h-4 w-4 shrink-0 text-muted-foreground" />
)
}
/>
)}
/>
);
}Dense Layout
You can create a more compact layout by reducing the levelIndentation:
<TreeViewItem
{...getNodeProps()}
name={element.name}
level={level}
indentation={16}
levelIndentation={24} // Reduced from default 48
// ...other props
/>