Data DisplayDmduskmoonimplemented5 demos

DmTree

DmTree browses hierarchical records with selection and contextual toolbar actions.

Import@duskmoon-dev/components/dm-tree
9API sections
53documented props
3behavior scenarios
Key API
titlekeylabelicondisabledonClick

Usage

When to use

  • Use it in DuskMoon application screens that need a packaged, opinionated workflow component.
  • Reach for the lower-level standard component when the screen needs custom composition.

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

DuskMoon workflow wrapper

Wraps lower-level primitives into a higher-level DuskMoon-prefixed workflow API.

Application defaults

Examples show the defaults and composition points expected by internal DuskMoon app screens.

Primary API surface

DmTree is most often configured through `title`, `key`, `label`, `icon`.

Covered behavior

Normalizes fieldNames and emits Dm onChange payload

Feature Demos

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

Preview
  • Root Node
    • Child Node 1
    • Child Node 2

Basic usage

authored

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

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

export function Example() {
  return (<DmTree
  treeData={[
    {
      key: "root",
      title: "Root Node",
      children: [
        { key: "child-1", title: "Child Node 1" },
        { key: "child-2", title: "Child Node 2" }
      ]
    }
  ]}
/>);
}
Preview
  • Root Node
    • Child Node 1
    • Child Node 2

Normalizes fieldNames and emits Dm onChange payload

test-backed

DmTree scenario from the component test coverage: normalizes fieldnames and emits dm onchange payload.

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

export function DmTreeNormalizesFieldNamesAndEmitsDemo() {
  return (<DmTree
  treeData={[
    {
      key: "root",
      title: "Root Node",
      children: [
        { key: "child-1", title: "Child Node 1" },
        { key: "child-2", title: "Child Node 2" }
      ]
    }
  ]}
/>);
}
Preview
  • Root Node
    • Child Node 1
    • Child Node 2

Supports search, all item, and item toolbar actions

test-backed

DmTree scenario from the component test coverage: supports search, all item, and item toolbar actions.

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

export function DmTreeSupportsSearchAllItemDemo() {
  return (<DmTree
  treeData={[
    {
      key: "root",
      title: "Root Node",
      children: [
        { key: "child-1", title: "Child Node 1" },
        { key: "child-2", title: "Child Node 2" }
      ]
    }
  ]}
/>);
}
Preview
  • Root Node
    • Child Node 1
    • Child Node 2

Renders top toolbar, loading, empty, and option tree variants

test-backed

DmTree scenario from the component test coverage: renders top toolbar, loading, empty, and option tree variants.

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

export function DmTreeRendersTopToolbarLoadingDemo() {
  return (<DmTree
  treeData={[
    {
      key: "root",
      title: "Root Node",
      children: [
        { key: "child-1", title: "Child Node 1" },
        { key: "child-2", title: "Child Node 2" }
      ]
    }
  ]}
/>);
}
Preview
Sunshine Theme
  • Root Node
    • Child Node 1
    • Child Node 2
Moonlight Theme
  • Root Node
    • Child Node 1
    • Child Node 2

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">
  <DmTree
  treeData={[
    {
      key: "root",
      title: "Root Node",
      children: [
        { key: "child-1", title: "Child Node 1" },
        { key: "child-2", title: "Child Node 2" }
      ]
    }
  ]}
/>
</div>

<div data-theme="moonlight">
  <DmTree
  treeData={[
    {
      key: "root",
      title: "Root Node",
      children: [
        { key: "child-1", title: "Child Node 1" },
        { key: "child-2", title: "Child Node 2" }
      ]
    }
  ]}
/>
</div>

API

The API reference below lists every parsed exported type or interface for DmTree. Start with `title`, `key`, `label`, `icon` for common usage.

Types: packages/components/src/components/dm-tree/DmTree.types.tsScenarios: packages/components/src/components/dm-tree/DmTree.test.tsx
DmTreeFieldNamesinterface extends < TDataNode extends DmTreeDataNode = TreeDataNode, >
PropTypeRequiredDescription
titlekeyof TDataNode | stringNotitle configures DmTree.
keykeyof TDataNode | stringNokey configures DmTree.
childrenkeyof TDataNode | stringNochildren configures DmTree.
DmTreeToolbarButtoninterface extends < TDataNode extends DmTreeDataNode = TreeDataNode, >
PropTypeRequiredDescription
labelReactNodeYeslabel configures DmTree.
iconReactNodeNoicon configures DmTree.
disabledbooleanNodisabled configures DmTree.
onClick(NoonClick configures DmTree.
selectedKeyTreeKey | undefined,YesselectedKey configures DmTree.
getSelectedItem() => TDataNode | undefined,YesgetSelectedItem configures DmTree.
DmTreeItemActioninterface extends < TDataNode extends DmTreeDataNode = TreeDataNode, >
PropTypeRequiredDescription
iconReactNodeYesicon configures DmTree.
titlestringNotitle configures DmTree.
disabledboolean | ((item: TDataNode) => boolean)Nodisabled configures DmTree.
showboolean | ((item: TDataNode) => boolean)Noshow configures DmTree.
onClick(item: TDataNode) => voidNoonClick configures DmTree.
DmTreeAllIteminterface
PropTypeRequiredDescription
valueTreeKeyYesvalue configures DmTree.
labelReactNodeYeslabel configures DmTree.
DmTreeCommonPropsinterface extends < TDataNode extends DmTreeDataNode = TreeDataNode, > extends Omit< TreeProps<TreeDataNode>, "treeData" | "children" | "onChange" | "onSelect" | "titleRender" >
PropTypeRequiredDescription
treeDataTDataNode[]YestreeData configures DmTree.
selectedKeyTreeKeyNoselectedKey configures DmTree.
showAllbooleanNoshowAll configures DmTree.
allItemDmTreeAllItemNoallItem configures DmTree.
selectedKeyTreeKey | undefined,YesselectedKey configures DmTree.
getSelectedItem() => TDataNode | undefined,YesgetSelectedItem configures DmTree.
selectedKeyTreeKey | undefined,YesselectedKey configures DmTree.
getSelectedItem() => TDataNode | undefined,YesgetSelectedItem configures DmTree.
customTopToolbarReactNodeNocustomTopToolbar configures DmTree.
itemToolbarAlwaysShowbooleanNoitemToolbarAlwaysShow configures DmTree.
beforeSelect(NobeforeSelect configures DmTree.
selectItemTDataNode,YesselectItem configures DmTree.
selectedKeyTreeKey,YesselectedKey configures DmTree.
beforeSelectKeyTreeKey | undefined,YesbeforeSelectKey configures DmTree.
onChange(NoonChange configures DmTree.
selectItemTDataNode | undefined,YesselectItem configures DmTree.
selectKeyTreeKey | undefined,YesselectKey configures DmTree.
beforeSelectKeyTreeKey | undefined,YesbeforeSelectKey configures DmTree.
loadingbooleanNoloading configures DmTree.
showSearchbooleanNoshowSearch configures DmTree.
searchPlaceholderstringNosearchPlaceholder configures DmTree.
customSearch(event: React.ChangeEvent<HTMLInputElement>) => voidNocustomSearch configures DmTree.
beforeIconReactNode | ((item: TDataNode) => ReactNode)NobeforeIcon configures DmTree.
emptyNodeReactNodeNoemptyNode configures DmTree.
widthnumber | stringNowidth configures DmTree.
minNodeWidthnumber | stringNominNodeWidth configures DmTree.
fieldNamesDmTreeFieldNames<TDataNode>NofieldNames configures DmTree.
DmTreeOptionIteminterface extends < TDataNode extends DmTreeDataNode = TreeDataNode, > extends Omit<DmTabsItem, "children">
PropTypeRequiredDescription
loadingbooleanNoloading configures DmTree.
TreeSettingDmTreeCommonProps<TDataNode>YesTreeSetting configures DmTree.
DmTreeOptionPropsinterface extends < TDataNode extends DmTreeDataNode = TreeDataNode, > extends Omit<ComponentProps<"div">, "onChange">
PropTypeRequiredDescription
isTabTreetrueYesisTabTree configures DmTree.
itemsDmTreeOptionItem<TDataNode>[]Yesitems configures DmTree.
defaultActiveKeystringNodefaultActiveKey configures DmTree.
activeKeystringNoactiveKey configures DmTree.
clearOtherSelectionbooleanNoclearOtherSelection configures DmTree.
widthnumber | stringNowidth configures DmTree.
minNodeWidthnumber | stringNominNodeWidth configures DmTree.
onChange(activeKey: string) => voidNoonChange configures DmTree.
DmTreeDataNodetype
Record<string, unknown> & { key?: TreeKey
DmTreeComponenttype
<TDataNode extends DmTreeDataNode = TreeDataNode>( props: DmTreeProps<TDataNode>, ) => ReactElement | null