Data Displayduskmoonimplemented8 demos

Tree

Tree renders hierarchical data with selection, expansion, and checking.

Import@duskmoon-dev/components/tree
14API sections
60documented props
6behavior scenarios
Key API
treeDataexpandedKeysdefaultExpandedKeysselectedKeysdefaultSelectedKeyscheckedKeys

Usage

When to use

  • Use it when users need to scan structured content and act on individual records.
  • Prefer it over ad hoc markup when the content has repeatable fields, hierarchy, or navigation state.

Implementation notes

StylesheetImport @duskmoon-dev/components/styles.css once in the app or docs shell.
StateStart with default props for static examples, then switch to controlled props when state must be shared.
ThemeThe preview inherits the active DuskMoon data-theme value from the docs layout.

Features

Structured records

Designed for repeated or hierarchical content where users scan, compare, and inspect details.

Stateful interactions

Documents the props that control sorting, selection, expansion, pagination, or value changes where available.

Primary API surface

Tree is most often configured through `treeData`, `expandedKeys`, `defaultExpandedKeys`, `selectedKeys`.

Covered behavior

Renders treeData and expands uncontrolled nodes

Feature Demos

Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.

Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Basic usage

authored

Import the component stylesheet and Tree from its package subpath, then render it with the core props.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function Example() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Renders treeData and expands uncontrolled nodes

test-backed

Tree scenario from the component test coverage: renders treedata and expands uncontrolled nodes.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function TreeRendersTreeDataAndExpandsDemo() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Supports controlled expanded keys and loadData callback

test-backed

Tree scenario from the component test coverage: supports controlled expanded keys and loaddata callback.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function TreeSupportsControlledExpandedKeysDemo() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Supports selected and checked key flows

test-backed

Tree scenario from the component test coverage: supports selected and checked key flows.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function TreeSupportsSelectedAndCheckedDemo() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Respects disabled, selectable, showLine, and showIcon markers

test-backed

Tree scenario from the component test coverage: respects disabled, selectable, showline, and showicon markers.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function TreeRespectsDisabledSelectableShowLineDemo() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Supports drag and drop callbacks

test-backed

Tree scenario from the component test coverage: supports drag and drop callbacks.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function TreeSupportsDragAndDropDemo() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Exposes TreeNode and DirectoryTree subcomponents

test-backed

Tree scenario from the component test coverage: exposes treenode and directorytree subcomponents.

Source
import "@duskmoon-dev/components/styles.css";
import { Tree } from "@duskmoon-dev/components/tree";

export function TreeExposesTreeNodeAndDirectoryTreeDemo() {
  return (<Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>);
}
Preview
Sunshine Theme
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA
Moonlight Theme
  • WWorkspace
    • TDesign tokens
    • CComponents
    • RRelease
      • Notes
      • Visual QA

Theme aware

authored

Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.

Source
<div data-theme="sunshine">
  <Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>
</div>

<div data-theme="moonlight">
  <Tree
  checkable
  showLine
  showIcon
  defaultExpandAll
  defaultSelectedKeys={["tokens"]}
  defaultCheckedKeys={["components"]}
  treeData={[
    {
      key: "workspace",
      title: "Workspace",
      icon: "W",
      children: [
        { key: "tokens", title: "Design tokens", icon: "T" },
        { key: "components", title: "Components", icon: "C" },
        {
          key: "release",
          title: "Release",
          icon: "R",
          children: [
            { key: "notes", title: "Notes" },
            { key: "qa", title: "Visual QA" }
          ]
        }
      ]
    }
  ]}
/>
</div>

API

The API reference below lists every parsed exported type or interface for Tree. Start with `treeData`, `expandedKeys`, `defaultExpandedKeys`, `selectedKeys` for common usage.

Types: packages/components/src/components/tree/Tree.types.tsScenarios: packages/components/src/components/tree/Tree.test.tsx
TreePropsinterface extends <T extends TreeDataNode = TreeDataNode> extends Omit< ComponentProps<"div">, | "onChange" | "onSelect" | "onDragStart" | "onDragEnter" | "onDragOver" | "onDragLeave" | "onDragEnd" | "onDrop" >
PropTypeRequiredDescription
treeDataT[]NotreeData configures Tree.
expandedKeysTreeKey[]NoexpandedKeys configures Tree.
defaultExpandedKeysTreeKey[]NodefaultExpandedKeys configures Tree.
selectedKeysTreeKey[]NoselectedKeys configures Tree.
defaultSelectedKeysTreeKey[]NodefaultSelectedKeys configures Tree.
checkedKeysTreeKey[]NocheckedKeys configures Tree.
defaultCheckedKeysTreeKey[]NodefaultCheckedKeys configures Tree.
checkablebooleanNocheckable configures Tree.
selectablebooleanNoselectable configures Tree.
multiplebooleanNomultiple configures Tree.
disabledbooleanNodisabled configures Tree.
showLinebooleanNoshowLine configures Tree.
showIconbooleanNoshowIcon configures Tree.
draggablebooleanNodraggable configures Tree.
blockNodebooleanNoblockNode configures Tree.
defaultExpandAllbooleanNodefaultExpandAll configures Tree.
loadData(node: EventDataNode<T>) => Promise<unknown> | unknownNoloadData configures Tree.
titleRender(node: T) => ReactNodeNotitleRender configures Tree.
onExpand(expandedKeys: TreeKey[], info: TreeExpandInfo<T>) => voidNoonExpand configures Tree.
onSelect(selectedKeys: TreeKey[], info: TreeSelectInfo<T>) => voidNoonSelect configures Tree.
onCheck(checkedKeys: TreeKey[], info: TreeCheckInfo<T>) => voidNoonCheck configures Tree.
onDragStart(info: TreeDragInfo<T>) => voidNoonDragStart configures Tree.
onDragEnter(info: TreeDragInfo<T>) => voidNoonDragEnter configures Tree.
onDragOver(info: TreeDragInfo<T>) => voidNoonDragOver configures Tree.
onDragLeave(info: TreeDragInfo<T>) => voidNoonDragLeave configures Tree.
onDragEnd(info: TreeDragInfo<T>) => voidNoonDragEnd configures Tree.
onDrop(info: TreeDropInfo<T>) => voidNoonDrop configures Tree.
TreeDataNodeinterface
PropTypeRequiredDescription
keyTreeKeyYeskey configures Tree.
titleReactNodeNotitle configures Tree.
childrenTreeDataNode[]Nochildren configures Tree.
disabledbooleanNodisabled configures Tree.
disableCheckboxbooleanNodisableCheckbox configures Tree.
checkablebooleanNocheckable configures Tree.
selectablebooleanNoselectable configures Tree.
iconReactNodeNoicon configures Tree.
isLeafbooleanNoisLeaf configures Tree.
classNamestringNoclassName configures Tree.
EventDataNodeinterface extends < T extends TreeDataNode = TreeDataNode, > extends TreeDataNode
PropTypeRequiredDescription
keyTreeKeyYeskey configures Tree.
posstringYespos configures Tree.
dataTYesdata configures Tree.
TreeEventInfointerface extends <T extends TreeDataNode = TreeDataNode>
PropTypeRequiredDescription
nodeEventDataNode<T>Yesnode configures Tree.
TreeExpandInfointerface extends < T extends TreeDataNode = TreeDataNode, > extends TreeEventInfo<T>
PropTypeRequiredDescription
expandedbooleanYesexpanded configures Tree.
TreeSelectInfointerface extends < T extends TreeDataNode = TreeDataNode, > extends TreeEventInfo<T>
PropTypeRequiredDescription
selectedbooleanYesselected configures Tree.
selectedNodesT[]YesselectedNodes configures Tree.
TreeCheckInfointerface extends < T extends TreeDataNode = TreeDataNode, > extends TreeEventInfo<T>
PropTypeRequiredDescription
checkedbooleanYeschecked configures Tree.
checkedNodesT[]YescheckedNodes configures Tree.
TreeDragInfointerface extends < T extends TreeDataNode = TreeDataNode, > extends TreeEventInfo<T>
PropTypeRequiredDescription
eventReact.DragEvent<HTMLElement>Yesevent configures Tree.
TreeDropInfointerface extends < T extends TreeDataNode = TreeDataNode, > extends TreeDragInfo<T>
PropTypeRequiredDescription
dragNodeEventDataNode<T>NodragNode configures Tree.
dragNodesKeysTreeKey[]YesdragNodesKeys configures Tree.
dropPositionnumberYesdropPosition configures Tree.
dropToGapbooleanYesdropToGap configures Tree.
TreeNodePropsinterface extends Omit< ComponentProps<"div">, "title" | "onSelect" >
PropTypeRequiredDescription
titleReactNodeNotitle configures Tree.
eventKeyTreeKeyNoeventKey configures Tree.
childrenReactNodeNochildren configures Tree.
disabledbooleanNodisabled configures Tree.
disableCheckboxbooleanNodisableCheckbox configures Tree.
selectablebooleanNoselectable configures Tree.
checkablebooleanNocheckable configures Tree.
iconReactNodeNoicon configures Tree.
isLeafbooleanNoisLeaf configures Tree.
TreeKeytype
string | number
TreeNodeComponenttype
ForwardRefExoticComponent< TreeNodeProps & RefAttributes<HTMLDivElement> >
DirectoryTreeComponenttype
<T extends TreeDataNode = TreeDataNode>( props: DirectoryTreeProps<T> & RefAttributes<HTMLDivElement>, ) => ReactElement | null
TreeComponenttype
(<T extends TreeDataNode = TreeDataNode>( props: TreeProps<T> & RefAttributes<HTMLDivElement>, ) => ReactElement | null) & { TreeNode: TreeNodeComponent