@gp-grid/core 0.13.2 → 0.15.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/README.md CHANGED
@@ -188,7 +188,7 @@ const dataSource = createClientDataSource(data, {
188
188
 
189
189
  ### Server-Side Data Source
190
190
 
191
- For large datasets that require server-side pagination, sorting, and filtering.
191
+ For large datasets that require server-side row-window loading, sorting, and filtering.
192
192
 
193
193
  ```typescript
194
194
  import {
@@ -207,8 +207,8 @@ const dataSource = createServerDataSource<Person>(
207
207
  async (request: DataSourceRequest) => {
208
208
  // Build query parameters from request
209
209
  const params = new URLSearchParams({
210
- page: String(request.pagination.pageIndex),
211
- pageSize: String(request.pagination.pageSize),
210
+ offset: String(request.range.startRow),
211
+ limit: String(request.range.endRow - request.range.startRow),
212
212
  });
213
213
 
214
214
  // Add sort parameters
@@ -248,9 +248,9 @@ interface DataSource<TData = Row> {
248
248
  }
249
249
 
250
250
  interface DataSourceRequest {
251
- pagination: {
252
- pageIndex: number;
253
- pageSize: number;
251
+ range: {
252
+ startRow: number;
253
+ endRow: number; // exclusive
254
254
  };
255
255
  sort?: SortModel[];
256
256
  filter?: FilterModel;
@@ -262,6 +262,30 @@ interface DataSourceResponse<TData> {
262
262
  }
263
263
  ```
264
264
 
265
+ `createServerDataSource` uses paginated loading by default. The grid sends
266
+ one absolute `range`, so APIs can use `startRow` as an offset and
267
+ `endRow - startRow` as a limit. Use
268
+ `createServerDataSource(fetchFn, { loadMode: "all" })` or
269
+ `rowLoading: { mode: "all" }` when you intentionally want fetch-all behavior.
270
+
271
+ Paginated cache aggressiveness is controlled through `rowLoading.cache`:
272
+
273
+ ```typescript
274
+ const grid = new GridCore({
275
+ columns,
276
+ dataSource: createServerDataSource(fetchPeople),
277
+ rowHeight: 36,
278
+ rowLoading: {
279
+ cache: {
280
+ eviction: "aggressive", // "balanced" by default
281
+ pageSize: 100,
282
+ prefetchPages: 0,
283
+ maxPages: 1,
284
+ },
285
+ },
286
+ });
287
+ ```
288
+
265
289
  ## Types Reference
266
290
 
267
291
  ### ColumnDefinition
package/dist/index.d.ts CHANGED
@@ -55,7 +55,7 @@ interface FillHandleState {
55
55
  /** Target column */
56
56
  targetCol: number;
57
57
  }
58
- /** Event emitted when a cell value is changed via editing or fill drag */
58
+ /** Event emitted when a cell value is changed via editing, fill drag, or paste */
59
59
  interface CellValueChangedEvent<TData = unknown> {
60
60
  /** Stable row ID (from getRowId) */
61
61
  rowId: RowId;
@@ -320,13 +320,19 @@ interface ColumnFilterModel {
320
320
  type FilterModel = Record<string, ColumnFilterModel>;
321
321
  //#endregion
322
322
  //#region src/types/data-source.d.ts
323
+ /** Data loading mode advertised by a data source */
324
+ type DataSourceLoadMode = "all" | "paginated";
325
+ /** Absolute row range requested from a data source. endRow is exclusive. */
326
+ interface DataSourceRange {
327
+ /** First row index to fetch */
328
+ startRow: number;
329
+ /** First row index after the requested range */
330
+ endRow: number;
331
+ }
323
332
  /** Data source request */
324
333
  interface DataSourceRequest {
325
- /** Pagination */
326
- pagination: {
327
- /** Page index */pageIndex: number; /** Page size */
328
- pageSize: number;
329
- };
334
+ /** Absolute row range to fetch. endRow is exclusive. */
335
+ range: DataSourceRange;
330
336
  /** Sort */
331
337
  sort?: SortModel[];
332
338
  /** Filter */
@@ -347,6 +353,11 @@ interface DataSourceResponse<TData = unknown> {
347
353
  }
348
354
  /** Data source interface */
349
355
  interface DataSource<TData = unknown> {
356
+ /**
357
+ * Loading mode preferred by this data source.
358
+ * Undefined is treated as "all".
359
+ */
360
+ readonly loadMode?: DataSourceLoadMode;
350
361
  /** Fetch data based on the request */
351
362
  fetch(request: DataSourceRequest): Promise<DataSourceResponse<TData>>;
352
363
  /** Optional cleanup method to release resources */
@@ -613,6 +624,28 @@ type InstructionListener = (instruction: GridInstruction) => void;
613
624
  type BatchInstructionListener = (instructions: GridInstruction[]) => void;
614
625
  //#endregion
615
626
  //#region src/types/options.d.ts
627
+ /** Row loading mode used by GridCore. "auto" follows the data source preference. */
628
+ type RowLoadingMode = "auto" | DataSourceLoadMode;
629
+ /** Preset for how quickly paginated rows are evicted from memory. */
630
+ type RowCacheEviction = "aggressive" | "balanced" | "conservative";
631
+ /** Cache controls for paginated row loading. */
632
+ interface RowCacheOptions {
633
+ /** Rows per server request. Default: 100. */
634
+ pageSize?: number;
635
+ /** Pages to prefetch before and after the visible page. Default depends on eviction preset. */
636
+ prefetchPages?: number;
637
+ /** Maximum loaded pages kept in memory. Default depends on eviction preset. */
638
+ maxPages?: number;
639
+ /** Eviction preset. Default: "balanced". */
640
+ eviction?: RowCacheEviction;
641
+ }
642
+ /** Grid row loading options. */
643
+ interface RowLoadingOptions {
644
+ /** Loading mode. Default: "auto". */
645
+ mode?: RowLoadingMode;
646
+ /** Cache options used when paginated loading is active. */
647
+ cache?: RowCacheOptions;
648
+ }
616
649
  /** Grid core options */
617
650
  interface GridCoreOptions<TData = unknown> {
618
651
  /** Column definitions */
@@ -625,6 +658,8 @@ interface GridCoreOptions<TData = unknown> {
625
658
  headerHeight?: number;
626
659
  /** Overscan: How many rows to render outside the viewport */
627
660
  overscan?: number;
661
+ /** Row loading and cache behavior. Server data sources use paginated loading by default. */
662
+ rowLoading?: RowLoadingOptions;
628
663
  /** Enable/disable sorting globally. Default: true */
629
664
  sortingEnabled?: boolean;
630
665
  /** Debounce time for transactions in ms. Default 50. Set to 0 for sync. */
@@ -633,7 +668,7 @@ interface GridCoreOptions<TData = unknown> {
633
668
  getRowId?: (row: TData) => RowId;
634
669
  /** Row/column/cell highlighting configuration */
635
670
  highlighting?: HighlightingOptions<TData>;
636
- /** Called when a cell value is changed via editing or fill drag. Requires getRowId. */
671
+ /** Called when a cell value is changed via editing, fill drag, or paste. Requires getRowId. */
637
672
  onCellValueChanged?: (event: CellValueChangedEvent<TData>) => void;
638
673
  /** Whether clicking and dragging any cell in a row drags the entire row instead of starting selection. Default: false */
639
674
  rowDragEntireRow?: boolean;
@@ -793,6 +828,15 @@ interface SelectionManagerOptions {
793
828
  getCellValue: (row: number, col: number) => CellValue;
794
829
  getRowData: (row: number) => unknown;
795
830
  getColumn: (col: number) => ColumnDefinition | undefined;
831
+ setCellValue: (row: number, col: number, value: CellValue) => void;
832
+ }
833
+ interface PasteResult {
834
+ handled: boolean;
835
+ changedCells: Array<{
836
+ row: number;
837
+ col: number;
838
+ value: CellValue;
839
+ }>;
796
840
  }
797
841
  /**
798
842
  * Manages Excel-style cell selection, keyboard navigation, and clipboard operations.
@@ -801,6 +845,7 @@ declare class SelectionManager {
801
845
  private state;
802
846
  private readonly options;
803
847
  private readonly emitter;
848
+ private clipboardSnapshot;
804
849
  onInstruction: (listener: InstructionListener) => () => void;
805
850
  private readonly emit;
806
851
  constructor(options: SelectionManagerOptions);
@@ -847,12 +892,23 @@ declare class SelectionManager {
847
892
  * Copy the selected data to the clipboard (Ctrl+C).
848
893
  */
849
894
  copySelectionToClipboard(): Promise<void>;
895
+ /**
896
+ * Paste text data into the active cell or selected target range.
897
+ */
898
+ pasteClipboardText(text: string): PasteResult;
850
899
  /**
851
900
  * Clean up resources for garbage collection.
852
901
  */
853
902
  destroy(): void;
854
903
  private clampPosition;
855
904
  private getEffectiveRange;
905
+ private createClipboardSnapshot;
906
+ private getPasteSourceCells;
907
+ private applyPasteSource;
908
+ private applyPasteCell;
909
+ private getSourceCellForTarget;
910
+ private isSingleSourceCell;
911
+ private getMaxSourceColumnCount;
856
912
  }
857
913
  //#endregion
858
914
  //#region src/fill.d.ts
@@ -1187,6 +1243,78 @@ declare class RowMutationManager<TData = unknown> {
1187
1243
  destroy(): void;
1188
1244
  }
1189
1245
  //#endregion
1246
+ //#region src/managers/instruction-batcher.d.ts
1247
+ declare class InstructionBatcher {
1248
+ private listeners;
1249
+ private buffer;
1250
+ /**
1251
+ * Subscribe to batched instructions. Returns an unsubscribe function.
1252
+ * Batch listeners receive arrays of instructions instead of individual ones.
1253
+ */
1254
+ subscribe(listener: BatchInstructionListener): () => void;
1255
+ /**
1256
+ * Begin buffering. `emit`/`emitBatch` accumulate into an internal buffer
1257
+ * until `flush()` is called. Supports nested semantics at the caller's
1258
+ * level (first startBatch "wins"; nested calls are no-ops by design).
1259
+ */
1260
+ start(): void;
1261
+ /** Flush buffered instructions to listeners as one batch and stop buffering. */
1262
+ flush(): void;
1263
+ emit(instruction: GridInstruction): void;
1264
+ emitBatch(instructions: GridInstruction[]): void;
1265
+ clearListeners(): void;
1266
+ private notify;
1267
+ }
1268
+ //#endregion
1269
+ //#region src/managers/row-data-manager.d.ts
1270
+ interface RowDataManagerOptions<TData> {
1271
+ dataSource: DataSource<TData>;
1272
+ rowLoading: RowLoadingOptions | undefined;
1273
+ batcher: InstructionBatcher;
1274
+ getColumns: () => ColumnDefinition[];
1275
+ getSortModel: () => SortModel[];
1276
+ getFilterModel: () => FilterModel;
1277
+ getRowHeight: () => number;
1278
+ getOverscan: () => number;
1279
+ getScrollTop: () => number;
1280
+ getViewportHeight: () => number;
1281
+ onCellValueChanged?: (event: CellValueChangedEvent<TData>) => void;
1282
+ getRowId?: (row: TData) => RowId;
1283
+ syncSlots: () => void;
1284
+ emitVisibleRange: () => void;
1285
+ emitContentSize: () => void;
1286
+ }
1287
+ declare class RowDataManager<TData = unknown> {
1288
+ private dataSource;
1289
+ private readonly options;
1290
+ private readonly rowLoading;
1291
+ private readonly rowWindowLoader;
1292
+ private cachedRows;
1293
+ private totalRows;
1294
+ private isDataLoading;
1295
+ constructor(options: RowDataManagerOptions<TData>);
1296
+ getCachedRows(): Map<number, TData>;
1297
+ setCachedRows(rows: Map<number, TData>): void;
1298
+ getTotalRows(): number;
1299
+ setTotalRows(count: number): void;
1300
+ getDataSource(): DataSource<TData>;
1301
+ getRowData(rowIndex: number): TData | undefined;
1302
+ isLoading(): boolean;
1303
+ getCellValue(row: number, col: number): CellValue;
1304
+ setCellValue(row: number, col: number, value: CellValue): void;
1305
+ loadInitial(): Promise<void>;
1306
+ requestVisibleRows(): void;
1307
+ refreshFromTransaction(): Promise<void>;
1308
+ setDataSource(dataSource: DataSource<TData>): void;
1309
+ destroy(): void;
1310
+ private fetchAllData;
1311
+ private fetchPaginatedData;
1312
+ private emitDataError;
1313
+ private isPaginatedLoading;
1314
+ private getInitialPaginatedRange;
1315
+ private getPaginatedLoadRange;
1316
+ }
1317
+ //#endregion
1190
1318
  //#region src/managers/scroll-virtualization-manager.d.ts
1191
1319
  interface ScrollVirtualizationManagerOptions {
1192
1320
  getRowHeight: () => number;
@@ -1390,7 +1518,7 @@ declare class IndexedDataStore<TData = unknown> {
1390
1518
  */
1391
1519
  setData(data: TData[]): void;
1392
1520
  /**
1393
- * Query data with sorting, filtering, and pagination.
1521
+ * Query data with sorting, filtering, and row-range slicing.
1394
1522
  * Compatible with DataSource.fetch() interface.
1395
1523
  */
1396
1524
  query(request: DataSourceRequest): DataSourceResponse<TData>;
@@ -1694,7 +1822,6 @@ declare class TransactionManager<TData = unknown> {
1694
1822
  //#region src/grid-core.d.ts
1695
1823
  declare class GridCore<TData = unknown> {
1696
1824
  private columns;
1697
- private dataSource;
1698
1825
  private readonly rowHeight;
1699
1826
  private readonly headerHeight;
1700
1827
  private readonly overscan;
@@ -1706,10 +1833,7 @@ declare class GridCore<TData = unknown> {
1706
1833
  private readonly onColumnResized?;
1707
1834
  private readonly onColumnMoved?;
1708
1835
  private readonly viewport;
1709
- private readonly currentPageIndex;
1710
- private readonly pageSize;
1711
- private cachedRows;
1712
- private totalRows;
1836
+ private readonly rowData;
1713
1837
  readonly selection: SelectionManager;
1714
1838
  readonly fill: FillManager;
1715
1839
  readonly input: InputHandler<TData>;
@@ -1722,7 +1846,6 @@ declare class GridCore<TData = unknown> {
1722
1846
  private readonly batcher;
1723
1847
  private readonly scrollVirtualization;
1724
1848
  private isDestroyed;
1725
- private _isDataLoading;
1726
1849
  constructor(options: GridCoreOptions<TData>);
1727
1850
  /**
1728
1851
  * Subscribe to batched instructions for efficient React/Vue state updates.
@@ -1738,7 +1861,6 @@ declare class GridCore<TData = unknown> {
1738
1861
  * When scroll virtualization is active, maps the DOM scroll position to the actual row position.
1739
1862
  */
1740
1863
  setViewport(scrollTop: number, scrollLeft: number, width: number, height: number): void;
1741
- private fetchData;
1742
1864
  setSort(colId: string, direction: SortDirection | null, addToExisting?: boolean): Promise<void>;
1743
1865
  setFilter(colId: string, filter: ColumnFilterModel | string | null): Promise<void>;
1744
1866
  hasActiveFilter(colId: string): boolean;
@@ -1756,6 +1878,7 @@ declare class GridCore<TData = unknown> {
1756
1878
  updateEditValue(value: CellValue): void;
1757
1879
  commitEdit(): void;
1758
1880
  cancelEdit(): void;
1881
+ pasteClipboardText(text: string): boolean;
1759
1882
  getEditState(): EditState | null;
1760
1883
  getCellValue(row: number, col: number): CellValue;
1761
1884
  setCellValue(row: number, col: number, value: CellValue): void;
@@ -2437,11 +2560,15 @@ declare function createDataSourceFromArray<TData = unknown>(data: TData[]): Data
2437
2560
  //#endregion
2438
2561
  //#region src/data-source/server-data-source.d.ts
2439
2562
  type ServerFetchFunction<TData> = (request: DataSourceRequest) => Promise<DataSourceResponse<TData>>;
2563
+ interface ServerDataSourceOptions {
2564
+ /** Server data sources use paginated loading by default. */
2565
+ loadMode?: DataSourceLoadMode;
2566
+ }
2440
2567
  /**
2441
2568
  * Creates a server-side data source that delegates all operations to the server.
2442
- * The fetch function receives sort/filter/pagination params to pass to the API.
2569
+ * The fetch function receives sort/filter/range params to pass to the API.
2443
2570
  */
2444
- declare function createServerDataSource<TData = unknown>(fetchFn: ServerFetchFunction<TData>): DataSource<TData>;
2571
+ declare function createServerDataSource<TData = unknown>(fetchFn: ServerFetchFunction<TData>, options?: ServerDataSourceOptions): DataSource<TData>;
2445
2572
  //#endregion
2446
2573
  //#region src/data-source/mutable-data-source.d.ts
2447
2574
  /** Callback for data change notifications */
@@ -2628,6 +2755,7 @@ interface BatchChangeSetters {
2628
2755
  setRowsWrapperOffset: (v: number) => void;
2629
2756
  setIsLoading: (v: boolean) => void;
2630
2757
  setErrorMessage: (v: string | null) => void;
2758
+ setTotalRows: (v: number) => void;
2631
2759
  setPendingScrollTop: (v: number | null) => void;
2632
2760
  setActiveCell: (v: CellPosition | null) => void;
2633
2761
  setSelectionRange: (v: CellRange | null) => void;
@@ -2739,7 +2867,11 @@ declare class InputEventAdapter<TData = unknown> {
2739
2867
  row: number;
2740
2868
  col: number;
2741
2869
  } | null, filterPopupOpen: boolean): KeyboardResult;
2870
+ pasteText(text: string, editingCell: {
2871
+ row: number;
2872
+ col: number;
2873
+ } | null, filterPopupOpen: boolean): boolean;
2742
2874
  private dispatchCellDragStart;
2743
2875
  }
2744
2876
  //#endregion
2745
- export { type AssignSlotInstruction, AutoScrollDriver, type BatchChangeSetters, type BatchInstructionListener, type CalculateFillHandlePositionParams, type CancelColumnMoveInstruction, type CancelColumnResizeInstruction, type CancelFillInstruction, type CancelRowDragInstruction, type CellDataType, type CellPointerAction, type CellPosition, type CellRange, type CellRendererParams, type CellValue, type CellValueChangedEvent, type CloseFilterPopupInstruction, type ColumnDefinition, type ColumnFilterModel, type ColumnMoveDragState, type ColumnResizeDragState, type ColumnsChangedInstruction, type CommitColumnMoveInstruction, type CommitColumnResizeInstruction, type CommitEditInstruction, type CommitFillInstruction, type CommitRowDragInstruction, type ContainerBounds, type CreateSlotInstruction, type DataChangeListener, type DataErrorInstruction, type DataLoadedInstruction, type DataLoadingInstruction, type DataSource, DataSourceOwner, type DataSourceRequest, type DataSourceResponse, type DateFilterCondition, type DateFilterOperator, type DestroySlotInstruction, type Direction, type DragEndResult, type DragMoveResult, type DragState, EditManager, type EditManagerOptions, type EditRendererParams, type EditState, type FillHandlePosition, type FillHandleState, FillManager, type FillPointerAction, type FilterCombination, type FilterCondition, type FilterModel, type FilterPopupState, GridCore, type GridCoreOptions, type GridInstruction, type GridState, type HeaderData, type HeaderRendererParams, type HighlightContext, HighlightManager, type HighlightingOptions, IndexedDataStore, type IndexedDataStoreOptions, type InitialStateArgs, InputEventAdapter, type InputEventAdapterDeps, InputHandler, type InputHandlerDeps, type InputResult, type InstructionListener, type KeyEventData, type KeyboardResult, type MoveSlotInstruction, type MultiColumnSortedChunk, type MutableClientDataSourceOptions, type MutableDataSource, type NumberFilterCondition, type NumberFilterOperator, type OpenFilterPopupInstruction, ParallelSortManager, type ParallelSortOptions, PendingRowDragController, type PendingRowDragDeps, type PointerEventData, type PopupPosition, type RowDragState, type RowId, RowMutationManager, type RowMutationManagerOptions, type RowSortCache, type RowsAddedInstruction, type RowsRemovedInstruction, type RowsUpdatedInstruction, ScrollVirtualizationManager, type ScrollVirtualizationManagerOptions, SelectionManager, type SelectionState, type SetActiveCellInstruction, type SetContentSizeInstruction, type SetHoverPositionInstruction, type SetSelectionRangeInstruction, type SlotData, type BatchInstructionListener$1 as SlotPoolBatchListener, SlotPoolManager, type SlotPoolManagerOptions, type SlotState, type SortDirection, SortFilterManager, type SortFilterManagerOptions, type SortModel, type SortedChunk, type StartColumnMoveInstruction, type StartColumnResizeInstruction, type StartEditInstruction, type StartFillInstruction, type StartRowDragInstruction, type StopEditInstruction, type TextFilterCondition, type TextFilterOperator, type Transaction, TransactionManager, type TransactionManagerOptions, type TransactionProcessedInstruction, type TransactionResult, type UpdateColumnMoveInstruction, type UpdateColumnResizeInstruction, type UpdateFillInstruction, type UpdateHeaderInstruction, type UpdateRowDragInstruction, type VisibleColumnInfo, WorkerPool, type WorkerPoolOptions, applyBatchInstructions, applyInstruction, buildCellClasses, calculateColumnPositions, calculateFillHandlePosition, calculateFilterPopupPosition, calculateScaledColumnPositions, cellStyles, compareValues, computeValueHash, containerStyles, createClientDataSource, createDataSourceFromArray, createInitialState, createMutableClientDataSource, createServerDataSource, detectBoundaryCollisions, evaluateColumnFilter, evaluateDateCondition, evaluateNumberCondition, evaluateTextCondition, filtersStyles, findColumnAtX, findSlotForRow, formatCellValue, getFieldValue, getTotalWidth, gridStyles, headerStyles, isCellActive, isCellEditing, isCellInFillPreview, isCellSelected, isColumnInSelectionRange, isRowInSelectionRange, isRowVisible, isSameDay, kWayMerge, kWayMergeMultiColumn, rowDragStyles, rowPassesFilter, scrollCellIntoView, scrollbarStyles, setFieldValue, statesStyles, stringToSortableNumber, toPointerEventData, variablesStyles };
2877
+ export { type AssignSlotInstruction, AutoScrollDriver, type BatchChangeSetters, type BatchInstructionListener, type CalculateFillHandlePositionParams, type CancelColumnMoveInstruction, type CancelColumnResizeInstruction, type CancelFillInstruction, type CancelRowDragInstruction, type CellDataType, type CellPointerAction, type CellPosition, type CellRange, type CellRendererParams, type CellValue, type CellValueChangedEvent, type CloseFilterPopupInstruction, type ColumnDefinition, type ColumnFilterModel, type ColumnMoveDragState, type ColumnResizeDragState, type ColumnsChangedInstruction, type CommitColumnMoveInstruction, type CommitColumnResizeInstruction, type CommitEditInstruction, type CommitFillInstruction, type CommitRowDragInstruction, type ContainerBounds, type CreateSlotInstruction, type DataChangeListener, type DataErrorInstruction, type DataLoadedInstruction, type DataLoadingInstruction, type DataSource, type DataSourceLoadMode, DataSourceOwner, type DataSourceRange, type DataSourceRequest, type DataSourceResponse, type DateFilterCondition, type DateFilterOperator, type DestroySlotInstruction, type Direction, type DragEndResult, type DragMoveResult, type DragState, EditManager, type EditManagerOptions, type EditRendererParams, type EditState, type FillHandlePosition, type FillHandleState, FillManager, type FillPointerAction, type FilterCombination, type FilterCondition, type FilterModel, type FilterPopupState, GridCore, type GridCoreOptions, type GridInstruction, type GridState, type HeaderData, type HeaderRendererParams, type HighlightContext, HighlightManager, type HighlightingOptions, IndexedDataStore, type IndexedDataStoreOptions, type InitialStateArgs, InputEventAdapter, type InputEventAdapterDeps, InputHandler, type InputHandlerDeps, type InputResult, type InstructionListener, type KeyEventData, type KeyboardResult, type MoveSlotInstruction, type MultiColumnSortedChunk, type MutableClientDataSourceOptions, type MutableDataSource, type NumberFilterCondition, type NumberFilterOperator, type OpenFilterPopupInstruction, ParallelSortManager, type ParallelSortOptions, PendingRowDragController, type PendingRowDragDeps, type PointerEventData, type PopupPosition, type RowCacheEviction, type RowCacheOptions, RowDataManager, type RowDataManagerOptions, type RowDragState, type RowId, type RowLoadingMode, type RowLoadingOptions, RowMutationManager, type RowMutationManagerOptions, type RowSortCache, type RowsAddedInstruction, type RowsRemovedInstruction, type RowsUpdatedInstruction, ScrollVirtualizationManager, type ScrollVirtualizationManagerOptions, SelectionManager, type SelectionState, type ServerDataSourceOptions, type SetActiveCellInstruction, type SetContentSizeInstruction, type SetHoverPositionInstruction, type SetSelectionRangeInstruction, type SlotData, type BatchInstructionListener$1 as SlotPoolBatchListener, SlotPoolManager, type SlotPoolManagerOptions, type SlotState, type SortDirection, SortFilterManager, type SortFilterManagerOptions, type SortModel, type SortedChunk, type StartColumnMoveInstruction, type StartColumnResizeInstruction, type StartEditInstruction, type StartFillInstruction, type StartRowDragInstruction, type StopEditInstruction, type TextFilterCondition, type TextFilterOperator, type Transaction, TransactionManager, type TransactionManagerOptions, type TransactionProcessedInstruction, type TransactionResult, type UpdateColumnMoveInstruction, type UpdateColumnResizeInstruction, type UpdateFillInstruction, type UpdateHeaderInstruction, type UpdateRowDragInstruction, type VisibleColumnInfo, WorkerPool, type WorkerPoolOptions, applyBatchInstructions, applyInstruction, buildCellClasses, calculateColumnPositions, calculateFillHandlePosition, calculateFilterPopupPosition, calculateScaledColumnPositions, cellStyles, compareValues, computeValueHash, containerStyles, createClientDataSource, createDataSourceFromArray, createInitialState, createMutableClientDataSource, createServerDataSource, detectBoundaryCollisions, evaluateColumnFilter, evaluateDateCondition, evaluateNumberCondition, evaluateTextCondition, filtersStyles, findColumnAtX, findSlotForRow, formatCellValue, getFieldValue, getTotalWidth, gridStyles, headerStyles, isCellActive, isCellEditing, isCellInFillPreview, isCellSelected, isColumnInSelectionRange, isRowInSelectionRange, isRowVisible, isSameDay, kWayMerge, kWayMergeMultiColumn, rowDragStyles, rowPassesFilter, scrollCellIntoView, scrollbarStyles, setFieldValue, statesStyles, stringToSortableNumber, toPointerEventData, variablesStyles };
package/dist/index.js CHANGED
@@ -1,5 +1,9 @@
1
- const e=(e,t,n,r,i)=>{let a=0,o=0;return e<40+i?o=-10:e>n-40&&(o=10),t<40?a=-10:t>r-40&&(a=10),a!==0||o!==0?{dx:a,dy:o}:null};var t=class{active=!1;colIndex=-1;startX=0;initialWidth=0;currentWidth=0;core;constructor(e){this.core=e}get isActive(){return this.active}start(e,t,n){return n.button!==0||this.core.getColumns()[e]?.resizable===!1?{preventDefault:!1,stopPropagation:!1}:(this.active=!0,this.colIndex=e,this.startX=n.clientX,this.initialWidth=t,this.currentWidth=t,{preventDefault:!0,stopPropagation:!0,startDrag:`column-resize`})}move(e,t){let n=this.core.getColumns()[this.colIndex],r=n?.minWidth??50,i=n?.maxWidth,a=this.initialWidth+(e.clientX-this.startX);a=Math.max(r,a),i!==void 0&&(a=Math.min(i,a)),this.currentWidth=a;let o=e.clientX-t.left>t.width-40?10:0,s=o===0?null:{dx:o,dy:0};return{targetRow:0,targetCol:this.colIndex,autoScroll:s}}end(){this.active&&this.core.setColumnWidth(this.colIndex,this.currentWidth),this.active=!1,this.colIndex=-1}getState(){return this.active===!1?null:{colIndex:this.colIndex,initialWidth:this.initialWidth,currentWidth:this.currentWidth}}};const n=e=>{let t=[0],n=0;for(let r of e)n+=r.width,t.push(n);return t},r=e=>e.at(-1)??0,i=(e,t)=>{let i=n(e),a=r(i);if(t<=a||a===0)return{positions:i,widths:e.map(e=>e.width)};let o=t/a,s=e.map(e=>e.width*o),c=[0],l=0;for(let e of s)l+=e,c.push(l);return{positions:c,widths:s}},a=(e,t)=>{for(let n=0;n<t.length-1;n++)if(e>=t[n]&&e<t[n+1])return n;return e>=t.at(-1)?t.length-2:0},o=e=>({minRow:Math.min(e.startRow,e.endRow),maxRow:Math.max(e.startRow,e.endRow),minCol:Math.min(e.startCol,e.endCol),maxCol:Math.max(e.startCol,e.endCol)}),s=(e,t,n)=>e>=n.minRow&&e<=n.maxRow&&t>=n.minCol&&t<=n.maxCol,c=(e,t,n)=>n?s(e,t,o(n)):!1,l=(e,t,n)=>n?.row===e&&n?.col===t,u=(e,t)=>!t||t.end<0||t.start>t.end?!0:e>=t.start&&e<=t.end,d=(e,t,n)=>n?.row===e&&n?.col===t,f=(e,t,n,r,i)=>{if(!n||!r||!i)return!1;let{minRow:a,maxRow:s,minCol:c,maxCol:l}=o(r),u=i.row>s,d=i.row<a;return u?e>s&&e<=i.row&&t>=c&&t<=l:d?e<a&&e>=i.row&&t>=c&&t<=l:!1},p=(e,t,n,r)=>{let i=[`gp-grid-cell`];return e&&i.push(`gp-grid-cell--active`),t&&!e&&i.push(`gp-grid-cell--selected`),n&&i.push(`gp-grid-cell--editing`),r&&i.push(`gp-grid-cell--fill-preview`),i.join(` `)},m=(e,t)=>{if(!t)return!1;let{minRow:n,maxRow:r}=o(t);return e>=n&&e<=r},h=(e,t)=>{if(!t)return!1;let{minCol:n,maxCol:r}=o(t);return e>=n&&e<=r};function g(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return null;r=r[e]}return r??null}function _(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];if(typeof i!=`object`||!i)return;i=i[t]}typeof i==`object`&&i&&(i[r.at(-1)]=n)}const v=()=>{let e=[];return{onInstruction:t=>(e.push(t),()=>{e=e.filter(e=>e!==t)}),emit:t=>{for(let n of e)n(t)},clearListeners:()=>{e=[]}}},ee=()=>{let e=v(),t=[];return{onInstruction:e.onInstruction,onBatchInstruction:e=>(t.push(e),()=>{t=t.filter(t=>t!==e)}),emit:n=>{e.emit(n);for(let e of t)e([n])},emitBatch:n=>{if(n.length!==0){for(let e of t)e(n);for(let t of n)e.emit(t)}},clearListeners:()=>{e.clearListeners(),t=[]}}},y=(e,t)=>{for(let n of e.values())if(n.rowIndex===t)return n;return null},te=(e,t,n,r,i,a=0)=>{let o=y(i,n);if(!o){t.scrollTop=e.getScrollTopForRow(n);return}let s=a+o.translateY-t.scrollTop,c=s+r;if(s<0)t.scrollTop=e.getScrollTopForRow(n);else if(c>t.clientHeight){let i=Math.floor(t.clientHeight/r),a=Math.max(0,n-i+1);t.scrollTop=e.getScrollTopForRow(a)}},b=(e,t)=>e==null?``:t?t(e):Array.isArray(e)?e.join(`, `):typeof e==`object`?e instanceof Date?String(e):JSON.stringify(e):String(e),ne=e=>{let{activeCell:t,selectionRange:n,slots:r,columns:i,visibleColumnsWithIndices:a,columnPositions:o,columnWidths:s,rowHeight:c}=e;if(!t&&!n)return null;let l,u,d,f;if(n)l=Math.max(n.startRow,n.endRow),u=Math.max(n.startCol,n.endCol),d=Math.min(n.startCol,n.endCol),f=Math.max(n.startCol,n.endCol);else if(t)l=t.row,u=t.col,d=u,f=u;else return null;for(let e=d;e<=f;e++){let t=i[e];if(!(!t||t.hidden)&&t.editable!==!0)return null}let p=a.findIndex(e=>e.originalIndex===u);if(p===-1)return null;let m=null;for(let e of r.values())if(e.rowIndex===l){m=e.translateY;break}if(m===null)return null;let h=o[p]??0,g=s[p]??0;return{top:m+c-5,left:h+g-20}},re=(e,t,n=8)=>{let r=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=r.bottom+4,o=r.left,s=Math.max(200,r.width);return o+i.width>window.innerWidth-n&&(o=window.innerWidth-i.width-n),o=Math.max(n,o),a+i.height>window.innerHeight-n&&(a=r.top-i.height-4),a=Math.max(n,a),{top:a,left:o,minWidth:s}},ie=e=>{if(!e||e.length===0)return;let t={};for(let n of e)n.valueFormatter&&(t[n.colId??n.field]=n.valueFormatter);return Object.keys(t).length>0?t:void 0},x=e=>({pagination:{pageIndex:e.pageIndex,pageSize:e.pageSize},sort:e.sortModel.length>0?e.sortModel:void 0,filter:Object.keys(e.filterModel).length>0?e.filterModel:void 0,valueFormatters:ie(e.columns)}),ae=(e,t,n)=>{let r=e.get(t);if(r!==void 0){if(t<n){let i=n-1;for(let n=t;n<i;n++){let t=e.get(n+1);t===void 0?e.delete(n):e.set(n,t)}e.set(i,r);return}for(let r=t;r>n;r--){let t=e.get(r-1);t===void 0?e.delete(r):e.set(r,t)}e.set(n,r)}},oe=e=>{let t=[0],n=0;for(let r of e)r.hidden||(n+=r.width,t.push(n));return t},se=(e,t,n,r)=>{let i=e.get(n);if(!i)return null;let a=t[r];return a?g(i,a.field):null},ce=(e,t,n,r,i,a)=>{let o=e.get(n);if(!o||typeof o!=`object`)return;let s=t[r];if(!s)return;let c=a.onCellValueChanged!==void 0,l=c?g(o,s.field):void 0;_(o,s.field,i),c&&a.onCellValueChanged({rowId:a.getRowId(o),colIndex:r,field:s.field,oldValue:l,newValue:i,rowData:o})};var le=class{active=!1;sourceColIndex=-1;startX=0;startY=0;thresholdMet=!1;shiftKey=!1;ghostWidth=0;ghostHeight=0;currentX=0;currentY=0;dropTargetIndex=null;core;deps;constructor(e,t){this.core=e,this.deps=t}updateDeps(e){this.deps=e}get isActive(){return this.active}get isDraggingForDisplay(){return this.active&&this.thresholdMet}start(e,t,n,r){return r.button!==0||this.core.getColumns()[e]?.movable===!1?{preventDefault:!1,stopPropagation:!1}:(this.active=!0,this.sourceColIndex=e,this.startX=r.clientX,this.startY=r.clientY,this.thresholdMet=!1,this.shiftKey=r.shiftKey,this.ghostWidth=t,this.ghostHeight=n,this.currentX=r.clientX,this.currentY=r.clientY,this.dropTargetIndex=null,{preventDefault:!0,stopPropagation:!0,startDrag:`column-move`})}move(e,t){let n=e.clientX-this.startX,r=e.clientY-this.startY;if(this.thresholdMet===!1){if(!(Math.abs(n)>5||Math.abs(r)>5))return null;this.thresholdMet=!0}this.currentX=e.clientX,this.currentY=e.clientY;let{left:i,width:o,scrollLeft:s}=t,c=e.clientX-i+s,l=this.deps.getColumnPositions(),u=this.deps.getColumnCount();this.dropTargetIndex=Math.max(0,Math.min(a(c,l),u));let d=e.clientX-i,f=0;d<40?f=-10:d>o-40&&(f=10);let p=f===0?null:{dx:f,dy:0};return{targetRow:0,targetCol:this.dropTargetIndex??0,autoScroll:p}}end(e){this.thresholdMet?this.commitMove():this.treatAsHeaderClick(e),this.reset()}commitMove(){if(this.dropTargetIndex===null)return;let e=this.sourceColIndex,t=this.deps.getOriginalColumnIndex?this.deps.getOriginalColumnIndex(Math.min(this.dropTargetIndex,this.deps.getColumnCount()-1)):this.dropTargetIndex;e!==t&&this.core.moveColumn(e,t)}treatAsHeaderClick(e){let t=this.core.getColumns()[this.sourceColIndex];if(!t)return;let n=t.colId??t.field,r=this.core.getSortModel().find(e=>e.colId===n)?.direction;this.core.setSort(n,e(r),this.shiftKey)}reset(){this.active=!1,this.sourceColIndex=-1,this.thresholdMet=!1,this.shiftKey=!1,this.dropTargetIndex=null}getState(){return this.active===!1?null:{sourceColIndex:this.sourceColIndex,currentX:this.currentX,currentY:this.currentY,dropTargetIndex:this.dropTargetIndex,ghostWidth:this.ghostWidth,ghostHeight:this.ghostHeight}}},ue=class{active=!1;sourceRowIndex=-1;startX=0;startY=0;thresholdMet=!1;currentX=0;currentY=0;dropTargetIndex=null;core;deps;constructor(e,t){this.core=e,this.deps=t}updateDeps(e){this.deps=e}get isActive(){return this.active}get isDraggingForDisplay(){return this.active&&this.thresholdMet}start(e,t,n){this.active=!0,this.sourceRowIndex=e,this.startX=t,this.startY=n,this.thresholdMet=!1,this.currentX=t,this.currentY=n,this.dropTargetIndex=null}move(t,n){let r=t.clientX-this.startX,i=t.clientY-this.startY;if(this.thresholdMet===!1){if(!(Math.abs(r)>5||Math.abs(i)>5))return null;this.thresholdMet=!0}this.currentX=t.clientX,this.currentY=t.clientY;let{top:a,left:o,height:s,width:c,scrollTop:l}=n,u=this.deps.getHeaderHeight(),d=t.clientY-a,f=this.core.getRowCount(),p=Math.max(0,Math.min(this.core.getRowIndexAtDisplayY(d,l),f));return this.dropTargetIndex=p,{targetRow:p,targetCol:0,autoScroll:e(t.clientY-a,t.clientX-o,s,c,u)}}end(){this.thresholdMet&&this.dropTargetIndex!==null&&this.dropTargetIndex!==this.sourceRowIndex&&this.core.commitRowDrag(this.sourceRowIndex,this.dropTargetIndex),this.active=!1,this.sourceRowIndex=-1,this.thresholdMet=!1,this.dropTargetIndex=null}getState(){return this.active===!1?null:{sourceRowIndex:this.sourceRowIndex,currentX:this.currentX,currentY:this.currentY,dropTargetIndex:this.dropTargetIndex,dropIndicatorY:this.dropTargetIndex===null?0:this.core.getRowTranslateY(this.dropTargetIndex)}}},de=class{active=!1;core;constructor(e){this.core=e}get isActive(){return this.active}start(){this.active=!0}moveToTarget(e,t){this.active!==!1&&this.core.selection.startSelection({row:e,col:t},{shift:!0})}end(){this.active=!1}},fe=class{active=!1;sourceRange=null;target=null;core;constructor(e){this.core=e}get isActive(){return this.active}get stateSnapshot(){return{sourceRange:this.sourceRange,target:this.target}}start(e,t){if(!e&&!t)return{preventDefault:!1,stopPropagation:!1};let n=t??{startRow:e.row,startCol:e.col,endRow:e.row,endCol:e.col};return this.core.fill.startFillDrag(n),this.sourceRange=n,this.target={row:Math.max(n.startRow,n.endRow),col:Math.max(n.startCol,n.endCol)},this.active=!0,{preventDefault:!0,stopPropagation:!0,startDrag:`fill`}}moveToTarget(e,t){this.active!==!1&&(this.core.fill.updateFillDrag(e,t),this.target={row:e,col:t})}end(){this.active&&(this.core.fill.commitFillDrag(),this.core.refreshSlotData()),this.active=!1,this.sourceRange=null,this.target=null}},pe=class{record=null;set(e){this.record=e}clear(){this.record=null}consume(){let e=this.record;return this.record=null,e}};const me=e=>{switch(e){case`ArrowUp`:return`up`;case`ArrowDown`:return`down`;case`ArrowLeft`:return`left`;case`ArrowRight`:return`right`;default:return null}};var he=class{core;constructor(e){this.core=e}handle(e,t,n,r){if(r||n!==null&&e.key!==`Enter`&&e.key!==`Escape`&&e.key!==`Tab`)return{preventDefault:!1};let i=me(e.key);if(i!==null)return this.moveFocus(i,e.shiftKey);let a=e.ctrlKey||e.metaKey;return this.handleAction(e.key,t,n,e.shiftKey,a)}moveFocus(e,t){let{selection:n}=this.core;return n.moveFocus(e,t),{preventDefault:!0,scrollToCell:n.getActiveCell()??void 0}}handleAction(e,t,n,r,i){switch(e){case`Enter`:return this.handleEnter(t,n);case`Escape`:return this.handleEscape(n);case`Tab`:return this.handleTab(n,r);default:return this.handleNonSpecialKey(e,t,n,i)}}handleEnter(e,t){return t?this.core.commitEdit():e&&this.core.startEdit(e.row,e.col),{preventDefault:!0}}handleEscape(e){return e?this.core.cancelEdit():this.core.selection.clearSelection(),{preventDefault:!0}}handleTab(e,t){return e&&this.core.commitEdit(),this.core.selection.moveFocus(t?`left`:`right`,!1),{preventDefault:!0}}handleNonSpecialKey(e,t,n,r){let{selection:i}=this.core;return e===`a`&&r?(i.selectAll(),{preventDefault:!0}):e===`c`&&r?(i.copySelectionToClipboard(),{preventDefault:!0}):e===`F2`?(t&&!n&&this.core.startEdit(t.row,t.col),{preventDefault:!0}):e===`Delete`||e===`Backspace`?t&&!n?(this.core.startEdit(t.row,t.col),{preventDefault:!0}):{preventDefault:!1}:(t&&!n&&!r&&e.length===1&&this.core.startEdit(t.row,t.col),{preventDefault:!1})}};const ge=(t,n,r,i)=>{let{top:o,left:s,width:c,height:l,scrollTop:u,scrollLeft:d}=i,f=n.getColumnPositions(),p=n.getColumnCount(),m=r.clientY-o,h=r.clientX-s+d,g=Math.max(0,Math.min(t.getRowIndexAtDisplayY(m,u),t.getRowCount()-1)),_=Math.max(0,Math.min(a(h,f),p-1));return{row:g,col:n.getOriginalColumnIndex?n.getOriginalColumnIndex(_):_,autoScroll:e(r.clientY-o,r.clientX-s,l,c,n.getHeaderHeight())}},S=e=>e==null?`asc`:e===`asc`?`desc`:null;var _e=class{core;deps;columnResize;columnMove;rowDrag;selectionDrag;fillDrag;pendingRowDrag=new pe;keyboard;constructor(e,n){this.core=e,this.deps=n,this.columnResize=new t(e),this.columnMove=new le(e,n),this.rowDrag=new ue(e,n),this.selectionDrag=new de(e),this.fillDrag=new fe(e),this.keyboard=new he(e)}updateDeps(e){this.deps={...this.deps,...e},this.columnMove.updateDeps(this.deps),this.rowDrag.updateDeps(this.deps)}getDragState(){let e=this.getDragType(),t=this.fillDrag.stateSnapshot;return{isDragging:e!==null,dragType:e,fillSourceRange:t.sourceRange,fillTarget:t.target,columnResize:this.columnResize.getState(),columnMove:this.columnMove.getState(),rowDrag:this.rowDrag.getState()}}getDragType(){return this.fillDrag.isActive?`fill`:this.columnResize.isActive?`column-resize`:this.columnMove.isDraggingForDisplay?`column-move`:this.rowDrag.isDraggingForDisplay?`row-drag`:this.selectionDrag.isActive?`selection`:null}handleHeaderMouseDown(e,t,n,r){return this.columnMove.start(e,t,n,r)}handleHeaderResizeMouseDown(e,t,n){return this.columnResize.start(e,t,n)}handleCellMouseDown(e,t,n){if(n.button!==0||this.core.getEditState()!==null)return ve;let r=(this.core.getColumns()[t]?.rowDrag===!0||this.core.isRowDragEntireRow())&&!n.shiftKey;return r&&n.pointerType===`touch`?this.startPendingRowDrag(e,t,n):r?this.startRowDrag(e,t,n):this.startSelectionClick(e,t,n)}startPendingRowDrag(e,t,n){return this.pendingRowDrag.set({rowIndex:e,colIndex:t,clientX:n.clientX,clientY:n.clientY}),this.core.selection.startSelection({row:e,col:t},{shift:!1,ctrl:!1}),{preventDefault:!1,stopPropagation:!1,focusContainer:!0,startDrag:`row-drag-pending`}}startRowDrag(e,t,n){return this.rowDrag.start(e,n.clientX,n.clientY),this.core.selection.startSelection({row:e,col:t},{shift:!1,ctrl:!1}),{preventDefault:!0,stopPropagation:!0,focusContainer:!0,startDrag:`row-drag`}}startSelectionClick(e,t,n){return this.core.selection.startSelection({row:e,col:t},{shift:n.shiftKey,ctrl:n.ctrlKey||n.metaKey}),{preventDefault:!1,stopPropagation:!1,focusContainer:!0,startDrag:n.shiftKey?void 0:`selection`}}handleCellDoubleClick(e,t){this.core.startEdit(e,t)}handleCellMouseEnter(e,t){this.core.highlight?.setHoverPosition({row:e,col:t})}handleCellMouseLeave(){this.core.highlight?.setHoverPosition(null)}handleFillHandleMouseDown(e,t,n){return this.fillDrag.start(e,t)}handleHeaderClick(e,t){let n=this.core.getSortModel().find(t=>t.colId===e)?.direction;this.core.setSort(e,S(n),t)}startSelectionDrag(){this.selectionDrag.start()}confirmPendingRowDrag(){let e=this.pendingRowDrag.consume();return e===null?!1:(this.rowDrag.start(e.rowIndex,e.clientX,e.clientY),!0)}cancelPendingRowDrag(){this.pendingRowDrag.clear()}handleDragMove(e,t){return this.columnResize.isActive?this.columnResize.move(e,t):this.columnMove.isActive?this.columnMove.move(e,t):this.rowDrag.isActive?this.rowDrag.move(e,t):this.selectionFillMove(e,t)}selectionFillMove(e,t){if((this.selectionDrag.isActive||this.fillDrag.isActive)===!1)return null;let n=ge(this.core,this.deps,e,t);return this.selectionDrag.moveToTarget(n.row,n.col),this.fillDrag.moveToTarget(n.row,n.col),{targetRow:n.row,targetCol:n.col,autoScroll:n.autoScroll}}handleDragEnd(){if(this.columnResize.isActive)return this.columnResize.end();if(this.columnMove.isActive)return this.columnMove.end(S);if(this.rowDrag.isActive)return this.rowDrag.end();this.selectionDrag.end(),this.fillDrag.end()}handleWheel(e,t,n){return this.core.isScalingActive()?{dy:e*n,dx:t*n}:null}handleKeyDown(e,t,n,r){return this.keyboard.handle(e,t,n,r)}};const ve={preventDefault:!1,stopPropagation:!1};var ye=class{options;highlightingOptions;hoverPosition=null;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;rowClassCache=new Map;columnClassCache=new Map;cellClassCache=new Map;constructor(e,t={}){this.options=e,this.highlightingOptions=t}isEnabled(){return!!(this.highlightingOptions.computeRowClasses||this.highlightingOptions.computeColumnClasses||this.highlightingOptions.computeCellClasses)}updateOptions(e){this.highlightingOptions=e,this.clearAllCaches()}setHoverPosition(e){this.isEnabled()&&(this.hoverPosition?.row===e?.row&&this.hoverPosition?.col===e?.col||(this.rowClassCache.clear(),this.columnClassCache.clear(),this.cellClassCache.clear(),this.hoverPosition=e,this.emit({type:`SET_HOVER_POSITION`,position:e})))}getHoverPosition(){return this.hoverPosition}onSelectionChange(){this.clearAllCaches()}buildRowContext(e,t){let n=this.options.getActiveCell(),r=this.options.getSelectionRange();return{rowIndex:e,colIndex:null,column:void 0,rowData:t,hoverPosition:this.hoverPosition,activeCell:n,selectionRange:r,isHovered:this.hoverPosition?.row===e,isActive:n?.row===e,isSelected:m(e,r)}}buildColumnContext(e,t){let n=this.options.getActiveCell(),r=this.options.getSelectionRange();return{rowIndex:null,colIndex:e,column:t,rowData:void 0,hoverPosition:this.hoverPosition,activeCell:n,selectionRange:r,isHovered:this.hoverPosition?.col===e,isActive:n?.col===e,isSelected:h(e,r)}}buildCellContext(e,t,n,r){let i=this.options.getActiveCell(),a=this.options.getSelectionRange(),s=this.hoverPosition?.row===e&&this.hoverPosition?.col===t,c=!1;if(a){let{minRow:n,maxRow:r,minCol:i,maxCol:s}=o(a);c=e>=n&&e<=r&&t>=i&&t<=s}return{rowIndex:e,colIndex:t,column:n,rowData:r,hoverPosition:this.hoverPosition,activeCell:i,selectionRange:a,isHovered:s,isActive:i?.row===e&&i?.col===t,isSelected:c}}computeRowClasses(e,t){let n=this.highlightingOptions.computeRowClasses;if(!n)return[];let r=this.rowClassCache.get(e);if(r!==void 0)return r;let i=n(this.buildRowContext(e,t));return this.rowClassCache.set(e,i),i}computeColumnClasses(e,t){let n=this.columnClassCache.get(e);if(n!==void 0)return n;let r=this.buildColumnContext(e,t),i;if(t.computeColumnClasses)i=t.computeColumnClasses(r);else if(this.highlightingOptions.computeColumnClasses)i=this.highlightingOptions.computeColumnClasses(r);else return[];return this.columnClassCache.set(e,i),i}computeCellClasses(e,t,n,r){let i=`${e},${t}`,a=this.cellClassCache.get(i);if(a!==void 0)return a;let o=this.buildCellContext(e,t,n,r),s;if(n.computeCellClasses)s=n.computeCellClasses(o);else if(this.highlightingOptions.computeCellClasses)s=this.highlightingOptions.computeCellClasses(o);else return[];return this.cellClassCache.set(i,s),s}computeCombinedCellClasses(e,t,n,r){let i=this.computeColumnClasses(t,n),a=this.computeCellClasses(e,t,n,r);return[...i,...a]}clearAllCaches(){this.rowClassCache.clear(),this.columnClassCache.clear(),this.cellClassCache.clear()}destroy(){this.emitter.clearListeners(),this.clearAllCaches(),this.hoverPosition=null}},C=class{options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getRow(e){return this.options.getCachedRows().get(e)}addRows(e,t){if(e.length===0)return;let n=this.options.getCachedRows(),r=this.options.getTotalRows(),i=t??r,a=r+e.length;if(i<r){let t=new Map;for(let[r,a]of n)r>=i?t.set(r+e.length,a):t.set(r,a);this.options.setCachedRows(t)}let o=this.options.getCachedRows();e.forEach((e,t)=>{o.set(i+t,e)}),this.options.setTotalRows(a);let s=e.map((e,t)=>i+t);this.emit({type:`ROWS_ADDED`,indices:s,count:s.length,totalRows:a}),this.options.emitContentSize(),this.options.refreshAllSlots()}updateRows(e){if(e.length===0)return;let t=this.options.getCachedRows(),n=[];for(let r of e){let e=t.get(r.index);e&&(t.set(r.index,{...e,...r.data}),n.push(r.index))}if(n.length!==0){this.emit({type:`ROWS_UPDATED`,indices:n});for(let e of n)this.options.updateSlot(e)}}deleteRows(e){if(e.length===0)return;let t=this.options.getCachedRows(),n=this.options.getTotalRows(),r=[...e].sort((e,t)=>t-e);for(let e of r){if(e<0||e>=n)continue;t.delete(e);let r=new Map;for(let[n,i]of t)n>e?r.set(n-1,i):r.set(n,i);this.options.setCachedRows(r),n--}this.options.setTotalRows(n),this.options.clearSelectionIfInvalid(n),this.emit({type:`ROWS_REMOVED`,indices:r,totalRows:n}),this.options.emitContentSize(),this.options.refreshAllSlots()}setRow(e,t){let n=this.options.getTotalRows();e<0||e>=n||(this.options.getCachedRows().set(e,t),this.emit({type:`ROWS_UPDATED`,indices:[e]}),this.options.updateSlot(e))}destroy(){this.emitter.clearListeners()}};const w=1e7;var T=class{naturalContentHeight=0;virtualContentHeight=0;scrollRatio=1;options;constructor(e){this.options=e}updateContentSize(){let e=this.options.getTotalRows(),t=this.options.getRowHeight(),n=this.options.getHeaderHeight(),r=this.options.getViewportHeight(),i=e*t;if(this.naturalContentHeight=i+n,this.naturalContentHeight>w){this.virtualContentHeight=w;let e=this.virtualContentHeight-n-r,a=Math.ceil((i-r)/t)*t;this.scrollRatio=a>0?e/a:1}else this.virtualContentHeight=this.naturalContentHeight,this.scrollRatio=1;return{naturalHeight:this.naturalContentHeight,virtualHeight:this.virtualContentHeight,scrollRatio:this.scrollRatio}}isScalingActive(){return this.scrollRatio<1}getNaturalHeight(){let e=this.options.getTotalRows(),t=this.options.getRowHeight(),n=this.options.getHeaderHeight();return this.naturalContentHeight||e*t+n}getVirtualHeight(){let e=this.options.getTotalRows(),t=this.options.getRowHeight(),n=this.options.getHeaderHeight();return this.virtualContentHeight||e*t+n}getScrollRatio(){return this.scrollRatio}getVisibleRowRange(){let e=this.options.getViewportHeight(),t=this.options.getScrollTop(),n=this.options.getRowHeight(),r=this.options.getTotalRows(),i=e,a=Math.max(0,Math.floor(t/n)),o=Math.min(r-1,Math.ceil((t+i)/n)-1);return{start:a,end:Math.max(a,o)}}getScrollTopForRow(e){return e*this.options.getRowHeight()*this.scrollRatio}getRowIndexAtDisplayY(e,t){let n=this.options.getRowHeight(),r=e+(this.scrollRatio<1?t/this.scrollRatio:t);return Math.floor(r/n)}getVirtualContentHeight(){return this.virtualContentHeight}},E=class{options;emitter=v();sortModel=[];filterModel={};openFilterColIndex=null;onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}async setSort(e,t,n=!1){if(!this.options.isSortingEnabled()||this.options.getColumns().find(t=>(t.colId??t.field)===e)?.sortable===!1)return;let r=this.sortModel.findIndex(t=>t.colId===e);n?t===null&&r>=0?this.sortModel.splice(r,1):r>=0?this.sortModel[r].direction=t:this.sortModel.push({colId:e,direction:t}):this.sortModel=t===null?[]:[{colId:e,direction:t}],await this.options.onSortFilterChange(),this.options.onDataRefreshed()}getSortModel(){return[...this.sortModel]}async setFilter(e,t){this.options.getColumns().find(t=>(t.colId??t.field)===e)?.filterable!==!1&&(t===null||typeof t==`string`&&t.trim()===``||typeof t==`object`&&t.conditions?.length===0?delete this.filterModel[e]:typeof t==`string`?this.filterModel[e]={conditions:[{type:`text`,operator:`contains`,value:t}],combination:`and`}:this.filterModel[e]=t,await this.options.onSortFilterChange(),this.options.onDataRefreshed())}getFilterModel(){return{...this.filterModel}}hasActiveFilter(e){let t=this.filterModel[e];return t?t.conditions.length>0:!1}isColumnSortable(e){return this.options.isSortingEnabled()?this.options.getColumns()[e]?.sortable!==!1:!1}isColumnFilterable(e){return this.options.getColumns()[e]?.filterable!==!1}getDistinctValuesForColumn(e,t=500,n=1e5){let r=this.options.getColumns().find(t=>(t.colId??t.field)===e);if(!r)return[];let i=this.options.getCachedRows(),a=i.size,o=a>n?Math.ceil(a/n):1,s=r.valueFormatter,c=new Map;for(let e=0;e<a;e+=o){let n=i.get(e);if(n===void 0)continue;let a=g(n,r.field),[o,l]=this.normalizeDistinctValue(a,s);if(!c.has(o)&&(c.set(o,l),c.size>=t))break}let l=Array.from(c.values());return l.sort((e,t)=>{let n=b(e,s),r=b(t,s);return n.localeCompare(r,void 0,{numeric:!0,sensitivity:`base`})}),l}normalizeDistinctValue(e,t){if(Array.isArray(e)){let n=[...e].sort((e,t)=>{let n=String(e),r=String(t);return n===r?0:n<r?-1:1});return[t?t(n):JSON.stringify(n),n]}return[t?t(e):JSON.stringify(e),e]}openFilterPopup(e,t){if(this.openFilterColIndex===e){this.closeFilterPopup();return}let n=this.options.getColumns()[e];if(!n||!this.isColumnFilterable(e))return;let r=n.colId??n.field,i=this.getDistinctValuesForColumn(r);this.openFilterColIndex=e,this.emit({type:`OPEN_FILTER_POPUP`,colIndex:e,column:n,anchorRect:t,distinctValues:i,currentFilter:this.filterModel[r]})}closeFilterPopup(){this.openFilterColIndex=null,this.emit({type:`CLOSE_FILTER_POPUP`})}getSortInfoMap(){let e=new Map;return this.sortModel.forEach((t,n)=>{e.set(t.colId,{direction:t.direction,index:n+1})}),e}destroy(){this.emitter.clearListeners(),this.sortModel=[],this.filterModel={},this.openFilterColIndex=null}},D=class{queue=[];debounceTimer=null;pendingPromise=null;options;constructor(e){this.options=e}add(e){e.length!==0&&(this.queue.push({type:`ADD`,rows:e}),this.scheduleProcessing())}remove(e){e.length!==0&&(this.queue.push({type:`REMOVE`,rowIds:e}),this.scheduleProcessing())}updateCell(e,t,n){this.queue.push({type:`UPDATE_CELL`,rowId:e,field:t,value:n}),this.scheduleProcessing()}updateRow(e,t){Object.keys(t).length!==0&&(this.queue.push({type:`UPDATE_ROW`,rowId:e,data:t}),this.scheduleProcessing())}flush(){return this.queue.length===0?Promise.resolve():(this.debounceTimer!==null&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPromise?new Promise((e,t)=>{let n=this.pendingPromise,r=n.resolve,i=n.reject;n.resolve=()=>{r(),e()},n.reject=e=>{i(e),t(e)}}):new Promise((e,t)=>{this.pendingPromise={resolve:e,reject:t},this.processQueue()}))}hasPending(){return this.queue.length>0}getPendingCount(){return this.queue.length}clear(){this.queue=[],this.debounceTimer!==null&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPromise&&=(this.pendingPromise.resolve(),null)}scheduleProcessing(){if(this.options.debounceMs===0){this.processQueue();return}this.debounceTimer===null&&(this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.processQueue()},this.options.debounceMs))}processQueue(){if(this.queue.length===0){this.pendingPromise&&=(this.pendingPromise.resolve(),null);return}let e=this.queue;this.queue=[];let t={added:0,removed:0,updated:0};try{for(let n of e)switch(n.type){case`ADD`:this.options.store.addRows(n.rows),t.added+=n.rows.length;break;case`REMOVE`:t.removed+=this.options.store.removeRows(n.rowIds);break;case`UPDATE_CELL`:this.options.store.updateCell(n.rowId,n.field,n.value),t.updated++;break;case`UPDATE_ROW`:this.options.store.updateRow(n.rowId,n.data),t.updated++;break}this.options.onProcessed&&this.options.onProcessed(t),this.pendingPromise&&=(this.pendingPromise.resolve(),null)}catch(e){this.pendingPromise&&=(this.pendingPromise.reject(e instanceof Error?e:Error(String(e))),null)}}},be=class{listeners=[];buffer=null;subscribe(e){return this.listeners.push(e),()=>{this.listeners=this.listeners.filter(t=>t!==e)}}start(){this.buffer=[]}flush(){let e=this.buffer;if(this.buffer=null,e!==null&&e.length>0)for(let t of this.listeners)t(e)}emit(e){if(this.buffer!==null){this.buffer.push(e);return}this.notify([e])}emitBatch(e){if(e.length!==0){if(this.buffer!==null){this.buffer.push(...e);return}this.notify(e)}}clearListeners(){this.listeners=[]}notify(e){for(let t of this.listeners)t(e)}},xe=class{scrollTop=0;scrollLeft=0;viewportWidth=800;viewportHeight=600;getScrollRatio;constructor(e){this.getScrollRatio=e}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}getViewportWidth(){return this.viewportWidth}getViewportHeight(){return this.viewportHeight}resetScrollTop(){this.scrollTop=0}update(e,t,n,r){let i=this.getScrollRatio(),a=i<1?e/i:e,o=this.viewportWidth!==n||this.viewportHeight!==r,s=this.scrollTop!==a||this.scrollLeft!==t||o;return s&&(this.scrollTop=a,this.scrollLeft=t,this.viewportWidth=n,this.viewportHeight=r),{changed:s,viewportSizeChanged:o}}},Se=class{state={activeCell:null,range:null,anchor:null,selectionMode:!1};options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getState(){return{...this.state}}getActiveCell(){return this.state.activeCell}getSelectionRange(){return this.state.range}isSelected(e,t){let{range:n}=this.state;if(!n)return!1;let{minRow:r,maxRow:i,minCol:a,maxCol:s}=o(n);return e>=r&&e<=i&&t>=a&&t<=s}isActiveCell(e,t){let{activeCell:n}=this.state;return n?.row===e&&n?.col===t}startSelection(e,t={}){let{shift:n=!1,ctrl:r=!1}=t,{row:i,col:a}=this.clampPosition(e);n&&this.state.anchor?(this.state.range={startRow:this.state.anchor.row,startCol:this.state.anchor.col,endRow:i,endCol:a},this.state.activeCell={row:i,col:a}):(this.state.activeCell={row:i,col:a},this.state.anchor={row:i,col:a},this.state.range=null),this.state.selectionMode=r,this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range})}moveFocus(e,t=!1){if(!this.state.activeCell){this.startSelection({row:0,col:0});return}let{row:n,col:r}=this.state.activeCell,i=n,a=r;switch(e){case`up`:i=Math.max(0,n-1);break;case`down`:i=Math.min(this.options.getRowCount()-1,n+1);break;case`left`:a=Math.max(0,r-1);break;case`right`:a=Math.min(this.options.getColumnCount()-1,r+1);break}t?(this.state.anchor??={row:n,col:r},this.state.range={startRow:this.state.anchor.row,startCol:this.state.anchor.col,endRow:i,endCol:a},this.state.activeCell={row:i,col:a},this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range})):(this.state.activeCell={row:i,col:a},this.state.anchor={row:i,col:a},this.state.range=null,this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:null}))}selectAll(){let e=this.options.getRowCount(),t=this.options.getColumnCount();e===0||t===0||(this.state.range={startRow:0,startCol:0,endRow:e-1,endCol:t-1},this.state.activeCell||(this.state.activeCell={row:0,col:0},this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell})),this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range}))}clearSelection(){this.state.activeCell=null,this.state.range=null,this.state.anchor=null,this.state.selectionMode=!1,this.emit({type:`SET_ACTIVE_CELL`,position:null}),this.emit({type:`SET_SELECTION_RANGE`,range:null})}setActiveCell(e,t){let n=this.clampPosition({row:e,col:t});this.state.activeCell=n,this.state.anchor=n,this.state.range=null,this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:null})}setSelectionRange(e){this.state.range=e,this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range})}getSelectedData(){let e=this.getEffectiveRange();if(e===null)return[];let{minRow:t,maxRow:n,minCol:r,maxCol:i}=o(e),a=[];for(let e=t;e<=n;e++){let t=[];for(let n=r;n<=i;n++)t.push(this.options.getCellValue(e,n));a.push(t)}return a}async copySelectionToClipboard(){if(typeof navigator>`u`||typeof document>`u`)return;let e=this.getEffectiveRange();if(e===null)return;let t=this.getSelectedData();if(t.length===0)return;let{minCol:n}=o(e),r=t.map(e=>e.map((e,t)=>b(e,this.options.getColumn(n+t)?.valueFormatter)).join(` `)).join(`
2
- `);await navigator.clipboard.writeText(r)}destroy(){this.emitter.clearListeners(),this.state={activeCell:null,range:null,anchor:null,selectionMode:!1}}clampPosition(e){let t=this.options.getRowCount(),n=this.options.getColumnCount();return{row:Math.max(0,Math.min(e.row,t-1)),col:Math.max(0,Math.min(e.col,n-1))}}getEffectiveRange(){let{range:e,activeCell:t}=this.state;return e||(t?{startRow:t.row,startCol:t.col,endRow:t.row,endCol:t.col}:null)}},Ce=class{state=null;options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getState(){return this.state?{...this.state}:null}isActive(){return this.state!==null}startFillDrag(e){this.state={sourceRange:e,targetRow:e.endRow,targetCol:e.endCol},this.emit({type:`START_FILL`,sourceRange:e})}updateFillDrag(e,t){if(!this.state)return;let n=this.options.getRowCount(),r=this.options.getColumnCount();e=Math.max(0,Math.min(e,n-1)),t=Math.max(0,Math.min(t,r-1)),this.state.targetRow=e,this.state.targetCol=t,this.emit({type:`UPDATE_FILL`,targetRow:e,targetCol:t})}commitFillDrag(){if(!this.state)return;let{sourceRange:e,targetRow:t}=this.state,n=this.calculateFilledCells(e,t);for(let{row:e,col:t,value:r}of n)this.options.setCellValue(e,t,r);this.emit({type:`COMMIT_FILL`,filledCells:n}),this.state=null}cancelFillDrag(){this.state&&(this.state=null,this.emit({type:`CANCEL_FILL`}))}destroy(){this.emitter.clearListeners(),this.state=null}calculateFilledCells(e,t){let n=[],{minRow:r,maxRow:i,minCol:a,maxCol:s}=o(e),c=t>i,l=t<r;if(c||l)for(let e=a;e<=s;e++){let a=this.getSourceColumnValues(r,i,e),o=this.detectPattern(a);if(c)for(let r=i+1;r<=t;r++){let t=r-i-1,s=this.applyPattern(o,a,t);n.push({row:r,col:e,value:s})}else if(l)for(let i=r-1;i>=t;i--){let t=r-i-1,s=this.applyPattern(o,a,t,!0);n.push({row:i,col:e,value:s})}}return n}getSourceColumnValues(e,t,n){let r=[];for(let i=e;i<=t;i++)r.push(this.options.getCellValue(i,n));return r}detectPattern(e){if(e.length===0)return{type:`constant`,value:null};if(e.length===1)return{type:`constant`,value:e[0]??null};let t=e.map(e=>typeof e==`number`?e:Number(e));if(t.every(e=>!Number.isNaN(e))){let e=[];for(let n=1;n<t.length;n++)e.push(t[n]-t[n-1]);if(e.every(t=>t===e[0])&&e[0]!==void 0)return{type:`arithmetic`,start:t[0],step:e[0]}}return{type:`repeat`,values:e}}applyPattern(e,t,n,r=!1){switch(e.type){case`constant`:return e.value;case`arithmetic`:{let i=r?-(n+1):n+1;return(r?e.start:e.start+e.step*(t.length-1))+e.step*i}case`repeat`:{let t=e.values.length;if(t===0)return null;if(r){let r=(t-1-n%t+t)%t;return e.values[r]??null}return e.values[n%t]??null}}}},we=class{state={slots:new Map,rowToSlot:new Map,nextSlotId:0};options;emitter=ee();isDestroyed=!1;onInstruction=this.emitter.onInstruction;onBatchInstruction=this.emitter.onBatchInstruction;emit=this.emitter.emit;emitBatch=this.emitter.emitBatch;constructor(e){this.options=e}getSlotForRow(e){return this.state.rowToSlot.get(e)}getSlots(){return this.state.slots}syncSlots(){let e=this.options.getScrollTop(),t=this.options.getRowHeight(),n=this.options.getViewportHeight(),r=this.options.getTotalRows(),i=this.options.getOverscan(),a=n,o=Math.max(0,Math.floor(e/t)-i),s=Math.min(r-1,Math.ceil((e+a)/t)+i);if(r===0||s<o){this.destroyAllSlots();return}let c=new Set;for(let e=o;e<=s;e++)c.add(e);let l=[],u=this.partitionSlots(c),d=0;for(let e of c){let t=this.options.getRowData(e);if(t===void 0)continue;let n=d<u.length?u[d++]:void 0;this.assignSlotToRow(e,t,n,l)}for(let e=d;e<u.length;e++){let t=u[e];this.state.slots.delete(t),l.push({type:`DESTROY_SLOT`,slotId:t})}this.updateSlotPositions(l),this.emitBatch(l)}partitionSlots(e){let t=[];for(let[n,r]of this.state.slots)e.has(r.rowIndex)?e.delete(r.rowIndex):(t.push(n),this.state.rowToSlot.delete(r.rowIndex));return t}assignSlotToRow(e,t,n,r){let i;if(n===void 0)i=`slot-${this.state.nextSlotId++}`,this.state.slots.set(i,{slotId:i,rowIndex:e,rowData:t,translateY:this.getRowTranslateY(e)}),r.push({type:`CREATE_SLOT`,slotId:i});else{i=n;let r=this.state.slots.get(i);r.rowIndex=e,r.rowData=t,r.translateY=this.getRowTranslateY(e)}this.state.rowToSlot.set(e,i),r.push({type:`ASSIGN_SLOT`,slotId:i,rowIndex:e,rowData:t},{type:`MOVE_SLOT`,slotId:i,translateY:this.getRowTranslateY(e)})}updateSlotPositions(e){for(let[t,n]of this.state.slots){let r=this.getRowTranslateY(n.rowIndex);n.translateY!==r&&(n.translateY=r,e.push({type:`MOVE_SLOT`,slotId:t,translateY:r}))}}destroyAllSlots(){let e=[];for(let t of this.state.slots.keys())e.push({type:`DESTROY_SLOT`,slotId:t});this.state.slots.clear(),this.state.rowToSlot.clear(),this.emitBatch(e)}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.state.slots.clear(),this.state.rowToSlot.clear(),this.emitter.clearListeners())}refreshAllSlots(){let e=[],t=this.options.getTotalRows();for(let[n,r]of this.state.slots)if(r.rowIndex>=0&&r.rowIndex<t){let t=this.options.getRowData(r.rowIndex);if(t===void 0)continue;let i=this.getRowTranslateY(r.rowIndex);r.rowData=t,r.translateY=i,e.push({type:`ASSIGN_SLOT`,slotId:n,rowIndex:r.rowIndex,rowData:t},{type:`MOVE_SLOT`,slotId:n,translateY:i})}this.emitBatch(e),this.syncSlots()}updateSlot(e){let t=this.state.rowToSlot.get(e);if(t){let n=this.options.getRowData(e);n&&this.emit({type:`ASSIGN_SLOT`,slotId:t,rowIndex:e,rowData:n})}}getRowTranslateY(e){let t=this.options.getRowHeight(),n=this.options.getScrollRatio(),r=this.options.getScrollTop(),i=e*t;return n>=1?i:i-Math.floor(r/t)*t}getRowTranslateYForIndex(e){return this.getRowTranslateY(e)}getRowsWrapperOffset(){let e=this.options.getScrollRatio(),t=this.options.getScrollTop(),n=this.options.getRowHeight();return e>=1?0:Math.floor(t/n)*n*e}},O=class{editState=null;options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getState(){return this.editState?{...this.editState}:null}isEditing(){return this.editState!==null}isEditingCell(e,t){return this.editState!==null&&this.editState.row===e&&this.editState.col===t}startEdit(e,t){if(!this.options.getColumn(t)?.editable)return!1;let n=this.options.getCellValue(e,t);return this.editState={row:e,col:t,initialValue:n,currentValue:n},this.emit({type:`START_EDIT`,row:e,col:t,initialValue:n}),!0}updateValue(e){this.editState&&(this.editState.currentValue=e)}commit(){if(!this.editState)return;let{row:e,col:t,currentValue:n}=this.editState;this.options.setCellValue(e,t,n),this.emit({type:`COMMIT_EDIT`,row:e,col:t,value:n}),this.editState=null,this.emit({type:`STOP_EDIT`}),this.options.onCommit?.(e,t,n)}cancel(){this.editState=null,this.emit({type:`STOP_EDIT`})}destroy(){this.emitter.clearListeners(),this.editState=null}};const Te=e=>{let{batcher:t}=e,n,r=new T({getRowHeight:e.getRowHeight,getHeaderHeight:e.getHeaderHeight,getTotalRows:e.getTotalRows,getScrollTop:()=>n.getScrollTop(),getViewportHeight:()=>n.getViewportHeight()});n=new xe(()=>r.getScrollRatio());let i=null,a=new Se({getRowCount:e.getTotalRows,getColumnCount:()=>e.getColumns().length,getCellValue:e.getCellValue,getRowData:t=>e.getCachedRows().get(t),getColumn:t=>e.getColumns()[t]});a.onInstruction(e=>{t.emit(e),i?.onSelectionChange()}),e.highlighting&&(i=new ye({getActiveCell:()=>a.getActiveCell(),getSelectionRange:()=>a.getSelectionRange(),getColumn:t=>e.getColumns()[t]},e.highlighting),i.onInstruction(e=>t.emit(e)));let o=new Ce({getRowCount:e.getTotalRows,getColumnCount:()=>e.getColumns().length,getCellValue:e.getCellValue,getColumn:t=>e.getColumns()[t],setCellValue:e.setCellValue});o.onInstruction(e=>t.emit(e));let s=new we({getRowHeight:e.getRowHeight,getHeaderHeight:e.getHeaderHeight,getOverscan:e.getOverscan,getScrollTop:()=>n.getScrollTop(),getViewportHeight:()=>n.getViewportHeight(),getTotalRows:e.getTotalRows,getScrollRatio:()=>r.getScrollRatio(),getVirtualContentHeight:()=>r.getVirtualContentHeight(),getRowData:t=>e.getCachedRows().get(t)});s.onBatchInstruction(e=>t.emitBatch(e));let c=new O({getColumn:t=>e.getColumns()[t],getCellValue:e.getCellValue,setCellValue:e.setCellValue,onCommit:e=>s.updateSlot(e)});c.onInstruction(e=>t.emit(e));let l=new E({getColumns:e.getColumns,isSortingEnabled:e.getSortingEnabled,getCachedRows:e.getCachedRows,onSortFilterChange:async()=>{await e.fetchData(),i?.clearAllCaches(),n.resetScrollTop(),t.start();try{t.emit({type:`SCROLL_TO`,scrollTop:0}),e.emitContentSize(),e.emitHeaders(),s.refreshAllSlots()}finally{t.flush()}},onDataRefreshed:()=>{}});l.onInstruction(e=>t.emit(e));let u=new C({getCachedRows:e.getCachedRows,setCachedRows:e.setCachedRows,getTotalRows:e.getTotalRows,setTotalRows:e.setTotalRows,updateSlot:e=>s.updateSlot(e),refreshAllSlots:()=>s.refreshAllSlots(),emitContentSize:e.emitContentSize,clearSelectionIfInvalid:e.clearSelectionIfInvalid});return u.onInstruction(e=>t.emit(e)),{selection:a,highlight:i,fill:o,scrollVirtualization:r,viewport:n,slotPool:s,editManager:c,sortFilter:l,rowMutation:u}},Ee=e=>{let t=e.columnPositions.at(-1)??0;e.scrollVirtualization.updateContentSize(),e.batcher.emit({type:`SET_CONTENT_SIZE`,width:t,height:e.scrollVirtualization.getVirtualHeight(),viewportWidth:e.viewport.getViewportWidth(),viewportHeight:e.viewport.getViewportHeight(),rowsWrapperOffset:e.slotPool.getRowsWrapperOffset()})},De=e=>{let t=e.sortFilter.getSortInfoMap();for(let n=0;n<e.columns.length;n++){let r=e.columns[n],i=r.colId??r.field,a=t.get(i);e.batcher.emit({type:`UPDATE_HEADER`,colIndex:n,column:r,sortDirection:a?.direction,sortIndex:a?.index,hasFilter:e.sortFilter.hasActiveFilter(i)})}},Oe=e=>{let t=e.scrollVirtualization.getVisibleRowRange();e.batcher.emit({type:`UPDATE_VISIBLE_RANGE`,start:t.start,end:t.end,rowsWrapperOffset:e.slotPool.getRowsWrapperOffset()})},k=e=>{e.computeColumnPositions(),e.batcher.start();try{e.emitContentSize(),e.emitHeaders(),e.batcher.emit({type:`COLUMNS_CHANGED`,columns:[...e.columns]}),e.refreshSlots===`sync`?e.slotPool.syncSlots():e.slotPool.refreshAllSlots()}finally{e.batcher.flush()}e.onComplete()},ke=(e,t,n)=>{let r=n.columns[e];r&&(r.width=t,k({...n,refreshSlots:`sync`}))},Ae=(e,t,n)=>{if(e===t||e<0||e>=n.columns.length)return null;let r=t>e?t-1:t;if(r<0||r>=n.columns.length||e===r)return null;let[i]=n.columns.splice(e,1);return n.columns.splice(r,0,i),k({...n,refreshSlots:`all`}),r},je=(e,t,n)=>{let r=n.dataSource;if(!r.moveRow)return;r.moveRow(e,t),ae(n.cachedRows,e,t),n.highlight?.clearAllCaches();let i=Math.min(e,t),a=Math.max(e,t);for(let e=i;e<=a;e++)n.slotPool.updateSlot(e)},Me=async e=>{let t=await e.dataSource.fetch(x({pageIndex:0,pageSize:2**53-1,sortModel:e.sortFilter.getSortModel(),filterModel:e.sortFilter.getFilterModel(),columns:e.getColumns()}));e.cachedRows.clear();for(let n=0;n<t.rows.length;n++){let r=t.rows[n];r!==void 0&&e.cachedRows.set(n,r)}return e.setTotalRows(t.totalRows),{totalRows:t.totalRows}};var Ne=class{columns;dataSource;rowHeight;headerHeight;overscan;sortingEnabled;getRowId;onCellValueChanged;rowDragEntireRow;onRowDragEnd;onColumnResized;onColumnMoved;viewport;currentPageIndex=0;pageSize=2**53-1;cachedRows=new Map;totalRows=0;selection;fill;input;highlight;sortFilter;rowMutation;slotPool;editManager;columnPositions=[];batcher=new be;scrollVirtualization;isDestroyed=!1;_isDataLoading=!1;constructor(e){if(this.columns=e.columns,this.dataSource=e.dataSource,this.rowHeight=e.rowHeight,this.headerHeight=e.headerHeight??e.rowHeight,this.overscan=e.overscan??3,this.sortingEnabled=e.sortingEnabled??!0,this.getRowId=e.getRowId,this.onCellValueChanged=e.onCellValueChanged,this.rowDragEntireRow=e.rowDragEntireRow??!1,this.onRowDragEnd=e.onRowDragEnd,this.onColumnResized=e.onColumnResized,this.onColumnMoved=e.onColumnMoved,this.onCellValueChanged&&!this.getRowId)throw Error(`getRowId is required when onCellValueChanged is provided`);this.computeColumnPositions();let t=Te({batcher:this.batcher,highlighting:e.highlighting,getColumns:()=>this.columns,getCachedRows:()=>this.cachedRows,setCachedRows:e=>{this.cachedRows=e},getTotalRows:()=>this.totalRows,setTotalRows:e=>{this.totalRows=e},getRowHeight:()=>this.rowHeight,getHeaderHeight:()=>this.headerHeight,getOverscan:()=>this.overscan,getSortingEnabled:()=>this.sortingEnabled,getCellValue:(e,t)=>this.getCellValue(e,t),setCellValue:(e,t,n)=>this.setCellValue(e,t,n),emitContentSize:()=>this.emitContentSize(),emitHeaders:()=>this.emitHeaders(),fetchData:()=>this.fetchData(),clearSelectionIfInvalid:e=>this.clearSelectionIfInvalid(e)});this.selection=t.selection,this.highlight=t.highlight,this.fill=t.fill,this.scrollVirtualization=t.scrollVirtualization,this.viewport=t.viewport,this.slotPool=t.slotPool,this.editManager=t.editManager,this.sortFilter=t.sortFilter,this.rowMutation=t.rowMutation,this.input=new _e(this,{getHeaderHeight:()=>this.headerHeight,getRowHeight:()=>this.rowHeight,getColumnPositions:()=>this.columnPositions,getColumnCount:()=>this.columns.length})}onBatchInstruction(e){return this.batcher.subscribe(e)}async initialize(){await this.fetchData(),this.slotPool.syncSlots(),this.emitContentSize(),this.emitHeaders()}setViewport(e,t,n,r){let{changed:i,viewportSizeChanged:a}=this.viewport.update(e,t,n,r);i&&(this.slotPool.syncSlots(),this.emitVisibleRange(),a&&this.emitContentSize())}async fetchData(){this._isDataLoading=!0,this.batcher.emit({type:`DATA_LOADING`});try{let e=x({pageIndex:this.currentPageIndex,pageSize:this.pageSize,sortModel:this.sortFilter.getSortModel(),filterModel:this.sortFilter.getFilterModel(),columns:this.columns}),t=await this.dataSource.fetch(e);this.cachedRows.clear();let n=this.currentPageIndex*this.pageSize;t.rows.forEach((e,t)=>{this.cachedRows.set(n+t,e)}),this.totalRows=t.totalRows,this.batcher.emit({type:`DATA_LOADED`,totalRows:this.totalRows})}catch(e){this.batcher.emit({type:`DATA_ERROR`,error:e instanceof Error?e.message:String(e)})}finally{this._isDataLoading=!1}}async setSort(e,t,n=!1){if(!this._isDataLoading)return this.sortFilter.setSort(e,t,n)}async setFilter(e,t){if(!this._isDataLoading)return this.sortFilter.setFilter(e,t)}hasActiveFilter(e){return this.sortFilter.hasActiveFilter(e)}getDistinctValuesForColumn(e,t=500){return this.sortFilter.getDistinctValuesForColumn(e,t)}openFilterPopup(e,t){this._isDataLoading||this.sortFilter.openFilterPopup(e,t)}closeFilterPopup(){this.sortFilter.closeFilterPopup()}getSortModel(){return this.sortFilter.getSortModel()}getFilterModel(){return this.sortFilter.getFilterModel()}startEdit(e,t){this.editManager.startEdit(e,t)}updateEditValue(e){this.editManager.updateValue(e)}commitEdit(){this.editManager.commit()}cancelEdit(){this.editManager.cancel()}getEditState(){return this.editManager.getState()}getCellValue(e,t){return se(this.cachedRows,this.columns,e,t)}setCellValue(e,t,n){ce(this.cachedRows,this.columns,e,t,n,{onCellValueChanged:this.onCellValueChanged,getRowId:this.getRowId})}clearSelectionIfInvalid(e){let t=this.selection.getActiveCell();t&&t.row>=e&&this.selection.clearSelection()}computeColumnPositions(){this.columnPositions=oe(this.columns)}emitContentSize(){Ee({batcher:this.batcher,scrollVirtualization:this.scrollVirtualization,slotPool:this.slotPool,viewport:this.viewport,columnPositions:this.columnPositions})}emitHeaders(){De({batcher:this.batcher,sortFilter:this.sortFilter,columns:this.columns})}emitVisibleRange(){Oe({batcher:this.batcher,scrollVirtualization:this.scrollVirtualization,slotPool:this.slotPool})}setColumnWidth(e,t){ke(e,t,{batcher:this.batcher,slotPool:this.slotPool,refreshSlots:`sync`,computeColumnPositions:()=>this.computeColumnPositions(),emitContentSize:()=>this.emitContentSize(),emitHeaders:()=>this.emitHeaders(),columns:this.columns,onComplete:()=>this.onColumnResized?.(e,t)})}moveColumn(e,t){let n=Ae(e,t,{batcher:this.batcher,slotPool:this.slotPool,refreshSlots:`all`,computeColumnPositions:()=>this.computeColumnPositions(),emitContentSize:()=>this.emitContentSize(),emitHeaders:()=>this.emitHeaders(),columns:this.columns,onComplete:()=>{}});n!==null&&this.onColumnMoved?.(e,n)}commitRowDrag(e,t){je(e,t,{dataSource:this.dataSource,cachedRows:this.cachedRows,slotPool:this.slotPool,highlight:this.highlight}),this.onRowDragEnd?.(e,t)}isRowDragEntireRow(){return this.rowDragEntireRow}getColumns(){return this.columns}getColumnPositions(){return[...this.columnPositions]}getRowCount(){return this.totalRows}getRowHeight(){return this.rowHeight}getHeaderHeight(){return this.headerHeight}getTotalWidth(){return this.columnPositions.at(-1)??0}getTotalHeight(){return this.scrollVirtualization.getVirtualHeight()}isScalingActive(){return this.scrollVirtualization.isScalingActive()}getNaturalHeight(){return this.scrollVirtualization.getNaturalHeight()}getScrollRatio(){return this.scrollVirtualization.getScrollRatio()}getVisibleRowRange(){return this.scrollVirtualization.getVisibleRowRange()}getScrollTopForRow(e){return this.scrollVirtualization.getScrollTopForRow(e)}getRowIndexAtDisplayY(e,t){return this.scrollVirtualization.getRowIndexAtDisplayY(e,t)}getRowTranslateY(e){return this.slotPool.getRowTranslateYForIndex(e)}getRowData(e){return this.cachedRows.get(e)}async refresh(){await this.fetchData(),this.highlight?.clearAllCaches(),this.slotPool.refreshAllSlots(),this.emitContentSize(),this.emitVisibleRange()}async refreshFromTransaction(){await Me({dataSource:this.dataSource,sortFilter:this.sortFilter,cachedRows:this.cachedRows,setTotalRows:e=>{this.totalRows=e},getColumns:()=>this.columns}),this.highlight?.clearAllCaches(),this.slotPool.refreshAllSlots(),this.emitContentSize(),this.emitVisibleRange()}refreshSlotData(){this.slotPool.refreshAllSlots()}addRows(e,t){this.rowMutation.addRows(e,t)}updateRows(e){this.rowMutation.updateRows(e)}deleteRows(e){this.rowMutation.deleteRows(e)}getRow(e){return this.rowMutation.getRow(e)}setRow(e,t){this.rowMutation.setRow(e,t)}async setDataSource(e){this.editManager.getState()&&this.editManager.cancel(),this.dataSource=e,await this.refresh(),this.clearSelectionIfInvalid(this.totalRows)}setColumns(e){this.columns=e,this.computeColumnPositions(),this.emitContentSize(),this.emitHeaders(),this.slotPool.syncSlots()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.slotPool.destroy(),this.highlight?.destroy(),this.sortFilter.destroy(),this.rowMutation.destroy(),this.cachedRows.clear(),this.batcher.clearListeners(),this.totalRows=0)}},A=class{workerCode;maxWorkers;workers=[];workerUrl=null;nextRequestId=0;isTerminated=!1;constructor(e,t={}){this.workerCode=e;let n=typeof navigator>`u`?4:navigator.hardwareConcurrency;this.maxWorkers=Math.max(1,t.maxWorkers??n??4),t.preWarm&&this.preWarmWorkers()}getPoolSize(){return this.workers.length}getMaxWorkers(){return this.maxWorkers}isAvailable(){return!this.isTerminated&&typeof Worker<`u`}async execute(e,t){if(this.isTerminated)throw Error(`WorkerPool has been terminated`);if(typeof Worker>`u`)throw TypeError(`Web Workers are not available in this environment`);let n=this.getAvailableWorker(),r=this.nextRequestId++,i={...e,id:r};return new Promise((e,a)=>{n.pendingRequests.set(r,{resolve:e,reject:a}),n.busy=!0,t&&t.length>0?n.worker.postMessage(i,t):n.worker.postMessage(i)})}async executeParallel(e){if(this.isTerminated)throw Error(`WorkerPool has been terminated`);if(e.length===0)return[];let t=Math.min(e.length,this.maxWorkers);this.ensureWorkers(t);let n=e.map((e,t)=>{let n=t%this.workers.length,r=this.workers[n],i=this.nextRequestId++,a={...e.request,id:i};return new Promise((t,n)=>{r.pendingRequests.set(i,{resolve:t,reject:n}),r.busy=!0,e.transferables&&e.transferables.length>0?r.worker.postMessage(a,e.transferables):r.worker.postMessage(a)})});return Promise.all(n)}terminate(){for(let e of this.workers){e.worker.terminate();for(let[,t]of e.pendingRequests)t.reject(Error(`Worker pool terminated`));e.pendingRequests.clear()}this.workers=[],this.workerUrl&&=(URL.revokeObjectURL(this.workerUrl),null),this.isTerminated=!0}preWarmWorkers(){this.ensureWorkers(this.maxWorkers)}ensureWorkers(e){let t=Math.min(e,this.maxWorkers)-this.workers.length;for(let e=0;e<t;e++)this.createWorker()}getAvailableWorker(){return this.workers.find(e=>!e.busy)||(this.workers.length<this.maxWorkers?this.createWorker():this.workers.reduce((e,t)=>t.pendingRequests.size<e.pendingRequests.size?t:e,this.workers[0]))}createWorker(){if(!this.workerUrl){let e=new Blob([this.workerCode],{type:`application/javascript`});this.workerUrl=URL.createObjectURL(e)}let e=new Worker(this.workerUrl),t={worker:e,busy:!1,pendingRequests:new Map};return e.onmessage=e=>{let{id:n}=e.data,r=t.pendingRequests.get(n);r&&(t.pendingRequests.delete(n),t.pendingRequests.size===0&&(t.busy=!1),e.data.type===`error`?r.reject(Error(e.data.error)):r.resolve(e.data))},e.onerror=e=>{for(let[,n]of t.pendingRequests)n.reject(Error(`Worker error: ${e.message}`));t.pendingRequests.clear(),t.busy=!1,this.respawnWorker(t)},this.workers.push(t),t}respawnWorker(e){let t=this.workers.indexOf(e);if(t!==-1){try{e.worker.terminate()}catch{}this.workers.splice(t,1),this.workers.length<this.maxWorkers&&!this.isTerminated&&this.createWorker()}}};function j(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return null;r=r[e]}return r??null}const M=e=>e==null?``:Array.isArray(e)?e.join(`, `):typeof e==`object`&&!(e instanceof Date)?JSON.stringify(e):String(e);function Pe(e,t){if(e==null&&t==null)return 0;if(e==null)return 1;if(t==null)return-1;let n=Number(e),r=Number(t);return!Number.isNaN(n)&&!Number.isNaN(r)?n-r:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():M(e).localeCompare(M(t))}function Fe(e,t){return[...e].sort((e,n)=>{for(let{colId:r,direction:i}of t){let t=Pe(j(e,r),j(n,r));if(t!==0)return i===`asc`?t:-t}return 0})}const N=globalThis;N.onmessage!==void 0&&(N.onmessage=e=>{let{type:t,id:n,data:r,sortModel:i}=e.data;if(t===`sort`)try{let e=Fe(r,i);N.postMessage?.({type:`sorted`,id:n,data:e})}catch(e){N.postMessage?.({type:`error`,id:n,error:String(e)})}});var P=class{heap=[];compare;constructor(e){this.compare=e}push(e){this.heap.push(e),this.bubbleUp(this.heap.length-1)}pop(){if(this.heap.length===0)return;let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&t&&(this.heap[0]=t,this.bubbleDown(0)),e}size(){return this.heap.length}bubbleUp(e){for(;e>0;){let t=Math.floor((e-1)/2);if(this.compare(this.heap[e],this.heap[t])>=0)break;this.swap(e,t),e=t}}bubbleDown(e){let t=this.heap.length;for(;;){let n=2*e+1,r=2*e+2,i=e;if(n<t&&this.compare(this.heap[n],this.heap[i])<0&&(i=n),r<t&&this.compare(this.heap[r],this.heap[i])<0&&(i=r),i===e)break;this.swap(e,i),e=i}}swap(e,t){let n=this.heap[e];this.heap[e]=this.heap[t],this.heap[t]=n}};const F=(e,t,n)=>{let r=[];for(let i=0;i<n;i++)r.push(e.columns[i][t]);return r};function I(e,t){if(e.length===0)return new Uint32Array;if(e.length===1){let t=e[0],n=new Uint32Array(t.indices.length);for(let e=0;e<t.indices.length;e++)n[e]=t.indices[e]+t.offset;return n}let n=0;for(let t of e)n+=t.indices.length;let r=new Uint32Array(n),i=t===`asc`?1:-1,a=new P((e,t)=>(e.value-t.value)*i);for(let t=0;t<e.length;t++){let n=e[t];if(n.indices.length>0){let e=n.indices[0];a.push({chunkIndex:t,positionInChunk:0,value:n.values[0],globalIndex:e+n.offset})}}let o=0;for(;a.size()>0;){let t=a.pop();r[o++]=t.globalIndex;let n=e[t.chunkIndex],i=t.positionInChunk+1;if(i<n.indices.length){let e=n.indices[i];a.push({chunkIndex:t.chunkIndex,positionInChunk:i,value:n.values[i],globalIndex:e+n.offset})}}return r}function L(e){if(e.length===0)return new Uint32Array;if(e.length===1){let t=e[0],n=new Uint32Array(t.indices.length);for(let e=0;e<t.indices.length;e++)n[e]=t.indices[e]+t.offset;return n}let t=e[0].directions,n=t.length,r=0;for(let t of e)r+=t.indices.length;let i=new Uint32Array(r),a=new P((e,n)=>{for(let r=0;r<t.length;r++){let i=(e.values[r]-n.values[r])*t[r];if(i!==0)return i}return 0});for(let t=0;t<e.length;t++){let r=e[t];if(r.indices.length>0){let e=r.indices[0];a.push({chunkIndex:t,positionInChunk:0,values:F(r,0,n),globalIndex:e+r.offset})}}let o=0;for(;a.size()>0;){let t=a.pop();i[o++]=t.globalIndex;let r=e[t.chunkIndex],s=t.positionInChunk+1;if(s<r.indices.length){let e=r.indices[s];a.push({chunkIndex:t.chunkIndex,positionInChunk:s,values:F(r,s,n),globalIndex:e+r.offset})}}return i}function Ie(e,t){if(e.length<=1)return new Uint32Array;let n=[],r=0;for(let t=0;t<e.length-1;t++){let i=e[t],a=e[t+1];if(i.indices.length===0||a.indices.length===0){r+=i.indices.length;continue}let o=i.indices.length-1,s=i.values[o],c=a.values[0];if(s===c){let e=o;for(;e>0&&i.values[e-1]===s;)e--;let t=0;for(;t<a.indices.length-1&&a.values[t+1]===c;)t++;let l=r+e,u=r+i.indices.length+t+1;n.push(l,u)}r+=i.indices.length}return new Uint32Array(n)}const Le=(e,t,n)=>{let r=Math.max(n,Math.ceil(e/t)),i=[];for(let t=0;t<e;t+=r)i.push({offset:t,length:Math.min(r,e-t)});return i},Re=e=>{if(e.length<=1)return[];let t=[],n=0;for(let r=0;r<e.length-1;r++){let i=e[r],a=e[r+1];if(i.indices.length===0||a.indices.length===0){n+=i.indices.length;continue}let o=i.values[i.indices.length-1],s=a.values[0];if(o===s){let e=i.indices.length-1;for(;e>0&&i.values[e-1]===o;)e--;let r=0;for(;r<a.indices.length-1&&a.values[r+1]===s;)r++;t.push(n+e,n+i.indices.length+r+1)}n+=i.indices.length}return t},R=(e,t,n,r)=>{let i=r===`asc`?1:-1;for(let r=0;r<t.length;r+=2){let a=t[r],o=t[r+1];o<=a||o>e.length||ze(e,a,o,n,i)}},ze=(e,t,n,r,i)=>{let a=Array.from(e.slice(t,n));if(!Be(a,r)){a.sort((e,t)=>i*r[e].localeCompare(r[t]));for(let n=0;n<a.length;n++)e[t+n]=a[n]}},Be=(e,t)=>{let n=t[e[0]];for(let r=1;r<e.length;r++)if(t[e[r]]!==n)return!1;return!0};var z=class{pool;parallelThreshold;minChunkSize;isTerminated=!1;constructor(e={}){this.pool=new A(`
1
+ const e=(e,t,n,r,i)=>{let a=0,o=0;return e<40+i?o=-10:e>n-40&&(o=10),t<40?a=-10:t>r-40&&(a=10),a!==0||o!==0?{dx:a,dy:o}:null};var t=class{active=!1;colIndex=-1;startX=0;initialWidth=0;currentWidth=0;core;constructor(e){this.core=e}get isActive(){return this.active}start(e,t,n){return n.button!==0||this.core.getColumns()[e]?.resizable===!1?{preventDefault:!1,stopPropagation:!1}:(this.active=!0,this.colIndex=e,this.startX=n.clientX,this.initialWidth=t,this.currentWidth=t,{preventDefault:!0,stopPropagation:!0,startDrag:`column-resize`})}move(e,t){let n=this.core.getColumns()[this.colIndex],r=n?.minWidth??50,i=n?.maxWidth,a=this.initialWidth+(e.clientX-this.startX);a=Math.max(r,a),i!==void 0&&(a=Math.min(i,a)),this.currentWidth=a;let o=e.clientX-t.left>t.width-40?10:0,s=o===0?null:{dx:o,dy:0};return{targetRow:0,targetCol:this.colIndex,autoScroll:s}}end(){this.active&&this.core.setColumnWidth(this.colIndex,this.currentWidth),this.active=!1,this.colIndex=-1}getState(){return this.active===!1?null:{colIndex:this.colIndex,initialWidth:this.initialWidth,currentWidth:this.currentWidth}}};const n=e=>{let t=[0],n=0;for(let r of e)n+=r.width,t.push(n);return t},r=e=>e.at(-1)??0,i=(e,t)=>{let i=n(e),a=r(i);if(t<=a||a===0)return{positions:i,widths:e.map(e=>e.width)};let o=t/a,s=e.map(e=>e.width*o),c=[0],l=0;for(let e of s)l+=e,c.push(l);return{positions:c,widths:s}},a=(e,t)=>{for(let n=0;n<t.length-1;n++)if(e>=t[n]&&e<t[n+1])return n;return e>=t.at(-1)?t.length-2:0},o=e=>({minRow:Math.min(e.startRow,e.endRow),maxRow:Math.max(e.startRow,e.endRow),minCol:Math.min(e.startCol,e.endCol),maxCol:Math.max(e.startCol,e.endCol)}),s=(e,t,n)=>e>=n.minRow&&e<=n.maxRow&&t>=n.minCol&&t<=n.maxCol,c=(e,t,n)=>n?s(e,t,o(n)):!1,l=(e,t,n)=>n?.row===e&&n?.col===t,u=(e,t)=>!t||t.end<0||t.start>t.end?!0:e>=t.start&&e<=t.end,d=(e,t,n)=>n?.row===e&&n?.col===t,f=(e,t,n,r,i)=>{if(!n||!r||!i)return!1;let{minRow:a,maxRow:s,minCol:c,maxCol:l}=o(r),u=i.row>s,d=i.row<a;return u?e>s&&e<=i.row&&t>=c&&t<=l:d?e<a&&e>=i.row&&t>=c&&t<=l:!1},p=(e,t,n,r)=>{let i=[`gp-grid-cell`];return e&&i.push(`gp-grid-cell--active`),t&&!e&&i.push(`gp-grid-cell--selected`),n&&i.push(`gp-grid-cell--editing`),r&&i.push(`gp-grid-cell--fill-preview`),i.join(` `)},m=(e,t)=>{if(!t)return!1;let{minRow:n,maxRow:r}=o(t);return e>=n&&e<=r},h=(e,t)=>{if(!t)return!1;let{minCol:n,maxCol:r}=o(t);return e>=n&&e<=r};function g(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return null;r=r[e]}return r??null}function _(e,t,n){let r=t.split(`.`),i=e;for(let e=0;e<r.length-1;e++){let t=r[e];if(typeof i!=`object`||!i)return;i=i[t]}typeof i==`object`&&i&&(i[r.at(-1)]=n)}const v=()=>{let e=[];return{onInstruction:t=>(e.push(t),()=>{e=e.filter(e=>e!==t)}),emit:t=>{for(let n of e)n(t)},clearListeners:()=>{e=[]}}},ee=()=>{let e=v(),t=[];return{onInstruction:e.onInstruction,onBatchInstruction:e=>(t.push(e),()=>{t=t.filter(t=>t!==e)}),emit:n=>{e.emit(n);for(let e of t)e([n])},emitBatch:n=>{if(n.length!==0){for(let e of t)e(n);for(let t of n)e.emit(t)}},clearListeners:()=>{e.clearListeners(),t=[]}}},te=(e,t)=>{for(let n of e.values())if(n.rowIndex===t)return n;return null},ne=(e,t,n,r,i,a=0)=>{let o=te(i,n);if(!o){t.scrollTop=e.getScrollTopForRow(n);return}let s=a+o.translateY-t.scrollTop,c=s+r;if(s<0)t.scrollTop=e.getScrollTopForRow(n);else if(c>t.clientHeight){let i=Math.floor(t.clientHeight/r),a=Math.max(0,n-i+1);t.scrollTop=e.getScrollTopForRow(a)}},y=(e,t)=>e==null?``:t?t(e):Array.isArray(e)?e.join(`, `):typeof e==`object`?e instanceof Date?String(e):JSON.stringify(e):String(e),re=e=>{let{activeCell:t,selectionRange:n,slots:r,columns:i,visibleColumnsWithIndices:a,columnPositions:o,columnWidths:s,rowHeight:c}=e;if(!t&&!n)return null;let l,u,d,f;if(n)l=Math.max(n.startRow,n.endRow),u=Math.max(n.startCol,n.endCol),d=Math.min(n.startCol,n.endCol),f=Math.max(n.startCol,n.endCol);else if(t)l=t.row,u=t.col,d=u,f=u;else return null;for(let e=d;e<=f;e++){let t=i[e];if(!(!t||t.hidden)&&t.editable!==!0)return null}let p=a.findIndex(e=>e.originalIndex===u);if(p===-1)return null;let m=null;for(let e of r.values())if(e.rowIndex===l){m=e.translateY;break}if(m===null)return null;let h=o[p]??0,g=s[p]??0;return{top:m+c-5,left:h+g-20}},ie=(e,t,n=8)=>{let r=e.getBoundingClientRect(),i=t.getBoundingClientRect(),a=r.bottom+4,o=r.left,s=Math.max(200,r.width);return o+i.width>window.innerWidth-n&&(o=window.innerWidth-i.width-n),o=Math.max(n,o),a+i.height>window.innerHeight-n&&(a=r.top-i.height-4),a=Math.max(n,a),{top:a,left:o,minWidth:s}},ae=e=>{if(!e||e.length===0)return;let t={};for(let n of e)n.valueFormatter&&(t[n.colId??n.field]=n.valueFormatter);return Object.keys(t).length>0?t:void 0},b=e=>({range:e.range,sort:e.sortModel.length>0?e.sortModel:void 0,filter:Object.keys(e.filterModel).length>0?e.filterModel:void 0,valueFormatters:ae(e.columns)}),oe=(e,t,n)=>{let r=e.get(t);if(r!==void 0){if(t<n){let i=n-1;for(let n=t;n<i;n++){let t=e.get(n+1);t===void 0?e.delete(n):e.set(n,t)}e.set(i,r);return}for(let r=t;r>n;r--){let t=e.get(r-1);t===void 0?e.delete(r):e.set(r,t)}e.set(n,r)}},se=e=>{let t=[0],n=0;for(let r of e)r.hidden||(n+=r.width,t.push(n));return t},ce=(e,t,n,r)=>{let i=e.get(n);if(!i)return null;let a=t[r];return a?g(i,a.field):null},le=(e,t,n,r,i,a)=>{let o=e.get(n);if(!o||typeof o!=`object`)return;let s=t[r];if(!s)return;let c=a.onCellValueChanged!==void 0,l=c?g(o,s.field):void 0;_(o,s.field,i),c&&a.onCellValueChanged({rowId:a.getRowId(o),colIndex:r,field:s.field,oldValue:l,newValue:i,rowData:o})};var ue=class{active=!1;sourceColIndex=-1;startX=0;startY=0;thresholdMet=!1;shiftKey=!1;ghostWidth=0;ghostHeight=0;currentX=0;currentY=0;dropTargetIndex=null;core;deps;constructor(e,t){this.core=e,this.deps=t}updateDeps(e){this.deps=e}get isActive(){return this.active}get isDraggingForDisplay(){return this.active&&this.thresholdMet}start(e,t,n,r){return r.button!==0||this.core.getColumns()[e]?.movable===!1?{preventDefault:!1,stopPropagation:!1}:(this.active=!0,this.sourceColIndex=e,this.startX=r.clientX,this.startY=r.clientY,this.thresholdMet=!1,this.shiftKey=r.shiftKey,this.ghostWidth=t,this.ghostHeight=n,this.currentX=r.clientX,this.currentY=r.clientY,this.dropTargetIndex=null,{preventDefault:!0,stopPropagation:!0,startDrag:`column-move`})}move(e,t){let n=e.clientX-this.startX,r=e.clientY-this.startY;if(this.thresholdMet===!1){if(!(Math.abs(n)>5||Math.abs(r)>5))return null;this.thresholdMet=!0}this.currentX=e.clientX,this.currentY=e.clientY;let{left:i,width:o,scrollLeft:s}=t,c=e.clientX-i+s,l=this.deps.getColumnPositions(),u=this.deps.getColumnCount();this.dropTargetIndex=Math.max(0,Math.min(a(c,l),u));let d=e.clientX-i,f=0;d<40?f=-10:d>o-40&&(f=10);let p=f===0?null:{dx:f,dy:0};return{targetRow:0,targetCol:this.dropTargetIndex??0,autoScroll:p}}end(e){this.thresholdMet?this.commitMove():this.treatAsHeaderClick(e),this.reset()}commitMove(){if(this.dropTargetIndex===null)return;let e=this.sourceColIndex,t=this.deps.getOriginalColumnIndex?this.deps.getOriginalColumnIndex(Math.min(this.dropTargetIndex,this.deps.getColumnCount()-1)):this.dropTargetIndex;e!==t&&this.core.moveColumn(e,t)}treatAsHeaderClick(e){let t=this.core.getColumns()[this.sourceColIndex];if(!t)return;let n=t.colId??t.field,r=this.core.getSortModel().find(e=>e.colId===n)?.direction;this.core.setSort(n,e(r),this.shiftKey)}reset(){this.active=!1,this.sourceColIndex=-1,this.thresholdMet=!1,this.shiftKey=!1,this.dropTargetIndex=null}getState(){return this.active===!1?null:{sourceColIndex:this.sourceColIndex,currentX:this.currentX,currentY:this.currentY,dropTargetIndex:this.dropTargetIndex,ghostWidth:this.ghostWidth,ghostHeight:this.ghostHeight}}},de=class{active=!1;sourceRowIndex=-1;startX=0;startY=0;thresholdMet=!1;currentX=0;currentY=0;dropTargetIndex=null;core;deps;constructor(e,t){this.core=e,this.deps=t}updateDeps(e){this.deps=e}get isActive(){return this.active}get isDraggingForDisplay(){return this.active&&this.thresholdMet}start(e,t,n){this.active=!0,this.sourceRowIndex=e,this.startX=t,this.startY=n,this.thresholdMet=!1,this.currentX=t,this.currentY=n,this.dropTargetIndex=null}move(t,n){let r=t.clientX-this.startX,i=t.clientY-this.startY;if(this.thresholdMet===!1){if(!(Math.abs(r)>5||Math.abs(i)>5))return null;this.thresholdMet=!0}this.currentX=t.clientX,this.currentY=t.clientY;let{top:a,left:o,height:s,width:c,scrollTop:l}=n,u=this.deps.getHeaderHeight(),d=t.clientY-a,f=this.core.getRowCount(),p=Math.max(0,Math.min(this.core.getRowIndexAtDisplayY(d,l),f));return this.dropTargetIndex=p,{targetRow:p,targetCol:0,autoScroll:e(t.clientY-a,t.clientX-o,s,c,u)}}end(){this.thresholdMet&&this.dropTargetIndex!==null&&this.dropTargetIndex!==this.sourceRowIndex&&this.core.commitRowDrag(this.sourceRowIndex,this.dropTargetIndex),this.active=!1,this.sourceRowIndex=-1,this.thresholdMet=!1,this.dropTargetIndex=null}getState(){return this.active===!1?null:{sourceRowIndex:this.sourceRowIndex,currentX:this.currentX,currentY:this.currentY,dropTargetIndex:this.dropTargetIndex,dropIndicatorY:this.dropTargetIndex===null?0:this.core.getRowTranslateY(this.dropTargetIndex)}}},fe=class{active=!1;core;constructor(e){this.core=e}get isActive(){return this.active}start(){this.active=!0}moveToTarget(e,t){this.active!==!1&&this.core.selection.startSelection({row:e,col:t},{shift:!0})}end(){this.active=!1}},pe=class{active=!1;sourceRange=null;target=null;core;constructor(e){this.core=e}get isActive(){return this.active}get stateSnapshot(){return{sourceRange:this.sourceRange,target:this.target}}start(e,t){if(!e&&!t)return{preventDefault:!1,stopPropagation:!1};let n=t??{startRow:e.row,startCol:e.col,endRow:e.row,endCol:e.col};return this.core.fill.startFillDrag(n),this.sourceRange=n,this.target={row:Math.max(n.startRow,n.endRow),col:Math.max(n.startCol,n.endCol)},this.active=!0,{preventDefault:!0,stopPropagation:!0,startDrag:`fill`}}moveToTarget(e,t){this.active!==!1&&(this.core.fill.updateFillDrag(e,t),this.target={row:e,col:t})}end(){this.active&&(this.core.fill.commitFillDrag(),this.core.refreshSlotData()),this.active=!1,this.sourceRange=null,this.target=null}},me=class{record=null;set(e){this.record=e}clear(){this.record=null}consume(){let e=this.record;return this.record=null,e}};const he=e=>{switch(e){case`ArrowUp`:return`up`;case`ArrowDown`:return`down`;case`ArrowLeft`:return`left`;case`ArrowRight`:return`right`;default:return null}};var ge=class{core;constructor(e){this.core=e}handle(e,t,n,r){if(r||n!==null&&e.key!==`Enter`&&e.key!==`Escape`&&e.key!==`Tab`)return{preventDefault:!1};let i=he(e.key);if(i!==null)return this.moveFocus(i,e.shiftKey);let a=e.ctrlKey||e.metaKey;return this.handleAction(e.key,t,n,e.shiftKey,a)}moveFocus(e,t){let{selection:n}=this.core;return n.moveFocus(e,t),{preventDefault:!0,scrollToCell:n.getActiveCell()??void 0}}handleAction(e,t,n,r,i){switch(e){case`Enter`:return this.handleEnter(t,n);case`Escape`:return this.handleEscape(n);case`Tab`:return this.handleTab(n,r);default:return this.handleNonSpecialKey(e,t,n,i)}}handleEnter(e,t){return t?this.core.commitEdit():e&&this.core.startEdit(e.row,e.col),{preventDefault:!0}}handleEscape(e){return e?this.core.cancelEdit():this.core.selection.clearSelection(),{preventDefault:!0}}handleTab(e,t){return e&&this.core.commitEdit(),this.core.selection.moveFocus(t?`left`:`right`,!1),{preventDefault:!0}}handleNonSpecialKey(e,t,n,r){let{selection:i}=this.core;return e===`a`&&r?(i.selectAll(),{preventDefault:!0}):e===`c`&&r?(i.copySelectionToClipboard(),{preventDefault:!0}):e===`F2`?(t&&!n&&this.core.startEdit(t.row,t.col),{preventDefault:!0}):e===`Delete`||e===`Backspace`?t&&!n?(this.core.startEdit(t.row,t.col),{preventDefault:!0}):{preventDefault:!1}:(t&&!n&&!r&&e.length===1&&this.core.startEdit(t.row,t.col),{preventDefault:!1})}};const _e=(t,n,r,i)=>{let{top:o,left:s,width:c,height:l,scrollTop:u,scrollLeft:d}=i,f=n.getColumnPositions(),p=n.getColumnCount(),m=r.clientY-o,h=r.clientX-s+d,g=Math.max(0,Math.min(t.getRowIndexAtDisplayY(m,u),t.getRowCount()-1)),_=Math.max(0,Math.min(a(h,f),p-1));return{row:g,col:n.getOriginalColumnIndex?n.getOriginalColumnIndex(_):_,autoScroll:e(r.clientY-o,r.clientX-s,l,c,n.getHeaderHeight())}},x=e=>e==null?`asc`:e===`asc`?`desc`:null;var S=class{core;deps;columnResize;columnMove;rowDrag;selectionDrag;fillDrag;pendingRowDrag=new me;keyboard;constructor(e,n){this.core=e,this.deps=n,this.columnResize=new t(e),this.columnMove=new ue(e,n),this.rowDrag=new de(e,n),this.selectionDrag=new fe(e),this.fillDrag=new pe(e),this.keyboard=new ge(e)}updateDeps(e){this.deps={...this.deps,...e},this.columnMove.updateDeps(this.deps),this.rowDrag.updateDeps(this.deps)}getDragState(){let e=this.getDragType(),t=this.fillDrag.stateSnapshot;return{isDragging:e!==null,dragType:e,fillSourceRange:t.sourceRange,fillTarget:t.target,columnResize:this.columnResize.getState(),columnMove:this.columnMove.getState(),rowDrag:this.rowDrag.getState()}}getDragType(){return this.fillDrag.isActive?`fill`:this.columnResize.isActive?`column-resize`:this.columnMove.isDraggingForDisplay?`column-move`:this.rowDrag.isDraggingForDisplay?`row-drag`:this.selectionDrag.isActive?`selection`:null}handleHeaderMouseDown(e,t,n,r){return this.columnMove.start(e,t,n,r)}handleHeaderResizeMouseDown(e,t,n){return this.columnResize.start(e,t,n)}handleCellMouseDown(e,t,n){if(n.button!==0||this.core.getEditState()!==null)return ve;let r=(this.core.getColumns()[t]?.rowDrag===!0||this.core.isRowDragEntireRow())&&!n.shiftKey;return r&&n.pointerType===`touch`?this.startPendingRowDrag(e,t,n):r?this.startRowDrag(e,t,n):this.startSelectionClick(e,t,n)}startPendingRowDrag(e,t,n){return this.pendingRowDrag.set({rowIndex:e,colIndex:t,clientX:n.clientX,clientY:n.clientY}),this.core.selection.startSelection({row:e,col:t},{shift:!1,ctrl:!1}),{preventDefault:!1,stopPropagation:!1,focusContainer:!0,startDrag:`row-drag-pending`}}startRowDrag(e,t,n){return this.rowDrag.start(e,n.clientX,n.clientY),this.core.selection.startSelection({row:e,col:t},{shift:!1,ctrl:!1}),{preventDefault:!0,stopPropagation:!0,focusContainer:!0,startDrag:`row-drag`}}startSelectionClick(e,t,n){return this.core.selection.startSelection({row:e,col:t},{shift:n.shiftKey,ctrl:n.ctrlKey||n.metaKey}),{preventDefault:!1,stopPropagation:!1,focusContainer:!0,startDrag:n.shiftKey?void 0:`selection`}}handleCellDoubleClick(e,t){this.core.startEdit(e,t)}handleCellMouseEnter(e,t){this.core.highlight?.setHoverPosition({row:e,col:t})}handleCellMouseLeave(){this.core.highlight?.setHoverPosition(null)}handleFillHandleMouseDown(e,t,n){return this.fillDrag.start(e,t)}handleHeaderClick(e,t){let n=this.core.getSortModel().find(t=>t.colId===e)?.direction;this.core.setSort(e,x(n),t)}startSelectionDrag(){this.selectionDrag.start()}confirmPendingRowDrag(){let e=this.pendingRowDrag.consume();return e===null?!1:(this.rowDrag.start(e.rowIndex,e.clientX,e.clientY),!0)}cancelPendingRowDrag(){this.pendingRowDrag.clear()}handleDragMove(e,t){return this.columnResize.isActive?this.columnResize.move(e,t):this.columnMove.isActive?this.columnMove.move(e,t):this.rowDrag.isActive?this.rowDrag.move(e,t):this.selectionFillMove(e,t)}selectionFillMove(e,t){if((this.selectionDrag.isActive||this.fillDrag.isActive)===!1)return null;let n=_e(this.core,this.deps,e,t);return this.selectionDrag.moveToTarget(n.row,n.col),this.fillDrag.moveToTarget(n.row,n.col),{targetRow:n.row,targetCol:n.col,autoScroll:n.autoScroll}}handleDragEnd(){if(this.columnResize.isActive)return this.columnResize.end();if(this.columnMove.isActive)return this.columnMove.end(x);if(this.rowDrag.isActive)return this.rowDrag.end();this.selectionDrag.end(),this.fillDrag.end()}handleWheel(e,t,n){return this.core.isScalingActive()?{dy:e*n,dx:t*n}:null}handleKeyDown(e,t,n,r){return this.keyboard.handle(e,t,n,r)}};const ve={preventDefault:!1,stopPropagation:!1};var C=class{options;highlightingOptions;hoverPosition=null;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;rowClassCache=new Map;columnClassCache=new Map;cellClassCache=new Map;constructor(e,t={}){this.options=e,this.highlightingOptions=t}isEnabled(){return!!(this.highlightingOptions.computeRowClasses||this.highlightingOptions.computeColumnClasses||this.highlightingOptions.computeCellClasses)}updateOptions(e){this.highlightingOptions=e,this.clearAllCaches()}setHoverPosition(e){this.isEnabled()&&(this.hoverPosition?.row===e?.row&&this.hoverPosition?.col===e?.col||(this.rowClassCache.clear(),this.columnClassCache.clear(),this.cellClassCache.clear(),this.hoverPosition=e,this.emit({type:`SET_HOVER_POSITION`,position:e})))}getHoverPosition(){return this.hoverPosition}onSelectionChange(){this.clearAllCaches()}buildRowContext(e,t){let n=this.options.getActiveCell(),r=this.options.getSelectionRange();return{rowIndex:e,colIndex:null,column:void 0,rowData:t,hoverPosition:this.hoverPosition,activeCell:n,selectionRange:r,isHovered:this.hoverPosition?.row===e,isActive:n?.row===e,isSelected:m(e,r)}}buildColumnContext(e,t){let n=this.options.getActiveCell(),r=this.options.getSelectionRange();return{rowIndex:null,colIndex:e,column:t,rowData:void 0,hoverPosition:this.hoverPosition,activeCell:n,selectionRange:r,isHovered:this.hoverPosition?.col===e,isActive:n?.col===e,isSelected:h(e,r)}}buildCellContext(e,t,n,r){let i=this.options.getActiveCell(),a=this.options.getSelectionRange(),s=this.hoverPosition?.row===e&&this.hoverPosition?.col===t,c=!1;if(a){let{minRow:n,maxRow:r,minCol:i,maxCol:s}=o(a);c=e>=n&&e<=r&&t>=i&&t<=s}return{rowIndex:e,colIndex:t,column:n,rowData:r,hoverPosition:this.hoverPosition,activeCell:i,selectionRange:a,isHovered:s,isActive:i?.row===e&&i?.col===t,isSelected:c}}computeRowClasses(e,t){let n=this.highlightingOptions.computeRowClasses;if(!n)return[];let r=this.rowClassCache.get(e);if(r!==void 0)return r;let i=n(this.buildRowContext(e,t));return this.rowClassCache.set(e,i),i}computeColumnClasses(e,t){let n=this.columnClassCache.get(e);if(n!==void 0)return n;let r=this.buildColumnContext(e,t),i;if(t.computeColumnClasses)i=t.computeColumnClasses(r);else if(this.highlightingOptions.computeColumnClasses)i=this.highlightingOptions.computeColumnClasses(r);else return[];return this.columnClassCache.set(e,i),i}computeCellClasses(e,t,n,r){let i=`${e},${t}`,a=this.cellClassCache.get(i);if(a!==void 0)return a;let o=this.buildCellContext(e,t,n,r),s;if(n.computeCellClasses)s=n.computeCellClasses(o);else if(this.highlightingOptions.computeCellClasses)s=this.highlightingOptions.computeCellClasses(o);else return[];return this.cellClassCache.set(i,s),s}computeCombinedCellClasses(e,t,n,r){let i=this.computeColumnClasses(t,n),a=this.computeCellClasses(e,t,n,r);return[...i,...a]}clearAllCaches(){this.rowClassCache.clear(),this.columnClassCache.clear(),this.cellClassCache.clear()}destroy(){this.emitter.clearListeners(),this.clearAllCaches(),this.hoverPosition=null}},w=class{options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getRow(e){return this.options.getCachedRows().get(e)}addRows(e,t){if(e.length===0)return;let n=this.options.getCachedRows(),r=this.options.getTotalRows(),i=t??r,a=r+e.length;if(i<r){let t=new Map;for(let[r,a]of n)r>=i?t.set(r+e.length,a):t.set(r,a);this.options.setCachedRows(t)}let o=this.options.getCachedRows();e.forEach((e,t)=>{o.set(i+t,e)}),this.options.setTotalRows(a);let s=e.map((e,t)=>i+t);this.emit({type:`ROWS_ADDED`,indices:s,count:s.length,totalRows:a}),this.options.emitContentSize(),this.options.refreshAllSlots()}updateRows(e){if(e.length===0)return;let t=this.options.getCachedRows(),n=[];for(let r of e){let e=t.get(r.index);e&&(t.set(r.index,{...e,...r.data}),n.push(r.index))}if(n.length!==0){this.emit({type:`ROWS_UPDATED`,indices:n});for(let e of n)this.options.updateSlot(e)}}deleteRows(e){if(e.length===0)return;let t=this.options.getCachedRows(),n=this.options.getTotalRows(),r=[...e].sort((e,t)=>t-e);for(let e of r){if(e<0||e>=n)continue;t.delete(e);let r=new Map;for(let[n,i]of t)n>e?r.set(n-1,i):r.set(n,i);this.options.setCachedRows(r),n--}this.options.setTotalRows(n),this.options.clearSelectionIfInvalid(n),this.emit({type:`ROWS_REMOVED`,indices:r,totalRows:n}),this.options.emitContentSize(),this.options.refreshAllSlots()}setRow(e,t){let n=this.options.getTotalRows();e<0||e>=n||(this.options.getCachedRows().set(e,t),this.emit({type:`ROWS_UPDATED`,indices:[e]}),this.options.updateSlot(e))}destroy(){this.emitter.clearListeners()}};const ye={aggressive:{prefetchPages:0,maxPages:1},balanced:{prefetchPages:1,maxPages:5},conservative:{prefetchPages:2,maxPages:10}},T=(e,t)=>e===void 0?t:Number.isFinite(e)&&e>0?Math.floor(e):t,be=(e,t)=>e===void 0?t:Number.isFinite(e)&&e>=0?Math.floor(e):t,E=e=>{let t=ye[e?.eviction??`balanced`];return{pageSize:T(e?.pageSize,100),prefetchPages:be(e?.prefetchPages,t.prefetchPages),maxPages:T(e?.maxPages,t.maxPages)}};var xe=class{options;cacheOptions;generation=0;hasKnownTotal=!1;loadedBlocks=new Set;pendingBlocks=new Map;constructor(e,t){this.options=e,this.cacheOptions=E(t)}configure(e){this.cacheOptions=E(e)}getPageSize(){return this.cacheOptions.pageSize}reset(){this.generation+=1,this.hasKnownTotal=!1,this.loadedBlocks.clear(),this.pendingBlocks.clear(),this.options.getCachedRows().clear()}hasMissingRows(e){if(e.endRow<=e.startRow)return!1;let t=this.options.getTotalRows();if(this.hasKnownTotal&&t===0||this.hasKnownTotal&&e.startRow>=t)return!1;let n=this.hasKnownTotal?Math.min(e.endRow,t):e.endRow,r=this.options.getCachedRows();for(let t=e.startRow;t<n;t+=1)if(!r.has(t))return!0;return!1}async loadRange(e,t=!1){t&&this.reset();let n=this.generation,r=this.options.getTotalRows(),i=this.getBlocksForRange(e).map(e=>this.getOrCreateBlockRequest(e,n)).filter(e=>e!==null);return i.length>0&&await Promise.all(i),n===this.generation?(this.evictAround(e),{applied:!0,loadedBlockCount:i.length,totalRowsChanged:r!==this.options.getTotalRows()}):{applied:!1,loadedBlockCount:0,totalRowsChanged:!1}}getOrCreateBlockRequest(e,t){if(this.loadedBlocks.has(e))return null;let n=this.pendingBlocks.get(e);if(n)return n;let r=this.fetchBlock(e,t);return this.pendingBlocks.set(e,r),r.then(()=>this.deletePendingBlock(e,r),()=>this.deletePendingBlock(e,r)),r}deletePendingBlock(e,t){this.pendingBlocks.get(e)===t&&this.pendingBlocks.delete(e)}async fetchBlock(e,t){let n=e*this.cacheOptions.pageSize,r=this.getBlockEndRow(e),i;try{i=await this.options.getDataSource().fetch(b({range:{startRow:n,endRow:r},sortModel:this.options.getSortModel(),filterModel:this.options.getFilterModel(),columns:this.options.getColumns()}))}catch(e){if(t===this.generation)throw e;return}t===this.generation&&this.applyBlockResponse(e,i.rows,i.totalRows)}applyBlockResponse(e,t,n){let r=this.options.getCachedRows(),i=this.options.getTotalRows();this.deleteRowsForBlock(e);let a=e*this.cacheOptions.pageSize;t.forEach((e,t)=>{e!==void 0&&r.set(a+t,e)}),this.options.setTotalRows(n),this.hasKnownTotal=!0,this.loadedBlocks.add(e),n<i&&this.deleteRowsAfterTotal(n)}getBlocksForRange(e){if(e.endRow<=e.startRow)return[];let t=this.options.getTotalRows();if(this.hasKnownTotal&&t===0||this.hasKnownTotal&&e.startRow>=t)return[];let n=this.hasKnownTotal?Math.min(e.endRow,t):e.endRow,r=this.cacheOptions.pageSize,i=Math.floor(e.startRow/r),a=Math.floor((n-1)/r),o=Math.max(0,i-this.cacheOptions.prefetchPages),s=this.getLastPrefetchBlock(a),c=[];for(let e=o;e<=s;e+=1)c.push(e);return c}getLastPrefetchBlock(e){let t=this.options.getTotalRows(),n=e+this.cacheOptions.prefetchPages;if(this.hasKnownTotal&&t>0){let e=Math.floor((t-1)/this.cacheOptions.pageSize);return Math.min(n,e)}return n}getBlockEndRow(e){let t=e*this.cacheOptions.pageSize+this.cacheOptions.pageSize,n=this.options.getTotalRows();return this.hasKnownTotal&&n>0?Math.min(t,n):t}evictAround(e){if(this.loadedBlocks.size<=this.cacheOptions.maxPages)return;let t=new Set(this.getBlocksForRange(e)),n=Math.floor(e.startRow/this.cacheOptions.pageSize),r=[...this.loadedBlocks].filter(e=>t.has(e)===!1).sort((e,t)=>Math.abs(t-n)-Math.abs(e-n));for(let e of r){if(this.loadedBlocks.size<=this.cacheOptions.maxPages)return;this.loadedBlocks.delete(e),this.deleteRowsForBlock(e)}}deleteRowsForBlock(e){let t=this.options.getCachedRows(),n=e*this.cacheOptions.pageSize,r=n+this.cacheOptions.pageSize;for(let e=n;e<r;e+=1)t.delete(e)}deleteRowsAfterTotal(e){let t=this.options.getCachedRows();for(let n of t.keys())n>=e&&t.delete(n)}};const D=e=>{e.computeColumnPositions(),e.batcher.start();try{e.emitContentSize(),e.emitHeaders(),e.batcher.emit({type:`COLUMNS_CHANGED`,columns:[...e.columns]}),e.refreshSlots===`sync`?e.slotPool.syncSlots():e.slotPool.refreshAllSlots()}finally{e.batcher.flush()}e.onComplete()},Se=(e,t,n)=>{let r=n.columns[e];r&&(r.width=t,D({...n,refreshSlots:`sync`}))},Ce=(e,t,n)=>{if(e===t||e<0||e>=n.columns.length)return null;let r=t>e?t-1:t;if(r<0||r>=n.columns.length||e===r)return null;let[i]=n.columns.splice(e,1);return n.columns.splice(r,0,i),D({...n,refreshSlots:`all`}),r},we=(e,t,n)=>{let r=n.dataSource;if(!r.moveRow)return;r.moveRow(e,t),oe(n.cachedRows,e,t),n.highlight?.clearAllCaches();let i=Math.min(e,t),a=Math.max(e,t);for(let e=i;e<=a;e++)n.slotPool.updateSlot(e)},Te=async e=>{let t=await e.dataSource.fetch(b({range:{startRow:0,endRow:2**53-1},sortModel:e.sortModel,filterModel:e.filterModel,columns:e.getColumns()}));e.cachedRows.clear();for(let n=0;n<t.rows.length;n++){let r=t.rows[n];r!==void 0&&e.cachedRows.set(n,r)}return e.setTotalRows(t.totalRows),{totalRows:t.totalRows}};var O=class{dataSource;options;rowLoading;rowWindowLoader;cachedRows=new Map;totalRows=0;isDataLoading=!1;constructor(e){this.options=e,this.dataSource=e.dataSource,this.rowLoading=e.rowLoading??{},this.rowWindowLoader=new xe({getDataSource:()=>this.dataSource,getCachedRows:()=>this.cachedRows,getTotalRows:()=>this.totalRows,setTotalRows:e=>{this.totalRows=e},getSortModel:e.getSortModel,getFilterModel:e.getFilterModel,getColumns:e.getColumns},this.rowLoading.cache)}getCachedRows(){return this.cachedRows}setCachedRows(e){this.cachedRows=e}getTotalRows(){return this.totalRows}setTotalRows(e){this.totalRows=e}getDataSource(){return this.dataSource}getRowData(e){return this.cachedRows.get(e)}isLoading(){return this.isDataLoading}getCellValue(e,t){return ce(this.cachedRows,this.options.getColumns(),e,t)}setCellValue(e,t,n){le(this.cachedRows,this.options.getColumns(),e,t,n,{onCellValueChanged:this.options.onCellValueChanged,getRowId:this.options.getRowId})}async loadInitial(){if(this.isPaginatedLoading()){await this.fetchPaginatedData({range:this.getInitialPaginatedRange(),resetCache:!0,showLoading:!0,refreshSlots:!1});return}await this.fetchAllData()}requestVisibleRows(){if(this.isPaginatedLoading()===!1)return;let e=this.getPaginatedLoadRange(!0);if(e.endRow<=e.startRow)return;let t=this.getPaginatedLoadRange(!1),n=this.rowWindowLoader.hasMissingRows(t);this.fetchPaginatedData({range:e,resetCache:!1,showLoading:n,refreshSlots:!0})}async refreshFromTransaction(){if(this.isPaginatedLoading()){await this.fetchPaginatedData({range:this.getPaginatedLoadRange(!0),resetCache:!0,showLoading:!1,refreshSlots:!1});return}await Te({dataSource:this.dataSource,sortModel:this.options.getSortModel(),filterModel:this.options.getFilterModel(),cachedRows:this.cachedRows,setTotalRows:e=>{this.totalRows=e},getColumns:this.options.getColumns})}setDataSource(e){this.dataSource=e,this.rowWindowLoader.reset(),this.totalRows=0}destroy(){this.rowWindowLoader.reset(),this.cachedRows.clear(),this.totalRows=0,this.isDataLoading=!1}async fetchAllData(){this.isDataLoading=!0,this.options.batcher.emit({type:`DATA_LOADING`});try{let e=b({range:{startRow:0,endRow:2**53-1},sortModel:this.options.getSortModel(),filterModel:this.options.getFilterModel(),columns:this.options.getColumns()}),t=await this.dataSource.fetch(e);this.cachedRows.clear(),t.rows.forEach((e,t)=>{this.cachedRows.set(t,e)}),this.totalRows=t.totalRows,this.options.batcher.emit({type:`DATA_LOADED`,totalRows:this.totalRows})}catch(e){this.emitDataError(e)}finally{this.isDataLoading=!1}}async fetchPaginatedData(e){e.showLoading&&(this.isDataLoading=!0,this.options.batcher.emit({type:`DATA_LOADING`}));try{let t=await this.rowWindowLoader.loadRange(e.range,e.resetCache);if(t.applied===!1)return;(e.showLoading||t.totalRowsChanged)&&this.options.batcher.emit({type:`DATA_LOADED`,totalRows:this.totalRows}),e.refreshSlots&&(this.options.syncSlots(),this.options.emitVisibleRange(),t.totalRowsChanged&&this.options.emitContentSize())}catch(e){this.emitDataError(e)}finally{e.showLoading&&(this.isDataLoading=!1)}}emitDataError(e){this.options.batcher.emit({type:`DATA_ERROR`,error:e instanceof Error?e.message:String(e)})}isPaginatedLoading(){let e=this.rowLoading.mode??`auto`;return e===`paginated`?!0:e===`all`?!1:this.dataSource.loadMode===`paginated`}getInitialPaginatedRange(){let e=this.getPaginatedLoadRange(!0);return{startRow:0,endRow:Math.max(this.rowWindowLoader.getPageSize(),e.endRow)}}getPaginatedLoadRange(e){let t=this.options.getRowHeight(),n=this.options.getViewportHeight(),r=this.options.getScrollTop(),i=e?this.options.getOverscan():0,a=Math.max(0,Math.floor(r/t)-i),o=Math.ceil((r+n)/t)+i+1,s=this.totalRows>0?Math.min(this.totalRows,o):o;return{startRow:a,endRow:Math.max(a,s)}}};const k=1e7;var A=class{naturalContentHeight=0;virtualContentHeight=0;scrollRatio=1;options;constructor(e){this.options=e}updateContentSize(){let e=this.options.getTotalRows(),t=this.options.getRowHeight(),n=this.options.getHeaderHeight(),r=this.options.getViewportHeight(),i=e*t;if(this.naturalContentHeight=i+n,this.naturalContentHeight>k){this.virtualContentHeight=k;let e=this.virtualContentHeight-n-r,a=Math.ceil((i-r)/t)*t;this.scrollRatio=a>0?e/a:1}else this.virtualContentHeight=this.naturalContentHeight,this.scrollRatio=1;return{naturalHeight:this.naturalContentHeight,virtualHeight:this.virtualContentHeight,scrollRatio:this.scrollRatio}}isScalingActive(){return this.scrollRatio<1}getNaturalHeight(){let e=this.options.getTotalRows(),t=this.options.getRowHeight(),n=this.options.getHeaderHeight();return this.naturalContentHeight||e*t+n}getVirtualHeight(){let e=this.options.getTotalRows(),t=this.options.getRowHeight(),n=this.options.getHeaderHeight();return this.virtualContentHeight||e*t+n}getScrollRatio(){return this.scrollRatio}getVisibleRowRange(){let e=this.options.getViewportHeight(),t=this.options.getScrollTop(),n=this.options.getRowHeight(),r=this.options.getTotalRows(),i=e,a=Math.max(0,Math.floor(t/n)),o=Math.min(r-1,Math.ceil((t+i)/n)-1);return{start:a,end:Math.max(a,o)}}getScrollTopForRow(e){return e*this.options.getRowHeight()*this.scrollRatio}getRowIndexAtDisplayY(e,t){let n=this.options.getRowHeight(),r=e+(this.scrollRatio<1?t/this.scrollRatio:t);return Math.floor(r/n)}getVirtualContentHeight(){return this.virtualContentHeight}},j=class{options;emitter=v();sortModel=[];filterModel={};openFilterColIndex=null;onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}async setSort(e,t,n=!1){if(!this.options.isSortingEnabled()||this.options.getColumns().find(t=>(t.colId??t.field)===e)?.sortable===!1)return;let r=this.sortModel.findIndex(t=>t.colId===e);n?t===null&&r>=0?this.sortModel.splice(r,1):r>=0?this.sortModel[r].direction=t:this.sortModel.push({colId:e,direction:t}):this.sortModel=t===null?[]:[{colId:e,direction:t}],await this.options.onSortFilterChange(),this.options.onDataRefreshed()}getSortModel(){return[...this.sortModel]}async setFilter(e,t){this.options.getColumns().find(t=>(t.colId??t.field)===e)?.filterable!==!1&&(t===null||typeof t==`string`&&t.trim()===``||typeof t==`object`&&t.conditions?.length===0?delete this.filterModel[e]:typeof t==`string`?this.filterModel[e]={conditions:[{type:`text`,operator:`contains`,value:t}],combination:`and`}:this.filterModel[e]=t,await this.options.onSortFilterChange(),this.options.onDataRefreshed())}getFilterModel(){return{...this.filterModel}}hasActiveFilter(e){let t=this.filterModel[e];return t?t.conditions.length>0:!1}isColumnSortable(e){return this.options.isSortingEnabled()?this.options.getColumns()[e]?.sortable!==!1:!1}isColumnFilterable(e){return this.options.getColumns()[e]?.filterable!==!1}getDistinctValuesForColumn(e,t=500,n=1e5){let r=this.options.getColumns().find(t=>(t.colId??t.field)===e);if(!r)return[];let i=this.options.getCachedRows(),a=i.size,o=a>n?Math.ceil(a/n):1,s=r.valueFormatter,c=new Map;for(let e=0;e<a;e+=o){let n=i.get(e);if(n===void 0)continue;let a=g(n,r.field),[o,l]=this.normalizeDistinctValue(a,s);if(!c.has(o)&&(c.set(o,l),c.size>=t))break}let l=Array.from(c.values());return l.sort((e,t)=>{let n=y(e,s),r=y(t,s);return n.localeCompare(r,void 0,{numeric:!0,sensitivity:`base`})}),l}normalizeDistinctValue(e,t){if(Array.isArray(e)){let n=[...e].sort((e,t)=>{let n=String(e),r=String(t);return n===r?0:n<r?-1:1});return[t?t(n):JSON.stringify(n),n]}return[t?t(e):JSON.stringify(e),e]}openFilterPopup(e,t){if(this.openFilterColIndex===e){this.closeFilterPopup();return}let n=this.options.getColumns()[e];if(!n||!this.isColumnFilterable(e))return;let r=n.colId??n.field,i=this.getDistinctValuesForColumn(r);this.openFilterColIndex=e,this.emit({type:`OPEN_FILTER_POPUP`,colIndex:e,column:n,anchorRect:t,distinctValues:i,currentFilter:this.filterModel[r]})}closeFilterPopup(){this.openFilterColIndex=null,this.emit({type:`CLOSE_FILTER_POPUP`})}getSortInfoMap(){let e=new Map;return this.sortModel.forEach((t,n)=>{e.set(t.colId,{direction:t.direction,index:n+1})}),e}destroy(){this.emitter.clearListeners(),this.sortModel=[],this.filterModel={},this.openFilterColIndex=null}},M=class{queue=[];debounceTimer=null;pendingPromise=null;options;constructor(e){this.options=e}add(e){e.length!==0&&(this.queue.push({type:`ADD`,rows:e}),this.scheduleProcessing())}remove(e){e.length!==0&&(this.queue.push({type:`REMOVE`,rowIds:e}),this.scheduleProcessing())}updateCell(e,t,n){this.queue.push({type:`UPDATE_CELL`,rowId:e,field:t,value:n}),this.scheduleProcessing()}updateRow(e,t){Object.keys(t).length!==0&&(this.queue.push({type:`UPDATE_ROW`,rowId:e,data:t}),this.scheduleProcessing())}flush(){return this.queue.length===0?Promise.resolve():(this.debounceTimer!==null&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPromise?new Promise((e,t)=>{let n=this.pendingPromise,r=n.resolve,i=n.reject;n.resolve=()=>{r(),e()},n.reject=e=>{i(e),t(e)}}):new Promise((e,t)=>{this.pendingPromise={resolve:e,reject:t},this.processQueue()}))}hasPending(){return this.queue.length>0}getPendingCount(){return this.queue.length}clear(){this.queue=[],this.debounceTimer!==null&&(clearTimeout(this.debounceTimer),this.debounceTimer=null),this.pendingPromise&&=(this.pendingPromise.resolve(),null)}scheduleProcessing(){if(this.options.debounceMs===0){this.processQueue();return}this.debounceTimer===null&&(this.debounceTimer=setTimeout(()=>{this.debounceTimer=null,this.processQueue()},this.options.debounceMs))}processQueue(){if(this.queue.length===0){this.pendingPromise&&=(this.pendingPromise.resolve(),null);return}let e=this.queue;this.queue=[];let t={added:0,removed:0,updated:0};try{for(let n of e)switch(n.type){case`ADD`:this.options.store.addRows(n.rows),t.added+=n.rows.length;break;case`REMOVE`:t.removed+=this.options.store.removeRows(n.rowIds);break;case`UPDATE_CELL`:this.options.store.updateCell(n.rowId,n.field,n.value),t.updated++;break;case`UPDATE_ROW`:this.options.store.updateRow(n.rowId,n.data),t.updated++;break}this.options.onProcessed&&this.options.onProcessed(t),this.pendingPromise&&=(this.pendingPromise.resolve(),null)}catch(e){this.pendingPromise&&=(this.pendingPromise.reject(e instanceof Error?e:Error(String(e))),null)}}},Ee=class{listeners=[];buffer=null;subscribe(e){return this.listeners.push(e),()=>{this.listeners=this.listeners.filter(t=>t!==e)}}start(){this.buffer=[]}flush(){let e=this.buffer;if(this.buffer=null,e!==null&&e.length>0)for(let t of this.listeners)t(e)}emit(e){if(this.buffer!==null){this.buffer.push(e);return}this.notify([e])}emitBatch(e){if(e.length!==0){if(this.buffer!==null){this.buffer.push(...e);return}this.notify(e)}}clearListeners(){this.listeners=[]}notify(e){for(let t of this.listeners)t(e)}},De=class{scrollTop=0;scrollLeft=0;viewportWidth=800;viewportHeight=600;getScrollRatio;constructor(e){this.getScrollRatio=e}getScrollTop(){return this.scrollTop}getScrollLeft(){return this.scrollLeft}getViewportWidth(){return this.viewportWidth}getViewportHeight(){return this.viewportHeight}resetScrollTop(){this.scrollTop=0}update(e,t,n,r){let i=this.getScrollRatio(),a=i<1?e/i:e,o=this.viewportWidth!==n||this.viewportHeight!==r,s=this.scrollTop!==a||this.scrollLeft!==t||o;return s&&(this.scrollTop=a,this.scrollLeft=t,this.viewportWidth=n,this.viewportHeight=r),{changed:s,viewportSizeChanged:o}}};const N=e=>e.replaceAll(`\r
2
+ `,`
3
+ `).replaceAll(`\r`,`
4
+ `),Oe=e=>{let t=N(e).split(`
5
+ `);return t.length>1&&t.at(-1)===``&&t.pop(),t.map(e=>e.split(` `).map(e=>({value:e,text:e})))},ke=(e,t)=>{if(e.value===null)return{ok:!0,value:null};let n=e.text,r=n.trim();if(r.length===0)return Ae(t);switch(t.cellDataType){case`text`:return{ok:!0,value:n};case`number`:return je(e.value,r);case`boolean`:return Me(e.value,r);case`date`:case`dateTime`:return Ne(e.value,r);case`dateString`:case`dateTimeString`:return Pe(r,n);case`object`:return Fe(e.value,r)}},Ae=e=>e.cellDataType===`text`?{ok:!0,value:``}:{ok:!0,value:null},je=(e,t)=>{if(typeof e==`number`&&Number.isFinite(e))return{ok:!0,value:e};let n=Number(t);return Number.isFinite(n)?{ok:!0,value:n}:{ok:!1}},Me=(e,t)=>{if(typeof e==`boolean`)return{ok:!0,value:e};let n=t.toLowerCase();return n===`true`?{ok:!0,value:!0}:n===`false`?{ok:!0,value:!1}:{ok:!1}},Ne=(e,t)=>{if(e instanceof Date&&P(e))return{ok:!0,value:e};let n=new Date(t);return P(n)?{ok:!0,value:n}:{ok:!1}},Pe=(e,t)=>P(new Date(e))?{ok:!0,value:t}:{ok:!1},Fe=(e,t)=>{if(typeof e==`object`&&e&&!(e instanceof Date))return{ok:!0,value:e};try{let e=JSON.parse(t);if(typeof e==`object`&&e)return{ok:!0,value:e}}catch{return{ok:!1}}return{ok:!1}},P=e=>Number.isFinite(e.getTime());var F=class{state={activeCell:null,range:null,anchor:null,selectionMode:!1};options;emitter=v();clipboardSnapshot=null;onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getState(){return{...this.state}}getActiveCell(){return this.state.activeCell}getSelectionRange(){return this.state.range}isSelected(e,t){let{range:n}=this.state;if(!n)return!1;let{minRow:r,maxRow:i,minCol:a,maxCol:s}=o(n);return e>=r&&e<=i&&t>=a&&t<=s}isActiveCell(e,t){let{activeCell:n}=this.state;return n?.row===e&&n?.col===t}startSelection(e,t={}){let{shift:n=!1,ctrl:r=!1}=t,{row:i,col:a}=this.clampPosition(e);n&&this.state.anchor?(this.state.range={startRow:this.state.anchor.row,startCol:this.state.anchor.col,endRow:i,endCol:a},this.state.activeCell={row:i,col:a}):(this.state.activeCell={row:i,col:a},this.state.anchor={row:i,col:a},this.state.range=null),this.state.selectionMode=r,this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range})}moveFocus(e,t=!1){if(!this.state.activeCell){this.startSelection({row:0,col:0});return}let{row:n,col:r}=this.state.activeCell,i=n,a=r;switch(e){case`up`:i=Math.max(0,n-1);break;case`down`:i=Math.min(this.options.getRowCount()-1,n+1);break;case`left`:a=Math.max(0,r-1);break;case`right`:a=Math.min(this.options.getColumnCount()-1,r+1);break}t?(this.state.anchor??={row:n,col:r},this.state.range={startRow:this.state.anchor.row,startCol:this.state.anchor.col,endRow:i,endCol:a},this.state.activeCell={row:i,col:a},this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range})):(this.state.activeCell={row:i,col:a},this.state.anchor={row:i,col:a},this.state.range=null,this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:null}))}selectAll(){let e=this.options.getRowCount(),t=this.options.getColumnCount();e===0||t===0||(this.state.range={startRow:0,startCol:0,endRow:e-1,endCol:t-1},this.state.activeCell||(this.state.activeCell={row:0,col:0},this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell})),this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range}))}clearSelection(){this.state.activeCell=null,this.state.range=null,this.state.anchor=null,this.state.selectionMode=!1,this.emit({type:`SET_ACTIVE_CELL`,position:null}),this.emit({type:`SET_SELECTION_RANGE`,range:null})}setActiveCell(e,t){let n=this.clampPosition({row:e,col:t});this.state.activeCell=n,this.state.anchor=n,this.state.range=null,this.emit({type:`SET_ACTIVE_CELL`,position:this.state.activeCell}),this.emit({type:`SET_SELECTION_RANGE`,range:null})}setSelectionRange(e){this.state.range=e,this.emit({type:`SET_SELECTION_RANGE`,range:this.state.range})}getSelectedData(){let e=this.getEffectiveRange();if(e===null)return[];let{minRow:t,maxRow:n,minCol:r,maxCol:i}=o(e),a=[];for(let e=t;e<=n;e++){let t=[];for(let n=r;n<=i;n++)t.push(this.options.getCellValue(e,n));a.push(t)}return a}async copySelectionToClipboard(){let e=this.getEffectiveRange();if(e===null)return;let t=this.createClipboardSnapshot(e);t.cells.length!==0&&(this.clipboardSnapshot=t,!(typeof navigator>`u`||typeof document>`u`)&&await navigator.clipboard.writeText(t.text))}pasteClipboardText(e){let t=this.getEffectiveRange();if(t===null)return{handled:!1,changedCells:[]};let n=this.getPasteSourceCells(e);return n.length===0?{handled:!1,changedCells:[]}:{handled:!0,changedCells:this.applyPasteSource(n,t,this.state.range!==null)}}destroy(){this.emitter.clearListeners(),this.state={activeCell:null,range:null,anchor:null,selectionMode:!1},this.clipboardSnapshot=null}clampPosition(e){let t=this.options.getRowCount(),n=this.options.getColumnCount();return{row:Math.max(0,Math.min(e.row,t-1)),col:Math.max(0,Math.min(e.col,n-1))}}getEffectiveRange(){let{range:e,activeCell:t}=this.state;return e||(t?{startRow:t.row,startCol:t.col,endRow:t.row,endCol:t.col}:null)}createClipboardSnapshot(e){let{minRow:t,maxRow:n,minCol:r,maxCol:i}=o(e),a=[];for(let e=t;e<=n;e++){let t=[];for(let n=r;n<=i;n++){let r=this.options.getCellValue(e,n),i=y(r,this.options.getColumn(n)?.valueFormatter);t.push({value:r,text:i})}a.push(t)}return{cells:a,text:a.map(e=>e.map(e=>e.text).join(` `)).join(`
6
+ `)}}getPasteSourceCells(e){let t=this.clipboardSnapshot;return t&&N(t.text)===N(e)?t.cells:Oe(e)}applyPasteSource(e,t,n){let r=[],{minRow:i,maxRow:a,minCol:s,maxCol:c}=o(t),l=this.isSingleSourceCell(e),u=l?a:i+e.length-1,d=l?c:s+this.getMaxSourceColumnCount(e)-1,f=n?Math.min(u,a):u,p=n?Math.min(d,c):d,m=this.options.getRowCount(),h=this.options.getColumnCount(),g=Math.min(f,m-1),_=Math.min(p,h-1);for(let t=i;t<=g;t++)for(let n=s;n<=_;n++){let a=this.getSourceCellForTarget(e,t-i,n-s,l);a&&this.applyPasteCell(t,n,a,r)}return r}applyPasteCell(e,t,n,r){let i=this.options.getColumn(t);if(i===void 0||i.hidden===!0||i.editable!==!0)return;let a=ke(n,i);a.ok!==!1&&(this.options.setCellValue(e,t,a.value),r.push({row:e,col:t,value:a.value}))}getSourceCellForTarget(e,t,n,r){return r?e[0]?.[0]??null:e[t]?.[n]??null}isSingleSourceCell(e){return e.length===1&&e[0]?.length===1}getMaxSourceColumnCount(e){return e.reduce((e,t)=>Math.max(e,t.length),0)}},I=class{state=null;options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getState(){return this.state?{...this.state}:null}isActive(){return this.state!==null}startFillDrag(e){this.state={sourceRange:e,targetRow:e.endRow,targetCol:e.endCol},this.emit({type:`START_FILL`,sourceRange:e})}updateFillDrag(e,t){if(!this.state)return;let n=this.options.getRowCount(),r=this.options.getColumnCount();e=Math.max(0,Math.min(e,n-1)),t=Math.max(0,Math.min(t,r-1)),this.state.targetRow=e,this.state.targetCol=t,this.emit({type:`UPDATE_FILL`,targetRow:e,targetCol:t})}commitFillDrag(){if(!this.state)return;let{sourceRange:e,targetRow:t}=this.state,n=this.calculateFilledCells(e,t);for(let{row:e,col:t,value:r}of n)this.options.setCellValue(e,t,r);this.emit({type:`COMMIT_FILL`,filledCells:n}),this.state=null}cancelFillDrag(){this.state&&(this.state=null,this.emit({type:`CANCEL_FILL`}))}destroy(){this.emitter.clearListeners(),this.state=null}calculateFilledCells(e,t){let n=[],{minRow:r,maxRow:i,minCol:a,maxCol:s}=o(e),c=t>i,l=t<r;if(c||l)for(let e=a;e<=s;e++){let a=this.getSourceColumnValues(r,i,e),o=this.detectPattern(a);if(c)for(let r=i+1;r<=t;r++){let t=r-i-1,s=this.applyPattern(o,a,t);n.push({row:r,col:e,value:s})}else if(l)for(let i=r-1;i>=t;i--){let t=r-i-1,s=this.applyPattern(o,a,t,!0);n.push({row:i,col:e,value:s})}}return n}getSourceColumnValues(e,t,n){let r=[];for(let i=e;i<=t;i++)r.push(this.options.getCellValue(i,n));return r}detectPattern(e){if(e.length===0)return{type:`constant`,value:null};if(e.length===1)return{type:`constant`,value:e[0]??null};let t=e.map(e=>typeof e==`number`?e:Number(e));if(t.every(e=>!Number.isNaN(e))){let e=[];for(let n=1;n<t.length;n++)e.push(t[n]-t[n-1]);if(e.every(t=>t===e[0])&&e[0]!==void 0)return{type:`arithmetic`,start:t[0],step:e[0]}}return{type:`repeat`,values:e}}applyPattern(e,t,n,r=!1){switch(e.type){case`constant`:return e.value;case`arithmetic`:{let i=r?-(n+1):n+1;return(r?e.start:e.start+e.step*(t.length-1))+e.step*i}case`repeat`:{let t=e.values.length;if(t===0)return null;if(r){let r=(t-1-n%t+t)%t;return e.values[r]??null}return e.values[n%t]??null}}}},L=class{state={slots:new Map,rowToSlot:new Map,nextSlotId:0};options;emitter=ee();isDestroyed=!1;onInstruction=this.emitter.onInstruction;onBatchInstruction=this.emitter.onBatchInstruction;emit=this.emitter.emit;emitBatch=this.emitter.emitBatch;constructor(e){this.options=e}getSlotForRow(e){return this.state.rowToSlot.get(e)}getSlots(){return this.state.slots}syncSlots(){let e=this.options.getScrollTop(),t=this.options.getRowHeight(),n=this.options.getViewportHeight(),r=this.options.getTotalRows(),i=this.options.getOverscan(),a=n,o=Math.max(0,Math.floor(e/t)-i),s=Math.min(r-1,Math.ceil((e+a)/t)+i);if(r===0||s<o){this.destroyAllSlots();return}let c=new Set;for(let e=o;e<=s;e++)c.add(e);let l=[],u=this.partitionSlots(c),d=0;for(let e of c){let t=this.options.getRowData(e);if(t===void 0)continue;let n=d<u.length?u[d++]:void 0;this.assignSlotToRow(e,t,n,l)}for(let e=d;e<u.length;e++){let t=u[e];this.state.slots.delete(t),l.push({type:`DESTROY_SLOT`,slotId:t})}this.updateSlotPositions(l),this.emitBatch(l)}partitionSlots(e){let t=[];for(let[n,r]of this.state.slots)e.has(r.rowIndex)?e.delete(r.rowIndex):(t.push(n),this.state.rowToSlot.delete(r.rowIndex));return t}assignSlotToRow(e,t,n,r){let i;if(n===void 0)i=`slot-${this.state.nextSlotId++}`,this.state.slots.set(i,{slotId:i,rowIndex:e,rowData:t,translateY:this.getRowTranslateY(e)}),r.push({type:`CREATE_SLOT`,slotId:i});else{i=n;let r=this.state.slots.get(i);r.rowIndex=e,r.rowData=t,r.translateY=this.getRowTranslateY(e)}this.state.rowToSlot.set(e,i),r.push({type:`ASSIGN_SLOT`,slotId:i,rowIndex:e,rowData:t},{type:`MOVE_SLOT`,slotId:i,translateY:this.getRowTranslateY(e)})}updateSlotPositions(e){for(let[t,n]of this.state.slots){let r=this.getRowTranslateY(n.rowIndex);n.translateY!==r&&(n.translateY=r,e.push({type:`MOVE_SLOT`,slotId:t,translateY:r}))}}destroyAllSlots(){let e=[];for(let t of this.state.slots.keys())e.push({type:`DESTROY_SLOT`,slotId:t});this.state.slots.clear(),this.state.rowToSlot.clear(),this.emitBatch(e)}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.state.slots.clear(),this.state.rowToSlot.clear(),this.emitter.clearListeners())}refreshAllSlots(){let e=[],t=this.options.getTotalRows();for(let[n,r]of this.state.slots)if(r.rowIndex>=0&&r.rowIndex<t){let t=this.options.getRowData(r.rowIndex);if(t===void 0)continue;let i=this.getRowTranslateY(r.rowIndex);r.rowData=t,r.translateY=i,e.push({type:`ASSIGN_SLOT`,slotId:n,rowIndex:r.rowIndex,rowData:t},{type:`MOVE_SLOT`,slotId:n,translateY:i})}this.emitBatch(e),this.syncSlots()}updateSlot(e){let t=this.state.rowToSlot.get(e);if(t){let n=this.options.getRowData(e);n&&this.emit({type:`ASSIGN_SLOT`,slotId:t,rowIndex:e,rowData:n})}}getRowTranslateY(e){let t=this.options.getRowHeight(),n=this.options.getScrollRatio(),r=this.options.getScrollTop(),i=e*t;return n>=1?i:i-Math.floor(r/t)*t}getRowTranslateYForIndex(e){return this.getRowTranslateY(e)}getRowsWrapperOffset(){let e=this.options.getScrollRatio(),t=this.options.getScrollTop(),n=this.options.getRowHeight();return e>=1?0:Math.floor(t/n)*n*e}},R=class{editState=null;options;emitter=v();onInstruction=this.emitter.onInstruction;emit=this.emitter.emit;constructor(e){this.options=e}getState(){return this.editState?{...this.editState}:null}isEditing(){return this.editState!==null}isEditingCell(e,t){return this.editState!==null&&this.editState.row===e&&this.editState.col===t}startEdit(e,t){if(!this.options.getColumn(t)?.editable)return!1;let n=this.options.getCellValue(e,t);return this.editState={row:e,col:t,initialValue:n,currentValue:n},this.emit({type:`START_EDIT`,row:e,col:t,initialValue:n}),!0}updateValue(e){this.editState&&(this.editState.currentValue=e)}commit(){if(!this.editState)return;let{row:e,col:t,currentValue:n}=this.editState;this.options.setCellValue(e,t,n),this.emit({type:`COMMIT_EDIT`,row:e,col:t,value:n}),this.editState=null,this.emit({type:`STOP_EDIT`}),this.options.onCommit?.(e,t,n)}cancel(){this.editState=null,this.emit({type:`STOP_EDIT`})}destroy(){this.emitter.clearListeners(),this.editState=null}};const Ie=e=>{let{batcher:t}=e,n,r=new A({getRowHeight:e.getRowHeight,getHeaderHeight:e.getHeaderHeight,getTotalRows:e.getTotalRows,getScrollTop:()=>n.getScrollTop(),getViewportHeight:()=>n.getViewportHeight()});n=new De(()=>r.getScrollRatio());let i=null,a=new F({getRowCount:e.getTotalRows,getColumnCount:()=>e.getColumns().length,getCellValue:e.getCellValue,getRowData:t=>e.getCachedRows().get(t),getColumn:t=>e.getColumns()[t],setCellValue:e.setCellValue});a.onInstruction(e=>{t.emit(e),i?.onSelectionChange()}),e.highlighting&&(i=new C({getActiveCell:()=>a.getActiveCell(),getSelectionRange:()=>a.getSelectionRange(),getColumn:t=>e.getColumns()[t]},e.highlighting),i.onInstruction(e=>t.emit(e)));let o=new I({getRowCount:e.getTotalRows,getColumnCount:()=>e.getColumns().length,getCellValue:e.getCellValue,getColumn:t=>e.getColumns()[t],setCellValue:e.setCellValue});o.onInstruction(e=>t.emit(e));let s=new L({getRowHeight:e.getRowHeight,getHeaderHeight:e.getHeaderHeight,getOverscan:e.getOverscan,getScrollTop:()=>n.getScrollTop(),getViewportHeight:()=>n.getViewportHeight(),getTotalRows:e.getTotalRows,getScrollRatio:()=>r.getScrollRatio(),getVirtualContentHeight:()=>r.getVirtualContentHeight(),getRowData:t=>e.getCachedRows().get(t)});s.onBatchInstruction(e=>t.emitBatch(e));let c=new R({getColumn:t=>e.getColumns()[t],getCellValue:e.getCellValue,setCellValue:e.setCellValue,onCommit:e=>s.updateSlot(e)});c.onInstruction(e=>t.emit(e));let l=new j({getColumns:e.getColumns,isSortingEnabled:e.getSortingEnabled,getCachedRows:e.getCachedRows,onSortFilterChange:async()=>{await e.fetchData(),i?.clearAllCaches(),n.resetScrollTop(),t.start();try{t.emit({type:`SCROLL_TO`,scrollTop:0}),e.emitContentSize(),e.emitHeaders(),s.refreshAllSlots()}finally{t.flush()}},onDataRefreshed:()=>{}});l.onInstruction(e=>t.emit(e));let u=new w({getCachedRows:e.getCachedRows,setCachedRows:e.setCachedRows,getTotalRows:e.getTotalRows,setTotalRows:e.setTotalRows,updateSlot:e=>s.updateSlot(e),refreshAllSlots:()=>s.refreshAllSlots(),emitContentSize:e.emitContentSize,clearSelectionIfInvalid:e.clearSelectionIfInvalid});return u.onInstruction(e=>t.emit(e)),{selection:a,highlight:i,fill:o,scrollVirtualization:r,viewport:n,slotPool:s,editManager:c,sortFilter:l,rowMutation:u}},Le=e=>{let t=e.columnPositions.at(-1)??0;e.scrollVirtualization.updateContentSize(),e.batcher.emit({type:`SET_CONTENT_SIZE`,width:t,height:e.scrollVirtualization.getVirtualHeight(),viewportWidth:e.viewport.getViewportWidth(),viewportHeight:e.viewport.getViewportHeight(),rowsWrapperOffset:e.slotPool.getRowsWrapperOffset()})},Re=e=>{let t=e.sortFilter.getSortInfoMap();for(let n=0;n<e.columns.length;n++){let r=e.columns[n],i=r.colId??r.field,a=t.get(i);e.batcher.emit({type:`UPDATE_HEADER`,colIndex:n,column:r,sortDirection:a?.direction,sortIndex:a?.index,hasFilter:e.sortFilter.hasActiveFilter(i)})}},ze=e=>{let t=e.scrollVirtualization.getVisibleRowRange();e.batcher.emit({type:`UPDATE_VISIBLE_RANGE`,start:t.start,end:t.end,rowsWrapperOffset:e.slotPool.getRowsWrapperOffset()})};var Be=class{columns;rowHeight;headerHeight;overscan;sortingEnabled;getRowId;onCellValueChanged;rowDragEntireRow;onRowDragEnd;onColumnResized;onColumnMoved;viewport;rowData;selection;fill;input;highlight;sortFilter;rowMutation;slotPool;editManager;columnPositions=[];batcher=new Ee;scrollVirtualization;isDestroyed=!1;constructor(e){if(this.columns=e.columns,this.rowHeight=e.rowHeight,this.headerHeight=e.headerHeight??e.rowHeight,this.overscan=e.overscan??3,this.sortingEnabled=e.sortingEnabled??!0,this.getRowId=e.getRowId,this.onCellValueChanged=e.onCellValueChanged,this.rowDragEntireRow=e.rowDragEntireRow??!1,this.onRowDragEnd=e.onRowDragEnd,this.onColumnResized=e.onColumnResized,this.onColumnMoved=e.onColumnMoved,this.onCellValueChanged&&!this.getRowId)throw Error(`getRowId is required when onCellValueChanged is provided`);this.computeColumnPositions();let t,n,r;this.rowData=new O({dataSource:e.dataSource,rowLoading:e.rowLoading,batcher:this.batcher,getColumns:()=>this.columns,getSortModel:()=>r.getSortModel(),getFilterModel:()=>r.getFilterModel(),getRowHeight:()=>this.rowHeight,getOverscan:()=>this.overscan,getScrollTop:()=>t.getScrollTop(),getViewportHeight:()=>t.getViewportHeight(),onCellValueChanged:this.onCellValueChanged,getRowId:this.getRowId,syncSlots:()=>n.syncSlots(),emitVisibleRange:()=>this.emitVisibleRange(),emitContentSize:()=>this.emitContentSize()});let i=Ie({batcher:this.batcher,highlighting:e.highlighting,getColumns:()=>this.columns,getCachedRows:()=>this.rowData.getCachedRows(),setCachedRows:e=>this.rowData.setCachedRows(e),getTotalRows:()=>this.rowData.getTotalRows(),setTotalRows:e=>this.rowData.setTotalRows(e),getRowHeight:()=>this.rowHeight,getHeaderHeight:()=>this.headerHeight,getOverscan:()=>this.overscan,getSortingEnabled:()=>this.sortingEnabled,getCellValue:(e,t)=>this.getCellValue(e,t),setCellValue:(e,t,n)=>this.setCellValue(e,t,n),emitContentSize:()=>this.emitContentSize(),emitHeaders:()=>this.emitHeaders(),fetchData:()=>this.rowData.loadInitial(),clearSelectionIfInvalid:e=>this.clearSelectionIfInvalid(e)});this.selection=i.selection,this.highlight=i.highlight,this.fill=i.fill,this.scrollVirtualization=i.scrollVirtualization,this.viewport=i.viewport,this.slotPool=i.slotPool,this.editManager=i.editManager,this.sortFilter=i.sortFilter,this.rowMutation=i.rowMutation,t=this.viewport,n=this.slotPool,r=this.sortFilter,this.input=new S(this,{getHeaderHeight:()=>this.headerHeight,getRowHeight:()=>this.rowHeight,getColumnPositions:()=>this.columnPositions,getColumnCount:()=>this.columns.length})}onBatchInstruction(e){return this.batcher.subscribe(e)}async initialize(){await this.rowData.loadInitial(),this.slotPool.syncSlots(),this.emitContentSize(),this.emitHeaders()}setViewport(e,t,n,r){let{changed:i,viewportSizeChanged:a}=this.viewport.update(e,t,n,r);i&&(this.rowData.requestVisibleRows(),this.slotPool.syncSlots(),this.emitVisibleRange(),a&&this.emitContentSize())}async setSort(e,t,n=!1){if(!this.rowData.isLoading())return this.sortFilter.setSort(e,t,n)}async setFilter(e,t){if(!this.rowData.isLoading())return this.sortFilter.setFilter(e,t)}hasActiveFilter(e){return this.sortFilter.hasActiveFilter(e)}getDistinctValuesForColumn(e,t=500){return this.sortFilter.getDistinctValuesForColumn(e,t)}openFilterPopup(e,t){this.rowData.isLoading()||this.sortFilter.openFilterPopup(e,t)}closeFilterPopup(){this.sortFilter.closeFilterPopup()}getSortModel(){return this.sortFilter.getSortModel()}getFilterModel(){return this.sortFilter.getFilterModel()}startEdit(e,t){this.editManager.startEdit(e,t)}updateEditValue(e){this.editManager.updateValue(e)}commitEdit(){this.editManager.commit()}cancelEdit(){this.editManager.cancel()}pasteClipboardText(e){if(this.editManager.getState())return!1;let t=this.selection.pasteClipboardText(e);return t.changedCells.length>0&&this.refreshSlotData(),t.handled}getEditState(){return this.editManager.getState()}getCellValue(e,t){return this.rowData.getCellValue(e,t)}setCellValue(e,t,n){this.rowData.setCellValue(e,t,n)}clearSelectionIfInvalid(e){let t=this.selection.getActiveCell();t&&t.row>=e&&this.selection.clearSelection()}computeColumnPositions(){this.columnPositions=se(this.columns)}emitContentSize(){Le({batcher:this.batcher,scrollVirtualization:this.scrollVirtualization,slotPool:this.slotPool,viewport:this.viewport,columnPositions:this.columnPositions})}emitHeaders(){Re({batcher:this.batcher,sortFilter:this.sortFilter,columns:this.columns})}emitVisibleRange(){ze({batcher:this.batcher,scrollVirtualization:this.scrollVirtualization,slotPool:this.slotPool})}setColumnWidth(e,t){Se(e,t,{batcher:this.batcher,slotPool:this.slotPool,refreshSlots:`sync`,computeColumnPositions:()=>this.computeColumnPositions(),emitContentSize:()=>this.emitContentSize(),emitHeaders:()=>this.emitHeaders(),columns:this.columns,onComplete:()=>this.onColumnResized?.(e,t)})}moveColumn(e,t){let n=Ce(e,t,{batcher:this.batcher,slotPool:this.slotPool,refreshSlots:`all`,computeColumnPositions:()=>this.computeColumnPositions(),emitContentSize:()=>this.emitContentSize(),emitHeaders:()=>this.emitHeaders(),columns:this.columns,onComplete:()=>{}});n!==null&&this.onColumnMoved?.(e,n)}commitRowDrag(e,t){we(e,t,{dataSource:this.rowData.getDataSource(),cachedRows:this.rowData.getCachedRows(),slotPool:this.slotPool,highlight:this.highlight}),this.onRowDragEnd?.(e,t)}isRowDragEntireRow(){return this.rowDragEntireRow}getColumns(){return this.columns}getColumnPositions(){return[...this.columnPositions]}getRowCount(){return this.rowData.getTotalRows()}getRowHeight(){return this.rowHeight}getHeaderHeight(){return this.headerHeight}getTotalWidth(){return this.columnPositions.at(-1)??0}getTotalHeight(){return this.scrollVirtualization.getVirtualHeight()}isScalingActive(){return this.scrollVirtualization.isScalingActive()}getNaturalHeight(){return this.scrollVirtualization.getNaturalHeight()}getScrollRatio(){return this.scrollVirtualization.getScrollRatio()}getVisibleRowRange(){return this.scrollVirtualization.getVisibleRowRange()}getScrollTopForRow(e){return this.scrollVirtualization.getScrollTopForRow(e)}getRowIndexAtDisplayY(e,t){return this.scrollVirtualization.getRowIndexAtDisplayY(e,t)}getRowTranslateY(e){return this.slotPool.getRowTranslateYForIndex(e)}getRowData(e){return this.rowData.getRowData(e)}async refresh(){await this.rowData.loadInitial(),this.highlight?.clearAllCaches(),this.slotPool.refreshAllSlots(),this.emitContentSize(),this.emitVisibleRange()}async refreshFromTransaction(){await this.rowData.refreshFromTransaction(),this.highlight?.clearAllCaches(),this.slotPool.refreshAllSlots(),this.emitContentSize(),this.emitVisibleRange()}refreshSlotData(){this.slotPool.refreshAllSlots()}addRows(e,t){this.rowMutation.addRows(e,t)}updateRows(e){this.rowMutation.updateRows(e)}deleteRows(e){this.rowMutation.deleteRows(e)}getRow(e){return this.rowMutation.getRow(e)}setRow(e,t){this.rowMutation.setRow(e,t)}async setDataSource(e){this.editManager.getState()&&this.editManager.cancel(),this.rowData.setDataSource(e),await this.refresh(),this.clearSelectionIfInvalid(this.rowData.getTotalRows())}setColumns(e){this.columns=e,this.computeColumnPositions(),this.emitContentSize(),this.emitHeaders(),this.slotPool.syncSlots()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.slotPool.destroy(),this.highlight?.destroy(),this.sortFilter.destroy(),this.rowMutation.destroy(),this.rowData.destroy(),this.batcher.clearListeners())}},z=class{workerCode;maxWorkers;workers=[];workerUrl=null;nextRequestId=0;isTerminated=!1;constructor(e,t={}){this.workerCode=e;let n=typeof navigator>`u`?4:navigator.hardwareConcurrency;this.maxWorkers=Math.max(1,t.maxWorkers??n??4),t.preWarm&&this.preWarmWorkers()}getPoolSize(){return this.workers.length}getMaxWorkers(){return this.maxWorkers}isAvailable(){return!this.isTerminated&&typeof Worker<`u`}async execute(e,t){if(this.isTerminated)throw Error(`WorkerPool has been terminated`);if(typeof Worker>`u`)throw TypeError(`Web Workers are not available in this environment`);let n=this.getAvailableWorker(),r=this.nextRequestId++,i={...e,id:r};return new Promise((e,a)=>{n.pendingRequests.set(r,{resolve:e,reject:a}),n.busy=!0,t&&t.length>0?n.worker.postMessage(i,t):n.worker.postMessage(i)})}async executeParallel(e){if(this.isTerminated)throw Error(`WorkerPool has been terminated`);if(e.length===0)return[];let t=Math.min(e.length,this.maxWorkers);this.ensureWorkers(t);let n=e.map((e,t)=>{let n=t%this.workers.length,r=this.workers[n],i=this.nextRequestId++,a={...e.request,id:i};return new Promise((t,n)=>{r.pendingRequests.set(i,{resolve:t,reject:n}),r.busy=!0,e.transferables&&e.transferables.length>0?r.worker.postMessage(a,e.transferables):r.worker.postMessage(a)})});return Promise.all(n)}terminate(){for(let e of this.workers){e.worker.terminate();for(let[,t]of e.pendingRequests)t.reject(Error(`Worker pool terminated`));e.pendingRequests.clear()}this.workers=[],this.workerUrl&&=(URL.revokeObjectURL(this.workerUrl),null),this.isTerminated=!0}preWarmWorkers(){this.ensureWorkers(this.maxWorkers)}ensureWorkers(e){let t=Math.min(e,this.maxWorkers)-this.workers.length;for(let e=0;e<t;e++)this.createWorker()}getAvailableWorker(){return this.workers.find(e=>!e.busy)||(this.workers.length<this.maxWorkers?this.createWorker():this.workers.reduce((e,t)=>t.pendingRequests.size<e.pendingRequests.size?t:e,this.workers[0]))}createWorker(){if(!this.workerUrl){let e=new Blob([this.workerCode],{type:`application/javascript`});this.workerUrl=URL.createObjectURL(e)}let e=new Worker(this.workerUrl),t={worker:e,busy:!1,pendingRequests:new Map};return e.onmessage=e=>{let{id:n}=e.data,r=t.pendingRequests.get(n);r&&(t.pendingRequests.delete(n),t.pendingRequests.size===0&&(t.busy=!1),e.data.type===`error`?r.reject(Error(e.data.error)):r.resolve(e.data))},e.onerror=e=>{for(let[,n]of t.pendingRequests)n.reject(Error(`Worker error: ${e.message}`));t.pendingRequests.clear(),t.busy=!1,this.respawnWorker(t)},this.workers.push(t),t}respawnWorker(e){let t=this.workers.indexOf(e);if(t!==-1){try{e.worker.terminate()}catch{}this.workers.splice(t,1),this.workers.length<this.maxWorkers&&!this.isTerminated&&this.createWorker()}}};function B(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return null;r=r[e]}return r??null}const V=e=>e==null?``:Array.isArray(e)?e.join(`, `):typeof e==`object`&&!(e instanceof Date)?JSON.stringify(e):String(e);function Ve(e,t){if(e==null&&t==null)return 0;if(e==null)return 1;if(t==null)return-1;let n=Number(e),r=Number(t);return!Number.isNaN(n)&&!Number.isNaN(r)?n-r:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():V(e).localeCompare(V(t))}function He(e,t){return[...e].sort((e,n)=>{for(let{colId:r,direction:i}of t){let t=Ve(B(e,r),B(n,r));if(t!==0)return i===`asc`?t:-t}return 0})}const H=globalThis;H.onmessage!==void 0&&(H.onmessage=e=>{let{type:t,id:n,data:r,sortModel:i}=e.data;if(t===`sort`)try{let e=He(r,i);H.postMessage?.({type:`sorted`,id:n,data:e})}catch(e){H.postMessage?.({type:`error`,id:n,error:String(e)})}});var Ue=class{heap=[];compare;constructor(e){this.compare=e}push(e){this.heap.push(e),this.bubbleUp(this.heap.length-1)}pop(){if(this.heap.length===0)return;let e=this.heap[0],t=this.heap.pop();return this.heap.length>0&&t&&(this.heap[0]=t,this.bubbleDown(0)),e}size(){return this.heap.length}bubbleUp(e){for(;e>0;){let t=Math.floor((e-1)/2);if(this.compare(this.heap[e],this.heap[t])>=0)break;this.swap(e,t),e=t}}bubbleDown(e){let t=this.heap.length;for(;;){let n=2*e+1,r=2*e+2,i=e;if(n<t&&this.compare(this.heap[n],this.heap[i])<0&&(i=n),r<t&&this.compare(this.heap[r],this.heap[i])<0&&(i=r),i===e)break;this.swap(e,i),e=i}}swap(e,t){let n=this.heap[e];this.heap[e]=this.heap[t],this.heap[t]=n}};const We=(e,t,n)=>{let r=[];for(let i=0;i<n;i++)r.push(e.columns[i][t]);return r};function U(e,t){if(e.length===0)return new Uint32Array;if(e.length===1){let t=e[0],n=new Uint32Array(t.indices.length);for(let e=0;e<t.indices.length;e++)n[e]=t.indices[e]+t.offset;return n}let n=0;for(let t of e)n+=t.indices.length;let r=new Uint32Array(n),i=t===`asc`?1:-1,a=new Ue((e,t)=>(e.value-t.value)*i);for(let t=0;t<e.length;t++){let n=e[t];if(n.indices.length>0){let e=n.indices[0];a.push({chunkIndex:t,positionInChunk:0,value:n.values[0],globalIndex:e+n.offset})}}let o=0;for(;a.size()>0;){let t=a.pop();r[o++]=t.globalIndex;let n=e[t.chunkIndex],i=t.positionInChunk+1;if(i<n.indices.length){let e=n.indices[i];a.push({chunkIndex:t.chunkIndex,positionInChunk:i,value:n.values[i],globalIndex:e+n.offset})}}return r}function Ge(e){if(e.length===0)return new Uint32Array;if(e.length===1){let t=e[0],n=new Uint32Array(t.indices.length);for(let e=0;e<t.indices.length;e++)n[e]=t.indices[e]+t.offset;return n}let t=e[0].directions,n=t.length,r=0;for(let t of e)r+=t.indices.length;let i=new Uint32Array(r),a=new Ue((e,n)=>{for(let r=0;r<t.length;r++){let i=(e.values[r]-n.values[r])*t[r];if(i!==0)return i}return 0});for(let t=0;t<e.length;t++){let r=e[t];if(r.indices.length>0){let e=r.indices[0];a.push({chunkIndex:t,positionInChunk:0,values:We(r,0,n),globalIndex:e+r.offset})}}let o=0;for(;a.size()>0;){let t=a.pop();i[o++]=t.globalIndex;let r=e[t.chunkIndex],s=t.positionInChunk+1;if(s<r.indices.length){let e=r.indices[s];a.push({chunkIndex:t.chunkIndex,positionInChunk:s,values:We(r,s,n),globalIndex:e+r.offset})}}return i}function Ke(e,t){if(e.length<=1)return new Uint32Array;let n=[],r=0;for(let t=0;t<e.length-1;t++){let i=e[t],a=e[t+1];if(i.indices.length===0||a.indices.length===0){r+=i.indices.length;continue}let o=i.indices.length-1,s=i.values[o],c=a.values[0];if(s===c){let e=o;for(;e>0&&i.values[e-1]===s;)e--;let t=0;for(;t<a.indices.length-1&&a.values[t+1]===c;)t++;let l=r+e,u=r+i.indices.length+t+1;n.push(l,u)}r+=i.indices.length}return new Uint32Array(n)}const qe=(e,t,n)=>{let r=Math.max(n,Math.ceil(e/t)),i=[];for(let t=0;t<e;t+=r)i.push({offset:t,length:Math.min(r,e-t)});return i},Je=e=>{if(e.length<=1)return[];let t=[],n=0;for(let r=0;r<e.length-1;r++){let i=e[r],a=e[r+1];if(i.indices.length===0||a.indices.length===0){n+=i.indices.length;continue}let o=i.values[i.indices.length-1],s=a.values[0];if(o===s){let e=i.indices.length-1;for(;e>0&&i.values[e-1]===o;)e--;let r=0;for(;r<a.indices.length-1&&a.values[r+1]===s;)r++;t.push(n+e,n+i.indices.length+r+1)}n+=i.indices.length}return t},Ye=(e,t,n,r)=>{let i=r===`asc`?1:-1;for(let r=0;r<t.length;r+=2){let a=t[r],o=t[r+1];o<=a||o>e.length||Xe(e,a,o,n,i)}},Xe=(e,t,n,r,i)=>{let a=Array.from(e.slice(t,n));if(!Ze(a,r)){a.sort((e,t)=>i*r[e].localeCompare(r[t]));for(let n=0;n<a.length;n++)e[t+n]=a[n]}},Ze=(e,t)=>{let n=t[e[0]];for(let r=1;r<e.length;r++)if(t[e[r]]!==n)return!1;return!0};var W=class{pool;parallelThreshold;minChunkSize;isTerminated=!1;constructor(e={}){this.pool=new z(`
3
7
  // ---- Shared helpers (inlined for worker isolation) ----------------------
4
8
  function getFieldValue(row, field) {
5
9
  const parts = field.split(".");
@@ -201,7 +205,7 @@ self.onmessage = function(e) {
201
205
  self.postMessage({ type: "error", id, error: String(error) });
202
206
  }
203
207
  };
204
- `,{maxWorkers:e.maxWorkers??(navigator===void 0?4:navigator.hardwareConcurrency)??4}),this.parallelThreshold=e.parallelThreshold??4e5,this.minChunkSize=e.minChunkSize??5e4}isAvailable(){return this.isTerminated?!1:this.pool.isAvailable()}terminate(){this.pool.terminate(),this.isTerminated=!0}async sortIndices(e,t){return this.assertNotTerminated(),e.length<this.parallelThreshold?this.sortIndicesSingle(e,t):this.sortIndicesParallel(e,t)}async sortStringHashes(e,t,n){return this.assertNotTerminated(),(e[0]?.length??0)<this.parallelThreshold?this.sortStringHashesSingle(e,t,n):this.sortStringHashesParallel(e,t,n)}async sortMultiColumn(e,t){return this.assertNotTerminated(),(e[0]?.length??0)<this.parallelThreshold?this.sortMultiColumnSingle(e,t):this.sortMultiColumnParallel(e,t)}assertNotTerminated(){if(this.isTerminated)throw Error(`ParallelSortManager has been terminated`)}async sortIndicesSingle(e,t){let n=new Float64Array(e),r={type:`sortIndices`,id:0,values:n,direction:t};return(await this.pool.execute(r,[n.buffer])).indices}async sortStringHashesSingle(e,t,n){let r={type:`sortStringHashes`,id:0,hashChunks:e,direction:t},i=e.map(e=>e.buffer),a=await this.pool.execute(r,i);return a.collisionRuns.length>0&&R(a.indices,a.collisionRuns,n,t),a.indices}async sortMultiColumnSingle(e,t){let n=e.map(e=>new Float64Array(e)),r=new Int8Array(t.map(e=>e===`asc`?1:-1)),i={type:`sortMultiColumn`,id:0,columns:n,directions:r},a=[...n.map(e=>e.buffer),r.buffer];return(await this.pool.execute(i,a)).indices}boundariesFor(e){return Le(e,this.pool.getMaxWorkers(),this.minChunkSize)}async runChunks(e){let t=await this.pool.executeParallel(e);return t.sort((e,t)=>e.chunkOffset-t.chunkOffset),t}async sortIndicesParallel(e,t){let n=this.boundariesFor(e.length).map(n=>{let r=new Float64Array(e.slice(n.offset,n.offset+n.length));return{request:{type:`sortChunk`,id:0,values:r,direction:t,chunkOffset:n.offset},transferables:[r.buffer]}});return I((await this.runChunks(n)).map(e=>({indices:e.indices,values:e.sortedValues,offset:e.chunkOffset})),t)}async sortStringHashesParallel(e,t,n){let r=this.boundariesFor(e[0].length).map(n=>{let r=e.map(e=>{let t=new Float64Array(n.length);return t.set(new Float64Array(e.buffer,n.offset*8,n.length)),t});return{request:{type:`sortStringChunk`,id:0,hashChunks:r,direction:t,chunkOffset:n.offset},transferables:r.map(e=>e.buffer)}}),i=await this.runChunks(r),a=i.map(e=>({indices:e.indices,values:e.sortedHashes,offset:e.chunkOffset})),o=Ve(i),s=I(a,t),c=Re(a),l=new Uint32Array([...o,...c]);return l.length>0&&R(s,l,n,t),s}async sortMultiColumnParallel(e,t){let n=this.boundariesFor(e[0].length),r=new Int8Array(t.map(e=>e===`asc`?1:-1)),i=n.map(t=>{let n=e.map(e=>{let n=new Float64Array(t.length);for(let r=0;r<t.length;r++)n[r]=e[t.offset+r];return n}),i=new Int8Array(r);return{request:{type:`sortMultiColumnChunk`,id:0,columns:n,directions:i,chunkOffset:t.offset},transferables:[...n.map(e=>e.buffer),i.buffer]}});return L((await this.runChunks(i)).map(e=>({indices:e.indices,columns:e.sortedColumns,directions:r,offset:e.chunkOffset})))}};const Ve=e=>{let t=[];for(let n of e)for(let e=0;e<n.collisionRuns.length;e+=2)t.push(n.collisionRuns[e]+n.chunkOffset,n.collisionRuns[e+1]+n.chunkOffset);return t};function B(e){let t=e.toLowerCase(),n=Math.min(t.length,10),r=0;for(let e=0;e<n;e++){let n=t.codePointAt(e)??200,i;i=n>=97&&n<=122?n-97:n>=48&&n<=57?n-48+26:0,r=r*36+i}for(let e=n;e<10;e++)r*=36;return r}function V(e,t){let n=e==null||Array.isArray(e)&&e.length===0,r=t==null||Array.isArray(t)&&t.length===0;if(n&&r)return 0;if(n)return 1;if(r)return-1;if(Array.isArray(e)||Array.isArray(t)){let n=Array.isArray(e)?e.join(`, `):b(e),r=Array.isArray(t)?t.join(`, `):b(t);return n.localeCompare(r)}let i=Number(e),a=Number(t);return!Number.isNaN(i)&&!Number.isNaN(a)?i-a:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():b(e).localeCompare(b(t))}function H(e){if(e==null)return Number.MAX_VALUE;if(typeof e==`number`)return e;if(e instanceof Date)return e.getTime();if(typeof e==`string`)return B(e);if(Array.isArray(e))return e.length===0?Number.MAX_VALUE:B(e.join(`, `));if(typeof e==`object`)return B(JSON.stringify(e));let t=Number(e);return Number.isNaN(t)?0:t}function He(e,t){let n=[];for(let r of t.sortModel){let i=H(t.getFieldValue(e,r.colId));n.push(i)}return n}function Ue(e,t,n){if(!e||!t)return null;for(let r=0;r<n.length;r++){let i=e[r]-t[r];if(i!==0)return n[r].direction===`asc`?i:-i}return 0}function We(e,t,n,r){for(let{colId:i,direction:a}of n){let n=V(r(e,i),r(t,i));if(n!==0)return a===`asc`?n:-n}return 0}function Ge(e){let t=e.toLowerCase(),n=[];for(let e=0;e<3;e++){let r=e*10,i=0;for(let e=0;e<10;e++){let n=r+e,a=n<t.length?t.codePointAt(n)??200:0,o;o=a>=97&&a<=122?a-97:a>=48&&a<=57?a-48+26:0,i=i*36+o}n.push(i)}return n}function U(e){if(e==null)return Number.MAX_VALUE;if(Array.isArray(e))return e.length===0?Number.MAX_VALUE:B(e.join(`, `));if(typeof e==`number`)return e;if(e instanceof Date)return e.getTime();if(typeof e==`string`)return B(e);if(typeof e==`object`)return B(JSON.stringify(e));let t=Number(e);return Number.isNaN(t)?0:t}function W(e,t,n){return[...e].sort((e,r)=>{for(let{colId:i,direction:a}of t){let t=V(n(e,i),n(r,i));if(t!==0)return a===`asc`?t:-t}return 0})}const Ke=(e,t,n)=>{for(let r of e){let e=n(r,t);if(e!=null)return typeof e==`string`||Array.isArray(e)||typeof e==`object`&&!(e instanceof Date)?`string`:`numeric`}return`numeric`},qe=(e,t,n)=>{let r=[],i=Array.from({length:3},()=>[]);for(let a of e){let e=b(n(a,t));r.push(e);let o=Ge(e);for(let e=0;e<3;e++)i[e].push(o[e])}return{originalStrings:r,hashChunkArrays:i.map(e=>new Float64Array(e))}},Je=(e,t,n)=>e.map(e=>U(n(e,t))),Ye=(e,t,n)=>{let r=[],i=[];for(let{colId:a,direction:o}of t)r.push(e.map(e=>U(n(e,a)))),i.push(o??`asc`);return{columnValues:r,directions:i}},Xe=(e,t)=>{let n=Array(e.length);for(let r=0;r<t.length;r++)n[r]=e[t[r]];return n},Ze=async(e,t,n,r)=>{let{colId:i,direction:a}=t,o=a??`asc`;if(Ke(e,i,r)===`string`){let{originalStrings:t,hashChunkArrays:a}=qe(e,i,r);return n.sortStringHashes(a,o,t)}let s=Je(e,i,r);return n.sortIndices(s,o)},Qe=async(e,t,n,r)=>{let{columnValues:i,directions:a}=Ye(e,t,r);return n.sortMultiColumn(i,a)},G=async(e,t,n,r)=>Xe(e,t.length===1?await Ze(e,t[0],n,r):await Qe(e,t,n,r));function K(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function $e(e){return e==null||e===``||Array.isArray(e)&&e.length===0}const et={contains:(e,t)=>e.includes(t),notContains:(e,t)=>!e.includes(t),equals:(e,t)=>e===t,notEquals:(e,t)=>e!==t,startsWith:(e,t)=>e.startsWith(t),endsWith:(e,t)=>e.endsWith(t),blank:(e,t,n)=>n,notBlank:(e,t,n)=>!n};function tt(e,t,n){let r=$e(e);if(t.selectedValues&&t.selectedValues.size>0){let i=t.includeBlank===!0&&r;if(Array.isArray(e)){let r=[...e].sort((e,t)=>{let n=String(e),r=String(t);return n===r?0:n<r?-1:1}),a=n?n(r):r.join(`, `);return t.selectedValues.has(a)||i}let a=b(e,n);return t.selectedValues.has(a)||i}let i=b(e,n).toLowerCase(),a=String(t.value??``).toLowerCase();return et[t.operator](i,a,r)}const nt={"=":(e,t)=>e===t,"!=":(e,t)=>e!==t,">":(e,t)=>e>t,"<":(e,t)=>e<t,">=":(e,t)=>e>=t,"<=":(e,t)=>e<=t,between:(e,t,n)=>e>=t&&e<=n};function q(e,t){let n=e==null||e===``;if(t.operator===`blank`)return n;if(t.operator===`notBlank`)return!n;if(n)return!1;let r=typeof e==`number`?e:Number(e);if(Number.isNaN(r))return!1;let i=t.value??0,a=t.valueTo??0;return nt[t.operator](r,i,a)}const rt={"=":(e,t)=>K(e,t),"!=":(e,t)=>!K(e,t),">":(e,t)=>e.getTime()>t.getTime(),"<":(e,t)=>e.getTime()<t.getTime(),between:(e,t,n)=>{let r=e.getTime();return r>=t.getTime()&&r<=n.getTime()}};function J(e,t){let n=e==null||e===``;if(t.operator===`blank`)return n;if(t.operator===`notBlank`)return!n;if(n)return!1;let r=e instanceof Date?e:new Date(b(e));if(Number.isNaN(r.getTime()))return!1;let i=t.value instanceof Date?t.value:new Date(String(t.value??``)),a=t.valueTo instanceof Date?t.valueTo:new Date(String(t.valueTo??``));return rt[t.operator](r,i,a)}function Y(e,t,n){switch(t.type){case`text`:return tt(e,t,n);case`number`:return q(e,t);case`date`:return J(e,t);default:return!0}}function X(e,t,n){if(!t.conditions||t.conditions.length===0)return!0;let r=t.conditions[0];if(!r)return!0;let i=Y(e,r,n);for(let r=1;r<t.conditions.length;r++){let a=t.conditions[r-1],o=t.conditions[r],s=a.nextOperator??t.combination,c=Y(e,o,n);s===`and`?i&&=c:i||=c}return i}function it(e,t,n,r){let i=Object.entries(t).filter(([,e])=>e!=null);if(i.length===0)return!0;for(let[t,a]of i){let i=n(e,t),o=r?.(t);if(!X(i,a,o))return!1}return!0}function at(e,t,n,r){let i=Object.entries(t).filter(([,e])=>typeof e==`string`?e.trim()!==``:e.conditions&&e.conditions.length>0);return i.length===0?e:e.filter(e=>{for(let[t,a]of i){let i=n(e,t),o=r?.(t);if(typeof a==`string`){if(!b(i,o).toLowerCase().includes(a.toLowerCase()))return!1;continue}if(!X(i,a,o))return!1}return!0})}function Z(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return null;r=r[e]}return r??null}function ot(e,t={}){let{getFieldValue:n=Z,getValueFormatter:r,useWorker:i=!0,parallelSort:a}=t,o=e,s=!1,c=i?new z(a===!1?{maxWorkers:1}:a):null;return{async fetch(e){let t=o?[...o]:[];if(e.filter&&Object.keys(e.filter).length>0){let i=e.valueFormatters==null?r:t=>e.valueFormatters?.[t];t=at(t,e.filter,n,i)}e.sort&&e.sort.length>0&&(t=c&&c.isAvailable()&&t.length>=2e5?await G(t,e.sort,c,n):W(t,e.sort,n));let i=t.length,{pageIndex:a,pageSize:s}=e.pagination,l=a*s;return{rows:t.slice(l,l+s),totalRows:i}},destroy(){s||(s=!0,o=null,c&&c.terminate())},moveRow(e,t){if(!o||e===t||e<0||e>=o.length||t<0||t>=o.length)return;let[n]=o.splice(e,1),r=t>e?t-1:t;o.splice(r,0,n)}}}function Q(e){return ot(e)}function st(e){return{async fetch(t){return e(t)}}}var ct=class{rows=[];rowById=new Map;sortedIndices=[];sortModel=[];sortModelHash=``;filterModel={};filteredIndices=new Set;distinctValues=new Map;rowSortCache=new Map;options;constructor(e,t=[]){this.options={getRowId:e.getRowId,getFieldValue:e.getFieldValue??g,getValueFormatter:e.getValueFormatter??(()=>void 0)},this.setData(t)}clear(){this.rows=[],this.rowById.clear(),this.sortedIndices=[],this.filterModel={},this.filteredIndices.clear(),this.rowSortCache.clear(),this.distinctValues.clear(),this.sortModel=[],this.sortModelHash=``}setData(e){this.rows=[...e],this.rowById.clear(),this.rowSortCache.clear(),this.distinctValues.clear();for(let e=0;e<this.rows.length;e++){let t=this.rows[e],n=this.options.getRowId(t);this.rowById.set(n,e)}this.rebuildSortedIndices(),this.rebuildFilteredIndices(),this.rebuildDistinctValues()}query(e){this.setSortModel(e.sort??[]),this.setFilterModel(e.filter??{});let t=this.getVisibleIndices(),n=t.length,{pageIndex:r,pageSize:i}=e.pagination,a=r*i,o=Math.min(a+i,n),s=[];for(let e=a;e<o;e++){let n=t[e];n!==void 0&&s.push(this.rows[n])}return{rows:s,totalRows:n}}getRowById(e){let t=this.rowById.get(e);return t===void 0?void 0:this.rows[t]}getRowByIndex(e){return this.rows[e]}getTotalRowCount(){return this.rows.length}getAllRows(){return[...this.rows]}moveRow(e,t){if(e===t||e<0||e>=this.rows.length||t<0||t>=this.rows.length)return;let[n]=this.rows.splice(e,1),r=t>e?t-1:t;this.rows.splice(r,0,n),this.rowById.clear();for(let e=0;e<this.rows.length;e++)this.rowById.set(this.options.getRowId(this.rows[e]),e);this.sortedIndices=Array.from({length:this.rows.length},(e,t)=>t),this.rowSortCache.clear()}getVisibleRowCount(){return Object.keys(this.filterModel).length===0?this.rows.length:this.filteredIndices.size}getDistinctValues(e){let t=this.distinctValues.get(e);return t?Array.from(t.keys()):[]}addRows(e){for(let t of e)this.addRow(t)}addRow(e){let t=this.options.getRowId(e);if(this.rowById.has(t)){console.warn(`Row with ID ${t} already exists. Skipping.`);return}let n=this.rows.length;if(this.rows.push(e),this.rowById.set(t,n),this.updateDistinctValuesForRow(e,`add`),this.sortModel.length>0&&this.computeRowHashes(n,e),this.sortModel.length>0){let e=this.binarySearchInsertPosition(n);this.sortedIndices.splice(e,0,n)}else this.sortedIndices.push(n);this.rowPassesFilter(e)&&this.filteredIndices.add(n)}removeRows(e){let t=[];for(let n of e){let e=this.rowById.get(n);e!==void 0&&t.push(e)}if(t.length===0)return 0;t.sort((e,t)=>t-e);for(let e of t)this.removeRowByIndex(e);return t.length}removeRowByIndex(e){let t=this.rows[e];if(!t)return;let n=this.options.getRowId(t);this.updateDistinctValuesForRow(t,`remove`);let r=this.sortedIndices.indexOf(e);r!==-1&&this.sortedIndices.splice(r,1),this.filteredIndices.delete(e),this.rowSortCache.delete(e),this.rowById.delete(n),this.rows.splice(e,1),this.reindexAfterRemoval(e)}reindexAfterRemoval(e){for(let[t,n]of this.rowById.entries())n>e&&this.rowById.set(t,n-1);for(let t=0;t<this.sortedIndices.length;t++)this.sortedIndices[t]>e&&this.sortedIndices[t]--;let t=new Set;for(let n of this.filteredIndices)n>e?t.add(n-1):t.add(n);this.filteredIndices=t;let n=new Map;for(let[t,r]of this.rowSortCache)t>e?n.set(t-1,r):n.set(t,r);this.rowSortCache=n}updateCell(e,t,n){let r=this.rowById.get(e);if(r===void 0){console.warn(`Row with ID ${e} not found.`);return}let i=this.rows[r],a=this.options.getFieldValue(i,t);if(_(i,t,n),this.updateDistinctValueForField(t,a,n),this.sortModel.some(e=>e.colId===t)&&this.sortModel.length>0){this.computeRowHashes(r,i);let e=this.sortedIndices.indexOf(r);e!==-1&&this.sortedIndices.splice(e,1);let t=this.binarySearchInsertPosition(r);this.sortedIndices.splice(t,0,r)}t in this.filterModel&&(this.rowPassesFilter(i)?this.filteredIndices.add(r):this.filteredIndices.delete(r))}updateRow(e,t){for(let[n,r]of Object.entries(t))this.updateCell(e,n,r)}setSortModel(e){let t=JSON.stringify(e);t!==this.sortModelHash&&(this.sortModelHash=t,this.sortModel=[...e],this.rebuildHashCache(),this.rebuildSortedIndices())}getSortModel(){return[...this.sortModel]}setFilterModel(e){JSON.stringify(e)!==JSON.stringify(this.filterModel)&&(this.filterModel={...e},this.rebuildFilteredIndices())}getFilterModel(){return{...this.filterModel}}rebuildSortedIndices(){this.sortedIndices=Array.from({length:this.rows.length},(e,t)=>t),this.sortModel.length!==0&&this.sortedIndices.sort((e,t)=>this.compareRows(e,t))}rebuildHashCache(){if(this.rowSortCache.clear(),this.sortModel.length!==0)for(let e=0;e<this.rows.length;e++)this.computeRowHashes(e,this.rows[e])}computeRowHashes(e,t){if(this.sortModel.length===0)return;let n=He(t,{sortModel:this.sortModel,sortModelHash:this.sortModelHash,getFieldValue:this.options.getFieldValue}),r=this.rowSortCache.get(e);r||(r={hashes:new Map},this.rowSortCache.set(e,r)),r.hashes.set(this.sortModelHash,n)}compareRows(e,t){let n=this.rowSortCache.get(e),r=this.rowSortCache.get(t),i=n?.hashes.get(this.sortModelHash),a=r?.hashes.get(this.sortModelHash),o=Ue(i,a,this.sortModel);return o===null?We(this.rows[e],this.rows[t],this.sortModel,this.options.getFieldValue):o}binarySearchInsertPosition(e){let t=0,n=this.sortedIndices.length;for(;t<n;){let r=t+n>>>1,i=this.sortedIndices[r];this.compareRows(e,i)>0?t=r+1:n=r}return t}rebuildFilteredIndices(){if(this.filteredIndices.clear(),Object.entries(this.filterModel).some(([,e])=>e!=null))for(let e=0;e<this.rows.length;e++)this.rowPassesFilter(this.rows[e])&&this.filteredIndices.add(e)}rowPassesFilter(e){return it(e,this.filterModel,this.options.getFieldValue,this.options.getValueFormatter)}getVisibleIndices(){return Object.entries(this.filterModel).some(([,e])=>e!=null)?this.sortedIndices.filter(e=>this.filteredIndices.has(e)):this.sortedIndices}rebuildDistinctValues(){this.distinctValues.clear();for(let e of this.rows)this.updateDistinctValuesForRow(e,`add`)}updateDistinctValuesForRow(e,t){if(!(typeof e!=`object`||!e))for(let[n,r]of Object.entries(e))r!=null&&(t===`add`?this.addToDistinctValues(n,r):this.decrementDistinctValues(n,r))}updateDistinctValueForField(e,t,n){t!=null&&this.decrementDistinctValues(e,t),n!=null&&this.addToDistinctValues(e,n)}addToDistinctValues(e,t){let n=this.distinctValues.get(e);if(n||(n=new Map,this.distinctValues.set(e,n)),Array.isArray(t)){for(let e of t)e!=null&&lt(n,e);return}lt(n,t)}decrementDistinctValues(e,t){let n=this.distinctValues.get(e);if(n!==void 0){if(Array.isArray(t)){for(let e of t)e!=null&&ut(n,e);return}ut(n,t)}}};const lt=(e,t)=>{e.set(t,(e.get(t)??0)+1)},ut=(e,t)=>{let n=e.get(t);if(n!==void 0){if(n<=1){e.delete(t);return}e.set(t,n-1)}};function dt(e,t){let{getRowId:n,getFieldValue:r,getValueFormatter:i,debounceMs:a=50,onTransactionProcessed:o,useWorker:s=!0,parallelSort:c}=t,l=new ct({getRowId:n,getFieldValue:r??Z,getValueFormatter:i},e),u=new Set,d=v().emit,f=s&&c!==!1?new z(c):null,p=new D({debounceMs:a,store:l,onProcessed:e=>{o?.(e);for(let t of u)t(e)}});return{async fetch(e){if(p.hasPending()){d({type:`DATA_LOADING`});try{await p.flush()}finally{d({type:`DATA_LOADED`,totalRows:l.getTotalRowCount()})}}let t=l.getAllRows(),n=r??Z;if(e.filter&&Object.keys(e.filter).length>0){let r=e.valueFormatters==null?i:t=>e.valueFormatters?.[t];t=at(t,e.filter,n,r)}if(e.sort&&e.sort.length>0)if(f&&f.isAvailable()&&t.length>=2e5){d({type:`DATA_LOADING`});try{t=await G(t,e.sort,f,n)}finally{d({type:`DATA_LOADED`,totalRows:t.length})}}else t=W(t,e.sort,n);let a=t.length,{pageIndex:o,pageSize:s}=e.pagination,c=o*s;return{rows:t.slice(c,c+s),totalRows:a}},addRows(e){p.add(e)},removeRows(e){p.remove(e)},updateCell(e,t,n){p.updateCell(e,t,n)},updateRow(e,t){p.updateRow(e,t)},async flushTransactions(){await p.flush()},hasPendingTransactions(){return p.hasPending()},getDistinctValues(e){return l.getDistinctValues(e)},getRowById(e){return l.getRowById(e)},getTotalRowCount(){return l.getTotalRowCount()},subscribe(e){return u.add(e),()=>{u.delete(e)}},clear(){let e=l.getTotalRowCount();l.clear();let t={added:0,removed:e,updated:0};o?.(t);for(let e of u)e(t)},moveRow(e,t){l.moveRow(e,t)}}}const ft=`
208
+ `,{maxWorkers:e.maxWorkers??(navigator===void 0?4:navigator.hardwareConcurrency)??4}),this.parallelThreshold=e.parallelThreshold??4e5,this.minChunkSize=e.minChunkSize??5e4}isAvailable(){return this.isTerminated?!1:this.pool.isAvailable()}terminate(){this.pool.terminate(),this.isTerminated=!0}async sortIndices(e,t){return this.assertNotTerminated(),e.length<this.parallelThreshold?this.sortIndicesSingle(e,t):this.sortIndicesParallel(e,t)}async sortStringHashes(e,t,n){return this.assertNotTerminated(),(e[0]?.length??0)<this.parallelThreshold?this.sortStringHashesSingle(e,t,n):this.sortStringHashesParallel(e,t,n)}async sortMultiColumn(e,t){return this.assertNotTerminated(),(e[0]?.length??0)<this.parallelThreshold?this.sortMultiColumnSingle(e,t):this.sortMultiColumnParallel(e,t)}assertNotTerminated(){if(this.isTerminated)throw Error(`ParallelSortManager has been terminated`)}async sortIndicesSingle(e,t){let n=new Float64Array(e),r={type:`sortIndices`,id:0,values:n,direction:t};return(await this.pool.execute(r,[n.buffer])).indices}async sortStringHashesSingle(e,t,n){let r={type:`sortStringHashes`,id:0,hashChunks:e,direction:t},i=e.map(e=>e.buffer),a=await this.pool.execute(r,i);return a.collisionRuns.length>0&&Ye(a.indices,a.collisionRuns,n,t),a.indices}async sortMultiColumnSingle(e,t){let n=e.map(e=>new Float64Array(e)),r=new Int8Array(t.map(e=>e===`asc`?1:-1)),i={type:`sortMultiColumn`,id:0,columns:n,directions:r},a=[...n.map(e=>e.buffer),r.buffer];return(await this.pool.execute(i,a)).indices}boundariesFor(e){return qe(e,this.pool.getMaxWorkers(),this.minChunkSize)}async runChunks(e){let t=await this.pool.executeParallel(e);return t.sort((e,t)=>e.chunkOffset-t.chunkOffset),t}async sortIndicesParallel(e,t){let n=this.boundariesFor(e.length).map(n=>{let r=new Float64Array(e.slice(n.offset,n.offset+n.length));return{request:{type:`sortChunk`,id:0,values:r,direction:t,chunkOffset:n.offset},transferables:[r.buffer]}});return U((await this.runChunks(n)).map(e=>({indices:e.indices,values:e.sortedValues,offset:e.chunkOffset})),t)}async sortStringHashesParallel(e,t,n){let r=this.boundariesFor(e[0].length).map(n=>{let r=e.map(e=>{let t=new Float64Array(n.length);return t.set(new Float64Array(e.buffer,n.offset*8,n.length)),t});return{request:{type:`sortStringChunk`,id:0,hashChunks:r,direction:t,chunkOffset:n.offset},transferables:r.map(e=>e.buffer)}}),i=await this.runChunks(r),a=i.map(e=>({indices:e.indices,values:e.sortedHashes,offset:e.chunkOffset})),o=Qe(i),s=U(a,t),c=Je(a),l=new Uint32Array([...o,...c]);return l.length>0&&Ye(s,l,n,t),s}async sortMultiColumnParallel(e,t){let n=this.boundariesFor(e[0].length),r=new Int8Array(t.map(e=>e===`asc`?1:-1)),i=n.map(t=>{let n=e.map(e=>{let n=new Float64Array(t.length);for(let r=0;r<t.length;r++)n[r]=e[t.offset+r];return n}),i=new Int8Array(r);return{request:{type:`sortMultiColumnChunk`,id:0,columns:n,directions:i,chunkOffset:t.offset},transferables:[...n.map(e=>e.buffer),i.buffer]}});return Ge((await this.runChunks(i)).map(e=>({indices:e.indices,columns:e.sortedColumns,directions:r,offset:e.chunkOffset})))}};const Qe=e=>{let t=[];for(let n of e)for(let e=0;e<n.collisionRuns.length;e+=2)t.push(n.collisionRuns[e]+n.chunkOffset,n.collisionRuns[e+1]+n.chunkOffset);return t};function G(e){let t=e.toLowerCase(),n=Math.min(t.length,10),r=0;for(let e=0;e<n;e++){let n=t.codePointAt(e)??200,i;i=n>=97&&n<=122?n-97:n>=48&&n<=57?n-48+26:0,r=r*36+i}for(let e=n;e<10;e++)r*=36;return r}function K(e,t){let n=e==null||Array.isArray(e)&&e.length===0,r=t==null||Array.isArray(t)&&t.length===0;if(n&&r)return 0;if(n)return 1;if(r)return-1;if(Array.isArray(e)||Array.isArray(t)){let n=Array.isArray(e)?e.join(`, `):y(e),r=Array.isArray(t)?t.join(`, `):y(t);return n.localeCompare(r)}let i=Number(e),a=Number(t);return!Number.isNaN(i)&&!Number.isNaN(a)?i-a:e instanceof Date&&t instanceof Date?e.getTime()-t.getTime():y(e).localeCompare(y(t))}function $e(e){if(e==null)return Number.MAX_VALUE;if(typeof e==`number`)return e;if(e instanceof Date)return e.getTime();if(typeof e==`string`)return G(e);if(Array.isArray(e))return e.length===0?Number.MAX_VALUE:G(e.join(`, `));if(typeof e==`object`)return G(JSON.stringify(e));let t=Number(e);return Number.isNaN(t)?0:t}function et(e,t){let n=[];for(let r of t.sortModel){let i=$e(t.getFieldValue(e,r.colId));n.push(i)}return n}function tt(e,t,n){if(!e||!t)return null;for(let r=0;r<n.length;r++){let i=e[r]-t[r];if(i!==0)return n[r].direction===`asc`?i:-i}return 0}function nt(e,t,n,r){for(let{colId:i,direction:a}of n){let n=K(r(e,i),r(t,i));if(n!==0)return a===`asc`?n:-n}return 0}function rt(e){let t=e.toLowerCase(),n=[];for(let e=0;e<3;e++){let r=e*10,i=0;for(let e=0;e<10;e++){let n=r+e,a=n<t.length?t.codePointAt(n)??200:0,o;o=a>=97&&a<=122?a-97:a>=48&&a<=57?a-48+26:0,i=i*36+o}n.push(i)}return n}function it(e){if(e==null)return Number.MAX_VALUE;if(Array.isArray(e))return e.length===0?Number.MAX_VALUE:G(e.join(`, `));if(typeof e==`number`)return e;if(e instanceof Date)return e.getTime();if(typeof e==`string`)return G(e);if(typeof e==`object`)return G(JSON.stringify(e));let t=Number(e);return Number.isNaN(t)?0:t}function at(e,t,n){return[...e].sort((e,r)=>{for(let{colId:i,direction:a}of t){let t=K(n(e,i),n(r,i));if(t!==0)return a===`asc`?t:-t}return 0})}const ot=(e,t,n)=>{for(let r of e){let e=n(r,t);if(e!=null)return typeof e==`string`||Array.isArray(e)||typeof e==`object`&&!(e instanceof Date)?`string`:`numeric`}return`numeric`},st=(e,t,n)=>{let r=[],i=Array.from({length:3},()=>[]);for(let a of e){let e=y(n(a,t));r.push(e);let o=rt(e);for(let e=0;e<3;e++)i[e].push(o[e])}return{originalStrings:r,hashChunkArrays:i.map(e=>new Float64Array(e))}},ct=(e,t,n)=>e.map(e=>it(n(e,t))),lt=(e,t,n)=>{let r=[],i=[];for(let{colId:a,direction:o}of t)r.push(e.map(e=>it(n(e,a)))),i.push(o??`asc`);return{columnValues:r,directions:i}},ut=(e,t)=>{let n=Array(e.length);for(let r=0;r<t.length;r++)n[r]=e[t[r]];return n},dt=async(e,t,n,r)=>{let{colId:i,direction:a}=t,o=a??`asc`;if(ot(e,i,r)===`string`){let{originalStrings:t,hashChunkArrays:a}=st(e,i,r);return n.sortStringHashes(a,o,t)}let s=ct(e,i,r);return n.sortIndices(s,o)},ft=async(e,t,n,r)=>{let{columnValues:i,directions:a}=lt(e,t,r);return n.sortMultiColumn(i,a)},pt=async(e,t,n,r)=>ut(e,t.length===1?await dt(e,t[0],n,r):await ft(e,t,n,r));function q(e,t){return e.getFullYear()===t.getFullYear()&&e.getMonth()===t.getMonth()&&e.getDate()===t.getDate()}function mt(e){return e==null||e===``||Array.isArray(e)&&e.length===0}const ht={contains:(e,t)=>e.includes(t),notContains:(e,t)=>!e.includes(t),equals:(e,t)=>e===t,notEquals:(e,t)=>e!==t,startsWith:(e,t)=>e.startsWith(t),endsWith:(e,t)=>e.endsWith(t),blank:(e,t,n)=>n,notBlank:(e,t,n)=>!n};function gt(e,t,n){let r=mt(e);if(t.selectedValues&&t.selectedValues.size>0){let i=t.includeBlank===!0&&r;if(Array.isArray(e)){let r=[...e].sort((e,t)=>{let n=String(e),r=String(t);return n===r?0:n<r?-1:1}),a=n?n(r):r.join(`, `);return t.selectedValues.has(a)||i}let a=y(e,n);return t.selectedValues.has(a)||i}let i=y(e,n).toLowerCase(),a=String(t.value??``).toLowerCase();return ht[t.operator](i,a,r)}const _t={"=":(e,t)=>e===t,"!=":(e,t)=>e!==t,">":(e,t)=>e>t,"<":(e,t)=>e<t,">=":(e,t)=>e>=t,"<=":(e,t)=>e<=t,between:(e,t,n)=>e>=t&&e<=n};function vt(e,t){let n=e==null||e===``;if(t.operator===`blank`)return n;if(t.operator===`notBlank`)return!n;if(n)return!1;let r=typeof e==`number`?e:Number(e);if(Number.isNaN(r))return!1;let i=t.value??0,a=t.valueTo??0;return _t[t.operator](r,i,a)}const yt={"=":(e,t)=>q(e,t),"!=":(e,t)=>!q(e,t),">":(e,t)=>e.getTime()>t.getTime(),"<":(e,t)=>e.getTime()<t.getTime(),between:(e,t,n)=>{let r=e.getTime();return r>=t.getTime()&&r<=n.getTime()}};function bt(e,t){let n=e==null||e===``;if(t.operator===`blank`)return n;if(t.operator===`notBlank`)return!n;if(n)return!1;let r=e instanceof Date?e:new Date(y(e));if(Number.isNaN(r.getTime()))return!1;let i=t.value instanceof Date?t.value:new Date(String(t.value??``)),a=t.valueTo instanceof Date?t.valueTo:new Date(String(t.valueTo??``));return yt[t.operator](r,i,a)}function xt(e,t,n){switch(t.type){case`text`:return gt(e,t,n);case`number`:return vt(e,t);case`date`:return bt(e,t);default:return!0}}function J(e,t,n){if(!t.conditions||t.conditions.length===0)return!0;let r=t.conditions[0];if(!r)return!0;let i=xt(e,r,n);for(let r=1;r<t.conditions.length;r++){let a=t.conditions[r-1],o=t.conditions[r],s=a.nextOperator??t.combination,c=xt(e,o,n);s===`and`?i&&=c:i||=c}return i}function St(e,t,n,r){let i=Object.entries(t).filter(([,e])=>e!=null);if(i.length===0)return!0;for(let[t,a]of i){let i=n(e,t),o=r?.(t);if(!J(i,a,o))return!1}return!0}function Ct(e,t,n,r){let i=Object.entries(t).filter(([,e])=>typeof e==`string`?e.trim()!==``:e.conditions&&e.conditions.length>0);return i.length===0?e:e.filter(e=>{for(let[t,a]of i){let i=n(e,t),o=r?.(t);if(typeof a==`string`){if(!y(i,o).toLowerCase().includes(a.toLowerCase()))return!1;continue}if(!J(i,a,o))return!1}return!0})}function Y(e,t){let n=t.split(`.`),r=e;for(let e of n){if(typeof r!=`object`||!r)return null;r=r[e]}return r}function wt(e,t={}){let{getFieldValue:n=Y,getValueFormatter:r,useWorker:i=!0,parallelSort:a}=t,o=e,s=!1,c=i?new W(a===!1?{maxWorkers:1}:a):null;return{loadMode:`all`,async fetch(e){let t=o?[...o]:[];if(e.filter&&Object.keys(e.filter).length>0){let i=e.valueFormatters===null?r:t=>e.valueFormatters?.[t];t=Ct(t,e.filter,n,i)}e.sort&&e.sort.length>0&&(t=c&&c.isAvailable()&&t.length>=2e5?await pt(t,e.sort,c,n):at(t,e.sort,n));let i=t.length;return{rows:t.slice(e.range.startRow,e.range.endRow),totalRows:i}},destroy(){s||(s=!0,o=null,c&&c.terminate())},moveRow(e,t){if(!o||e===t||e<0||e>=o.length||t<0||t>=o.length)return;let[n]=o.splice(e,1),r=t>e?t-1:t;o.splice(r,0,n)}}}function X(e){return wt(e)}function Tt(e,t={}){return{loadMode:t.loadMode??`paginated`,async fetch(t){return e(t)}}}var Et=class{rows=[];rowById=new Map;sortedIndices=[];sortModel=[];sortModelHash=``;filterModel={};filteredIndices=new Set;distinctValues=new Map;rowSortCache=new Map;options;constructor(e,t=[]){this.options={getRowId:e.getRowId,getFieldValue:e.getFieldValue??g,getValueFormatter:e.getValueFormatter??(()=>void 0)},this.setData(t)}clear(){this.rows=[],this.rowById.clear(),this.sortedIndices=[],this.filterModel={},this.filteredIndices.clear(),this.rowSortCache.clear(),this.distinctValues.clear(),this.sortModel=[],this.sortModelHash=``}setData(e){this.rows=[...e],this.rowById.clear(),this.rowSortCache.clear(),this.distinctValues.clear();for(let e=0;e<this.rows.length;e++){let t=this.rows[e],n=this.options.getRowId(t);this.rowById.set(n,e)}this.rebuildSortedIndices(),this.rebuildFilteredIndices(),this.rebuildDistinctValues()}query(e){this.setSortModel(e.sort??[]),this.setFilterModel(e.filter??{});let t=this.getVisibleIndices(),n=t.length,r=e.range.startRow,i=Math.min(e.range.endRow,n),a=[];for(let e=r;e<i;e++){let n=t[e];n!==void 0&&a.push(this.rows[n])}return{rows:a,totalRows:n}}getRowById(e){let t=this.rowById.get(e);return t===void 0?void 0:this.rows[t]}getRowByIndex(e){return this.rows[e]}getTotalRowCount(){return this.rows.length}getAllRows(){return[...this.rows]}moveRow(e,t){if(e===t||e<0||e>=this.rows.length||t<0||t>=this.rows.length)return;let[n]=this.rows.splice(e,1),r=t>e?t-1:t;this.rows.splice(r,0,n),this.rowById.clear();for(let e=0;e<this.rows.length;e++)this.rowById.set(this.options.getRowId(this.rows[e]),e);this.sortedIndices=Array.from({length:this.rows.length},(e,t)=>t),this.rowSortCache.clear()}getVisibleRowCount(){return Object.keys(this.filterModel).length===0?this.rows.length:this.filteredIndices.size}getDistinctValues(e){let t=this.distinctValues.get(e);return t?Array.from(t.keys()):[]}addRows(e){for(let t of e)this.addRow(t)}addRow(e){let t=this.options.getRowId(e);if(this.rowById.has(t)){console.warn(`Row with ID ${t} already exists. Skipping.`);return}let n=this.rows.length;if(this.rows.push(e),this.rowById.set(t,n),this.updateDistinctValuesForRow(e,`add`),this.sortModel.length>0&&this.computeRowHashes(n,e),this.sortModel.length>0){let e=this.binarySearchInsertPosition(n);this.sortedIndices.splice(e,0,n)}else this.sortedIndices.push(n);this.rowPassesFilter(e)&&this.filteredIndices.add(n)}removeRows(e){let t=[];for(let n of e){let e=this.rowById.get(n);e!==void 0&&t.push(e)}if(t.length===0)return 0;t.sort((e,t)=>t-e);for(let e of t)this.removeRowByIndex(e);return t.length}removeRowByIndex(e){let t=this.rows[e];if(!t)return;let n=this.options.getRowId(t);this.updateDistinctValuesForRow(t,`remove`);let r=this.sortedIndices.indexOf(e);r!==-1&&this.sortedIndices.splice(r,1),this.filteredIndices.delete(e),this.rowSortCache.delete(e),this.rowById.delete(n),this.rows.splice(e,1),this.reindexAfterRemoval(e)}reindexAfterRemoval(e){for(let[t,n]of this.rowById.entries())n>e&&this.rowById.set(t,n-1);for(let t=0;t<this.sortedIndices.length;t++)this.sortedIndices[t]>e&&this.sortedIndices[t]--;let t=new Set;for(let n of this.filteredIndices)n>e?t.add(n-1):t.add(n);this.filteredIndices=t;let n=new Map;for(let[t,r]of this.rowSortCache)t>e?n.set(t-1,r):n.set(t,r);this.rowSortCache=n}updateCell(e,t,n){let r=this.rowById.get(e);if(r===void 0){console.warn(`Row with ID ${e} not found.`);return}let i=this.rows[r],a=this.options.getFieldValue(i,t);if(_(i,t,n),this.updateDistinctValueForField(t,a,n),this.sortModel.some(e=>e.colId===t)&&this.sortModel.length>0){this.computeRowHashes(r,i);let e=this.sortedIndices.indexOf(r);e!==-1&&this.sortedIndices.splice(e,1);let t=this.binarySearchInsertPosition(r);this.sortedIndices.splice(t,0,r)}t in this.filterModel&&(this.rowPassesFilter(i)?this.filteredIndices.add(r):this.filteredIndices.delete(r))}updateRow(e,t){for(let[n,r]of Object.entries(t))this.updateCell(e,n,r)}setSortModel(e){let t=JSON.stringify(e);t!==this.sortModelHash&&(this.sortModelHash=t,this.sortModel=[...e],this.rebuildHashCache(),this.rebuildSortedIndices())}getSortModel(){return[...this.sortModel]}setFilterModel(e){JSON.stringify(e)!==JSON.stringify(this.filterModel)&&(this.filterModel={...e},this.rebuildFilteredIndices())}getFilterModel(){return{...this.filterModel}}rebuildSortedIndices(){this.sortedIndices=Array.from({length:this.rows.length},(e,t)=>t),this.sortModel.length!==0&&this.sortedIndices.sort((e,t)=>this.compareRows(e,t))}rebuildHashCache(){if(this.rowSortCache.clear(),this.sortModel.length!==0)for(let e=0;e<this.rows.length;e++)this.computeRowHashes(e,this.rows[e])}computeRowHashes(e,t){if(this.sortModel.length===0)return;let n=et(t,{sortModel:this.sortModel,sortModelHash:this.sortModelHash,getFieldValue:this.options.getFieldValue}),r=this.rowSortCache.get(e);r||(r={hashes:new Map},this.rowSortCache.set(e,r)),r.hashes.set(this.sortModelHash,n)}compareRows(e,t){let n=this.rowSortCache.get(e),r=this.rowSortCache.get(t),i=n?.hashes.get(this.sortModelHash),a=r?.hashes.get(this.sortModelHash),o=tt(i,a,this.sortModel);return o===null?nt(this.rows[e],this.rows[t],this.sortModel,this.options.getFieldValue):o}binarySearchInsertPosition(e){let t=0,n=this.sortedIndices.length;for(;t<n;){let r=t+n>>>1,i=this.sortedIndices[r];this.compareRows(e,i)>0?t=r+1:n=r}return t}rebuildFilteredIndices(){if(this.filteredIndices.clear(),Object.entries(this.filterModel).some(([,e])=>e!=null))for(let e=0;e<this.rows.length;e++)this.rowPassesFilter(this.rows[e])&&this.filteredIndices.add(e)}rowPassesFilter(e){return St(e,this.filterModel,this.options.getFieldValue,this.options.getValueFormatter)}getVisibleIndices(){return Object.entries(this.filterModel).some(([,e])=>e!=null)?this.sortedIndices.filter(e=>this.filteredIndices.has(e)):this.sortedIndices}rebuildDistinctValues(){this.distinctValues.clear();for(let e of this.rows)this.updateDistinctValuesForRow(e,`add`)}updateDistinctValuesForRow(e,t){if(!(typeof e!=`object`||!e))for(let[n,r]of Object.entries(e))r!=null&&(t===`add`?this.addToDistinctValues(n,r):this.decrementDistinctValues(n,r))}updateDistinctValueForField(e,t,n){t!=null&&this.decrementDistinctValues(e,t),n!=null&&this.addToDistinctValues(e,n)}addToDistinctValues(e,t){let n=this.distinctValues.get(e);if(n||(n=new Map,this.distinctValues.set(e,n)),Array.isArray(t)){for(let e of t)e!=null&&Dt(n,e);return}Dt(n,t)}decrementDistinctValues(e,t){let n=this.distinctValues.get(e);if(n!==void 0){if(Array.isArray(t)){for(let e of t)e!=null&&Z(n,e);return}Z(n,t)}}};const Dt=(e,t)=>{e.set(t,(e.get(t)??0)+1)},Z=(e,t)=>{let n=e.get(t);if(n!==void 0){if(n<=1){e.delete(t);return}e.set(t,n-1)}};function Ot(e,t){let{getRowId:n,getFieldValue:r,getValueFormatter:i,debounceMs:a=50,onTransactionProcessed:o,useWorker:s=!0,parallelSort:c}=t,l=new Et({getRowId:n,getFieldValue:r??Y,getValueFormatter:i},e),u=new Set,d=v().emit,f=s&&c!==!1?new W(c):null,p=new M({debounceMs:a,store:l,onProcessed:e=>{o?.(e);for(let t of u)t(e)}});return{loadMode:`all`,async fetch(e){if(p.hasPending()){d({type:`DATA_LOADING`});try{await p.flush()}finally{d({type:`DATA_LOADED`,totalRows:l.getTotalRowCount()})}}let t=l.getAllRows(),n=r??Y;if(e.filter&&Object.keys(e.filter).length>0){let r=e.valueFormatters===null?i:t=>e.valueFormatters?.[t];t=Ct(t,e.filter,n,r)}if(e.sort&&e.sort.length>0)if(f&&f.isAvailable()&&t.length>=2e5){d({type:`DATA_LOADING`});try{t=await pt(t,e.sort,f,n)}finally{d({type:`DATA_LOADED`,totalRows:t.length})}}else t=at(t,e.sort,n);let a=t.length;return{rows:t.slice(e.range.startRow,e.range.endRow),totalRows:a}},addRows(e){p.add(e)},removeRows(e){p.remove(e)},updateCell(e,t,n){p.updateCell(e,t,n)},updateRow(e,t){p.updateRow(e,t)},async flushTransactions(){await p.flush()},hasPendingTransactions(){return p.hasPending()},getDistinctValues(e){return l.getDistinctValues(e)},getRowById(e){return l.getRowById(e)},getTotalRowCount(){return l.getTotalRowCount()},subscribe(e){return u.add(e),()=>{u.delete(e)}},clear(){let e=l.getTotalRowCount();l.clear();let t={added:0,removed:e,updated:0};o?.(t);for(let e of u)e(t)},moveRow(e,t){l.moveRow(e,t)}}}const kt=`
205
209
  /* =============================================================================
206
210
  GP Grid - CSS Variables for Theming
207
211
  ============================================================================= */
@@ -285,7 +289,7 @@ self.onmessage = function(e) {
285
289
  --gp-grid-scrollbar-thumb: #373a40;
286
290
  --gp-grid-scrollbar-thumb-hover: #4a4d52;
287
291
  }
288
- `,pt=`
292
+ `,At=`
289
293
  /* =============================================================================
290
294
  GP Grid - Clean Flat Design
291
295
  ============================================================================= */
@@ -308,7 +312,7 @@ self.onmessage = function(e) {
308
312
  outline: none;
309
313
  border-color: var(--gp-grid-primary);
310
314
  }
311
- `,mt=`
315
+ `,jt=`
312
316
  /* =============================================================================
313
317
  Header
314
318
  ============================================================================= */
@@ -527,7 +531,7 @@ self.onmessage = function(e) {
527
531
  pointer-events: none;
528
532
  border-radius: 2px;
529
533
  }
530
- `,ht=`
534
+ `,Mt=`
531
535
  /* =============================================================================
532
536
  Data Cells
533
537
  ============================================================================= */
@@ -658,7 +662,7 @@ self.onmessage = function(e) {
658
662
  .gp-grid-edit-input:focus {
659
663
  outline: none;
660
664
  }
661
- `,gt=`
665
+ `,Nt=`
662
666
  /* =============================================================================
663
667
  Loading & Error States
664
668
  ============================================================================= */
@@ -739,6 +743,9 @@ self.onmessage = function(e) {
739
743
  z-index: 1000;
740
744
  max-width: 80%;
741
745
  text-align: center;
746
+ user-select: text;
747
+ -webkit-user-select: text;
748
+ cursor: text;
742
749
  }
743
750
 
744
751
  /* =============================================================================
@@ -754,7 +761,7 @@ self.onmessage = function(e) {
754
761
  font-size: 14px;
755
762
  text-align: center;
756
763
  }
757
- `,_t=`
764
+ `,Pt=`
758
765
  /* =============================================================================
759
766
  Scrollbar Styling
760
767
  ============================================================================= */
@@ -780,7 +787,7 @@ self.onmessage = function(e) {
780
787
  .gp-grid-container::-webkit-scrollbar-corner {
781
788
  background-color: var(--gp-grid-scrollbar-track);
782
789
  }
783
- `,vt=`
790
+ `,Ft=`
784
791
  /* =============================================================================
785
792
  Filter Popup
786
793
  ============================================================================= */
@@ -1091,7 +1098,7 @@ self.onmessage = function(e) {
1091
1098
  .gp-grid-filter-btn-apply:hover {
1092
1099
  opacity: 0.9;
1093
1100
  }
1094
- `,yt=`
1101
+ `,It=`
1095
1102
  /* =============================================================================
1096
1103
  Row Drag
1097
1104
  ============================================================================= */
@@ -1142,5 +1149,5 @@ self.onmessage = function(e) {
1142
1149
  pointer-events: none;
1143
1150
  border-radius: 2px;
1144
1151
  }
1145
- `,bt=[ft,pt,mt,ht,gt,_t,vt,yt].join(`
1146
- `),xt=e=>({slots:new Map,activeCell:null,selectionRange:null,editingCell:null,contentWidth:0,contentHeight:e?.initialHeight??0,viewportWidth:e?.initialWidth??0,viewportHeight:e?.initialHeight??0,rowsWrapperOffset:0,headers:new Map,filterPopup:null,isLoading:!1,error:null,totalRows:0,visibleRowRange:null,hoverPosition:null,columns:null,pendingScrollTop:null}),St=(e,t,n)=>{switch(e.type){case`CREATE_SLOT`:return t.set(e.slotId,{slotId:e.slotId,rowIndex:-1,rowData:{},translateY:0}),null;case`DESTROY_SLOT`:return t.delete(e.slotId),null;case`ASSIGN_SLOT`:{let n=t.get(e.slotId);return n&&t.set(e.slotId,{...n,rowIndex:e.rowIndex,rowData:e.rowData}),null}case`MOVE_SLOT`:{let n=t.get(e.slotId);return n&&t.set(e.slotId,{...n,translateY:e.translateY}),null}case`SCROLL_TO`:return{pendingScrollTop:e.scrollTop};case`SET_ACTIVE_CELL`:return{activeCell:e.position};case`SET_SELECTION_RANGE`:return{selectionRange:e.range};case`UPDATE_VISIBLE_RANGE`:return{visibleRowRange:{start:e.start,end:e.end},rowsWrapperOffset:e.rowsWrapperOffset};case`SET_HOVER_POSITION`:return{hoverPosition:e.position};case`START_EDIT`:return{editingCell:{row:e.row,col:e.col,initialValue:e.initialValue}};case`STOP_EDIT`:return{editingCell:null};case`SET_CONTENT_SIZE`:return{contentWidth:e.width,contentHeight:e.height,viewportWidth:e.viewportWidth,viewportHeight:e.viewportHeight,rowsWrapperOffset:e.rowsWrapperOffset};case`UPDATE_HEADER`:return n.set(e.colIndex,{column:e.column,sortDirection:e.sortDirection,sortIndex:e.sortIndex,hasFilter:e.hasFilter}),null;case`OPEN_FILTER_POPUP`:return{filterPopup:{isOpen:!0,colIndex:e.colIndex,column:e.column,anchorRect:e.anchorRect,distinctValues:e.distinctValues,currentFilter:e.currentFilter}};case`CLOSE_FILTER_POPUP`:return{filterPopup:null};case`DATA_LOADING`:return{isLoading:!0,error:null};case`DATA_LOADED`:return{isLoading:!1,totalRows:e.totalRows};case`DATA_ERROR`:return{isLoading:!1,error:e.error};case`ROWS_ADDED`:case`ROWS_REMOVED`:return{totalRows:e.totalRows};case`ROWS_UPDATED`:case`TRANSACTION_PROCESSED`:return null;case`COLUMNS_CHANGED`:return{columns:e.columns};default:return null}},$=e=>({clientX:e.clientX,clientY:e.clientY,button:e.button,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,pointerId:e.pointerId,pointerType:e.pointerType});var Ct=class{intervalId=null;lastPointerEvent=null;getBodyEl;onTick;constructor(e,t){this.getBodyEl=e,this.onTick=t}recordPointer(e){this.lastPointerEvent=e}clearPointer(){this.lastPointerEvent=null}start(e,t){this.stop(),this.intervalId=setInterval(()=>{let n=this.getBodyEl();if(!n)return;n.scrollTop+=t,n.scrollLeft+=e;let r=this.lastPointerEvent;r&&this.onTick(r)},16)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}},wt=class{timer=null;capture=null;savedContainerOverflow=null;blockTouchMove=e=>e.preventDefault();deps;constructor(e){this.deps=e}start(e){this.cancel(),this.capture={pointerId:e.pointerId,target:e.currentTarget};let t=e.clientX,n=e.clientY,r=e=>{let r=e.clientX-t,i=e.clientY-n;(Math.abs(r)>10||Math.abs(i)>10)&&(this.cancel(),a())},i=()=>{this.cancel(),a()},a=()=>{document.removeEventListener(`pointermove`,r),document.removeEventListener(`pointerup`,i),document.removeEventListener(`pointercancel`,i)};document.addEventListener(`pointermove`,r),document.addEventListener(`pointerup`,i,{once:!0}),document.addEventListener(`pointercancel`,i,{once:!0}),this.timer=setTimeout(()=>{this.timer=null,a(),this.confirm()},300)}cancel(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null),this.deps.getCore()?.input.cancelPendingRowDrag(),this.capture=null}releaseLocks(){if(!this.deps.isBrowser)return;let e=this.deps.getContainer();this.savedContainerOverflow!==null&&e&&(e.style.overflow=this.savedContainerOverflow),this.savedContainerOverflow=null,document.removeEventListener(`touchmove`,this.blockTouchMove)}confirm(){let e=this.deps.getCore(),t=this.capture;this.capture=null,e!==null&&e.input.confirmPendingRowDrag()&&(this.lockContainer(),document.addEventListener(`touchmove`,this.blockTouchMove,{passive:!1}),this.applyPointerCapture(t),this.deps.onDragConfirmed(e.input.getDragState()))}lockContainer(){let e=this.deps.getContainer();e&&(this.savedContainerOverflow=e.style.overflow,e.style.overflow=`hidden`)}applyPointerCapture(e){e&&e.target.setPointerCapture(e.pointerId)}};const Tt=(e,t,n,r)=>{let i={slots:new Map(t),headers:new Map(n)};for(let t of e){let e=St(t,i.slots,i.headers);e!==null&&Et(e,i,r)}return i},Et=(e,t,n)=>{e.slots!==void 0&&Ot(t.slots,e.slots),e.headers!==void 0&&Ot(t.headers,e.headers),Dt(e,n),e.columns!==void 0&&e.columns!==null&&n.setColumnsOverride(e.columns),e.filterPopup!==void 0&&n.onFilterPopupChange(e.filterPopup)},Dt=(e,t)=>{e.contentWidth!==void 0&&t.setContentWidth(e.contentWidth),e.contentHeight!==void 0&&t.setContentHeight(e.contentHeight),e.rowsWrapperOffset!==void 0&&t.setRowsWrapperOffset(e.rowsWrapperOffset),e.isLoading!==void 0&&t.setIsLoading(e.isLoading),e.error!==void 0&&t.setErrorMessage(e.error),e.pendingScrollTop!==void 0&&t.setPendingScrollTop(e.pendingScrollTop),e.activeCell!==void 0&&t.setActiveCell(e.activeCell),e.selectionRange!==void 0&&t.setSelectionRange(e.selectionRange),e.editingCell!==void 0&&t.setEditingCell(e.editingCell),e.hoverPosition!==void 0&&t.setHoverPosition(e.hoverPosition)},Ot=(e,t)=>{e.clear(),t.forEach((t,n)=>e.set(n,t))};var kt=class{owned=null;lastAppliedRows=null;lastAppliedColumns=null;initialize(e,t){return e===null?(this.owned=Q(t),this.lastAppliedRows=t,this.owned):e}syncRows(e,t){return t!==null||this.lastAppliedRows===e?null:(this.lastAppliedRows=e,e.length>1e4&&console.warn(`[gp-grid] rows input changed with ${e.length} rows — this triggers a full rebuild. Use createGridData() for efficient updates.`),this.owned?.destroy?.(),this.owned=Q(e),this.owned)}syncColumns(e){return e.length===0||this.lastAppliedColumns===e?!1:(this.lastAppliedColumns=e,!0)}destroy(){this.owned?.destroy?.(),this.owned=null}},At=class{deps;constructor(e){this.deps=e}headerPointerDown(e,t,n,r){let i=this.deps.getCore();return i===null?!1:i.input.handleHeaderMouseDown(e,t,n,$(r)).preventDefault}resizePointerDown(e,t,n){let r=this.deps.getCore();return r===null?!1:r.input.handleHeaderResizeMouseDown(e,t,$(n)).preventDefault}cellPointerDown(e,t,n){let r=this.deps.getCore();if(r===null)return{preventDefault:!1,focusContainer:!1};let i=r.input.handleCellMouseDown(e,t,$(n));return this.dispatchCellDragStart(i.startDrag,n),{preventDefault:i.preventDefault,focusContainer:i.focusContainer??!1}}cellPointerEnter(e,t){this.deps.getCore()?.input.handleCellMouseEnter(e,t)}cellPointerLeave(){this.deps.getCore()?.input.handleCellMouseLeave()}fillHandlePointerDown(e,t,n){let r=this.deps.getCore();if(r===null)return{preventDefault:!1,stopPropagation:!1};let i=r.input.handleFillHandleMouseDown(e,t,$(n));return i.startDrag===`fill`&&(jt(n),this.deps.onDragStateChange(r.input.getDragState())),{preventDefault:i.preventDefault,stopPropagation:i.stopPropagation}}dragMove(e){let t=this.deps.getCore(),n=this.deps.getBodyEl();if(t===null||n===null)return;let r=n.getBoundingClientRect(),i=t.input.handleDragMove($(e),{top:r.top,left:r.left,width:r.width,height:r.height,scrollTop:n.scrollTop,scrollLeft:n.scrollLeft});this.deps.onDragStateChange(t.input.getDragState()),i?.autoScroll?this.deps.autoScroll.start(i.autoScroll.dx,i.autoScroll.dy):this.deps.autoScroll.stop()}documentPointerMove(e){let t=this.deps.getCore();if(t===null)return!1;let n=t.input.getDragState().isDragging;return this.deps.autoScroll.recordPointer(e),this.dragMove(e),n}documentPointerUp(){let e=this.deps.getCore();if(e===null)return{wasRowDrag:!1};let t=e.input.getDragState().dragType===`row-drag`;return this.deps.autoScroll.stop(),this.deps.autoScroll.clearPointer(),e.input.handleDragEnd(),this.deps.onDragStateChange(e.input.getDragState()),{wasRowDrag:t}}wheel(e,t,n){let r=this.deps.getCore();return r===null?null:r.input.handleWheel(e,t,n)}keyDown(e,t,n,r){let i=this.deps.getCore();return i===null?{preventDefault:!1}:i.input.handleKeyDown({key:e.key,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey},t,n,r)}dispatchCellDragStart(e,t){let n=this.deps.getCore();if(!(n===null||e===void 0)){if(e===`selection`){n.input.startSelectionDrag(),this.deps.onDragStateChange(n.input.getDragState());return}if(e===`row-drag`){this.deps.onDragStateChange(n.input.getDragState());return}e===`row-drag-pending`&&this.deps.pendingRowDrag.start(t)}}};const jt=e=>{e.target.setPointerCapture(e.pointerId)};export{Ct as AutoScrollDriver,kt as DataSourceOwner,O as EditManager,Ce as FillManager,Ne as GridCore,ye as HighlightManager,ct as IndexedDataStore,At as InputEventAdapter,_e as InputHandler,z as ParallelSortManager,wt as PendingRowDragController,C as RowMutationManager,T as ScrollVirtualizationManager,Se as SelectionManager,we as SlotPoolManager,E as SortFilterManager,D as TransactionManager,A as WorkerPool,Tt as applyBatchInstructions,St as applyInstruction,p as buildCellClasses,n as calculateColumnPositions,ne as calculateFillHandlePosition,re as calculateFilterPopupPosition,i as calculateScaledColumnPositions,ht as cellStyles,V as compareValues,H as computeValueHash,pt as containerStyles,ot as createClientDataSource,Q as createDataSourceFromArray,xt as createInitialState,dt as createMutableClientDataSource,st as createServerDataSource,Ie as detectBoundaryCollisions,X as evaluateColumnFilter,J as evaluateDateCondition,q as evaluateNumberCondition,tt as evaluateTextCondition,vt as filtersStyles,a as findColumnAtX,y as findSlotForRow,b as formatCellValue,g as getFieldValue,r as getTotalWidth,bt as gridStyles,mt as headerStyles,l as isCellActive,d as isCellEditing,f as isCellInFillPreview,c as isCellSelected,h as isColumnInSelectionRange,m as isRowInSelectionRange,u as isRowVisible,K as isSameDay,I as kWayMerge,L as kWayMergeMultiColumn,yt as rowDragStyles,it as rowPassesFilter,te as scrollCellIntoView,_t as scrollbarStyles,_ as setFieldValue,gt as statesStyles,B as stringToSortableNumber,$ as toPointerEventData,ft as variablesStyles};
1152
+ `,Lt=[kt,At,jt,Mt,Nt,Pt,Ft,It].join(`
1153
+ `),Rt=e=>({slots:new Map,activeCell:null,selectionRange:null,editingCell:null,contentWidth:0,contentHeight:e?.initialHeight??0,viewportWidth:e?.initialWidth??0,viewportHeight:e?.initialHeight??0,rowsWrapperOffset:0,headers:new Map,filterPopup:null,isLoading:!1,error:null,totalRows:0,visibleRowRange:null,hoverPosition:null,columns:null,pendingScrollTop:null}),zt=(e,t,n)=>{switch(e.type){case`CREATE_SLOT`:return t.set(e.slotId,{slotId:e.slotId,rowIndex:-1,rowData:{},translateY:0}),null;case`DESTROY_SLOT`:return t.delete(e.slotId),null;case`ASSIGN_SLOT`:{let n=t.get(e.slotId);return n&&t.set(e.slotId,{...n,rowIndex:e.rowIndex,rowData:e.rowData}),null}case`MOVE_SLOT`:{let n=t.get(e.slotId);return n&&t.set(e.slotId,{...n,translateY:e.translateY}),null}case`SCROLL_TO`:return{pendingScrollTop:e.scrollTop};case`SET_ACTIVE_CELL`:return{activeCell:e.position};case`SET_SELECTION_RANGE`:return{selectionRange:e.range};case`UPDATE_VISIBLE_RANGE`:return{visibleRowRange:{start:e.start,end:e.end},rowsWrapperOffset:e.rowsWrapperOffset};case`SET_HOVER_POSITION`:return{hoverPosition:e.position};case`START_EDIT`:return{editingCell:{row:e.row,col:e.col,initialValue:e.initialValue}};case`STOP_EDIT`:return{editingCell:null};case`SET_CONTENT_SIZE`:return{contentWidth:e.width,contentHeight:e.height,viewportWidth:e.viewportWidth,viewportHeight:e.viewportHeight,rowsWrapperOffset:e.rowsWrapperOffset};case`UPDATE_HEADER`:return n.set(e.colIndex,{column:e.column,sortDirection:e.sortDirection,sortIndex:e.sortIndex,hasFilter:e.hasFilter}),null;case`OPEN_FILTER_POPUP`:return{filterPopup:{isOpen:!0,colIndex:e.colIndex,column:e.column,anchorRect:e.anchorRect,distinctValues:e.distinctValues,currentFilter:e.currentFilter}};case`CLOSE_FILTER_POPUP`:return{filterPopup:null};case`DATA_LOADING`:return{isLoading:!0,error:null};case`DATA_LOADED`:return{isLoading:!1,totalRows:e.totalRows};case`DATA_ERROR`:return{isLoading:!1,error:e.error};case`ROWS_ADDED`:case`ROWS_REMOVED`:return{totalRows:e.totalRows};case`ROWS_UPDATED`:case`TRANSACTION_PROCESSED`:return null;case`COLUMNS_CHANGED`:return{columns:e.columns};default:return null}},Q=e=>({clientX:e.clientX,clientY:e.clientY,button:e.button,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,pointerId:e.pointerId,pointerType:e.pointerType});var Bt=class{intervalId=null;lastPointerEvent=null;getBodyEl;onTick;constructor(e,t){this.getBodyEl=e,this.onTick=t}recordPointer(e){this.lastPointerEvent=e}clearPointer(){this.lastPointerEvent=null}start(e,t){this.stop(),this.intervalId=setInterval(()=>{let n=this.getBodyEl();if(!n)return;n.scrollTop+=t,n.scrollLeft+=e;let r=this.lastPointerEvent;r&&this.onTick(r)},16)}stop(){this.intervalId!==null&&(clearInterval(this.intervalId),this.intervalId=null)}},Vt=class{timer=null;capture=null;savedContainerOverflow=null;blockTouchMove=e=>e.preventDefault();deps;constructor(e){this.deps=e}start(e){this.cancel(),this.capture={pointerId:e.pointerId,target:e.currentTarget};let t=e.clientX,n=e.clientY,r=e=>{let r=e.clientX-t,i=e.clientY-n;(Math.abs(r)>10||Math.abs(i)>10)&&(this.cancel(),a())},i=()=>{this.cancel(),a()},a=()=>{document.removeEventListener(`pointermove`,r),document.removeEventListener(`pointerup`,i),document.removeEventListener(`pointercancel`,i)};document.addEventListener(`pointermove`,r),document.addEventListener(`pointerup`,i,{once:!0}),document.addEventListener(`pointercancel`,i,{once:!0}),this.timer=setTimeout(()=>{this.timer=null,a(),this.confirm()},300)}cancel(){this.timer!==null&&(clearTimeout(this.timer),this.timer=null),this.deps.getCore()?.input.cancelPendingRowDrag(),this.capture=null}releaseLocks(){if(!this.deps.isBrowser)return;let e=this.deps.getContainer();this.savedContainerOverflow!==null&&e&&(e.style.overflow=this.savedContainerOverflow),this.savedContainerOverflow=null,document.removeEventListener(`touchmove`,this.blockTouchMove)}confirm(){let e=this.deps.getCore(),t=this.capture;this.capture=null,e!==null&&e.input.confirmPendingRowDrag()&&(this.lockContainer(),document.addEventListener(`touchmove`,this.blockTouchMove,{passive:!1}),this.applyPointerCapture(t),this.deps.onDragConfirmed(e.input.getDragState()))}lockContainer(){let e=this.deps.getContainer();e&&(this.savedContainerOverflow=e.style.overflow,e.style.overflow=`hidden`)}applyPointerCapture(e){e&&e.target.setPointerCapture(e.pointerId)}};const Ht=(e,t,n,r)=>{let i={slots:new Map(t),headers:new Map(n)};for(let t of e){let e=zt(t,i.slots,i.headers);e!==null&&Ut(e,i,r)}return i},Ut=(e,t,n)=>{e.slots!==void 0&&$(t.slots,e.slots),e.headers!==void 0&&$(t.headers,e.headers),Wt(e,n),e.columns!==void 0&&e.columns!==null&&n.setColumnsOverride(e.columns),e.filterPopup!==void 0&&n.onFilterPopupChange(e.filterPopup)},Wt=(e,t)=>{e.contentWidth!==void 0&&t.setContentWidth(e.contentWidth),e.contentHeight!==void 0&&t.setContentHeight(e.contentHeight),e.rowsWrapperOffset!==void 0&&t.setRowsWrapperOffset(e.rowsWrapperOffset),e.isLoading!==void 0&&t.setIsLoading(e.isLoading),e.error!==void 0&&t.setErrorMessage(e.error),e.totalRows!==void 0&&t.setTotalRows(e.totalRows),e.pendingScrollTop!==void 0&&t.setPendingScrollTop(e.pendingScrollTop),e.activeCell!==void 0&&t.setActiveCell(e.activeCell),e.selectionRange!==void 0&&t.setSelectionRange(e.selectionRange),e.editingCell!==void 0&&t.setEditingCell(e.editingCell),e.hoverPosition!==void 0&&t.setHoverPosition(e.hoverPosition)},$=(e,t)=>{e.clear(),t.forEach((t,n)=>e.set(n,t))};var Gt=class{owned=null;lastAppliedRows=null;lastAppliedColumns=null;initialize(e,t){return e===null?(this.owned=X(t),this.lastAppliedRows=t,this.owned):e}syncRows(e,t){return t!==null||this.lastAppliedRows===e?null:(this.lastAppliedRows=e,e.length>1e4&&console.warn(`[gp-grid] rows input changed with ${e.length} rows — this triggers a full rebuild. Use createGridData() for efficient updates.`),this.owned?.destroy?.(),this.owned=X(e),this.owned)}syncColumns(e){return e.length===0||this.lastAppliedColumns===e?!1:(this.lastAppliedColumns=e,!0)}destroy(){this.owned?.destroy?.(),this.owned=null}},Kt=class{deps;constructor(e){this.deps=e}headerPointerDown(e,t,n,r){let i=this.deps.getCore();return i===null?!1:i.input.handleHeaderMouseDown(e,t,n,Q(r)).preventDefault}resizePointerDown(e,t,n){let r=this.deps.getCore();return r===null?!1:r.input.handleHeaderResizeMouseDown(e,t,Q(n)).preventDefault}cellPointerDown(e,t,n){let r=this.deps.getCore();if(r===null)return{preventDefault:!1,focusContainer:!1};let i=r.input.handleCellMouseDown(e,t,Q(n));return this.dispatchCellDragStart(i.startDrag,n),{preventDefault:i.preventDefault,focusContainer:i.focusContainer??!1}}cellPointerEnter(e,t){this.deps.getCore()?.input.handleCellMouseEnter(e,t)}cellPointerLeave(){this.deps.getCore()?.input.handleCellMouseLeave()}fillHandlePointerDown(e,t,n){let r=this.deps.getCore();if(r===null)return{preventDefault:!1,stopPropagation:!1};let i=r.input.handleFillHandleMouseDown(e,t,Q(n));return i.startDrag===`fill`&&(qt(n),this.deps.onDragStateChange(r.input.getDragState())),{preventDefault:i.preventDefault,stopPropagation:i.stopPropagation}}dragMove(e){let t=this.deps.getCore(),n=this.deps.getBodyEl();if(t===null||n===null)return;let r=n.getBoundingClientRect(),i=t.input.handleDragMove(Q(e),{top:r.top,left:r.left,width:r.width,height:r.height,scrollTop:n.scrollTop,scrollLeft:n.scrollLeft});this.deps.onDragStateChange(t.input.getDragState()),i?.autoScroll?this.deps.autoScroll.start(i.autoScroll.dx,i.autoScroll.dy):this.deps.autoScroll.stop()}documentPointerMove(e){let t=this.deps.getCore();if(t===null)return!1;let n=t.input.getDragState().isDragging;return this.deps.autoScroll.recordPointer(e),this.dragMove(e),n}documentPointerUp(){let e=this.deps.getCore();if(e===null)return{wasRowDrag:!1};let t=e.input.getDragState().dragType===`row-drag`;return this.deps.autoScroll.stop(),this.deps.autoScroll.clearPointer(),e.input.handleDragEnd(),this.deps.onDragStateChange(e.input.getDragState()),{wasRowDrag:t}}wheel(e,t,n){let r=this.deps.getCore();return r===null?null:r.input.handleWheel(e,t,n)}keyDown(e,t,n,r){let i=this.deps.getCore();return i===null?{preventDefault:!1}:i.input.handleKeyDown({key:e.key,shiftKey:e.shiftKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey},t,n,r)}pasteText(e,t,n){let r=this.deps.getCore();return r===null||t!==null||n?!1:r.pasteClipboardText(e)}dispatchCellDragStart(e,t){let n=this.deps.getCore();if(!(n===null||e===void 0)){if(e===`selection`){n.input.startSelectionDrag(),this.deps.onDragStateChange(n.input.getDragState());return}if(e===`row-drag`){this.deps.onDragStateChange(n.input.getDragState());return}e===`row-drag-pending`&&this.deps.pendingRowDrag.start(t)}}};const qt=e=>{e.target.setPointerCapture(e.pointerId)};export{Bt as AutoScrollDriver,Gt as DataSourceOwner,R as EditManager,I as FillManager,Be as GridCore,C as HighlightManager,Et as IndexedDataStore,Kt as InputEventAdapter,S as InputHandler,W as ParallelSortManager,Vt as PendingRowDragController,O as RowDataManager,w as RowMutationManager,A as ScrollVirtualizationManager,F as SelectionManager,L as SlotPoolManager,j as SortFilterManager,M as TransactionManager,z as WorkerPool,Ht as applyBatchInstructions,zt as applyInstruction,p as buildCellClasses,n as calculateColumnPositions,re as calculateFillHandlePosition,ie as calculateFilterPopupPosition,i as calculateScaledColumnPositions,Mt as cellStyles,K as compareValues,$e as computeValueHash,At as containerStyles,wt as createClientDataSource,X as createDataSourceFromArray,Rt as createInitialState,Ot as createMutableClientDataSource,Tt as createServerDataSource,Ke as detectBoundaryCollisions,J as evaluateColumnFilter,bt as evaluateDateCondition,vt as evaluateNumberCondition,gt as evaluateTextCondition,Ft as filtersStyles,a as findColumnAtX,te as findSlotForRow,y as formatCellValue,g as getFieldValue,r as getTotalWidth,Lt as gridStyles,jt as headerStyles,l as isCellActive,d as isCellEditing,f as isCellInFillPreview,c as isCellSelected,h as isColumnInSelectionRange,m as isRowInSelectionRange,u as isRowVisible,q as isSameDay,U as kWayMerge,Ge as kWayMergeMultiColumn,It as rowDragStyles,St as rowPassesFilter,ne as scrollCellIntoView,Pt as scrollbarStyles,_ as setFieldValue,Nt as statesStyles,G as stringToSortableNumber,Q as toPointerEventData,kt as variablesStyles};
package/dist/styles.css CHANGED
@@ -540,6 +540,9 @@
540
540
  z-index: 1000;
541
541
  max-width: 80%;
542
542
  text-align: center;
543
+ user-select: text;
544
+ -webkit-user-select: text;
545
+ cursor: text;
543
546
  }
544
547
 
545
548
  /* =============================================================================
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@gp-grid/core",
3
3
  "description": "A high-performance, framework-agnostic TypeScript data grid core with virtual scrolling",
4
4
  "private": false,
5
- "version": "0.13.2",
5
+ "version": "0.15.0",
6
6
  "license": "Apache-2.0",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",