Skip to content

Quick Start

All components require a ThemeProvider ancestor. Import it from the root package.

Grid

tsx
import { Grid } from '@itsmemyk/react-tree-grid/grid'
import { ThemeProvider } from '@itsmemyk/react-tree-grid'
import type { GridColumn, GridRow } from '@itsmemyk/react-tree-grid/grid'

interface Employee extends GridRow {
  name: string
  department: string
  salary: number
}

const columns: GridColumn<Employee>[] = [
  { id: 'name', header: [{ text: 'Name' }], width: 180 },
  { id: 'department', header: [{ text: 'Department' }], width: 160 },
  { id: 'salary', header: [{ text: 'Salary' }], width: 120 },
]

const data: Employee[] = [
  { id: '1', name: 'Alice', department: 'Engineering', salary: 95000 },
  { id: '2', name: 'Bob', department: 'Design', salary: 85000 },
]

export function App() {
  return (
    <ThemeProvider theme="light">
      <Grid columns={columns} data={data} style={{ width: 500, height: 300 }} />
    </ThemeProvider>
  )
}

Tree

tsx
import { Tree } from '@itsmemyk/react-tree-grid/tree'
import { ThemeProvider } from '@itsmemyk/react-tree-grid'
import type { TreeNode } from '@itsmemyk/react-tree-grid/tree'

const data: TreeNode[] = [
  {
    id: 'docs',
    value: 'Documents',
    $opened: true,
    items: [
      { id: 'report', value: 'Q4 Report.pdf' },
      { id: 'notes', value: 'Meeting Notes.txt' },
    ],
  },
  {
    id: 'images',
    value: 'Images',
    items: [
      { id: 'logo', value: 'logo.png' },
    ],
  },
]

export function App() {
  return (
    <ThemeProvider>
      <Tree data={data} onSelect={(id) => console.log('selected', id)} />
    </ThemeProvider>
  )
}

TreeGrid

tsx
import { TreeGrid } from '@itsmemyk/react-tree-grid/treegrid'
import { ThemeProvider } from '@itsmemyk/react-tree-grid'
import type { GridColumn } from '@itsmemyk/react-tree-grid/grid'
import type { TreeGridRow } from '@itsmemyk/react-tree-grid/treegrid'

interface OrgRow extends TreeGridRow {
  name: string
  role: string
  headcount: number
}

const columns: GridColumn<OrgRow>[] = [
  { id: 'name', header: [{ text: 'Name' }], width: 200 },
  { id: 'role', header: [{ text: 'Role' }], width: 160 },
  { id: 'headcount', header: [{ text: 'Headcount' }], width: 100 },
]

const data: OrgRow[] = [
  { id: 'ceo', name: 'Alice', role: 'CEO', headcount: 120, $opened: true },
  { id: 'cto', name: 'Bob', role: 'CTO', headcount: 45, parent: 'ceo', $opened: true },
  { id: 'fe', name: 'Carol', role: 'Frontend Lead', headcount: 12, parent: 'cto' },
  { id: 'be', name: 'Dan', role: 'Backend Lead', headcount: 18, parent: 'cto' },
]

export function App() {
  return (
    <ThemeProvider>
      <TreeGrid
        columns={columns}
        data={data}
        treeColumnId="name"
        style={{ width: 500, height: 300 }}
      />
    </ThemeProvider>
  )
}

TIP

Pass style= to enable virtual scrolling. Without explicit dimensions the grid renders all rows.

Released under the MIT License.