@zengrid/core 1.0.1
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 +55 -0
- package/dist/README.md +55 -0
- package/dist/index.cjs.default.js +1 -0
- package/dist/index.cjs.js +9882 -0
- package/dist/index.cjs.mjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.esm.js +9847 -0
- package/dist/package.json +49 -0
- package/dist/src/a11y/aria-manager.d.ts +171 -0
- package/dist/src/a11y/aria-manager.d.ts.map +1 -0
- package/dist/src/a11y/focus-manager.d.ts +124 -0
- package/dist/src/a11y/focus-manager.d.ts.map +1 -0
- package/dist/src/a11y/index.d.ts +8 -0
- package/dist/src/a11y/index.d.ts.map +1 -0
- package/dist/src/data/data-accessor/array-accessor.d.ts +38 -0
- package/dist/src/data/data-accessor/array-accessor.d.ts.map +1 -0
- package/dist/src/data/data-accessor/column-store-accessor.d.ts +41 -0
- package/dist/src/data/data-accessor/column-store-accessor.d.ts.map +1 -0
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts +41 -0
- package/dist/src/data/data-accessor/data-accessor.interface.d.ts.map +1 -0
- package/dist/src/data/data-accessor/index.d.ts +9 -0
- package/dist/src/data/data-accessor/index.d.ts.map +1 -0
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts +39 -0
- package/dist/src/data/data-accessor/sparse-matrix-accessor.d.ts.map +1 -0
- package/dist/src/data/data-manager.d.ts +161 -0
- package/dist/src/data/data-manager.d.ts.map +1 -0
- package/dist/src/data/data-source.interface.d.ts +82 -0
- package/dist/src/data/data-source.interface.d.ts.map +1 -0
- package/dist/src/data/grid-data-model.d.ts +102 -0
- package/dist/src/data/grid-data-model.d.ts.map +1 -0
- package/dist/src/data/index-map/index-map.d.ts +30 -0
- package/dist/src/data/index-map/index-map.d.ts.map +1 -0
- package/dist/src/data/index-map/index-map.interface.d.ts +49 -0
- package/dist/src/data/index-map/index-map.interface.d.ts.map +1 -0
- package/dist/src/data/index-map/index.d.ts +7 -0
- package/dist/src/data/index-map/index.d.ts.map +1 -0
- package/dist/src/data/index.d.ts +9 -0
- package/dist/src/data/index.d.ts.map +1 -0
- package/dist/src/editing/cell-editor.interface.d.ts +87 -0
- package/dist/src/editing/cell-editor.interface.d.ts.map +1 -0
- package/dist/src/editing/date-editor.d.ts +67 -0
- package/dist/src/editing/date-editor.d.ts.map +1 -0
- package/dist/src/editing/editor-manager.d.ts +141 -0
- package/dist/src/editing/editor-manager.d.ts.map +1 -0
- package/dist/src/editing/index.d.ts +15 -0
- package/dist/src/editing/index.d.ts.map +1 -0
- package/dist/src/editing/number-editor.d.ts +68 -0
- package/dist/src/editing/number-editor.d.ts.map +1 -0
- package/dist/src/editing/select-editor.d.ts +53 -0
- package/dist/src/editing/select-editor.d.ts.map +1 -0
- package/dist/src/editing/text-editor.d.ts +69 -0
- package/dist/src/editing/text-editor.d.ts.map +1 -0
- package/dist/src/events/event-emitter.d.ts +90 -0
- package/dist/src/events/event-emitter.d.ts.map +1 -0
- package/dist/src/events/grid-events.d.ts +277 -0
- package/dist/src/events/grid-events.d.ts.map +1 -0
- package/dist/src/events/index.d.ts +6 -0
- package/dist/src/events/index.d.ts.map +1 -0
- package/dist/src/features/autofill/autofill-manager.d.ts +103 -0
- package/dist/src/features/autofill/autofill-manager.d.ts.map +1 -0
- package/dist/src/features/autofill/index.d.ts +6 -0
- package/dist/src/features/autofill/index.d.ts.map +1 -0
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts +52 -0
- package/dist/src/features/column-resize/auto-fit-calculator.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize-manager.d.ts +114 -0
- package/dist/src/features/column-resize/column-resize-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts +167 -0
- package/dist/src/features/column-resize/column-resize-manager.interface.d.ts.map +1 -0
- package/dist/src/features/column-resize/column-resize.styles.css +30 -0
- package/dist/src/features/column-resize/index.d.ts +15 -0
- package/dist/src/features/column-resize/index.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts +52 -0
- package/dist/src/features/column-resize/resize-constraint-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts +41 -0
- package/dist/src/features/column-resize/resize-handle-renderer.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-preview.d.ts +32 -0
- package/dist/src/features/column-resize/resize-preview.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-state-manager.d.ts +75 -0
- package/dist/src/features/column-resize/resize-state-manager.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-strategies.d.ts +26 -0
- package/dist/src/features/column-resize/resize-strategies.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-test-helper.d.ts +71 -0
- package/dist/src/features/column-resize/resize-test-helper.d.ts.map +1 -0
- package/dist/src/features/column-resize/resize-zone-detector.d.ts +32 -0
- package/dist/src/features/column-resize/resize-zone-detector.d.ts.map +1 -0
- package/dist/src/features/copy-paste/clipboard-manager.d.ts +116 -0
- package/dist/src/features/copy-paste/clipboard-manager.d.ts.map +1 -0
- package/dist/src/features/copy-paste/index.d.ts +6 -0
- package/dist/src/features/copy-paste/index.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts +100 -0
- package/dist/src/features/filtering/adapters/adapter.interface.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts +124 -0
- package/dist/src/features/filtering/adapters/graphql-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/index.d.ts +11 -0
- package/dist/src/features/filtering/adapters/index.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts +108 -0
- package/dist/src/features/filtering/adapters/rest-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts +123 -0
- package/dist/src/features/filtering/adapters/sql-adapter.d.ts.map +1 -0
- package/dist/src/features/filtering/adapters/types.d.ts +201 -0
- package/dist/src/features/filtering/adapters/types.d.ts.map +1 -0
- package/dist/src/features/filtering/column-filter.d.ts +117 -0
- package/dist/src/features/filtering/column-filter.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-autocomplete.d.ts +78 -0
- package/dist/src/features/filtering/filter-autocomplete.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-cache.d.ts +113 -0
- package/dist/src/features/filtering/filter-cache.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-compiler.d.ts +66 -0
- package/dist/src/features/filtering/filter-compiler.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts +131 -0
- package/dist/src/features/filtering/filter-export-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-index-manager.d.ts +126 -0
- package/dist/src/features/filtering/filter-index-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-manager.d.ts +408 -0
- package/dist/src/features/filtering/filter-manager.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-optimizer.d.ts +101 -0
- package/dist/src/features/filtering/filter-optimizer.d.ts.map +1 -0
- package/dist/src/features/filtering/filter-query-parser.d.ts +69 -0
- package/dist/src/features/filtering/filter-query-parser.d.ts.map +1 -0
- package/dist/src/features/filtering/index.d.ts +20 -0
- package/dist/src/features/filtering/index.d.ts.map +1 -0
- package/dist/src/features/filtering/range-filter-optimizer.d.ts +138 -0
- package/dist/src/features/filtering/range-filter-optimizer.d.ts.map +1 -0
- package/dist/src/features/filtering/substring-filter.d.ts +90 -0
- package/dist/src/features/filtering/substring-filter.d.ts.map +1 -0
- package/dist/src/features/filtering/types.d.ts +204 -0
- package/dist/src/features/filtering/types.d.ts.map +1 -0
- package/dist/src/features/formulas/formula-calculator.d.ts +151 -0
- package/dist/src/features/formulas/formula-calculator.d.ts.map +1 -0
- package/dist/src/features/formulas/index.d.ts +6 -0
- package/dist/src/features/formulas/index.d.ts.map +1 -0
- package/dist/src/features/hit-testing/index.d.ts +7 -0
- package/dist/src/features/hit-testing/index.d.ts.map +1 -0
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts +137 -0
- package/dist/src/features/hit-testing/spatial-hit-tester.d.ts.map +1 -0
- package/dist/src/features/loading/index.d.ts +5 -0
- package/dist/src/features/loading/index.d.ts.map +1 -0
- package/dist/src/features/loading/loading-indicator.d.ts +79 -0
- package/dist/src/features/loading/loading-indicator.d.ts.map +1 -0
- package/dist/src/features/loading/loading.styles.css +413 -0
- package/dist/src/features/pagination/index.d.ts +5 -0
- package/dist/src/features/pagination/index.d.ts.map +1 -0
- package/dist/src/features/pagination/pagination.styles.css +288 -0
- package/dist/src/features/pagination/paginator.d.ts +89 -0
- package/dist/src/features/pagination/paginator.d.ts.map +1 -0
- package/dist/src/features/selection/index.d.ts +7 -0
- package/dist/src/features/selection/index.d.ts.map +1 -0
- package/dist/src/features/selection/selection-manager.d.ts +167 -0
- package/dist/src/features/selection/selection-manager.d.ts.map +1 -0
- package/dist/src/features/sorting/index.d.ts +13 -0
- package/dist/src/features/sorting/index.d.ts.map +1 -0
- package/dist/src/features/sorting/row-sorter.interface.d.ts +63 -0
- package/dist/src/features/sorting/row-sorter.interface.d.ts.map +1 -0
- package/dist/src/features/sorting/single-column-sorter.d.ts +75 -0
- package/dist/src/features/sorting/single-column-sorter.d.ts.map +1 -0
- package/dist/src/features/sorting/sort-manager.d.ts +132 -0
- package/dist/src/features/sorting/sort-manager.d.ts.map +1 -0
- package/dist/src/features/undo-redo/index.d.ts +8 -0
- package/dist/src/features/undo-redo/index.d.ts.map +1 -0
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts +215 -0
- package/dist/src/features/undo-redo/undo-redo-manager.d.ts.map +1 -0
- package/dist/src/grid.d.ts +412 -0
- package/dist/src/grid.d.ts.map +1 -0
- package/dist/src/i18n/index.d.ts +8 -0
- package/dist/src/i18n/index.d.ts.map +1 -0
- package/dist/src/i18n/locale-manager.d.ts +123 -0
- package/dist/src/i18n/locale-manager.d.ts.map +1 -0
- package/dist/src/i18n/rtl-support.d.ts +120 -0
- package/dist/src/i18n/rtl-support.d.ts.map +1 -0
- package/dist/src/index.d.ts +38 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/keyboard/index.d.ts +6 -0
- package/dist/src/keyboard/index.d.ts.map +1 -0
- package/dist/src/keyboard/keyboard-navigator.d.ts +171 -0
- package/dist/src/keyboard/keyboard-navigator.d.ts.map +1 -0
- package/dist/src/rendering/cache/index.d.ts +3 -0
- package/dist/src/rendering/cache/index.d.ts.map +1 -0
- package/dist/src/rendering/cache/renderer-cache.d.ts +100 -0
- package/dist/src/rendering/cache/renderer-cache.d.ts.map +1 -0
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts +89 -0
- package/dist/src/rendering/cache/renderer-cache.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/cell-pool.d.ts +36 -0
- package/dist/src/rendering/cell-pool/cell-pool.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts +76 -0
- package/dist/src/rendering/cell-pool/cell-pool.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-pool/index.d.ts +6 -0
- package/dist/src/rendering/cell-pool/index.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts +46 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts +86 -0
- package/dist/src/rendering/cell-positioner/cell-positioner.interface.d.ts.map +1 -0
- package/dist/src/rendering/cell-positioner/index.d.ts +6 -0
- package/dist/src/rendering/cell-positioner/index.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts +62 -0
- package/dist/src/rendering/height-provider/height-provider.interface.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/index.d.ts +7 -0
- package/dist/src/rendering/height-provider/index.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts +31 -0
- package/dist/src/rendering/height-provider/uniform-height-provider.d.ts.map +1 -0
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts +33 -0
- package/dist/src/rendering/height-provider/variable-height-provider.d.ts.map +1 -0
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts +105 -0
- package/dist/src/rendering/renderers/advanced-cell-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/image-renderer.d.ts +60 -0
- package/dist/src/rendering/renderers/image-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/index.d.ts +13 -0
- package/dist/src/rendering/renderers/index.d.ts.map +1 -0
- package/dist/src/rendering/renderers/number-renderer.d.ts +71 -0
- package/dist/src/rendering/renderers/number-renderer.d.ts.map +1 -0
- package/dist/src/rendering/renderers/renderer-registry.d.ts +55 -0
- package/dist/src/rendering/renderers/renderer-registry.d.ts.map +1 -0
- package/dist/src/rendering/renderers/renderer.interface.d.ts +79 -0
- package/dist/src/rendering/renderers/renderer.interface.d.ts.map +1 -0
- package/dist/src/rendering/renderers/text-renderer.d.ts +20 -0
- package/dist/src/rendering/renderers/text-renderer.d.ts.map +1 -0
- package/dist/src/rendering/spatial-hit-tester.d.ts +108 -0
- package/dist/src/rendering/spatial-hit-tester.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/index.d.ts +6 -0
- package/dist/src/rendering/virtual-scroller/index.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts +56 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.d.ts.map +1 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts +170 -0
- package/dist/src/rendering/virtual-scroller/virtual-scroller.interface.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/index.d.ts +7 -0
- package/dist/src/rendering/width-provider/index.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts +31 -0
- package/dist/src/rendering/width-provider/uniform-width-provider.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts +33 -0
- package/dist/src/rendering/width-provider/variable-width-provider.d.ts.map +1 -0
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts +62 -0
- package/dist/src/rendering/width-provider/width-provider.interface.d.ts.map +1 -0
- package/dist/src/selection/hit-tester.d.ts +168 -0
- package/dist/src/selection/hit-tester.d.ts.map +1 -0
- package/dist/src/selection/hit-tester.interface.d.ts +108 -0
- package/dist/src/selection/hit-tester.interface.d.ts.map +1 -0
- package/dist/src/selection/index.d.ts +9 -0
- package/dist/src/selection/index.d.ts.map +1 -0
- package/dist/src/selection/range-utils.d.ts +219 -0
- package/dist/src/selection/range-utils.d.ts.map +1 -0
- package/dist/src/selection/range-utils.interface.d.ts +51 -0
- package/dist/src/selection/range-utils.interface.d.ts.map +1 -0
- package/dist/src/styles/grid.css +356 -0
- package/dist/src/styles.css +273 -0
- package/dist/src/touch/index.d.ts +6 -0
- package/dist/src/touch/index.d.ts.map +1 -0
- package/dist/src/touch/touch-handler.d.ts +167 -0
- package/dist/src/touch/touch-handler.d.ts.map +1 -0
- package/dist/src/types/index.d.ts +133 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types.d.ts +559 -0
- package/dist/src/types.d.ts.map +1 -0
- package/package.json +47 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import type { DataLoadRequest, DataLoadResponse, SortState, FilterModel } from '../types';
|
|
2
|
+
import { OperationModeManager, type OperationModeConfig } from '@zengrid/shared';
|
|
3
|
+
import type { EventEmitter } from '../events/event-emitter';
|
|
4
|
+
import type { GridEvents } from '../events/grid-events';
|
|
5
|
+
/**
|
|
6
|
+
* Data manager options
|
|
7
|
+
*/
|
|
8
|
+
export interface DataManagerOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Initial row count
|
|
11
|
+
*/
|
|
12
|
+
rowCount: number;
|
|
13
|
+
/**
|
|
14
|
+
* Event emitter for grid events
|
|
15
|
+
*/
|
|
16
|
+
events?: EventEmitter<GridEvents>;
|
|
17
|
+
/**
|
|
18
|
+
* Data operation mode configuration
|
|
19
|
+
*/
|
|
20
|
+
modeConfig: OperationModeConfig<(request: DataLoadRequest) => Promise<DataLoadResponse>>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* DataManager - Manages data loading in frontend or backend mode
|
|
24
|
+
*
|
|
25
|
+
* **Frontend Mode** (default):
|
|
26
|
+
* - All data loaded in memory via setData()
|
|
27
|
+
* - Filtering and sorting applied in-memory
|
|
28
|
+
* - Fast operations, suitable for datasets that fit in memory
|
|
29
|
+
*
|
|
30
|
+
* **Backend Mode**:
|
|
31
|
+
* - Data loaded on-demand via onDataRequest callback
|
|
32
|
+
* - Filtering and sorting delegated to server
|
|
33
|
+
* - Ideal for large datasets, server-side pagination
|
|
34
|
+
*
|
|
35
|
+
* **Auto Mode**:
|
|
36
|
+
* - Uses backend if onDataRequest callback is provided
|
|
37
|
+
* - Falls back to frontend mode otherwise
|
|
38
|
+
*
|
|
39
|
+
* @example Frontend Mode
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const dataManager = new DataManager({
|
|
42
|
+
* rowCount: 100000,
|
|
43
|
+
* modeConfig: { mode: 'frontend' },
|
|
44
|
+
* });
|
|
45
|
+
*
|
|
46
|
+
* dataManager.setData(allData);
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @example Backend Mode
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const dataManager = new DataManager({
|
|
52
|
+
* rowCount: 1000000,
|
|
53
|
+
* modeConfig: {
|
|
54
|
+
* mode: 'backend',
|
|
55
|
+
* callback: async (request) => {
|
|
56
|
+
* const response = await fetch('/api/data', {
|
|
57
|
+
* method: 'POST',
|
|
58
|
+
* body: JSON.stringify(request),
|
|
59
|
+
* });
|
|
60
|
+
* return response.json();
|
|
61
|
+
* },
|
|
62
|
+
* },
|
|
63
|
+
* });
|
|
64
|
+
*
|
|
65
|
+
* // Data loaded automatically when needed
|
|
66
|
+
* await dataManager.loadRange(0, 100);
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare class DataManager extends OperationModeManager<(request: DataLoadRequest) => Promise<DataLoadResponse>> {
|
|
70
|
+
private rowCount;
|
|
71
|
+
private events?;
|
|
72
|
+
private data;
|
|
73
|
+
private cachedRanges;
|
|
74
|
+
private totalRows;
|
|
75
|
+
private pendingRequests;
|
|
76
|
+
private isLoading;
|
|
77
|
+
private maxCacheSize;
|
|
78
|
+
constructor(options: DataManagerOptions);
|
|
79
|
+
/**
|
|
80
|
+
* Set data (frontend mode)
|
|
81
|
+
*/
|
|
82
|
+
setData(data: any[][]): void;
|
|
83
|
+
/**
|
|
84
|
+
* Get all data (frontend mode)
|
|
85
|
+
*/
|
|
86
|
+
getData(): any[][];
|
|
87
|
+
/**
|
|
88
|
+
* Get value at specific cell
|
|
89
|
+
*/
|
|
90
|
+
getValue(row: number, col: number): any;
|
|
91
|
+
/**
|
|
92
|
+
* Get row data
|
|
93
|
+
*/
|
|
94
|
+
getRow(row: number): any[];
|
|
95
|
+
/**
|
|
96
|
+
* Load data range (backend mode)
|
|
97
|
+
*/
|
|
98
|
+
loadRange(startRow: number, endRow: number, sortState?: SortState[], filterState?: FilterModel[], filterExports?: {
|
|
99
|
+
filter?: import('../features/filtering/types').FieldFilterState;
|
|
100
|
+
queryString?: string;
|
|
101
|
+
graphqlWhere?: Record<string, any>;
|
|
102
|
+
sql?: import('../features/filtering/adapters/types').SQLFilterExport;
|
|
103
|
+
}): Promise<void>;
|
|
104
|
+
/**
|
|
105
|
+
* Execute the actual data load request
|
|
106
|
+
*/
|
|
107
|
+
private executeLoadRange;
|
|
108
|
+
/**
|
|
109
|
+
* Validate load response
|
|
110
|
+
*/
|
|
111
|
+
private validateLoadResponse;
|
|
112
|
+
/**
|
|
113
|
+
* Add to cache with size limit
|
|
114
|
+
*/
|
|
115
|
+
private addToCache;
|
|
116
|
+
/**
|
|
117
|
+
* Merge loaded range data into existing data
|
|
118
|
+
*/
|
|
119
|
+
private mergeRangeData;
|
|
120
|
+
/**
|
|
121
|
+
* Clear cache (e.g., after sort/filter changes)
|
|
122
|
+
*/
|
|
123
|
+
clearCache(): void;
|
|
124
|
+
/**
|
|
125
|
+
* Get total row count
|
|
126
|
+
*/
|
|
127
|
+
getTotalRows(): number;
|
|
128
|
+
/**
|
|
129
|
+
* Update row count
|
|
130
|
+
*/
|
|
131
|
+
updateRowCount(rowCount: number): void;
|
|
132
|
+
/**
|
|
133
|
+
* Check if data is currently loading
|
|
134
|
+
*/
|
|
135
|
+
isDataLoading(): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Get number of pending requests
|
|
138
|
+
*/
|
|
139
|
+
getPendingRequestCount(): number;
|
|
140
|
+
/**
|
|
141
|
+
* Cancel all pending requests
|
|
142
|
+
*/
|
|
143
|
+
cancelPendingRequests(): void;
|
|
144
|
+
/**
|
|
145
|
+
* Get cache statistics
|
|
146
|
+
*/
|
|
147
|
+
getCacheStats(): {
|
|
148
|
+
size: number;
|
|
149
|
+
maxSize: number;
|
|
150
|
+
hitRate: number;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* Set maximum cache size
|
|
154
|
+
*/
|
|
155
|
+
setMaxCacheSize(size: number): void;
|
|
156
|
+
/**
|
|
157
|
+
* Destroy data manager
|
|
158
|
+
*/
|
|
159
|
+
destroy(): void;
|
|
160
|
+
}
|
|
161
|
+
//# sourceMappingURL=data-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-manager.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/data/data-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAE,KAAK,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAElC;;OAEG;IACH,UAAU,EAAE,mBAAmB,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;CAC1F;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,WAAY,SAAQ,oBAAoB,CAAC,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC5G,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAA2B;IAC1C,OAAO,CAAC,IAAI,CAAe;IAC3B,OAAO,CAAC,YAAY,CAAmC;IACvD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,eAAe,CAAyC;IAChE,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,YAAY,CAAe;gBAEvB,OAAO,EAAE,kBAAkB;IAOvC;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,IAAI;IAqC5B;;OAEG;IACH,OAAO,IAAI,GAAG,EAAE,EAAE;IAIlB;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG;IASvC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IAQ1B;;OAEG;IACG,SAAS,CACb,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,SAAS,EAAE,EACvB,WAAW,CAAC,EAAE,WAAW,EAAE,EAC3B,aAAa,CAAC,EAAE;QACd,MAAM,CAAC,EAAE,OAAO,6BAA6B,EAAE,gBAAgB,CAAC;QAChE,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACnC,GAAG,CAAC,EAAE,OAAO,sCAAsC,EAAE,eAAe,CAAC;KACtE,GACA,OAAO,CAAC,IAAI,CAAC;IAsEhB;;OAEG;YACW,gBAAgB;IA4H9B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAmC5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAYlB;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAWtC;;OAEG;IACH,aAAa,IAAI,OAAO;IAIxB;;OAEG;IACH,sBAAsB,IAAI,MAAM;IAIhC;;OAEG;IACH,qBAAqB,IAAI,IAAI;IAK7B;;OAEG;IACH,aAAa,IAAI;QACf,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACjB;IAQD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAYnC;;OAEG;IACH,OAAO,IAAI,IAAI;CAOhB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { CellRef } from '../types';
|
|
2
|
+
import type { EventEmitter } from '../events/event-emitter';
|
|
3
|
+
/**
|
|
4
|
+
* Data source interface
|
|
5
|
+
*
|
|
6
|
+
* Abstraction layer for grid data management.
|
|
7
|
+
* Provides methods for CRUD operations and change tracking.
|
|
8
|
+
*/
|
|
9
|
+
export interface DataSource {
|
|
10
|
+
/**
|
|
11
|
+
* Get value at specific cell
|
|
12
|
+
* @param row - Row index
|
|
13
|
+
* @param col - Column index
|
|
14
|
+
* @returns Cell value or undefined
|
|
15
|
+
*/
|
|
16
|
+
getValue(row: number, col: number): any;
|
|
17
|
+
/**
|
|
18
|
+
* Set value at specific cell
|
|
19
|
+
* @param row - Row index
|
|
20
|
+
* @param col - Column index
|
|
21
|
+
* @param value - New value
|
|
22
|
+
*/
|
|
23
|
+
setValue(row: number, col: number, value: any): void;
|
|
24
|
+
/**
|
|
25
|
+
* Get all values in a row
|
|
26
|
+
* @param row - Row index
|
|
27
|
+
* @returns Array of values or object with column keys
|
|
28
|
+
*/
|
|
29
|
+
getRow(row: number): any[] | Record<string, any>;
|
|
30
|
+
/**
|
|
31
|
+
* Get all values in a column
|
|
32
|
+
* @param col - Column index
|
|
33
|
+
* @returns Array of values
|
|
34
|
+
*/
|
|
35
|
+
getColumn(col: number): any[];
|
|
36
|
+
/**
|
|
37
|
+
* Set data for multiple cells
|
|
38
|
+
* @param data - 2D array or map of data
|
|
39
|
+
*/
|
|
40
|
+
setData(data: any[][] | Map<string, any>): void;
|
|
41
|
+
/**
|
|
42
|
+
* Clear all data
|
|
43
|
+
*/
|
|
44
|
+
clear(): void;
|
|
45
|
+
/**
|
|
46
|
+
* Total number of rows
|
|
47
|
+
*/
|
|
48
|
+
readonly rowCount: number;
|
|
49
|
+
/**
|
|
50
|
+
* Total number of columns
|
|
51
|
+
*/
|
|
52
|
+
readonly colCount: number;
|
|
53
|
+
/**
|
|
54
|
+
* Event emitter for data changes
|
|
55
|
+
*/
|
|
56
|
+
readonly events?: EventEmitter<DataSourceEvents>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Data source events
|
|
60
|
+
*/
|
|
61
|
+
export interface DataSourceEvents {
|
|
62
|
+
'change': {
|
|
63
|
+
cell: CellRef;
|
|
64
|
+
oldValue: any;
|
|
65
|
+
newValue: any;
|
|
66
|
+
};
|
|
67
|
+
'bulkChange': {
|
|
68
|
+
changes: Array<{
|
|
69
|
+
cell: CellRef;
|
|
70
|
+
oldValue: any;
|
|
71
|
+
newValue: any;
|
|
72
|
+
}>;
|
|
73
|
+
};
|
|
74
|
+
'clear': {
|
|
75
|
+
timestamp: number;
|
|
76
|
+
};
|
|
77
|
+
'dataLoad': {
|
|
78
|
+
rowCount: number;
|
|
79
|
+
colCount: number;
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=data-source.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-source.interface.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/data/data-source.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;IAExC;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;IAErD;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAEjD;;;;OAIG;IACH,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;IAE9B;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;IAEhD;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,gBAAgB,CAAC,CAAC;CAClD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE;QACR,IAAI,EAAE,OAAO,CAAC;QACd,QAAQ,EAAE,GAAG,CAAC;QACd,QAAQ,EAAE,GAAG,CAAC;KACf,CAAC;IAEF,YAAY,EAAE;QACZ,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,OAAO,CAAC;YACd,QAAQ,EAAE,GAAG,CAAC;YACd,QAAQ,EAAE,GAAG,CAAC;SACf,CAAC,CAAC;KACJ,CAAC;IAEF,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF,UAAU,EAAE;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { DataSource, DataSourceEvents } from './data-source.interface';
|
|
2
|
+
import { SparseMatrix } from '@zengrid/shared/data-structures/sparse-matrix';
|
|
3
|
+
import { ColumnStore } from '@zengrid/shared/data-structures/column-store';
|
|
4
|
+
import { EventEmitter } from '../events/event-emitter';
|
|
5
|
+
/**
|
|
6
|
+
* Grid data model options
|
|
7
|
+
*/
|
|
8
|
+
export interface GridDataModelOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Initial row count
|
|
11
|
+
*/
|
|
12
|
+
rowCount: number;
|
|
13
|
+
/**
|
|
14
|
+
* Initial column count
|
|
15
|
+
*/
|
|
16
|
+
colCount: number;
|
|
17
|
+
/**
|
|
18
|
+
* Storage strategy: 'sparse' (SparseMatrix) or 'columnar' (ColumnStore)
|
|
19
|
+
* @default 'sparse'
|
|
20
|
+
*/
|
|
21
|
+
storage?: 'sparse' | 'columnar';
|
|
22
|
+
/**
|
|
23
|
+
* Enable change tracking and events
|
|
24
|
+
* @default true
|
|
25
|
+
*/
|
|
26
|
+
enableEvents?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Column definitions (required for columnar storage)
|
|
29
|
+
*/
|
|
30
|
+
columns?: Array<{
|
|
31
|
+
name: string;
|
|
32
|
+
type: 'number' | 'string' | 'boolean';
|
|
33
|
+
}>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* GridDataModel - Main data model for grid
|
|
37
|
+
*
|
|
38
|
+
* Provides a unified interface over SparseMatrix and ColumnStore.
|
|
39
|
+
* Supports change tracking, events, and efficient data access.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```typescript
|
|
43
|
+
* // Sparse storage (default)
|
|
44
|
+
* const model = new GridDataModel({
|
|
45
|
+
* rowCount: 100000,
|
|
46
|
+
* colCount: 10,
|
|
47
|
+
* });
|
|
48
|
+
*
|
|
49
|
+
* model.setValue(0, 0, 'Hello');
|
|
50
|
+
* const value = model.getValue(0, 0); // 'Hello'
|
|
51
|
+
*
|
|
52
|
+
* // Columnar storage
|
|
53
|
+
* const columnarModel = new GridDataModel({
|
|
54
|
+
* rowCount: 100000,
|
|
55
|
+
* colCount: 3,
|
|
56
|
+
* storage: 'columnar',
|
|
57
|
+
* columns: [
|
|
58
|
+
* { name: 'id', type: 'number' },
|
|
59
|
+
* { name: 'name', type: 'string' },
|
|
60
|
+
* { name: 'active', type: 'boolean' },
|
|
61
|
+
* ],
|
|
62
|
+
* });
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare class GridDataModel implements DataSource {
|
|
66
|
+
private rows;
|
|
67
|
+
private cols;
|
|
68
|
+
private storage;
|
|
69
|
+
private sparseData;
|
|
70
|
+
private columnarData;
|
|
71
|
+
private columnNames;
|
|
72
|
+
private emitter;
|
|
73
|
+
constructor(options: GridDataModelOptions);
|
|
74
|
+
getValue(row: number, col: number): any;
|
|
75
|
+
setValue(row: number, col: number, value: any): void;
|
|
76
|
+
getRow(row: number): any[] | Record<string, any>;
|
|
77
|
+
getColumn(col: number): any[];
|
|
78
|
+
setData(data: any[][] | Map<string, any>): void;
|
|
79
|
+
clear(): void;
|
|
80
|
+
get rowCount(): number;
|
|
81
|
+
get colCount(): number;
|
|
82
|
+
get events(): EventEmitter<DataSourceEvents> | undefined;
|
|
83
|
+
/**
|
|
84
|
+
* Get storage type
|
|
85
|
+
*/
|
|
86
|
+
getStorageType(): 'sparse' | 'columnar';
|
|
87
|
+
/**
|
|
88
|
+
* Get underlying storage instance
|
|
89
|
+
*/
|
|
90
|
+
getStorage(): SparseMatrix<any> | ColumnStore;
|
|
91
|
+
/**
|
|
92
|
+
* Check if cell has value
|
|
93
|
+
* @param row - Row index
|
|
94
|
+
* @param col - Column index
|
|
95
|
+
*/
|
|
96
|
+
hasValue(row: number, col: number): boolean;
|
|
97
|
+
/**
|
|
98
|
+
* Get count of non-empty cells
|
|
99
|
+
*/
|
|
100
|
+
getCellCount(): number;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=grid-data-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-data-model.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/data/grid-data-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5E,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,8CAA8C,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAEhC;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;KACvC,CAAC,CAAC;CACJ;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,qBAAa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,OAAO,CAA+C;gBAElD,OAAO,EAAE,oBAAoB;IA6BzC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,GAAG;IAgBvC,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IA8BpD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAmBhD,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE;IA2B7B,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI;IAkE/C,KAAK,IAAI,IAAI;IAYb,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,MAAM,IAAI,YAAY,CAAC,gBAAgB,CAAC,GAAG,SAAS,CAEvD;IAED;;OAEG;IACH,cAAc,IAAI,QAAQ,GAAG,UAAU;IAIvC;;OAEG;IACH,UAAU,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,WAAW;IAQ7C;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAa3C;;OAEG;IACH,YAAY,IAAI,MAAM;CAevB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { IndexMap } from './index-map.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Create an IndexMap from an array of data indices
|
|
4
|
+
*
|
|
5
|
+
* @param indices - Array of data indices in visual order
|
|
6
|
+
* @returns IndexMap instance
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // After sorting by column values
|
|
11
|
+
* const indexMap = createIndexMap([3, 1, 4, 0, 2]);
|
|
12
|
+
* indexMap.toDataIndex(0); // 3 (visual row 0 is data row 3)
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function createIndexMap(indices: number[]): IndexMap;
|
|
16
|
+
/**
|
|
17
|
+
* Create an identity IndexMap where visual index equals data index
|
|
18
|
+
*
|
|
19
|
+
* @param rowCount - Total number of rows
|
|
20
|
+
* @returns Identity IndexMap
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* const indexMap = createIdentityIndexMap(100);
|
|
25
|
+
* indexMap.toDataIndex(5); // 5
|
|
26
|
+
* indexMap.toDataIndex(99); // 99
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare function createIdentityIndexMap(rowCount: number): IndexMap;
|
|
30
|
+
//# sourceMappingURL=index-map.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-map.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/data/index-map/index-map.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAgGtD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,QAAQ,CAE1D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAKjE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* An immutable mapping from visual indices to data indices
|
|
3
|
+
*
|
|
4
|
+
* IndexMap enables non-destructive transformations like sorting and filtering
|
|
5
|
+
* by mapping visual/display indices to underlying data indices.
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // After sorting: visual row 0 maps to data row 5
|
|
10
|
+
* const indexMap = createIndexMap([5, 2, 8, 1]);
|
|
11
|
+
* indexMap.toDataIndex(0); // 5
|
|
12
|
+
* indexMap.toDataIndex(1); // 2
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export interface IndexMap {
|
|
16
|
+
/**
|
|
17
|
+
* Get the data index for a visual index
|
|
18
|
+
* @param visualIndex - Visual/display row index
|
|
19
|
+
* @returns Data row index, or -1 if out of bounds
|
|
20
|
+
*/
|
|
21
|
+
toDataIndex(visualIndex: number): number;
|
|
22
|
+
/**
|
|
23
|
+
* Get the visual index for a data index
|
|
24
|
+
* @param dataIndex - Original data row index
|
|
25
|
+
* @returns Visual row index, or -1 if filtered out
|
|
26
|
+
*/
|
|
27
|
+
toVisualIndex(dataIndex: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* Number of visible rows (after filtering)
|
|
30
|
+
*/
|
|
31
|
+
readonly length: number;
|
|
32
|
+
/**
|
|
33
|
+
* Get data indices as array (for iteration)
|
|
34
|
+
* @returns Read-only array of data indices in visual order
|
|
35
|
+
*/
|
|
36
|
+
readonly indices: ReadonlyArray<number>;
|
|
37
|
+
/**
|
|
38
|
+
* Iterate over [visualIndex, dataIndex] pairs
|
|
39
|
+
*/
|
|
40
|
+
[Symbol.iterator](): IterableIterator<[number, number]>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Options for creating an identity IndexMap
|
|
44
|
+
*/
|
|
45
|
+
export interface IndexMapOptions {
|
|
46
|
+
/** Total number of rows */
|
|
47
|
+
rowCount: number;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=index-map.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-map.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/data/index-map/index-map.interface.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,QAAQ;IACvB;;;;OAIG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzC;;;;OAIG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAExC;;OAEG;IACH,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IndexMap - Non-destructive index transformation for sorting/filtering
|
|
3
|
+
* @packageDocumentation
|
|
4
|
+
*/
|
|
5
|
+
export type { IndexMap, IndexMapOptions } from './index-map.interface';
|
|
6
|
+
export { createIndexMap, createIdentityIndexMap } from './index-map';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/data/index-map/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data layer for ZenGrid
|
|
3
|
+
*/
|
|
4
|
+
export type { DataSource, DataSourceEvents } from './data-source.interface';
|
|
5
|
+
export { GridDataModel } from './grid-data-model';
|
|
6
|
+
export type { GridDataModelOptions } from './grid-data-model';
|
|
7
|
+
export { DataManager } from './data-manager';
|
|
8
|
+
export type { DataManagerOptions } from './data-manager';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/data/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { CellRef } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Cell editor interface
|
|
4
|
+
*
|
|
5
|
+
* Defines the contract for all cell editors.
|
|
6
|
+
* Editors handle the lifecycle of editing a cell value.
|
|
7
|
+
*/
|
|
8
|
+
export interface CellEditor<T = any> {
|
|
9
|
+
/**
|
|
10
|
+
* Initialize the editor
|
|
11
|
+
* @param container - Container element for the editor
|
|
12
|
+
* @param value - Initial value
|
|
13
|
+
* @param params - Edit parameters
|
|
14
|
+
*/
|
|
15
|
+
init(container: HTMLElement, value: T, params: EditorParams): void;
|
|
16
|
+
/**
|
|
17
|
+
* Get the current value from the editor
|
|
18
|
+
* @returns Current editor value
|
|
19
|
+
*/
|
|
20
|
+
getValue(): T;
|
|
21
|
+
/**
|
|
22
|
+
* Set focus on the editor input
|
|
23
|
+
*/
|
|
24
|
+
focus(): void;
|
|
25
|
+
/**
|
|
26
|
+
* Destroy the editor and cleanup
|
|
27
|
+
*/
|
|
28
|
+
destroy(): void;
|
|
29
|
+
/**
|
|
30
|
+
* Check if current value is valid
|
|
31
|
+
* @returns Validation result
|
|
32
|
+
*/
|
|
33
|
+
isValid?(): boolean | ValidationResult;
|
|
34
|
+
/**
|
|
35
|
+
* Handle key events (optional)
|
|
36
|
+
* @param event - Keyboard event
|
|
37
|
+
* @returns True if handled, false to propagate
|
|
38
|
+
*/
|
|
39
|
+
onKeyDown?(event: KeyboardEvent): boolean;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Parameters passed to editor initialization
|
|
43
|
+
*/
|
|
44
|
+
export interface EditorParams {
|
|
45
|
+
/**
|
|
46
|
+
* Cell being edited
|
|
47
|
+
*/
|
|
48
|
+
cell: CellRef;
|
|
49
|
+
/**
|
|
50
|
+
* Column definition
|
|
51
|
+
*/
|
|
52
|
+
column?: any;
|
|
53
|
+
/**
|
|
54
|
+
* Row data
|
|
55
|
+
*/
|
|
56
|
+
rowData?: any;
|
|
57
|
+
/**
|
|
58
|
+
* Callback when editing is complete
|
|
59
|
+
*/
|
|
60
|
+
onComplete?: (value: any, cancelled: boolean) => void;
|
|
61
|
+
/**
|
|
62
|
+
* Callback when value changes
|
|
63
|
+
*/
|
|
64
|
+
onChange?: (value: any) => void;
|
|
65
|
+
/**
|
|
66
|
+
* Custom editor options
|
|
67
|
+
*/
|
|
68
|
+
options?: Record<string, any>;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validation result
|
|
72
|
+
*/
|
|
73
|
+
export interface ValidationResult {
|
|
74
|
+
/**
|
|
75
|
+
* Whether value is valid
|
|
76
|
+
*/
|
|
77
|
+
valid: boolean;
|
|
78
|
+
/**
|
|
79
|
+
* Error message if invalid
|
|
80
|
+
*/
|
|
81
|
+
message?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Editor factory function type
|
|
85
|
+
*/
|
|
86
|
+
export type EditorFactory<T = any> = (params: EditorParams) => CellEditor<T>;
|
|
87
|
+
//# sourceMappingURL=cell-editor.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cell-editor.interface.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/editing/cell-editor.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC;;;;;GAKG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,GAAG,GAAG;IACjC;;;;;OAKG;IACH,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAEnE;;;OAGG;IACH,QAAQ,IAAI,CAAC,CAAC;IAEd;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,IAAI,OAAO,GAAG,gBAAgB,CAAC;IAEvC;;;;OAIG;IACH,SAAS,CAAC,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,MAAM,CAAC,EAAE,GAAG,CAAC;IAEb;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAEtD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAEhC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC;IAEf;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { CellEditor, EditorParams } from './cell-editor.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Date editor options
|
|
4
|
+
*/
|
|
5
|
+
export interface DateEditorOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Minimum date (ISO string or Date)
|
|
8
|
+
*/
|
|
9
|
+
min?: string | Date;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum date (ISO string or Date)
|
|
12
|
+
*/
|
|
13
|
+
max?: string | Date;
|
|
14
|
+
/**
|
|
15
|
+
* Input type
|
|
16
|
+
* @default 'date'
|
|
17
|
+
*/
|
|
18
|
+
type?: 'date' | 'datetime-local' | 'time';
|
|
19
|
+
/**
|
|
20
|
+
* Date format for display
|
|
21
|
+
* @default 'YYYY-MM-DD'
|
|
22
|
+
*/
|
|
23
|
+
format?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* DateEditor - Date/time input editor
|
|
27
|
+
*
|
|
28
|
+
* Provides a date picker for editing date values.
|
|
29
|
+
* Supports date, datetime, and time inputs with min/max validation.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* const editor = new DateEditor();
|
|
34
|
+
* editor.init(container, new Date(), {
|
|
35
|
+
* cell: { row: 0, col: 0 },
|
|
36
|
+
* options: {
|
|
37
|
+
* type: 'date',
|
|
38
|
+
* min: '2024-01-01',
|
|
39
|
+
* max: '2024-12-31',
|
|
40
|
+
* },
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class DateEditor implements CellEditor<Date | string> {
|
|
45
|
+
private input;
|
|
46
|
+
private options;
|
|
47
|
+
private boundHandleKeyDown;
|
|
48
|
+
constructor();
|
|
49
|
+
init(container: HTMLElement, value: Date | string, params: EditorParams): void;
|
|
50
|
+
getValue(): Date | string;
|
|
51
|
+
focus(): void;
|
|
52
|
+
isValid(): boolean | {
|
|
53
|
+
valid: boolean;
|
|
54
|
+
message?: string;
|
|
55
|
+
};
|
|
56
|
+
destroy(): void;
|
|
57
|
+
private handleKeyDown;
|
|
58
|
+
/**
|
|
59
|
+
* Convert Date or string to input value format
|
|
60
|
+
*/
|
|
61
|
+
private toInputValue;
|
|
62
|
+
/**
|
|
63
|
+
* Format date for display in error messages
|
|
64
|
+
*/
|
|
65
|
+
private formatDate;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=date-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-editor.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/editing/date-editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB;;OAEG;IACH,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEpB;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAE1C;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,UAAW,YAAW,UAAU,CAAC,IAAI,GAAG,MAAM,CAAC;IAC1D,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,kBAAkB,CAAiC;;IAM3D,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAoD9E,QAAQ,IAAI,IAAI,GAAG,MAAM;IAQzB,KAAK,IAAI,IAAI;IAIb,OAAO,IAAI,OAAO,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAwCzD,OAAO,IAAI,IAAI;IAQf,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;IACH,OAAO,CAAC,UAAU;CAGnB"}
|