Docs Components Data Display

DataTable

React example follows below.
ts
const dataTableFixture = {
id: "data-table",
columns: [
{ key: "service", header: "Service", head: true },
{ key: "p95", header: "p95", num: true },
{ key: "status", header: "Status", sortable: false },
],
rows: [
{ service: "ledger-api", p95: 142, status: "healthy" },
{ service: "billing-worker", p95: 88, status: "healthy" },
{ service: "analytics-ingest", p95: 310, status: "degraded" },
],
defaultSort: "p95",
zebra: true,
} satisfies {
id: string;
columns: Array<{
key: "service" | "p95" | "status";
header: string;
head?: boolean;
num?: boolean;
sortable?: boolean;
}>;
rows: Array<{ service: string; p95: number; status: string }>;
defaultSort: "service" | "p95" | "status";
zebra: boolean;
};
import { DataTable, type DataColumn } from "@grassroot/ui-react";
type ServiceRow = (typeof dataTableFixture.rows)[number];
export default function DataTableDemo() {
return (
<div>
<DataTable<ServiceRow>
columns={dataTableFixture.columns as DataColumn<ServiceRow>[]}
data={dataTableFixture.rows}
defaultSort={dataTableFixture.defaultSort}
zebra={dataTableFixture.zebra}
/>
</div>
);
}
ts
<script setup lang="ts">
const dataTableFixture = {
id: "data-table",
columns: [
{ key: "service", header: "Service", head: true },
{ key: "p95", header: "p95", num: true },
{ key: "status", header: "Status", sortable: false },
],
rows: [
{ service: "ledger-api", p95: 142, status: "healthy" },
{ service: "billing-worker", p95: 88, status: "healthy" },
{ service: "analytics-ingest", p95: 310, status: "degraded" },
],
defaultSort: "p95",
zebra: true,
} satisfies {
id: string;
columns: Array<{
key: "service" | "p95" | "status";
header: string;
head?: boolean;
num?: boolean;
sortable?: boolean;
}>;
rows: Array<{ service: string; p95: number; status: string }>;
defaultSort: "service" | "p95" | "status";
zebra: boolean;
};
import { DataTable, type DataColumn } from "@grassroot/ui-vue";
type ServiceRow = (typeof dataTableFixture.rows)[number];
const columns = dataTableFixture.columns as DataColumn<ServiceRow>[];
</script>
<template>
<div>
<DataTable
:columns="columns"
:data="dataTableFixture.rows"
:default-sort="dataTableFixture.defaultSort"
:zebra="dataTableFixture.zebra"
/>
</div>
</template>
ts
import { Component } from "@angular/core";
const dataTableFixture = {
id: "data-table",
columns: [
{ key: "service", header: "Service", head: true },
{ key: "p95", header: "p95", num: true },
{ key: "status", header: "Status", sortable: false },
],
rows: [
{ service: "ledger-api", p95: 142, status: "healthy" },
{ service: "billing-worker", p95: 88, status: "healthy" },
{ service: "analytics-ingest", p95: 310, status: "degraded" },
],
defaultSort: "p95",
zebra: true,
} satisfies {
id: string;
columns: Array<{
key: "service" | "p95" | "status";
header: string;
head?: boolean;
num?: boolean;
sortable?: boolean;
}>;
rows: Array<{ service: string; p95: number; status: string }>;
defaultSort: "service" | "p95" | "status";
zebra: boolean;
};
import { GrassrootDataTable, type DataColumn } from "@grassroot/ui-angular";
type ServiceRow = (typeof dataTableFixture.rows)[number];
@Component({
selector: "app-data-table-demo",
standalone: true,
imports: [GrassrootDataTable],
template: `
<div>
<grassroot-data-table
[columns]="columns"
[data]="fixture.rows"
[defaultSort]="fixture.defaultSort"
[zebra]="fixture.zebra"
/>
</div>
`,
})
export class DataTableDemoComponent {
protected readonly fixture = dataTableFixture;
protected readonly columns = dataTableFixture.columns as DataColumn<ServiceRow>[];
}
export default DataTableDemoComponent;
ts
<script lang="ts">
const dataTableFixture = {
id: "data-table",
columns: [
{ key: "service", header: "Service", head: true },
{ key: "p95", header: "p95", num: true },
{ key: "status", header: "Status", sortable: false },
],
rows: [
{ service: "ledger-api", p95: 142, status: "healthy" },
{ service: "billing-worker", p95: 88, status: "healthy" },
{ service: "analytics-ingest", p95: 310, status: "degraded" },
],
defaultSort: "p95",
zebra: true,
} satisfies {
id: string;
columns: Array<{
key: "service" | "p95" | "status";
header: string;
head?: boolean;
num?: boolean;
sortable?: boolean;
}>;
rows: Array<{ service: string; p95: number; status: string }>;
defaultSort: "service" | "p95" | "status";
zebra: boolean;
};
import { DataTable } from "@grassroot/ui-svelte";
</script>
<div>
<DataTable
columns={dataTableFixture.columns}
data={dataTableFixture.rows}
defaultSort={dataTableFixture.defaultSort}
zebra={dataTableFixture.zebra}
/>
</div>
ts
/** @jsxImportSource solid-js */
const dataTableFixture = {
id: "data-table",
columns: [
{ key: "service", header: "Service", head: true },
{ key: "p95", header: "p95", num: true },
{ key: "status", header: "Status", sortable: false },
],
rows: [
{ service: "ledger-api", p95: 142, status: "healthy" },
{ service: "billing-worker", p95: 88, status: "healthy" },
{ service: "analytics-ingest", p95: 310, status: "degraded" },
],
defaultSort: "p95",
zebra: true,
} satisfies {
id: string;
columns: Array<{
key: "service" | "p95" | "status";
header: string;
head?: boolean;
num?: boolean;
sortable?: boolean;
}>;
rows: Array<{ service: string; p95: number; status: string }>;
defaultSort: "service" | "p95" | "status";
zebra: boolean;
};
import { DataTable, type DataColumn } from "@grassroot/ui-solid";
import type { JSX } from "solid-js";
type ServiceRow = (typeof dataTableFixture.rows)[number];
export default function DataTableDemo(): JSX.Element {
return (
<div>
<DataTable<ServiceRow>
columns={dataTableFixture.columns as DataColumn<ServiceRow>[]}
data={dataTableFixture.rows}
defaultSort={dataTableFixture.defaultSort}
zebra={dataTableFixture.zebra}
/>
</div>
);
}

Installation

API Reference

Import

import { DataTable, type DataColumn } from "@grassroot/ui-react";

Props

Prop
Type
Default
Requirement
Description
columns
DataColumn<T>[]
required
data
T[]
required
defaultSort
(keyof T & string) | undefined
optional
Initial sort column key.
zebra
boolean | undefined
false
optional
Alternate row tint.
className
string | undefined
optional
getRowId
((row: T, index: number) => string) | undefined
optional
isRowDisabled
((row: T, index: number) => boolean) | undefined
optional
selectionMode
SelectionMode | undefined
optional
selectedIds
readonly string[] | undefined
optional
defaultSelectedIds
readonly string[] | undefined
optional
onSelectedIdsChange
((detail: SelectionChangeDetail) => void) | undefined
optional
Prop
columns
Type
DataColumn<T>[]
Default
Requirement
required
Description
Prop
data
Type
T[]
Default
Requirement
required
Description
Prop
defaultSort
Type
(keyof T & string) | undefined
Default
Requirement
optional
Description
Initial sort column key.
Prop
zebra
Type
boolean | undefined
Default
false
Requirement
optional
Description
Alternate row tint.
Prop
className
Type
string | undefined
Default
Requirement
optional
Description
Prop
getRowId
Type
((row: T, index: number) => string) | undefined
Default
Requirement
optional
Description
Prop
isRowDisabled
Type
((row: T, index: number) => boolean) | undefined
Default
Requirement
optional
Description
Prop
selectionMode
Type
SelectionMode | undefined
Default
Requirement
optional
Description
Prop
selectedIds
Type
readonly string[] | undefined
Default
Requirement
optional
Description
Prop
defaultSelectedIds
Type
readonly string[] | undefined
Default
Requirement
optional
Description
Prop
onSelectedIdsChange
Type
((detail: SelectionChangeDetail) => void) | undefined
Default
Requirement
optional
Description

Events

EventPayload
onSelectedIdsChange((detail: SelectionChangeDetail) => void) | undefined

Import

import { DataTable, type DataColumn } from "@grassroot/ui-vue";

Props

Prop
Type
Default
Requirement
columns
DataColumn<T>[]
required
data
T[]
required
defaultSort
string | undefined
optional
zebra
boolean | undefined
false
optional
className
string | undefined
optional
getRowId
((row: T, index: number) => string) | undefined
optional
isRowDisabled
((row: T, index: number) => boolean) | undefined
optional
selectionMode
SelectionMode | undefined
"none"
optional
selectedIds
readonly string[] | undefined
optional
defaultSelectedIds
readonly string[] | undefined
optional
Prop
columns
Type
DataColumn<T>[]
Default
Requirement
required
Prop
data
Type
T[]
Default
Requirement
required
Prop
defaultSort
Type
string | undefined
Default
Requirement
optional
Prop
zebra
Type
boolean | undefined
Default
false
Requirement
optional
Prop
className
Type
string | undefined
Default
Requirement
optional
Prop
getRowId
Type
((row: T, index: number) => string) | undefined
Default
Requirement
optional
Prop
isRowDisabled
Type
((row: T, index: number) => boolean) | undefined
Default
Requirement
optional
Prop
selectionMode
Type
SelectionMode | undefined
Default
"none"
Requirement
optional
Prop
selectedIds
Type
readonly string[] | undefined
Default
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[] | undefined
Default
Requirement
optional

Events

EventPayload
selectedIdsChange[detail: SelectionChangeDetail]

Import

import { Component } from "@angular/core";
import { GrassrootDataTable, type DataColumn } from "@grassroot/ui-angular";

Props

Prop
Type
Default
Requirement
columns
DataColumn<T>[]
required
data
T[]
required
defaultSort
(keyof T & string) | undefined
undefined
optional
zebra
boolean
false
optional
className
string
optional
getRowId
(row: T, index: number) => string
optional
isRowDisabled
(row: T, index: number) => boolean
optional
selectionMode
SelectionMode
"none"
optional
selectedIds
readonly string[] | undefined
undefined
optional
defaultSelectedIds
readonly string[] | undefined
undefined
optional
Prop
columns
Type
DataColumn<T>[]
Default
Requirement
required
Prop
data
Type
T[]
Default
Requirement
required
Prop
defaultSort
Type
(keyof T & string) | undefined
Default
undefined
Requirement
optional
Prop
zebra
Type
boolean
Default
false
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
getRowId
Type
(row: T, index: number) => string
Default
Requirement
optional
Prop
isRowDisabled
Type
(row: T, index: number) => boolean
Default
Requirement
optional
Prop
selectionMode
Type
SelectionMode
Default
"none"
Requirement
optional
Prop
selectedIds
Type
readonly string[] | undefined
Default
undefined
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[] | undefined
Default
undefined
Requirement
optional

Events

EventPayload
selectedIdsChangeSelectionChangeDetail

Import

import { DataTable } from "@grassroot/ui-svelte";

Props

Prop
Type
Default
Requirement
columns
DataColumn<Row>[]
required
data
Row[]
required
defaultSort
string
optional
zebra
boolean
false
optional
className
string
optional
getRowId
(row: Row, index: number) => string
optional
isRowDisabled
(row: Row, index: number) => boolean
optional
selectionMode
SelectionMode
"none"
optional
selectedIds
readonly string[]
optional
defaultSelectedIds
readonly string[]
optional
onSelectedIdsChange
(detail: SelectionChangeDetail) => void
optional
Prop
columns
Type
DataColumn<Row>[]
Default
Requirement
required
Prop
data
Type
Row[]
Default
Requirement
required
Prop
defaultSort
Type
string
Default
Requirement
optional
Prop
zebra
Type
boolean
Default
false
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
getRowId
Type
(row: Row, index: number) => string
Default
Requirement
optional
Prop
isRowDisabled
Type
(row: Row, index: number) => boolean
Default
Requirement
optional
Prop
selectionMode
Type
SelectionMode
Default
"none"
Requirement
optional
Prop
selectedIds
Type
readonly string[]
Default
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[]
Default
Requirement
optional
Prop
onSelectedIdsChange
Type
(detail: SelectionChangeDetail) => void
Default
Requirement
optional

Events

EventPayload
onSelectedIdsChange(detail: SelectionChangeDetail) => void

Import

import { DataTable, type DataColumn } from "@grassroot/ui-solid";
import type { JSX } from "solid-js";

Props

Prop
Type
Default
Requirement
columns
DataColumn<T>[]
required
data
T[]
required
defaultSort
keyof T & string
optional
zebra
boolean
false
optional
className
string
optional
getRowId
(row: T, index: number) => string
optional
isRowDisabled
(row: T, index: number) => boolean
optional
selectionMode
SelectionMode
"none"
optional
selectedIds
readonly string[]
optional
defaultSelectedIds
readonly string[]
optional
onSelectedIdsChange
(detail: SelectionChangeDetail) => void
optional
Prop
columns
Type
DataColumn<T>[]
Default
Requirement
required
Prop
data
Type
T[]
Default
Requirement
required
Prop
defaultSort
Type
keyof T & string
Default
Requirement
optional
Prop
zebra
Type
boolean
Default
false
Requirement
optional
Prop
className
Type
string
Default
Requirement
optional
Prop
getRowId
Type
(row: T, index: number) => string
Default
Requirement
optional
Prop
isRowDisabled
Type
(row: T, index: number) => boolean
Default
Requirement
optional
Prop
selectionMode
Type
SelectionMode
Default
"none"
Requirement
optional
Prop
selectedIds
Type
readonly string[]
Default
Requirement
optional
Prop
defaultSelectedIds
Type
readonly string[]
Default
Requirement
optional
Prop
onSelectedIdsChange
Type
(detail: SelectionChangeDetail) => void
Default
Requirement
optional

Events

EventPayload
onSelectedIdsChange(detail: SelectionChangeDetail) => void