SimpleTreeView

Types

interface TreeDataItem {
  id: string;
  name: string;
  icon?: IconComponent;
  selectedIcon?: IconComponent;
  openIcon?: IconComponent;
  children?: TreeDataItem[];
  actions?: ReactNode;
  onClick?: () => void;
  draggable?: boolean;
  droppable?: boolean;
  disabled?: boolean;
}

type IconComponent = React.ComponentType<{ className?: string }>;

Simple Tree View

Props

SimpleTreeView

PropTypeDescription
data`TreeDataItem[]TreeDataItem`
initialSelectedItemIdstringPreselect an item and auto-expand ancestors
onSelectChange(item?: TreeDataItem) => voidCallback when selection changes
expandAllbooleanExpand all nodes initially
defaultNodeIconIconComponentDefault icon for nodes
defaultLeafIconIconComponentDefault icon for leaves
onDocumentDrag(source: TreeDataItem, target: TreeDataItem) => voidDrag and drop callback

TreeDataItem

type TreeDataItem = {
  id: string;
  name: string;
  icon?: ComponentType<SVGProps<SVGSVGElement>>;
  selectedIcon?: ComponentType<SVGProps<SVGSVGElement>>;
  openIcon?: ComponentType<SVGProps<SVGSVGElement>>;
  children?: TreeDataItem[];
  actions?: React.ReactNode;
  onClick?: () => void;
  draggable?: boolean;
  droppable?: boolean;
  disabled?: boolean;
}
  • Item 1
  • Item 2
  • Item 3
const data = [
  { id: '1', name: 'Item 1', icon: ArrowRight,
    children: [
      { id: '2', name: 'Item 1.1', icon: AlarmClock,
        children: [
          { id: '3', name: 'Item 1.1.1', icon: Ambulance },
          { id: '4', name: 'Item 1.1.2', icon: Angry },
        ],
      },
      { id: '5', name: 'Item 1.2 (disabled)', icon: Album, disabled: true },
    ],
  }, {
    id: '6', name: 'Item 2',
    children: [
      { id: '7', name: 'Item 2.1', icon: AlignCenterHorizontal },
      { id: '8', name: 'Item 2.2', icon: Blend,
        children: [
          { id: '9', name: 'Item 2.2.1', icon: Bird },
          { id: '10', name: 'Item 2.2.2', icon: Biohazard,
            children: [
              { id: '11', name: 'Item 2.2.2.1', icon: Cannabis },
              { id: '12', name: 'Item 2.2.2.2 Item 2.2.2.2 Item 2.2.2.2 Item 2.2.2.2 Item 2.2.2.2', icon: Cannabis }
            ]
          },
        ],
      },
    ],
  },
  { id: '13', name: 'Item 3' }
];

<SimpleTreeView data={treeData} className="w-[260px]" />