- Footer null crash — removed
column.templatefallback in footer aggregate cells; prevents a null-row crash when no footer row is present.
- New theme tokens —
colorRowHover,colorRowSelected,colorSortIdle, andcolorSortActiveCSS variables for fine-grained theming control over row states and sort indicators. defaultSortStatesprop — pre-configure sort state without triggering a sort, useful for matching an externally sorted dataset.- Styling story — new Storybook story with Bootstrap and Material UI theme presets as reference examples.
- Sort indicator — replaced Unicode arrow with a CSS-drawn indicator; fixes incorrect sizing when the grid is nested inside another
ThemeProvider. Idle indicator is also CSS-drawn for consistency. - Header filters — options always from original data —
SelectFilterandComboFilternow subscribe to the store's filter event so option lists always reflect the full unfiltered dataset regardless of other active filters. - Header filters — switching filter value — selecting a new value in an already-active filter (e.g., Role: Designer → DevOps) now correctly re-evaluates from the base dataset instead of filtering already-filtered rows.
- ComboFilter dropdown — dropdown now portals to the nearest ThemeProvider root, preventing clipping by the grid's scroll container and preserving CSS theme variables.
- Footer cells — aggregate cells now inherit the column's
alignproperty. When no footer-specifictemplateis defined, the column'stemplateis used to format the aggregate value. - Row selection — shift-clicking to extend a row selection no longer triggers browser text selection.
- Full CSS variables reference and UI library theming examples added to the theming guide.
- Expanded README with complete API reference.
- Updated sorting behavior guide.
- Data Grouping — group rows by one or more columns with a drag-panel UI above the grid.
- Set
groupableon the grid to enable the drag panel; drag any column header into it to add a grouping level. - Chips in the panel show a sort-direction toggle (idle
⇅/ asc↑/ desc↓) and a remove button; chips are draggable to reorder grouping priority. - Multi-level nesting — each entry in the grouping order adds one indented nesting level.
- Group header rows show a chevron toggle, the group value, and the leaf-row count, e.g.
Dog (43). - Groups default to expanded; each can be collapsed/re-expanded independently via the chevron.
- Per-chip sort direction sorts leaf rows within that group level; regular column-header sorting still works on leaf rows inside groups and is preserved when a column is dragged into the panel.
group?: { order: string[] }prop sets the initial grouping state.groupable?: booleanonGridColumnopts a column out of the drag panel.groupBy(columnIds)/clearGroups()GridApimethods for programmatic control.onBeforeGroupChange/onGroupChangeevents.
- Set
- Column-header sorting now works for grids using the plain
dataprop (noDataStore), using the samenaturalComparelogic asDataStoresorting so numeric columns sort1, 2, 10rather than1, 10, 2.
- Fixed collapsed node state not being preserved when tree data is updated in TreeGrid.
- Fixed sort state not being preserved when tree data is updated in TreeGrid.
- Fixed cell editor opening on a double-click that was intended to toggle a tree node.
- Fixed filter state not being fully re-applied when an existing filter key is replaced in TreeStore.
- Updated generated grid column width CSS variable names to losslessly encode column IDs. External CSS that targets internal
--rgs-col-*variables for IDs containing special characters must use the new encoded names.
- Fixed column width rendering when distinct column IDs previously collapsed to the same internal
--rgs-col-*CSS variable name, such asa-banda.b. - Fixed formula cells not evaluating when the grid was used with the
dataprop instead of a data store. - Fixed frozen column boundary computation to use column width data instead of DOM cell queries, preventing incorrect freeze offsets during initial render.
- Updated sort icon to animate with a flip transition instead of swapping content.
- Updated idle sort indicator on hover to use a muted color instead of the primary color.
- Updated grid-level
sortableprop to default tofalse— sorting is now opt-in. Columns withsortable: trueor grids with a data store still activate sorting without the grid-level prop.
- Fixed gap appearing between the last data row and the footer row when the grid has scrollable rows.
- Fixed sort indicators and header click-to-sort not activating when only a column-level
sortable: truewas set, or when a data store was provided without the grid-levelsortableprop.
- Added multi-column sorting — hold Ctrl and click column headers to sort by multiple columns simultaneously.
- Fixed grid columns and scrollbar not responding to container resize (e.g., window resize or parent layout changes).
- Fixed sorting being triggered when releasing the mouse after a column resize.
- Fixed live column resize so header cells update immediately during drag, not only body cells.
- Fixed frozen left/right panes to stay aligned during live column resize.
- Fixed frozen top/bottom rows so unfrozen center columns stay horizontally aligned while scrolling.
- Fixed far-right horizontal scroll alignment in frozen rows by syncing frozen-row center strips to the actual DOM scroll position.
- Fixed right frozen column boundary rendering to avoid missing, doubled, or drifting divider lines.
- Updated sorting behavior so repeated header clicks toggle only between ascending and descending; sorting no longer clears on the third click.
- Updated sort indicators to use the new arrow style.
- Added hover-visible inactive sort indicators on sortable headers.
- Fixed right-aligned headers so the sort indicator appears to the left of the label.
- Initial public release with Grid, Tree, and TreeGrid components.