Skip to content

Tree

A collapsible tree view component for Ink 5. Displays hierarchical data with expand/collapse, keyboard navigation, and custom rendering.

Install

Terminal window
npm install @matthesketh/ink-tree

Usage

import React, { useState } from 'react';
import { render } from 'ink';
import { Tree, type TreeNode } from '@matthesketh/ink-tree';
const data: TreeNode[] = [
{
id: 'src',
label: 'src',
children: [
{ id: 'index', label: 'index.ts' },
{
id: 'components',
label: 'components',
children: [
{ id: 'app', label: 'App.tsx' },
{ id: 'header', label: 'Header.tsx' },
],
},
],
},
];
function App() {
const [expanded, setExpanded] = useState(new Set(['src', 'components']));
const [selected, setSelected] = useState('index');
return (
<Tree
nodes={data}
expandedIds={expanded}
selectedId={selected}
maxVisible={10}
/>
);
}
render(<App />);

API

TreeNode

interface TreeNode {
id: string;
label: string;
children?: TreeNode[];
data?: unknown;
}

TreeProps

PropTypeDefaultDescription
nodesTreeNode[]requiredTree data
selectedIdstring-Highlighted node id
expandedIdsSet<string>new Set()Which nodes are expanded
maxVisiblenumber-Windowed display limit
renderNode(node, depth, selected, expanded) => ReactNodedefault rendererCustom node renderer
indentnumber2Spaces per indentation level

flattenTree

function flattenTree(nodes: TreeNode[], expandedIds: Set<string>): FlatNode[];

Utility to flatten a tree into a visible list based on expanded state. Useful for building custom tree implementations.

Visual

Collapsed tree shows indicator arrows for expandable nodes and dot for leaves, with tree connector lines for hierarchy.

License

MIT