Expand description
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 filtering via a rich filter panel (operator predicates, value checklist, search) opened from the built-in context menu.
- 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.
Re-exports§
pub use config::BooleanFormat;pub use config::ColumnOverride;pub use config::DateFormat;pub use config::GridConfig;pub use config::KeyBinding;pub use config::KeyBindings;pub use config::NumberFormat;pub use config::RelativeDateFormat;pub use config::RelativeUnit;pub use config::ReplacementRule;pub use config::ReplacementTiming;pub use config::ResolvedColumnFormat;pub use config::StringFormat;pub use config::TextAlignment;pub use config::TextCase;pub use config::TruncationBehavior;pub use data::compare_cells;pub use data::sample_data;pub use data::CellValue;pub use data::Column;pub use data::ColumnKind;pub use data::GridData;pub use data::GridDataError;pub use filter::ColumnFilter;pub use filter::FilterPredicate;pub use filter::NumberOp;pub use filter::TextOp;pub use grid::ContextMenu;pub use grid::ContextMenuItem;pub use grid::ContextMenuProvider;pub use grid::ContextMenuRequest;pub use grid::ContextMenuSelection;pub use grid::ContextMenuTarget;pub use grid::FilterPanel;pub use grid::GridState;pub use grid::GridTheme;pub use grid::HitResult;pub use grid::MenuAction;pub use grid::MenuItem;pub use grid::ScrollbarAxis;pub use grid::SelectedCellContext;pub use grid::SelectedRowContext;pub use grid::Selection;pub use grid::SortDirection;pub use grid::SqllyDataTable;pub use grid::SqllyDataTableBuilder;
Modules§
- config
- Grid-wide configuration: per-kind formatting rules, per-column overrides, and key bindings.
- data
- Core data model for the grid: cell values, columns, and the rectangular
GridDatacontainer. - filter
- Rich per-column filter model plus the pure matching pipeline.
- format
- Pure cell formatting: numbers, dates, strings, booleans, filter matching.
- grid
GridStateplus the GPUI widget, paint functions, and helpers that swing between them. The flat public re-exports below keep existing consumers of the 0.1.x API working; new code should prefer importing from the canonicalcrate::grid::*paths.