Tree View

The TreeView component renders hierarchical navigation or selection trees with expandable nodes.

Usage & Examples

Project Files

project-files.tsx
<TreeView
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

Visual variants

Themes

primary
secondary
tertiary
quaternary

States

success
warning
error
info

Variants

solid
outline
glass

Rounding

none
medium
large

Shadows

none
light
strong
visual-variants.tsx
// Themes
<TreeView theme="primary"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView theme="secondary"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView theme="tertiary"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView theme="quaternary"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

// States
<TreeView state="success"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView state="warning"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView state="error"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView state="info"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

// Variants
<TreeView variant="solid"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView variant="outline"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView variant="glass"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

// Rounding
<TreeView rounding="none"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView rounding="medium"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView rounding="large"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

// Shadows
<TreeView shadow="none"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView shadow="light"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
<TreeView shadow="strong"
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

Interaction states

Disabled
Loading
interaction-states.tsx
// Disabled
<TreeView disabled
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />
// Loading
<TreeView loading
    label="Project files"
    defaultExpandedIds={["src"]}
    items={[
      {
        id: "src",
        label: "src",
        children: [
          { id: "components", label: "components" },
          { id: "docs", label: "docs" },
        ],
      },
      { id: "package", label: "package.json" },
    ]}
  />

Props API

22 props
Columns
Tree View props API
Default
Description
childrenReactNodeNoprops—Fallback content rendered when items are not provided.
classNamestringNostyling—Additional class name for the root.
contentClassNamestringNoprops—Additional class name for fallback child content.
data-testidstringNotesting—Backward-compatible alias for test ID attributes.
defaultExpandedIdsstring[]Noprops[]Initial expanded node ids for uncontrolled usage.
defaultSelectedIdstringNoprops—Initial selected node id for uncontrolled usage.
disabledbooleanNopropsfalseWhether the tree is disabled.
expandedIdsstring[]Noprops—Controlled expanded node ids.
itemsTreeViewNode[]Noprops[]Tree nodes to render.
labelstringNoprops"Tree"Accessible label for the tree.
loadingbooleanNopropsfalseWhether the tree should display a loading state.
onExpandedChange((ids: string[]) => void)Noevents—Callback fired when expanded nodes change.