Tree

Tree composes the accordion wrapper for simple nested disclosure lists. Use it when rows need compact Density button styling without a full application treeview model.

import { Tree } from "density-base-ui";

export default function TreeExample() {
  return (
    <Tree.Root defaultValue={["src", "components"]} style={styles.root}>
      <Tree.Item value="src">
        <Tree.Trigger level={0}>src</Tree.Trigger>
        <Tree.Content>
          <Tree.Item value="components">
            <Tree.Trigger level={1}>components</Tree.Trigger>
            <Tree.Content>
              <Tree.Leaf level={2}>Button.tsx</Tree.Leaf>
              <Tree.Leaf level={2} active>
                Tree.tsx
              </Tree.Leaf>
            </Tree.Content>
          </Tree.Item>
          <Tree.Leaf level={1}>index.ts</Tree.Leaf>
        </Tree.Content>
      </Tree.Item>
      <Tree.Leaf level={0}>package.json</Tree.Leaf>
    </Tree.Root>
  );
}

const styles = {
  root: {
    display: "grid",
    gap: "0.125rem",
    minWidth: "14rem",
  },
} as const;

Props

Prop Attribute Values Default
Tree.Root None Accordion root props None
Tree.Item None Accordion item props None
Tree.Content None Accordion panel props None
Tree.Trigger active data-selected true, false false
Tree.Trigger level data-dn-tree-level Number None
Tree.Trigger density-presentation data-dn-presentation button button
Tree.Trigger density-emphasis data-dn-emphasis primary, secondary, outline, ghost ghost
Tree.Trigger density-size data-dn-size 2xs, xs, sm, md, lg, xl, 2xl, 3xl sm
Tree.Leaf active data-selected true, false false
Tree.Leaf level data-dn-tree-level Number None
Tree.Leaf density-presentation data-dn-presentation button button
Tree.Leaf density-emphasis data-dn-emphasis primary, secondary, outline, ghost ghost
Tree.Leaf density-size data-dn-size 2xs, xs, sm, md, lg, xl, 2xl, 3xl sm

Emphasis

import { Tree } from "density-base-ui";

export default function TreeEmphasisExample() {
  return (
    <Tree.Root defaultValue={["workspace"]} style={styles.root}>
      <Tree.Item value="workspace">
        <Tree.Trigger
          type="button"
          level={0}
          density-emphasis="secondary"
          style={styles.row}
        >
          Workspace
        </Tree.Trigger>
        <Tree.Content style={styles.content}>
          <Tree.Leaf
            type="button"
            level={1}
            density-emphasis="primary"
            style={styles.row}
          >
            Primary row
          </Tree.Leaf>
          <Tree.Leaf
            type="button"
            level={1}
            density-emphasis="secondary"
            style={styles.row}
          >
            Secondary row
          </Tree.Leaf>
          <Tree.Leaf
            type="button"
            level={1}
            density-emphasis="outline"
            style={styles.row}
          >
            Outline row
          </Tree.Leaf>
          <Tree.Leaf
            type="button"
            level={1}
            density-emphasis="ghost"
            style={styles.row}
          >
            Ghost row
          </Tree.Leaf>
        </Tree.Content>
      </Tree.Item>
    </Tree.Root>
  );
}

const styles = {
  root: {
    display: "grid",
    gap: "0.125rem",
    minWidth: "14rem",
  },
  content: {
    display: "grid",
    gap: "0.125rem",
  },
  row: {
    width: "100%",
    justifyContent: "flex-start",
  },
} as const;

Size

import { Tree } from "density-base-ui";

export default function TreeSizeExample() {
  return (
    <Tree.Root defaultValue={["sizes"]} style={styles.root}>
      <Tree.Item value="sizes">
        <Tree.Trigger level={0}>Sizes</Tree.Trigger>
        <Tree.Content>
          <Tree.Leaf level={1} density-size="xs">
            Extra small
          </Tree.Leaf>
          <Tree.Leaf level={1} density-size="sm">
            Small
          </Tree.Leaf>
          <Tree.Leaf level={1} density-size="md">
            Medium
          </Tree.Leaf>
          <Tree.Leaf level={1} density-size="lg">
            Large
          </Tree.Leaf>
        </Tree.Content>
      </Tree.Item>
    </Tree.Root>
  );
}

const styles = {
  root: {
    display: "grid",
    gap: "0.125rem",
    minWidth: "14rem",
  },
} as const;