@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,71 @@
|
|
|
1
|
+
import type { CellRenderer, RenderParams } from './renderer.interface';
|
|
2
|
+
/**
|
|
3
|
+
* Options for NumberRenderer
|
|
4
|
+
*/
|
|
5
|
+
export interface NumberRendererOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Locale for number formatting (e.g., 'en-US', 'de-DE')
|
|
8
|
+
* @default undefined (uses browser default)
|
|
9
|
+
*/
|
|
10
|
+
locale?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Minimum fraction digits
|
|
13
|
+
* @default 0
|
|
14
|
+
*/
|
|
15
|
+
minimumFractionDigits?: number;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum fraction digits
|
|
18
|
+
* @default 2
|
|
19
|
+
*/
|
|
20
|
+
maximumFractionDigits?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Number formatting style
|
|
23
|
+
* @default 'decimal'
|
|
24
|
+
*/
|
|
25
|
+
style?: 'decimal' | 'currency' | 'percent';
|
|
26
|
+
/**
|
|
27
|
+
* Currency code (required if style is 'currency')
|
|
28
|
+
*/
|
|
29
|
+
currency?: string;
|
|
30
|
+
/**
|
|
31
|
+
* CSS class for negative numbers
|
|
32
|
+
* @default 'zg-cell-negative'
|
|
33
|
+
*/
|
|
34
|
+
negativeClass?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* NumberRenderer - Formatted number display
|
|
38
|
+
*
|
|
39
|
+
* Renders numbers with locale-aware formatting using Intl.NumberFormat.
|
|
40
|
+
* Supports decimal, currency, and percentage formats.
|
|
41
|
+
* Applies conditional styling for negative numbers.
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* const renderer = new NumberRenderer({
|
|
46
|
+
* minimumFractionDigits: 2,
|
|
47
|
+
* maximumFractionDigits: 2,
|
|
48
|
+
* });
|
|
49
|
+
* renderer.render(element, { value: 1234.5, ...otherParams });
|
|
50
|
+
* // Displays: "1,234.50"
|
|
51
|
+
* ```
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```typescript
|
|
55
|
+
* const currencyRenderer = new NumberRenderer({
|
|
56
|
+
* style: 'currency',
|
|
57
|
+
* currency: 'USD',
|
|
58
|
+
* });
|
|
59
|
+
* renderer.render(element, { value: 1234.5, ...otherParams });
|
|
60
|
+
* // Displays: "$1,234.50"
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare class NumberRenderer implements CellRenderer {
|
|
64
|
+
private formatter;
|
|
65
|
+
private negativeClass;
|
|
66
|
+
constructor(options?: NumberRendererOptions);
|
|
67
|
+
render(element: HTMLElement, params: RenderParams): void;
|
|
68
|
+
update(element: HTMLElement, params: RenderParams): void;
|
|
69
|
+
destroy(element: HTMLElement): void;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=number-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-renderer.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/renderers/number-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAE/B;;;OAGG;IACH,KAAK,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAE3C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,aAAa,CAAS;gBAElB,OAAO,GAAE,qBAA0B;IAU/C,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAKxD,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAYxD,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;CAIpC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { CellRenderer } from './renderer.interface';
|
|
2
|
+
/**
|
|
3
|
+
* RendererRegistry - Named renderer lookup
|
|
4
|
+
*
|
|
5
|
+
* Manages a collection of renderers by name for dynamic lookup.
|
|
6
|
+
* Provides a default text renderer for fallback.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const registry = new RendererRegistry();
|
|
11
|
+
* registry.register('number', new NumberRenderer());
|
|
12
|
+
* registry.register('image', new ImageRenderer());
|
|
13
|
+
*
|
|
14
|
+
* const renderer = registry.get('number'); // Returns NumberRenderer
|
|
15
|
+
* const fallback = registry.get('unknown'); // Returns TextRenderer (default)
|
|
16
|
+
* ```
|
|
17
|
+
*/
|
|
18
|
+
export declare class RendererRegistry {
|
|
19
|
+
private renderers;
|
|
20
|
+
private defaultRenderer;
|
|
21
|
+
constructor();
|
|
22
|
+
/**
|
|
23
|
+
* Register a renderer with a name
|
|
24
|
+
* @param name - Unique renderer name
|
|
25
|
+
* @param renderer - Renderer instance
|
|
26
|
+
*/
|
|
27
|
+
register(name: string, renderer: CellRenderer): void;
|
|
28
|
+
/**
|
|
29
|
+
* Get a renderer by name
|
|
30
|
+
* @param name - Renderer name (undefined returns default)
|
|
31
|
+
* @returns Renderer instance or default if not found
|
|
32
|
+
*/
|
|
33
|
+
get(name: string | undefined): CellRenderer;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a renderer is registered
|
|
36
|
+
* @param name - Renderer name
|
|
37
|
+
* @returns True if registered
|
|
38
|
+
*/
|
|
39
|
+
has(name: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Unregister a renderer
|
|
42
|
+
* @param name - Renderer name
|
|
43
|
+
* @returns True if unregistered, false if not found or is default
|
|
44
|
+
*/
|
|
45
|
+
unregister(name: string): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Get all registered renderer names
|
|
48
|
+
*/
|
|
49
|
+
get names(): string[];
|
|
50
|
+
/**
|
|
51
|
+
* Clear all renderers except default
|
|
52
|
+
*/
|
|
53
|
+
clear(): void;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=renderer-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-registry.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/renderers/renderer-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGzD;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,eAAe,CAAe;;IAOtC;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAIpD;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,YAAY;IAK3C;;;;OAIG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;;;OAIG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKjC;;OAEG;IACH,IAAI,KAAK,IAAI,MAAM,EAAE,CAEpB;IAED;;OAEG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { CellRef, CellPosition, ColumnDef } from '../../types';
|
|
2
|
+
/**
|
|
3
|
+
* Parameters passed to renderers for rendering a cell
|
|
4
|
+
*/
|
|
5
|
+
export interface RenderParams {
|
|
6
|
+
/**
|
|
7
|
+
* Cell coordinates
|
|
8
|
+
*/
|
|
9
|
+
cell: CellRef;
|
|
10
|
+
/**
|
|
11
|
+
* Cell position and dimensions
|
|
12
|
+
*/
|
|
13
|
+
position: CellPosition;
|
|
14
|
+
/**
|
|
15
|
+
* Cell data value
|
|
16
|
+
*/
|
|
17
|
+
value: any;
|
|
18
|
+
/**
|
|
19
|
+
* Column definition (if available)
|
|
20
|
+
*/
|
|
21
|
+
column?: ColumnDef;
|
|
22
|
+
/**
|
|
23
|
+
* Full row data (for composite renderers that need access to other columns)
|
|
24
|
+
*/
|
|
25
|
+
rowData?: any;
|
|
26
|
+
/**
|
|
27
|
+
* Whether the cell is currently selected
|
|
28
|
+
*/
|
|
29
|
+
isSelected: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Whether the cell is the active cell (has focus)
|
|
32
|
+
*/
|
|
33
|
+
isActive: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Whether the cell is currently being edited
|
|
36
|
+
*/
|
|
37
|
+
isEditing: boolean;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Cell renderer interface
|
|
41
|
+
*
|
|
42
|
+
* Renderers are responsible for displaying cell content in DOM elements.
|
|
43
|
+
* They support both initial render and incremental updates for performance.
|
|
44
|
+
*/
|
|
45
|
+
export interface CellRenderer {
|
|
46
|
+
/**
|
|
47
|
+
* Initial render into a DOM element
|
|
48
|
+
* Called when a cell is first displayed or when switching renderers
|
|
49
|
+
*
|
|
50
|
+
* @param element - DOM element to render into (from cell pool)
|
|
51
|
+
* @param params - Rendering parameters
|
|
52
|
+
*/
|
|
53
|
+
render(element: HTMLElement, params: RenderParams): void;
|
|
54
|
+
/**
|
|
55
|
+
* Update an existing rendered element
|
|
56
|
+
* Called when cell value or state changes but renderer type remains the same
|
|
57
|
+
* Should be optimized for frequent calls (e.g., during scrolling)
|
|
58
|
+
*
|
|
59
|
+
* @param element - DOM element to update
|
|
60
|
+
* @param params - Updated rendering parameters
|
|
61
|
+
*/
|
|
62
|
+
update(element: HTMLElement, params: RenderParams): void;
|
|
63
|
+
/**
|
|
64
|
+
* Cleanup before element is returned to pool
|
|
65
|
+
* Called when cell is scrolled out of view
|
|
66
|
+
*
|
|
67
|
+
* @param element - DOM element to cleanup
|
|
68
|
+
*/
|
|
69
|
+
destroy(element: HTMLElement): void;
|
|
70
|
+
/**
|
|
71
|
+
* Optional: Get CSS class to apply to the cell based on its state
|
|
72
|
+
* Useful for conditional styling
|
|
73
|
+
*
|
|
74
|
+
* @param params - Rendering parameters
|
|
75
|
+
* @returns CSS class name or undefined
|
|
76
|
+
*/
|
|
77
|
+
getCellClass?(params: RenderParams): string | undefined;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=renderer.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/renderers/renderer.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,IAAI,EAAE,OAAO,CAAC;IAEd;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IAEvB;;OAEG;IACH,KAAK,EAAE,GAAG,CAAC;IAEX;;OAEG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IAEnB;;OAEG;IACH,OAAO,CAAC,EAAE,GAAG,CAAC;IAEd;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;IAEpB;;OAEG;IACH,QAAQ,EAAE,OAAO,CAAC;IAElB;;OAEG;IACH,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAEzD;;;;;;;OAOG;IACH,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAAC;IAEzD;;;;;OAKG;IACH,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAEpC;;;;;;OAMG;IACH,YAAY,CAAC,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;CACzD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { CellRenderer, RenderParams } from './renderer.interface';
|
|
2
|
+
/**
|
|
3
|
+
* TextRenderer - Default renderer for text content
|
|
4
|
+
*
|
|
5
|
+
* Displays cell values as plain text with automatic string coercion.
|
|
6
|
+
* Handles null/undefined values by displaying empty string.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const renderer = new TextRenderer();
|
|
11
|
+
* renderer.render(element, { value: 'Hello', ...otherParams });
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare class TextRenderer implements CellRenderer {
|
|
15
|
+
render(element: HTMLElement, params: RenderParams): void;
|
|
16
|
+
update(element: HTMLElement, params: RenderParams): void;
|
|
17
|
+
destroy(element: HTMLElement): void;
|
|
18
|
+
private formatValue;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=text-renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-renderer.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/renderers/text-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEvE;;;;;;;;;;;GAWG;AACH,qBAAa,YAAa,YAAW,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAKxD,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAIxD,OAAO,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAKnC,OAAO,CAAC,WAAW;CAIpB"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spatial Hit Tester using RTree
|
|
3
|
+
*
|
|
4
|
+
* Provides fast hit testing for finding cells at mouse/touch coordinates.
|
|
5
|
+
*/
|
|
6
|
+
import { type Rectangle } from '@zengrid/shared/data-structures/rtree';
|
|
7
|
+
/**
|
|
8
|
+
* Cell reference
|
|
9
|
+
*/
|
|
10
|
+
export interface CellRef {
|
|
11
|
+
row: number;
|
|
12
|
+
col: number;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* SpatialHitTester - Fast hit testing using RTree spatial index
|
|
16
|
+
*
|
|
17
|
+
* Maintains a spatial index of rendered cells for O(log n) hit testing.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* const hitTester = new SpatialHitTester();
|
|
22
|
+
*
|
|
23
|
+
* // Register cells as they're rendered
|
|
24
|
+
* hitTester.registerCell(0, 0, { minX: 0, minY: 0, maxX: 100, maxY: 30 });
|
|
25
|
+
* hitTester.registerCell(0, 1, { minX: 100, minY: 0, maxX: 200, maxY: 30 });
|
|
26
|
+
*
|
|
27
|
+
* // Find cell at mouse position
|
|
28
|
+
* const cell = hitTester.getCellAtPoint(150, 15);
|
|
29
|
+
* // { row: 0, col: 1 }
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
export declare class SpatialHitTester {
|
|
33
|
+
private spatialIndex;
|
|
34
|
+
private renderedCells;
|
|
35
|
+
/**
|
|
36
|
+
* Register a rendered cell with its screen coordinates
|
|
37
|
+
*
|
|
38
|
+
* @param row - Row index
|
|
39
|
+
* @param col - Column index
|
|
40
|
+
* @param rect - Bounding rectangle on screen
|
|
41
|
+
*/
|
|
42
|
+
registerCell(row: number, col: number, rect: Rectangle): void;
|
|
43
|
+
/**
|
|
44
|
+
* Unregister a cell (e.g., when it scrolls out of view)
|
|
45
|
+
*
|
|
46
|
+
* @param row - Row index
|
|
47
|
+
* @param col - Column index
|
|
48
|
+
*/
|
|
49
|
+
unregisterCell(row: number, col: number): void;
|
|
50
|
+
/**
|
|
51
|
+
* Find cell at mouse/touch coordinates
|
|
52
|
+
*
|
|
53
|
+
* @param x - X coordinate
|
|
54
|
+
* @param y - Y coordinate
|
|
55
|
+
* @returns Cell reference or null if no cell at point
|
|
56
|
+
*/
|
|
57
|
+
getCellAtPoint(x: number, y: number): CellRef | null;
|
|
58
|
+
/**
|
|
59
|
+
* Find all cells in a rectangular region (e.g., selection box)
|
|
60
|
+
*
|
|
61
|
+
* @param rect - Search rectangle
|
|
62
|
+
* @returns Array of cell references
|
|
63
|
+
*/
|
|
64
|
+
getCellsInRect(rect: Rectangle): CellRef[];
|
|
65
|
+
/**
|
|
66
|
+
* Find cells near a point (for touch targets with margin)
|
|
67
|
+
*
|
|
68
|
+
* @param x - X coordinate
|
|
69
|
+
* @param y - Y coordinate
|
|
70
|
+
* @param maxDistance - Maximum distance in pixels
|
|
71
|
+
* @param maxResults - Maximum number of results
|
|
72
|
+
* @returns Array of nearest cells, sorted by distance
|
|
73
|
+
*/
|
|
74
|
+
getCellsNear(x: number, y: number, maxDistance?: number, maxResults?: number): CellRef[];
|
|
75
|
+
/**
|
|
76
|
+
* Check if a cell is currently registered
|
|
77
|
+
*
|
|
78
|
+
* @param row - Row index
|
|
79
|
+
* @param col - Column index
|
|
80
|
+
* @returns true if cell is registered
|
|
81
|
+
*/
|
|
82
|
+
hasCell(row: number, col: number): boolean;
|
|
83
|
+
/**
|
|
84
|
+
* Get the bounding rectangle of a registered cell
|
|
85
|
+
*
|
|
86
|
+
* @param row - Row index
|
|
87
|
+
* @param col - Column index
|
|
88
|
+
* @returns Bounding rectangle or null if not registered
|
|
89
|
+
*/
|
|
90
|
+
getCellRect(row: number, col: number): Rectangle | null;
|
|
91
|
+
/**
|
|
92
|
+
* Clear all registered cells (e.g., on scroll or resize)
|
|
93
|
+
*/
|
|
94
|
+
clear(): void;
|
|
95
|
+
/**
|
|
96
|
+
* Get statistics about the spatial index
|
|
97
|
+
*/
|
|
98
|
+
getStats(): {
|
|
99
|
+
cellCount: number;
|
|
100
|
+
treeHeight: number;
|
|
101
|
+
nodeCount: number;
|
|
102
|
+
};
|
|
103
|
+
/**
|
|
104
|
+
* Generate unique cell ID
|
|
105
|
+
*/
|
|
106
|
+
private getCellId;
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=spatial-hit-tester.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spatial-hit-tester.d.ts","sourceRoot":"","sources":["../../../../../packages/core/src/rendering/spatial-hit-tester.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAS,KAAK,SAAS,EAAE,MAAM,uCAAuC,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,aAAa,CAAqC;IAE1D;;;;;;OAMG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IAc7D;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAU9C;;;;;;OAMG;IACH,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI;IAOpD;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,EAAE;IAI1C;;;;;;;;OAQG;IACH,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,GAAE,MAAW,EAAE,UAAU,GAAE,MAAU,GAAG,OAAO,EAAE;IAM/F;;;;;;OAMG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAI1C;;;;;;OAMG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAIvD;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,QAAQ,IAAI;QACV,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;KACnB;IAUD;;OAEG;IACH,OAAO,CAAC,SAAS;CAGlB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/virtual-scroller/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,sBAAsB,EACtB,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { VirtualScroller as IVirtualScroller, VirtualScrollerOptions, CellPosition } from './virtual-scroller.interface';
|
|
2
|
+
import type { HeightProvider } from '../height-provider';
|
|
3
|
+
import type { WidthProvider } from '../width-provider';
|
|
4
|
+
import type { VisibleRange } from '../../types';
|
|
5
|
+
/**
|
|
6
|
+
* VirtualScroller implementation
|
|
7
|
+
*
|
|
8
|
+
* Calculates visible ranges for virtual scrolling with configurable height/width strategies.
|
|
9
|
+
* Uses PrefixSumArray (via providers) for efficient offset-to-index lookups.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* const scroller = new VirtualScroller({
|
|
14
|
+
* rowCount: 10000,
|
|
15
|
+
* colCount: 20,
|
|
16
|
+
* rowHeight: 30,
|
|
17
|
+
* colWidth: 100,
|
|
18
|
+
* viewportWidth: 800,
|
|
19
|
+
* viewportHeight: 600,
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* const visible = scroller.calculateVisibleRange(1000, 0);
|
|
23
|
+
* // { startRow: 30, endRow: 53, startCol: 0, endCol: 10 }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare class VirtualScroller implements IVirtualScroller {
|
|
27
|
+
private heightProvider;
|
|
28
|
+
private widthProvider;
|
|
29
|
+
private rows;
|
|
30
|
+
private cols;
|
|
31
|
+
private vpWidth;
|
|
32
|
+
private vpHeight;
|
|
33
|
+
private overscanRows;
|
|
34
|
+
private overscanCols;
|
|
35
|
+
constructor(options: VirtualScrollerOptions);
|
|
36
|
+
calculateVisibleRange(scrollTop: number, scrollLeft: number): VisibleRange;
|
|
37
|
+
getCellPosition(row: number, col: number): CellPosition;
|
|
38
|
+
getRowAtOffset(offset: number): number;
|
|
39
|
+
getColAtOffset(offset: number): number;
|
|
40
|
+
getRowOffset(row: number): number;
|
|
41
|
+
getColOffset(col: number): number;
|
|
42
|
+
getRowHeight(row: number): number;
|
|
43
|
+
getColWidth(col: number): number;
|
|
44
|
+
getTotalHeight(): number;
|
|
45
|
+
getTotalWidth(): number;
|
|
46
|
+
updateRowHeight(row: number, height: number): void;
|
|
47
|
+
updateColWidth(col: number, width: number): void;
|
|
48
|
+
setViewport(width: number, height: number): void;
|
|
49
|
+
get rowCount(): number;
|
|
50
|
+
get colCount(): number;
|
|
51
|
+
get viewportWidth(): number;
|
|
52
|
+
get viewportHeight(): number;
|
|
53
|
+
getWidthProvider(): WidthProvider;
|
|
54
|
+
getHeightProvider(): HeightProvider;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=virtual-scroller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-scroller.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/virtual-scroller/virtual-scroller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,IAAI,gBAAgB,EACnC,sBAAsB,EACtB,YAAY,EACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,qBAAa,eAAgB,YAAW,gBAAgB;IACtD,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAS;gBAEjB,OAAO,EAAE,sBAAsB;IAiC3C,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY;IAkC1E,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY;IASvD,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAItC,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAItC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIjC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAIhC,cAAc,IAAI,MAAM;IAIxB,aAAa,IAAI,MAAM;IAIvB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IASlD,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAShD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQhD,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED,gBAAgB,IAAI,aAAa;IAIjC,iBAAiB,IAAI,cAAc;CAGpC"}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type { HeightProvider } from '../height-provider';
|
|
2
|
+
import type { WidthProvider } from '../width-provider';
|
|
3
|
+
import type { VisibleRange } from '../../types';
|
|
4
|
+
/**
|
|
5
|
+
* Options for creating a VirtualScroller
|
|
6
|
+
*/
|
|
7
|
+
export interface VirtualScrollerOptions {
|
|
8
|
+
/**
|
|
9
|
+
* Total number of rows
|
|
10
|
+
*/
|
|
11
|
+
rowCount: number;
|
|
12
|
+
/**
|
|
13
|
+
* Total number of columns
|
|
14
|
+
*/
|
|
15
|
+
colCount: number;
|
|
16
|
+
/**
|
|
17
|
+
* Viewport width in pixels
|
|
18
|
+
*/
|
|
19
|
+
viewportWidth: number;
|
|
20
|
+
/**
|
|
21
|
+
* Viewport height in pixels
|
|
22
|
+
*/
|
|
23
|
+
viewportHeight: number;
|
|
24
|
+
/**
|
|
25
|
+
* Custom height provider (optional)
|
|
26
|
+
* If not provided, auto-selected based on rowHeight
|
|
27
|
+
*/
|
|
28
|
+
heightProvider?: HeightProvider;
|
|
29
|
+
/**
|
|
30
|
+
* Row height(s) - used if heightProvider not provided
|
|
31
|
+
* - number: uniform height for all rows
|
|
32
|
+
* - number[]: individual heights per row
|
|
33
|
+
* @default 30
|
|
34
|
+
*/
|
|
35
|
+
rowHeight?: number | number[];
|
|
36
|
+
/**
|
|
37
|
+
* Custom width provider (optional)
|
|
38
|
+
* If not provided, auto-selected based on colWidth
|
|
39
|
+
*/
|
|
40
|
+
widthProvider?: WidthProvider;
|
|
41
|
+
/**
|
|
42
|
+
* Column width(s) - used if widthProvider not provided
|
|
43
|
+
* - number: uniform width for all columns
|
|
44
|
+
* - number[]: individual widths per column
|
|
45
|
+
* @default 100
|
|
46
|
+
*/
|
|
47
|
+
colWidth?: number | number[];
|
|
48
|
+
/**
|
|
49
|
+
* Number of rows to render beyond visible area (buffer)
|
|
50
|
+
* @default 3
|
|
51
|
+
*/
|
|
52
|
+
overscanRows?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Number of columns to render beyond visible area (buffer)
|
|
55
|
+
* @default 2
|
|
56
|
+
*/
|
|
57
|
+
overscanCols?: number;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Cell position and dimensions
|
|
61
|
+
*/
|
|
62
|
+
export interface CellPosition {
|
|
63
|
+
x: number;
|
|
64
|
+
y: number;
|
|
65
|
+
width: number;
|
|
66
|
+
height: number;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* VirtualScroller interface
|
|
70
|
+
*
|
|
71
|
+
* Calculates which rows and columns are visible based on scroll position.
|
|
72
|
+
* Uses HeightProvider and WidthProvider strategies for flexible dimension handling.
|
|
73
|
+
*/
|
|
74
|
+
export interface VirtualScroller {
|
|
75
|
+
/**
|
|
76
|
+
* Calculate the visible range of rows and columns
|
|
77
|
+
* @param scrollTop - Vertical scroll position in pixels
|
|
78
|
+
* @param scrollLeft - Horizontal scroll position in pixels
|
|
79
|
+
* @returns Visible range with overscan buffer
|
|
80
|
+
*/
|
|
81
|
+
calculateVisibleRange(scrollTop: number, scrollLeft: number): VisibleRange;
|
|
82
|
+
/**
|
|
83
|
+
* Get the position and dimensions of a specific cell
|
|
84
|
+
* @param row - Row index
|
|
85
|
+
* @param col - Column index
|
|
86
|
+
* @returns Cell position (x, y, width, height)
|
|
87
|
+
*/
|
|
88
|
+
getCellPosition(row: number, col: number): CellPosition;
|
|
89
|
+
/**
|
|
90
|
+
* Find which row is at a given Y offset
|
|
91
|
+
* @param offset - Y position in pixels
|
|
92
|
+
* @returns Row index
|
|
93
|
+
*/
|
|
94
|
+
getRowAtOffset(offset: number): number;
|
|
95
|
+
/**
|
|
96
|
+
* Find which column is at a given X offset
|
|
97
|
+
* @param offset - X position in pixels
|
|
98
|
+
* @returns Column index
|
|
99
|
+
*/
|
|
100
|
+
getColAtOffset(offset: number): number;
|
|
101
|
+
/**
|
|
102
|
+
* Get the Y offset where a row starts
|
|
103
|
+
* @param row - Row index
|
|
104
|
+
* @returns Y offset in pixels
|
|
105
|
+
*/
|
|
106
|
+
getRowOffset(row: number): number;
|
|
107
|
+
/**
|
|
108
|
+
* Get the X offset where a column starts
|
|
109
|
+
* @param col - Column index
|
|
110
|
+
* @returns X offset in pixels
|
|
111
|
+
*/
|
|
112
|
+
getColOffset(col: number): number;
|
|
113
|
+
/**
|
|
114
|
+
* Get the height of a specific row
|
|
115
|
+
* @param row - Row index
|
|
116
|
+
* @returns Height in pixels
|
|
117
|
+
*/
|
|
118
|
+
getRowHeight(row: number): number;
|
|
119
|
+
/**
|
|
120
|
+
* Get the width of a specific column
|
|
121
|
+
* @param col - Column index
|
|
122
|
+
* @returns Width in pixels
|
|
123
|
+
*/
|
|
124
|
+
getColWidth(col: number): number;
|
|
125
|
+
/**
|
|
126
|
+
* Get the total height of all rows
|
|
127
|
+
* @returns Total height in pixels
|
|
128
|
+
*/
|
|
129
|
+
getTotalHeight(): number;
|
|
130
|
+
/**
|
|
131
|
+
* Get the total width of all columns
|
|
132
|
+
* @returns Total width in pixels
|
|
133
|
+
*/
|
|
134
|
+
getTotalWidth(): number;
|
|
135
|
+
/**
|
|
136
|
+
* Update the height of a specific row
|
|
137
|
+
* @param row - Row index
|
|
138
|
+
* @param height - New height in pixels
|
|
139
|
+
*/
|
|
140
|
+
updateRowHeight(row: number, height: number): void;
|
|
141
|
+
/**
|
|
142
|
+
* Update the width of a specific column
|
|
143
|
+
* @param col - Column index
|
|
144
|
+
* @param width - New width in pixels
|
|
145
|
+
*/
|
|
146
|
+
updateColWidth(col: number, width: number): void;
|
|
147
|
+
/**
|
|
148
|
+
* Update the viewport dimensions
|
|
149
|
+
* @param width - New viewport width
|
|
150
|
+
* @param height - New viewport height
|
|
151
|
+
*/
|
|
152
|
+
setViewport(width: number, height: number): void;
|
|
153
|
+
/**
|
|
154
|
+
* Total number of rows
|
|
155
|
+
*/
|
|
156
|
+
readonly rowCount: number;
|
|
157
|
+
/**
|
|
158
|
+
* Total number of columns
|
|
159
|
+
*/
|
|
160
|
+
readonly colCount: number;
|
|
161
|
+
/**
|
|
162
|
+
* Viewport width in pixels
|
|
163
|
+
*/
|
|
164
|
+
readonly viewportWidth: number;
|
|
165
|
+
/**
|
|
166
|
+
* Viewport height in pixels
|
|
167
|
+
*/
|
|
168
|
+
readonly viewportHeight: number;
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=virtual-scroller.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"virtual-scroller.interface.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/virtual-scroller/virtual-scroller.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAEhC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE9B;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAE9B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAE7B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAAC;IAE3E;;;;;OAKG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;IAExD;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvC;;;;OAIG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IAEvC;;;;OAIG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAElC;;;;OAIG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAEjC;;;OAGG;IACH,cAAc,IAAI,MAAM,CAAC;IAEzB;;;OAGG;IACH,aAAa,IAAI,MAAM,CAAC;IAExB;;;;OAIG;IACH,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEnD;;;;OAIG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjD;;;;OAIG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEjD;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B;;OAEG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAE/B;;OAEG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WidthProvider - Strategy pattern for column width calculation
|
|
3
|
+
*/
|
|
4
|
+
export type { WidthProvider, WidthProviderOptions } from './width-provider.interface';
|
|
5
|
+
export { UniformWidthProvider } from './uniform-width-provider';
|
|
6
|
+
export { VariableWidthProvider } from './variable-width-provider';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/width-provider/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { WidthProvider } from './width-provider.interface';
|
|
2
|
+
/**
|
|
3
|
+
* UniformWidthProvider - Fixed width for all columns
|
|
4
|
+
*
|
|
5
|
+
* Provides constant-time O(1) operations for all methods.
|
|
6
|
+
* Ideal for grids where all columns have the same width.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* const provider = new UniformWidthProvider(100, 50);
|
|
11
|
+
* provider.getWidth(0); // 100
|
|
12
|
+
* provider.getOffset(10); // 1000
|
|
13
|
+
* provider.findIndexAtOffset(550); // 5
|
|
14
|
+
* ```
|
|
15
|
+
*/
|
|
16
|
+
export declare class UniformWidthProvider implements WidthProvider {
|
|
17
|
+
private colWidth;
|
|
18
|
+
private colCount;
|
|
19
|
+
/**
|
|
20
|
+
* Create a uniform width provider
|
|
21
|
+
* @param width - Width in pixels for all columns
|
|
22
|
+
* @param length - Total number of columns
|
|
23
|
+
*/
|
|
24
|
+
constructor(width: number, length: number);
|
|
25
|
+
getWidth(index: number): number;
|
|
26
|
+
getOffset(index: number): number;
|
|
27
|
+
getTotalWidth(): number;
|
|
28
|
+
findIndexAtOffset(offset: number): number;
|
|
29
|
+
get length(): number;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=uniform-width-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uniform-width-provider.d.ts","sourceRoot":"","sources":["../../../../../../packages/core/src/rendering/width-provider/uniform-width-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,YAAW,aAAa;IACxD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;OAIG;gBACS,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAYzC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAS/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAShC,aAAa,IAAI,MAAM;IAIvB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAYzC,IAAI,MAAM,IAAI,MAAM,CAEnB;CACF"}
|