@agile-team/mach-table 0.14.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -14,6 +14,7 @@ declare class Column<TData = any> {
14
14
  hide: boolean;
15
15
  pinned: PinnedDirection | null;
16
16
  manualWidth: number | null;
17
+ flex: number | null;
17
18
  currentWidth: number;
18
19
  parentGroup: ColumnGroup<TData> | null;
19
20
  level: number;
@@ -25,6 +26,7 @@ declare class Column<TData = any> {
25
26
  get filterable(): boolean;
26
27
  get filterType(): FilterType;
27
28
  get hasCheckbox(): boolean;
29
+ resetWidth(): void;
28
30
  }
29
31
 
30
32
  interface RowNode<TData = any> {
@@ -45,6 +47,25 @@ interface RowNode<TData = any> {
45
47
  treeLoadError?: unknown;
46
48
  }
47
49
 
50
+ interface AdvancedFilterCondition {
51
+ kind: "condition";
52
+ colId: string;
53
+ filter: ColumnFilter;
54
+ }
55
+ interface AdvancedFilterGroup {
56
+ kind: "group";
57
+ operator: "and" | "or";
58
+ children: AdvancedFilterNode[];
59
+ /** Negates the complete group without changing its children. */
60
+ not?: boolean;
61
+ }
62
+ type AdvancedFilterNode = AdvancedFilterCondition | AdvancedFilterGroup;
63
+ /** Serializable, backend-friendly nested filter expression. */
64
+ interface AdvancedFilterModel {
65
+ version: 1;
66
+ root: AdvancedFilterNode;
67
+ }
68
+
48
69
  declare const EVENT_TYPES: readonly ["gridReady", "gridDestroyed", "modelUpdated", "cellClicked", "cellDoubleClicked", "cellContextMenu", "rowClicked", "rowDoubleClicked", "selectionChanged", "sortChanged", "filterChanged", "columnResized", "columnMoved", "columnVisibilityChanged", "cellValueChanged", "cellEditingStarted", "cellEditingStopped", "rowEditingStarted", "rowEditingStopped", "detailToggled", "treeChildrenLoaded", "treeChildrenLoadFailed", "rowDragEnd", "rangeSelectionChanged", "paginationChanged", "displayedColumnsChanged", "gridError", "dirtyStateChanged"];
49
70
  type GridEventType = (typeof EVENT_TYPES)[number];
50
71
  type GridErrorCode = "DATA_SOURCE_ERROR" | "DATA_INTEGRITY_ERROR" | "VALIDATION_ERROR" | "RENDERER_ERROR" | "EDITOR_ERROR" | "FEATURE_ERROR" | "STATE_ERROR" | "EVENT_HANDLER_ERROR" | "GRID_ERROR";
@@ -107,6 +128,7 @@ interface SortChangedEvent<TData = any> extends GridEventBase<TData> {
107
128
  interface FilterChangedEvent<TData = any> extends GridEventBase<TData> {
108
129
  type: "filterChanged";
109
130
  filterModel: FilterModel;
131
+ advancedFilterModel: AdvancedFilterModel | null;
110
132
  }
111
133
  interface ColumnResizedEvent<TData = any> extends GridEventBase<TData> {
112
134
  type: "columnResized";
@@ -320,10 +342,7 @@ declare function matchLocaleKey(match: string): RgLocaleKey;
320
342
  declare function formatText(template: string, n: number | string): string;
321
343
  declare function formatTwo(template: string, a: number | string, b: number | string): string;
322
344
 
323
- /** Serializable snapshot of user-visible grid state. */
324
- interface GridState {
325
- /** State schema version, independent from the package version. */
326
- version: 1;
345
+ interface GridStateBase {
327
346
  columns: ColumnState[];
328
347
  sortModel: SortModel;
329
348
  filterModel: FilterModel;
@@ -337,6 +356,17 @@ interface GridState {
337
356
  expandedRowIds: string[];
338
357
  expandedGroupIds: string[];
339
358
  }
359
+ /** Read-only compatibility shape accepted from MachTable 0.14/0.15. */
360
+ interface LegacyGridStateV1 extends GridStateBase {
361
+ version: 1;
362
+ }
363
+ /** Serializable snapshot of user-visible grid state. */
364
+ interface GridState extends GridStateBase {
365
+ /** State schema version, independent from the package version. */
366
+ version: 2;
367
+ advancedFilterModel: AdvancedFilterModel | null;
368
+ }
369
+ type GridStateInput = GridState | LegacyGridStateV1;
340
370
  type GridStateSection = "columns" | "sort" | "filter" | "pagination" | "selection" | "expansion";
341
371
  interface ApplyGridStateOptions {
342
372
  /** Applies all sections when omitted. */
@@ -366,8 +396,8 @@ interface ColumnStateStore {
366
396
  save(key: string, state: ColumnState[]): void | Promise<void>;
367
397
  }
368
398
  interface GridStateStore {
369
- load(key: string): GridState | null | Promise<GridState | null>;
370
- save(key: string, state: GridState): void | Promise<void>;
399
+ load(key: string): GridStateInput | null | Promise<GridStateInput | null>;
400
+ save(key: string, state: GridStateInput): void | Promise<void>;
371
401
  clear?(key: string): void | Promise<void>;
372
402
  }
373
403
  /** Per-grid component overrides. These take precedence over the global registry. */
@@ -390,6 +420,12 @@ interface GridFeatureContext<TData = any> {
390
420
  /** Composable extension point; feature instances are scoped to one grid. */
391
421
  interface GridFeature<TData = any> {
392
422
  readonly key: string;
423
+ /** Informational extension version exposed through diagnostics. */
424
+ readonly version?: string;
425
+ /** Feature keys that must be initialised before this feature. */
426
+ readonly requires?: readonly string[];
427
+ /** Mutually exclusive feature keys. Conflicting features are not initialised. */
428
+ readonly conflicts?: readonly string[];
393
429
  setup(context: GridFeatureContext<TData>): void | (() => void);
394
430
  destroy?(): void;
395
431
  }
@@ -408,6 +444,7 @@ interface InfiniteGetRowsParams<TData = any> {
408
444
  endRow: number;
409
445
  sortModel: SortModel;
410
446
  filterModel: FilterModel;
447
+ advancedFilterModel: AdvancedFilterModel | null;
411
448
  quickFilterText: string | null;
412
449
  signal: AbortSignal;
413
450
  onSuccess(rows: TData[], lastRow?: number): void;
@@ -496,6 +533,8 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
496
533
  rowBuffer?: number;
497
534
  /** `fit` continuously fills the container without grid-ready glue code. */
498
535
  columnLayout?: ColumnLayoutMode;
536
+ /** Enables pointer, double-click and Alt+Arrow column resizing. Disabled by default. */
537
+ enableColumnResize?: boolean;
499
538
  /** Lets small grids grow with their rows. Avoid for large or infinite datasets. */
500
539
  domLayout?: DomLayoutMode;
501
540
  rowSelection?: RowSelectionMode;
@@ -505,6 +544,8 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
505
544
  showCellBorders?: boolean;
506
545
  theme?: ThemeMode;
507
546
  quickFilterText?: string | null;
547
+ /** Nested AND/OR filter expression, safe for local evaluation and backend serialization. */
548
+ advancedFilterModel?: AdvancedFilterModel | null;
508
549
  masterDetail?: boolean;
509
550
  detailRowHeight?: number;
510
551
  detailRowRenderer?: (params: DetailRowRendererParams<TData>) => string | HTMLElement | ICellRendererResult | null | undefined;
@@ -519,7 +560,7 @@ interface GridOptions<TData = any> extends EventHandlers<TData> {
519
560
  actionPolicy?: ActionPolicy<TData>;
520
561
  features?: readonly GridFeature<TData>[];
521
562
  /** State restored atomically after columns and initial rows are available. */
522
- initialState?: GridState;
563
+ initialState?: GridStateInput;
523
564
  /** Persist the complete user-visible GridState with a versioned store. */
524
565
  stateKey?: string | null;
525
566
  stateStore?: GridStateStore;
@@ -606,6 +647,7 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
606
647
  headerHeight: number;
607
648
  rowBuffer: number;
608
649
  columnLayout: ColumnLayoutMode;
650
+ enableColumnResize: boolean;
609
651
  domLayout: DomLayoutMode;
610
652
  rowSelection: RowSelectionMode;
611
653
  multiSort: boolean;
@@ -614,6 +656,7 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
614
656
  showCellBorders: boolean;
615
657
  theme: ThemeMode;
616
658
  quickFilterText: string | null;
659
+ advancedFilterModel: AdvancedFilterModel | null;
617
660
  masterDetail: boolean;
618
661
  detailRowHeight: number;
619
662
  detailRowRenderer?: (params: DetailRowRendererParams<TData>) => string | HTMLElement | ICellRendererResult | null | undefined;
@@ -626,7 +669,7 @@ interface ResolvedGridOptions<TData = any> extends EventHandlers<TData> {
626
669
  components?: GridComponents;
627
670
  actionPolicy?: ActionPolicy<TData>;
628
671
  features: readonly GridFeature<TData>[];
629
- initialState?: GridState;
672
+ initialState?: GridStateInput;
630
673
  stateKey: string | null;
631
674
  stateStore?: GridStateStore;
632
675
  stateSaveDebounceMs: number;
@@ -746,6 +789,17 @@ interface GridDiagnosticError {
746
789
  timestamp: number;
747
790
  context?: Record<string, unknown>;
748
791
  }
792
+ interface GridPerformanceSnapshot {
793
+ sampleCount: number;
794
+ lastRenderMs: number;
795
+ averageRenderMs: number;
796
+ maxRenderMs: number;
797
+ p95RenderMs: number;
798
+ longRenderCount: number;
799
+ renderedRows: number;
800
+ renderedColumns: number;
801
+ renderedCells: number;
802
+ }
749
803
  interface ColumnWorkbenchItem {
750
804
  colId: string;
751
805
  label: string;
@@ -766,13 +820,37 @@ interface GridDiagnostics {
766
820
  columnCount: number;
767
821
  selectedRowCount: number;
768
822
  dirtyRowCount: number;
823
+ activeFeatures: ReadonlyArray<{
824
+ key: string;
825
+ version?: string;
826
+ }>;
827
+ performance: GridPerformanceSnapshot;
769
828
  recentErrors: readonly GridDiagnosticError[];
770
829
  }
771
- interface SaveChangesResult {
830
+ interface SaveChangeIssue {
831
+ rowId: string;
832
+ code?: string;
833
+ message: string;
834
+ colIds?: readonly string[];
835
+ retryable?: boolean;
836
+ }
837
+ interface SaveChangeConflict<TData = any> extends SaveChangeIssue {
838
+ serverData?: TData;
839
+ serverVersion?: string | number;
840
+ }
841
+ interface SaveChangesResult<TData = any> {
772
842
  /** Omit to acknowledge every submitted row; return a subset for partial batch success. */
773
843
  savedRowIds?: readonly string[];
844
+ failures?: readonly SaveChangeIssue[];
845
+ conflicts?: readonly SaveChangeConflict<TData>[];
846
+ }
847
+ interface GridBatchSaveResult<TData = any> {
848
+ submitted: GridChange<TData>[];
849
+ saved: GridChange<TData>[];
850
+ failures: SaveChangeIssue[];
851
+ conflicts: SaveChangeConflict<TData>[];
774
852
  }
775
- type SaveChangesHandler<TData = any> = (changes: readonly GridChange<TData>[]) => void | SaveChangesResult | Promise<void | SaveChangesResult>;
853
+ type SaveChangesHandler<TData = any> = (changes: readonly GridChange<TData>[]) => void | SaveChangesResult<TData> | Promise<void | SaveChangesResult<TData>>;
776
854
  interface GridApi<TData = any> {
777
855
  /** Resolves after the first layout frame and gridReady emission. */
778
856
  whenReady(): Promise<GridApi<TData>>;
@@ -796,6 +874,8 @@ interface GridApi<TData = any> {
796
874
  setColumnVisibility(colId: string, visible: boolean): void;
797
875
  moveColumn(colId: string, toIndex: number): void;
798
876
  setColumnPinned(colId: string, pinned: "left" | "right" | null): void;
877
+ /** Sets one width without replacing the rest of the column state. */
878
+ setColumnWidth(colId: string, width: number): boolean;
799
879
  sizeColumnsToFit(width?: number): void;
800
880
  autoSizeColumn(colId: string, skipHeader?: boolean): void;
801
881
  autoSizeAllColumns(skipHeader?: boolean): void;
@@ -803,6 +883,8 @@ interface GridApi<TData = any> {
803
883
  setSortModel(sortModel: SortModel | null): void;
804
884
  getFilterModel(): FilterModel;
805
885
  setFilterModel(filterModel: FilterModel | null): void;
886
+ getAdvancedFilterModel(): AdvancedFilterModel | null;
887
+ setAdvancedFilterModel(model: AdvancedFilterModel | null): void;
806
888
  isColumnFilterPresent(colId: string): boolean;
807
889
  setQuickFilter(text: string | null | undefined): void;
808
890
  getQuickFilter(): string | null;
@@ -848,6 +930,7 @@ interface GridApi<TData = any> {
848
930
  markChangesSaved(rowIds?: readonly string[]): void;
849
931
  /** Saves a stable snapshot; supports partial success and preserves edits made in flight. */
850
932
  saveChanges(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridChange<TData>[]>;
933
+ saveChangesDetailed(handler: SaveChangesHandler<TData>, rowIds?: readonly string[]): Promise<GridBatchSaveResult<TData>>;
851
934
  rollbackChanges(rowIds?: readonly string[]): boolean;
852
935
  setPinnedTopRowData(rows: TData[] | null): void;
853
936
  getPinnedTopRowData(): TData[];
@@ -893,9 +976,12 @@ interface GridApi<TData = any> {
893
976
  updateOptions(options: Partial<GridOptions<TData>>): void;
894
977
  getDataAsCsv(params?: CsvExportParams): string;
895
978
  getState(): GridState;
896
- applyState(state: GridState, options?: ApplyGridStateOptions): void;
979
+ applyState(state: GridStateInput, options?: ApplyGridStateOptions): void;
897
980
  /** Lightweight runtime snapshot suitable for support logs and health panels. */
898
981
  getDiagnostics(): GridDiagnostics;
982
+ /** Rolling viewport-render metrics for diagnostics and reproducible benchmarks. */
983
+ getPerformanceSnapshot(): GridPerformanceSnapshot;
984
+ resetPerformanceMetrics(): void;
899
985
  setOverlay(type: "loading" | "noRows" | "error" | null): void;
900
986
  hideOverlays(): void;
901
987
  addEventListener<K extends GridEventType>(eventType: K, listener: (event: GridEventMap<TData>[K]) => void): () => void;
@@ -983,6 +1069,8 @@ interface HeaderComponentParams<TData = any> {
983
1069
  }
984
1070
  interface ICellRendererResult {
985
1071
  el: HTMLElement;
1072
+ /** Reuses the mounted renderer for an update. Return false to request recreation. */
1073
+ refresh?(params: CellRendererParams): boolean | void;
986
1074
  destroy?: () => void;
987
1075
  }
988
1076
  type CellRendererOutput = string | HTMLElement | ICellRendererResult | null | undefined;
@@ -1120,6 +1208,10 @@ interface ColumnState {
1120
1208
  colId: string;
1121
1209
  hide?: boolean;
1122
1210
  width?: number;
1211
+ /** Active flex weight. A resize clears flex and turns width into a manual override. */
1212
+ flex?: number | null;
1213
+ /** Distinguishes responsive/definition width from an explicit user or API override. */
1214
+ widthMode?: "auto" | "manual";
1123
1215
  pinned?: "left" | "right" | null;
1124
1216
  sort?: SortDirection | null;
1125
1217
  sortIndex?: number | null;
@@ -1173,12 +1265,14 @@ declare class ColumnModel {
1173
1265
  paneOf(column: Column): PaneType;
1174
1266
  computeLayout(viewportWidth: number): void;
1175
1267
  private widthInputOf;
1176
- setColumnWidth(column: Column, width: number): void;
1268
+ setColumnWidth(column: Column, width: number): boolean;
1177
1269
  setColumnVisibility(colId: string, visible: boolean): void;
1178
1270
  moveColumn(colId: string, toIndex: number): boolean;
1179
1271
  setColumnPinned(colId: string, pinned: PinnedDirection | null): void;
1180
1272
  getColumnState(): ColumnState[];
1181
1273
  applyColumnState(states: ColumnState[]): void;
1274
+ private applyColumnViewState;
1275
+ private sortModelFromState;
1182
1276
  private applyStateOrder;
1183
1277
  resetColumnState(): void;
1184
1278
  getSortModel(): SortModel;
@@ -1195,6 +1289,7 @@ declare class RowModel<TData = any> {
1195
1289
  private displayed;
1196
1290
  private nodesById;
1197
1291
  private filterModel;
1292
+ private advancedFilterModel;
1198
1293
  private quickFilter;
1199
1294
  private expandedIds;
1200
1295
  private groupExpandedIds;
@@ -1243,6 +1338,8 @@ declare class RowModel<TData = any> {
1243
1338
  private reindexAll;
1244
1339
  setFilterModel(filterModel: FilterModel | null): boolean;
1245
1340
  getFilterModel(): FilterModel;
1341
+ setAdvancedFilterModel(model: AdvancedFilterModel | null | undefined): boolean;
1342
+ getAdvancedFilterModel(): AdvancedFilterModel | null;
1246
1343
  setQuickFilter(text: string | null | undefined): boolean;
1247
1344
  getQuickFilter(): string | null;
1248
1345
  isFilterPresent(): boolean;
@@ -1335,16 +1432,25 @@ declare class SelectionService {
1335
1432
  private recomputeTriState;
1336
1433
  }
1337
1434
 
1338
- type ResizeContext = Pick<GridCore<any>, "columnModel" | "emit" | "persistColumnState" | "relayoutColumns" | "skeleton">;
1435
+ type ResizeContext = Pick<GridCore<any>, "columnModel" | "commitColumnWidths" | "emitColumnResize" | "options" | "relayoutColumns" | "skeleton">;
1339
1436
  declare class ResizeService {
1340
1437
  private core;
1341
1438
  private active;
1342
1439
  private rafId;
1343
1440
  private pendingWidth;
1344
1441
  constructor(core: ResizeContext);
1345
- startResize(e: PointerEvent, column: Column): void;
1442
+ startResize(event: PointerEvent, column: Column): void;
1443
+ cancelResize(restore?: boolean): void;
1346
1444
  private onMove;
1347
1445
  private onUp;
1446
+ private onCancel;
1447
+ private onLostPointerCapture;
1448
+ private finishResize;
1449
+ private applyPendingWidth;
1450
+ private widthFromPointer;
1451
+ private matchActivePointer;
1452
+ private clearFrame;
1453
+ private removeListeners;
1348
1454
  destroy(): void;
1349
1455
  }
1350
1456
 
@@ -1569,6 +1675,14 @@ declare class ChangeTrackingService<TData = any> {
1569
1675
  private emitChanged;
1570
1676
  }
1571
1677
 
1678
+ declare class PerformanceMonitor {
1679
+ private samples;
1680
+ start(): number;
1681
+ recordRender(startedAt: number, rows: number, columns: number): void;
1682
+ snapshot(): GridPerformanceSnapshot;
1683
+ reset(): void;
1684
+ }
1685
+
1572
1686
  type SkeletonContext = Pick<GridCore<any>, "options" | "relayout" | "reportError">;
1573
1687
  declare class GridSkeleton {
1574
1688
  private core;
@@ -1620,7 +1734,7 @@ declare class GridSkeleton {
1620
1734
  private cleanupOverlayContent;
1621
1735
  }
1622
1736
 
1623
- type HeaderContext = Pick<GridCore<any>, "columnDragService" | "columnMenu" | "columnModel" | "cycleSort" | "emit" | "filterPopup" | "getApi" | "isDestroyed" | "moveColumn" | "options" | "relayoutColumns" | "reportError" | "resizeService" | "rowModel" | "selectionService" | "skeleton">;
1737
+ type HeaderContext = Pick<GridCore<any>, "columnDragService" | "columnMenu" | "columnModel" | "commitColumnWidths" | "cycleSort" | "emit" | "filterPopup" | "getApi" | "isDestroyed" | "moveColumn" | "options" | "relayoutColumns" | "reportError" | "resizeService" | "rowModel" | "selectionService" | "skeleton">;
1624
1738
  declare class HeaderRenderer {
1625
1739
  private core;
1626
1740
  private leafCells;
@@ -1634,6 +1748,7 @@ declare class HeaderRenderer {
1634
1748
  private visiblePaneLeaves;
1635
1749
  private onHeaderKeyDown;
1636
1750
  private focusHeaderCell;
1751
+ private canResizeColumn;
1637
1752
  refreshSortIndicators(): void;
1638
1753
  refreshFilterIcons(): void;
1639
1754
  refreshSelectAllCheckbox(): void;
@@ -1647,7 +1762,7 @@ interface NormalizedRange {
1647
1762
  c2: number;
1648
1763
  }
1649
1764
 
1650
- type BodyContext = Pick<GridCore<any>, "buildDefaultEmptyState" | "buildDefaultErrorState" | "columnModel" | "contextMenuService" | "editingService" | "emit" | "getApi" | "getCellValue" | "gridId" | "isDestroyed" | "options" | "pinnedRowsRenderer" | "reportError" | "resolveCellRenderer" | "rowModel" | "selectionService" | "setCellValue" | "skeleton" | "summaryRenderer" | "toggleDetail" | "tooltipService" | "undoService">;
1765
+ type BodyContext = Pick<GridCore<any>, "buildDefaultEmptyState" | "buildDefaultErrorState" | "columnModel" | "contextMenuService" | "editingService" | "emit" | "getApi" | "getCellValue" | "gridId" | "isDestroyed" | "options" | "performanceMonitor" | "pinnedRowsRenderer" | "reportError" | "resolveCellRenderer" | "rowModel" | "selectionService" | "setCellValue" | "skeleton" | "summaryRenderer" | "toggleDetail" | "tooltipService" | "undoService">;
1651
1766
  interface FocusedCell {
1652
1767
  rowIndex: number;
1653
1768
  colId: string;
@@ -1697,6 +1812,10 @@ declare class BodyRenderer {
1697
1812
  applyCellLayout(): void;
1698
1813
  private computeColWindow;
1699
1814
  updateRange(force?: boolean): void;
1815
+ private updateRangeInner;
1816
+ private calculateVisibleRange;
1817
+ private hideOutsideRange;
1818
+ private renderVirtualRange;
1700
1819
  private reconcileColumnWindow;
1701
1820
  private renderAutoHeightRange;
1702
1821
  private hideSlot;
@@ -1707,6 +1826,8 @@ declare class BodyRenderer {
1707
1826
  private renderDetailContent;
1708
1827
  private cleanupDetail;
1709
1828
  private renderCell;
1829
+ private cellRenderKind;
1830
+ private renderStructuralCell;
1710
1831
  private appendEditableIndicator;
1711
1832
  private releaseSlotEditors;
1712
1833
  private treeColumnCache;
@@ -1859,6 +1980,7 @@ declare class GridCore<TData = any> {
1859
1980
  readonly editingService: EditingService;
1860
1981
  readonly undoService: UndoRedoService;
1861
1982
  readonly changeTracker: ChangeTrackingService<TData>;
1983
+ readonly performanceMonitor: PerformanceMonitor;
1862
1984
  readonly filterPopup: FilterPopupService;
1863
1985
  readonly columnMenu: ColumnMenuService;
1864
1986
  readonly contextMenuService: ContextMenuService;
@@ -1886,6 +2008,7 @@ declare class GridCore<TData = any> {
1886
2008
  private settleReady;
1887
2009
  resolveCellRenderer(name: string): CellRendererFn | undefined;
1888
2010
  resolveCellEditor(name: string): CellEditorFactory | undefined;
2011
+ private inactiveFeatureDependency;
1889
2012
  setFeatures(features: readonly GridFeature<TData>[] | null | undefined): void;
1890
2013
  private destroyFeatures;
1891
2014
  isDestroyed(): boolean;
@@ -1922,6 +2045,9 @@ declare class GridCore<TData = any> {
1922
2045
  applyQuickFilter(): void;
1923
2046
  moveColumn(colId: string, toIndex: number): void;
1924
2047
  toggleDetail(rowId: string): boolean;
2048
+ emitColumnResize(column: Column, finished: boolean): void;
2049
+ /** Finalizes one logical resize operation and persists its state once. */
2050
+ commitColumnWidths(columns: readonly Column[]): void;
1925
2051
  private columnStateLoadToken;
1926
2052
  loadPersistedColumnState(): void;
1927
2053
  persistColumnState(): void;
@@ -1957,6 +2083,15 @@ declare function computeColumnWidths(cols: WidthInput[], availableWidth: number)
1957
2083
  /** Fits columns into a viewport while honoring every min/max bound. */
1958
2084
  declare function fitColumnWidths(cols: WidthInput[], availableWidth: number): number[];
1959
2085
 
2086
+ declare function normalizeColumnFilter(input: unknown): ColumnFilter | null;
2087
+ /** Clones and bounds untrusted JSON before it reaches the row pipeline. */
2088
+ declare function normalizeAdvancedFilterModel(input: unknown, validColumnIds?: ReadonlySet<string>): AdvancedFilterModel | null;
2089
+ declare function advancedFilterCondition(colId: string, filter: ColumnFilter): AdvancedFilterCondition;
2090
+ declare function normalizeFilterModel(input: unknown, validColumnIds?: ReadonlySet<string>): FilterModel;
2091
+ declare function advancedFilterGroup(operator: "and" | "or", children: AdvancedFilterNode[], options?: {
2092
+ not?: boolean;
2093
+ }): AdvancedFilterGroup;
2094
+
1960
2095
  interface GridSizePreset {
1961
2096
  rowHeight: number;
1962
2097
  headerHeight: number;
@@ -2022,6 +2157,10 @@ declare const GRID_OPTION_META: {
2022
2157
  readonly kind: "string";
2023
2158
  readonly update: "options";
2024
2159
  };
2160
+ readonly enableColumnResize: {
2161
+ readonly kind: "boolean";
2162
+ readonly update: "options";
2163
+ };
2025
2164
  readonly domLayout: {
2026
2165
  readonly kind: "string";
2027
2166
  readonly update: "options";
@@ -2054,6 +2193,10 @@ declare const GRID_OPTION_META: {
2054
2193
  readonly kind: "string";
2055
2194
  readonly update: "quickFilter";
2056
2195
  };
2196
+ readonly advancedFilterModel: {
2197
+ readonly kind: "object";
2198
+ readonly update: "options";
2199
+ };
2057
2200
  readonly masterDetail: {
2058
2201
  readonly kind: "boolean";
2059
2202
  readonly update: "options";
@@ -2334,6 +2477,14 @@ declare const GRID_OPTION_META: {
2334
2477
  declare const GRID_OPTION_KEYS: readonly GridOptionKey[];
2335
2478
  declare const DIRECT_GRID_OPTION_KEYS: readonly GridOptionKey[];
2336
2479
 
2480
+ declare function matchesGridOptionKind(value: unknown, kind: GridOptionValueKind): boolean;
2481
+ /**
2482
+ * Drops unknown and runtime-invalid options before they can partially mutate a grid.
2483
+ * Validation still reports the original patch, while this function guarantees that
2484
+ * JavaScript/JSON callers receive the same safety boundary as TypeScript callers.
2485
+ */
2486
+ declare function sanitizeGridOptionPatch<TData>(input: Partial<GridOptions<TData>> | Record<string, unknown>): Partial<GridOptions<TData>>;
2487
+
2337
2488
  declare function describeFilter(filter: ColumnFilter): string;
2338
2489
 
2339
2490
  type GridValidationCode = "UNKNOWN_OPTION" | "INVALID_OPTION_VALUE" | "OPTION_CONFLICT" | "MISSING_STABLE_ROW_ID";
@@ -2346,6 +2497,23 @@ interface GridValidationIssue {
2346
2497
  /** Runtime validation for JavaScript, JSON/schema driven and dynamic options. */
2347
2498
  declare function validateGridOptions(options: Partial<GridOptions<any>> | Record<string, unknown>): GridValidationIssue[];
2348
2499
 
2500
+ type GridFeatureIssueCode = "DUPLICATE_FEATURE" | "FEATURE_CONFLICT" | "FEATURE_CYCLE" | "FEATURE_DEPENDENCY_SETUP_FAILED" | "INVALID_FEATURE_KEY" | "MISSING_FEATURE_DEPENDENCY";
2501
+ interface GridFeatureIssue {
2502
+ code: GridFeatureIssueCode;
2503
+ feature?: string;
2504
+ dependency?: string;
2505
+ message: string;
2506
+ }
2507
+ interface ResolvedGridFeatures<TData = any> {
2508
+ features: GridFeature<TData>[];
2509
+ issues: GridFeatureIssue[];
2510
+ }
2511
+ /**
2512
+ * Validates and dependency-orders per-grid features before any setup side effect runs.
2513
+ * Invalid features are isolated instead of leaving a partially initialised extension graph.
2514
+ */
2515
+ declare function resolveGridFeatures<TData>(input: readonly GridFeature<TData>[]): ResolvedGridFeatures<TData>;
2516
+
2349
2517
  type GridSchemaFieldType = "string" | "number" | "date" | "select" | "boolean";
2350
2518
  interface SchemaSelectOption {
2351
2519
  label: string;
@@ -2423,7 +2591,7 @@ declare function loadColumnState(key: string): ColumnState[] | null;
2423
2591
  declare function clearColumnState(key: string): void;
2424
2592
 
2425
2593
  interface StoredGridState {
2426
- schemaVersion: 1;
2594
+ schemaVersion: 2;
2427
2595
  savedAt: number;
2428
2596
  state: GridState;
2429
2597
  }
@@ -2440,7 +2608,7 @@ interface ManagedGridStateStore extends GridStateStore {
2440
2608
  }
2441
2609
  /** Safe, versioned localStorage adapter for full grid state. */
2442
2610
  declare function createLocalGridStateStore(options?: LocalGridStateStoreOptions): ManagedGridStateStore;
2443
- declare function saveGridState(key: string, state: GridState): void;
2611
+ declare function saveGridState(key: string, state: GridStateInput): void;
2444
2612
  declare function loadGridState(key: string): GridState | null;
2445
2613
  declare function clearGridState(key: string): void;
2446
2614
 
@@ -2685,10 +2853,68 @@ interface DictionaryRendererOptions {
2685
2853
  /** Async-safe renderer backed by createCachedDictionary; stale pooled cells are not mutated. */
2686
2854
  declare function createDictionaryRenderer<TKey extends DictionaryKey = DictionaryKey>(dictionary: CachedDictionary<TKey>, options?: DictionaryRendererOptions): CellRendererFn;
2687
2855
 
2856
+ declare function createSaveSnapshot<TData>(changes: readonly GridChange<TData>[], rowIds?: readonly string[]): GridChange<TData>[];
2857
+ declare function normalizeBatchSaveResult<TData>(submitted: GridChange<TData>[], response: void | SaveChangesResult<TData>): GridBatchSaveResult<TData>;
2858
+ declare function resolveSaveConflict<TData>(api: GridApi<TData>, conflict: SaveChangeConflict<TData>, strategy: "acceptServer" | "keepLocal"): boolean;
2859
+
2860
+ /** Migrates and bounds persisted state before it mutates a live grid. */
2861
+ declare function migrateGridState(input: unknown): GridState | null;
2862
+
2863
+ /** Portable user preference snapshot. Selection and row expansion are deliberately excluded. */
2864
+ interface GridViewState {
2865
+ version: 1;
2866
+ columns: ColumnState[];
2867
+ sortModel: SortModel;
2868
+ filterModel: FilterModel;
2869
+ advancedFilterModel: AdvancedFilterModel | null;
2870
+ quickFilterText: string | null;
2871
+ pageSize: number;
2872
+ }
2873
+ interface SavedGridView {
2874
+ schemaVersion: 1;
2875
+ id: string;
2876
+ name: string;
2877
+ createdAt: number;
2878
+ updatedAt: number;
2879
+ state: GridViewState;
2880
+ }
2881
+ interface GridViewStore {
2882
+ list(scope: string): readonly SavedGridView[] | Promise<readonly SavedGridView[]>;
2883
+ save(scope: string, view: SavedGridView): void | Promise<void>;
2884
+ remove(scope: string, id: string): void | Promise<void>;
2885
+ }
2886
+ interface GridViewManager {
2887
+ list(): Promise<SavedGridView[]>;
2888
+ save(name: string, id?: string): Promise<SavedGridView>;
2889
+ apply(viewOrId: SavedGridView | string, options?: {
2890
+ emitEvents?: boolean;
2891
+ }): Promise<SavedGridView>;
2892
+ remove(id: string): Promise<void>;
2893
+ }
2894
+
2895
+ interface LocalGridViewStoreOptions {
2896
+ namespace?: string;
2897
+ storage?: ColumnStateStorage;
2898
+ maxViews?: number;
2899
+ maxBytes?: number;
2900
+ onError?(error: unknown, operation: "list" | "save" | "remove", scope: string): void;
2901
+ }
2902
+ declare function normalizeGridViewState(input: unknown): GridViewState | null;
2903
+ declare function normalizeSavedGridView(input: unknown): SavedGridView | null;
2904
+ declare function captureGridViewState<TData>(api: GridApi<TData>): GridViewState;
2905
+ declare function applyGridViewState<TData>(api: GridApi<TData>, view: GridViewState, options?: {
2906
+ emitEvents?: boolean;
2907
+ }): boolean;
2908
+ declare function createLocalGridViewStore(options?: LocalGridViewStoreOptions): GridViewStore;
2909
+ declare function createGridViewManager<TData>(api: GridApi<TData>, options: {
2910
+ scope: string;
2911
+ store?: GridViewStore;
2912
+ }): GridViewManager;
2913
+
2688
2914
  declare function evaluateColumnFilter(value: any, filter: ColumnFilter): boolean;
2689
2915
 
2690
2916
  declare function sortNodes<TData>(nodes: RowNode<TData>[], sortModel: SortModel, columns: Column[], getCellValue: (node: RowNode<TData>, column: Column) => any): RowNode<TData>[];
2691
2917
 
2692
2918
  declare const version: string;
2693
2919
 
2694
- export { type ActionButtonsConfig, type ActionItem, type ActionOverflowMode, type ActionPolicy, type ActionPolicyContext, type ActionVariant, type AggFunction, type AggValues, type ApplyGridStateOptions, BUILTIN_AGG_FUNCS, type BuiltInActionIcon, type BusinessColumnType, type BusinessColumnTypeOptions, type CachedDictionary, type CachedDictionaryOptions, type CellAlign, type CellClassParams, type CellClassRule, type CellClickEvent, type CellContextMenuEvent, type CellDoubleClickEvent, type CellEditingStartedEvent, type CellEditingStoppedEvent, type CellEditorFactory, type CellEditorParams, type CellRendererFn, type CellRendererOutput, type CellRendererParams, type CellStyleRule, type CellValueChangedEvent, type ColDef, type ColDefGroup, type ColDefOrGroup, Column, type ColumnFilter, type ColumnHelper, type ColumnLayoutMode, type ColumnMovedEvent, type ColumnResizedEvent, type ColumnState, type ColumnStateKeyParts, type ColumnStateStorage, type ColumnStateStore, type ColumnVisibilityChangedEvent, type ColumnWorkbenchItem, type ContextMenuItem, type ContextMenuParams, type CsvExportParams, DEFAULT_LOCALE, DIRECT_GRID_OPTION_KEYS, type DateFilterCondition, type DateFilterMatch, type DetailRowRendererParams, type DetailToggledEvent, type DictionaryEntry, type DictionaryKey, type DictionaryRendererOptions, type DirtyStateChangedEvent, type DomLayoutMode, EVENT_TYPES, type EditableIndicator, type EditableParams, EventBus, type EventHandlers, type FieldPath, type FieldPathValue, type FilterChangedEvent, type FilterModel, type FilterType, GRID_OPTION_KEYS, GRID_OPTION_META, GRID_SIZE_PRESETS, type GetRowHeightParams, type GetRowIdParams, type GridApi, type GridCellChange, type GridCellRange, type GridChange, type GridComponents, GridCore, type GridDatasource, type GridDiagnosticError, type GridDiagnostics, type GridEditType, type GridErrorCode, type GridErrorEvent, type GridEventBase, type GridEventMap, type GridEventType, type GridFeature, type GridFeatureContext, type GridOptionKey, type GridOptionMetadata, type GridOptionUpdateMode, type GridOptionValueKind, type GridOptions, type GridReadyEvent, type GridSchema, type GridSchemaField, type GridSchemaFieldType, type GridSchemaGroup, type GridSize, type GridSizePreset, type GridState, type GridStateSection, type GridStateStore, type GridValidationCode, type GridValidationIssue, type HeaderComponentParams, type ICellEditor, type ICellRendererResult, type ImportCsvOptions, type InfiniteGetRowsParams, LOCALE_EN, type LocalColumnStateStoreOptions, type LocalGridStateStoreOptions, type MachTableCommandOptions, type MachTableCommands, type MachTableConfigWarning, type MachTableOptionExplanation, type MachTablePresetSelection, type MachTableRuntimeConfig, type ManagedColumnStateStore, type ManagedGridStateStore, type ModelUpdatedEvent, type NumberFilterCondition, type NumberFilterMatch, type OverlayContent, type OverlayTemplate, type PaginationChangedEvent, type PaginationConfig, type PinnedDirection, type PrintOptions, type ProgressConfig, type RangeSelectionChangedEvent, type ResolvedGridOptions, type ResolvedMachTableConfig, type ResolvedMachTableGridOptions, type RgLocale, type RgLocaleKey, type RowActionsConfig, type RowClickEvent, type RowDragEndEvent, type RowEditChange, type RowEditValidationParams, type RowEditValidationResult, type RowEditingStartedEvent, type RowEditingStoppedEvent, type RowNode, type RowSelectionMode, type RowTransaction, type SaveChangesHandler, type SaveChangesResult, type SchemaSelectOption, type SelectEditorParams, type SelectionChangedEvent, type SetFilterCondition, type SetFilterParams, type SortChangedEvent, type SortDirection, type SortModel, type SortModelItem, type StatusBarConfig, type StatusBarPanel, type StatusTagConfig, type StoredColumnState, type StoredGridState, type TagVariant, type TextFilterCondition, type TextFilterMatch, type ThemeMode, type TooltipParams, type TreeChildrenLoadFailedEvent, type TreeChildrenLoadedEvent, type TreeDataLoadParams, type ValueFormatterParams, type ValueGetterParams, type ValueSetterParams, type WatermarkConfig, type WidthInput, actionsColumn, buildColDefsFromSchema, clearColumnState, clearComponentRegistries, clearGridState, computeColumnWidths, createActionButtonsRenderer, createAggResolver, createBusinessColumnTypes, createCachedDictionary, createColumnHelper, createColumnStateKey, createDictionaryRenderer, createEnterprisePreset, createGrid, createLocalColumnStateStore, createLocalGridStateStore, createMachTableCommands, createMachTablePreset, createProgressBarRenderer, createRowActionsRenderer, createStatusTagRenderer, defaultComparator, defineColumns, defineGridOptions, defineMachTableConfig, defineMachTablePreset, describeFilter, downloadFile, dragColumn, escapeHtml, evaluateColumnFilter, fitColumnWidths, formatText, formatTwo, getByPath, getCellEditor, getCellRenderer, indexColumn, isColDefGroup, isSafePath, linkRenderer, loadColumnState, loadGridState, matchLocaleKey, mergeMachTableConfig, normalizeMachTableConfig, parseCsv, parseDelimited, parseTsv, registerBuiltinRenderers, registerCellEditor, registerCellRenderer, resolveMachTableGridOptions, resolveTagVariant, rowActionsColumn, sanitizeFormulaCell, saveColumnState, saveGridState, selectionColumn, setByPath, sortNodes, toTsv, validateGridOptions, version };
2920
+ export { type ActionButtonsConfig, type ActionItem, type ActionOverflowMode, type ActionPolicy, type ActionPolicyContext, type ActionVariant, type AdvancedFilterCondition, type AdvancedFilterGroup, type AdvancedFilterModel, type AdvancedFilterNode, type AggFunction, type AggValues, type ApplyGridStateOptions, BUILTIN_AGG_FUNCS, type BuiltInActionIcon, type BusinessColumnType, type BusinessColumnTypeOptions, type CachedDictionary, type CachedDictionaryOptions, type CellAlign, type CellClassParams, type CellClassRule, type CellClickEvent, type CellContextMenuEvent, type CellDoubleClickEvent, type CellEditingStartedEvent, type CellEditingStoppedEvent, type CellEditorFactory, type CellEditorParams, type CellRendererFn, type CellRendererOutput, type CellRendererParams, type CellStyleRule, type CellValueChangedEvent, type ColDef, type ColDefGroup, type ColDefOrGroup, Column, type ColumnFilter, type ColumnHelper, type ColumnLayoutMode, type ColumnMovedEvent, type ColumnResizedEvent, type ColumnState, type ColumnStateKeyParts, type ColumnStateStorage, type ColumnStateStore, type ColumnVisibilityChangedEvent, type ColumnWorkbenchItem, type ContextMenuItem, type ContextMenuParams, type CsvExportParams, DEFAULT_LOCALE, DIRECT_GRID_OPTION_KEYS, type DateFilterCondition, type DateFilterMatch, type DetailRowRendererParams, type DetailToggledEvent, type DictionaryEntry, type DictionaryKey, type DictionaryRendererOptions, type DirtyStateChangedEvent, type DomLayoutMode, EVENT_TYPES, type EditableIndicator, type EditableParams, EventBus, type EventHandlers, type FieldPath, type FieldPathValue, type FilterChangedEvent, type FilterModel, type FilterType, GRID_OPTION_KEYS, GRID_OPTION_META, GRID_SIZE_PRESETS, type GetRowHeightParams, type GetRowIdParams, type GridApi, type GridBatchSaveResult, type GridCellChange, type GridCellRange, type GridChange, type GridComponents, GridCore, type GridDatasource, type GridDiagnosticError, type GridDiagnostics, type GridEditType, type GridErrorCode, type GridErrorEvent, type GridEventBase, type GridEventMap, type GridEventType, type GridFeature, type GridFeatureContext, type GridFeatureIssue, type GridFeatureIssueCode, type GridOptionKey, type GridOptionMetadata, type GridOptionUpdateMode, type GridOptionValueKind, type GridOptions, type GridPerformanceSnapshot, type GridReadyEvent, type GridSchema, type GridSchemaField, type GridSchemaFieldType, type GridSchemaGroup, type GridSize, type GridSizePreset, type GridState, type GridStateInput, type GridStateSection, type GridStateStore, type GridValidationCode, type GridValidationIssue, type GridViewManager, type GridViewState, type GridViewStore, type HeaderComponentParams, type ICellEditor, type ICellRendererResult, type ImportCsvOptions, type InfiniteGetRowsParams, LOCALE_EN, type LegacyGridStateV1, type LocalColumnStateStoreOptions, type LocalGridStateStoreOptions, type LocalGridViewStoreOptions, type MachTableCommandOptions, type MachTableCommands, type MachTableConfigWarning, type MachTableOptionExplanation, type MachTablePresetSelection, type MachTableRuntimeConfig, type ManagedColumnStateStore, type ManagedGridStateStore, type ModelUpdatedEvent, type NumberFilterCondition, type NumberFilterMatch, type OverlayContent, type OverlayTemplate, type PaginationChangedEvent, type PaginationConfig, type PinnedDirection, type PrintOptions, type ProgressConfig, type RangeSelectionChangedEvent, type ResolvedGridFeatures, type ResolvedGridOptions, type ResolvedMachTableConfig, type ResolvedMachTableGridOptions, type RgLocale, type RgLocaleKey, type RowActionsConfig, type RowClickEvent, type RowDragEndEvent, type RowEditChange, type RowEditValidationParams, type RowEditValidationResult, type RowEditingStartedEvent, type RowEditingStoppedEvent, type RowNode, type RowSelectionMode, type RowTransaction, type SaveChangeConflict, type SaveChangeIssue, type SaveChangesHandler, type SaveChangesResult, type SavedGridView, type SchemaSelectOption, type SelectEditorParams, type SelectionChangedEvent, type SetFilterCondition, type SetFilterParams, type SortChangedEvent, type SortDirection, type SortModel, type SortModelItem, type StatusBarConfig, type StatusBarPanel, type StatusTagConfig, type StoredColumnState, type StoredGridState, type TagVariant, type TextFilterCondition, type TextFilterMatch, type ThemeMode, type TooltipParams, type TreeChildrenLoadFailedEvent, type TreeChildrenLoadedEvent, type TreeDataLoadParams, type ValueFormatterParams, type ValueGetterParams, type ValueSetterParams, type WatermarkConfig, type WidthInput, actionsColumn, advancedFilterCondition, advancedFilterGroup, applyGridViewState, buildColDefsFromSchema, captureGridViewState, clearColumnState, clearComponentRegistries, clearGridState, computeColumnWidths, createActionButtonsRenderer, createAggResolver, createBusinessColumnTypes, createCachedDictionary, createColumnHelper, createColumnStateKey, createDictionaryRenderer, createEnterprisePreset, createGrid, createGridViewManager, createLocalColumnStateStore, createLocalGridStateStore, createLocalGridViewStore, createMachTableCommands, createMachTablePreset, createProgressBarRenderer, createRowActionsRenderer, createSaveSnapshot, createStatusTagRenderer, defaultComparator, defineColumns, defineGridOptions, defineMachTableConfig, defineMachTablePreset, describeFilter, downloadFile, dragColumn, escapeHtml, evaluateColumnFilter, fitColumnWidths, formatText, formatTwo, getByPath, getCellEditor, getCellRenderer, indexColumn, isColDefGroup, isSafePath, linkRenderer, loadColumnState, loadGridState, matchLocaleKey, matchesGridOptionKind, mergeMachTableConfig, migrateGridState, normalizeAdvancedFilterModel, normalizeBatchSaveResult, normalizeColumnFilter, normalizeFilterModel, normalizeGridViewState, normalizeMachTableConfig, normalizeSavedGridView, parseCsv, parseDelimited, parseTsv, registerBuiltinRenderers, registerCellEditor, registerCellRenderer, resolveGridFeatures, resolveMachTableGridOptions, resolveSaveConflict, resolveTagVariant, rowActionsColumn, sanitizeFormulaCell, sanitizeGridOptionPatch, saveColumnState, saveGridState, selectionColumn, setByPath, sortNodes, toTsv, validateGridOptions, version };