Skip to main content

Crate sqlly_datatable

Crate sqlly_datatable 

Source
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 GridData container.
filter
Rich per-column filter model plus the pure matching pipeline.
format
Pure cell formatting: numbers, dates, strings, booleans, filter matching.
grid
GridState plus 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 canonical crate::grid::* paths.