Configurable virtualized data grid for the GPUI toolkit.
sqlly-datatable provides a self-contained Entity<GridState> widget that
you can drop into a GPUI application. It supports:
- Virtualized rendering for large datasets.
- Cell, row, column and rectangular drag selection.
- Sorting on column headers, with a cycle through ascending, descending, and unsorted.
- Per-column text-based filtering via a built-in context menu and filter prompt.
- Configurable column resizing, mouse-driven scrollbars, and edge-scroll during drag selection.
- Clipboard copy of any selection (with or without headers).
The crate is intentionally GPUI-only on the UI side; the pure formatter in
[format] is usable in any context (export pipelines, server-side preview,
etc.). All formatting is configurable per column by composing the
[config::GridConfig] defaults with [config::ColumnOverride] entries.
Quick start
use gpui::App;
use sqlly_datatable::{
CellValue, Column, ColumnKind, GridConfig, GridData, SqllyDataTable,
};
let data = GridData::new(
vec![Column { name: "id".into(), kind: ColumnKind::Integer, width: 80.0 }],
vec![vec![CellValue::Integer(1)], vec![CellValue::Integer(2)]],
).expect("rectangular data");
let app = gpui::Application::new();
app.run(|cx: &mut App| {
let _view = SqllyDataTable::builder(data)
.config(GridConfig::default())
.build(cx);
});
See crates/sqlly-datatable-sample for a runnable demo.