@affino/datagrid-orchestration 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +6 -0
  3. package/dist/src/createDataGridRuntime.d.ts +19 -0
  4. package/dist/src/createDataGridRuntime.d.ts.map +1 -0
  5. package/dist/src/createDataGridRuntime.js +33 -0
  6. package/dist/src/dataGridContextMenuContracts.d.ts +20 -0
  7. package/dist/src/dataGridContextMenuContracts.d.ts.map +1 -0
  8. package/dist/src/dataGridContextMenuContracts.js +1 -0
  9. package/dist/src/dataGridPointerContracts.d.ts +5 -0
  10. package/dist/src/dataGridPointerContracts.d.ts.map +1 -0
  11. package/dist/src/dataGridPointerContracts.js +1 -0
  12. package/dist/src/dataGridRangeMutationKernel.d.ts +27 -0
  13. package/dist/src/dataGridRangeMutationKernel.d.ts.map +1 -0
  14. package/dist/src/dataGridRangeMutationKernel.js +46 -0
  15. package/dist/src/dataGridWritableRef.d.ts +4 -0
  16. package/dist/src/dataGridWritableRef.d.ts.map +1 -0
  17. package/dist/src/dataGridWritableRef.js +1 -0
  18. package/dist/src/index.d.ts +77 -0
  19. package/dist/src/index.d.ts.map +1 -0
  20. package/dist/src/index.js +76 -0
  21. package/dist/src/selectionOverlayTransform.d.ts +16 -0
  22. package/dist/src/selectionOverlayTransform.d.ts.map +1 -0
  23. package/dist/src/selectionOverlayTransform.js +21 -0
  24. package/dist/src/useDataGridA11yCellIds.d.ts +16 -0
  25. package/dist/src/useDataGridA11yCellIds.d.ts.map +1 -0
  26. package/dist/src/useDataGridA11yCellIds.js +26 -0
  27. package/dist/src/useDataGridAxisAutoScrollDelta.d.ts +10 -0
  28. package/dist/src/useDataGridAxisAutoScrollDelta.d.ts.map +1 -0
  29. package/dist/src/useDataGridAxisAutoScrollDelta.js +20 -0
  30. package/dist/src/useDataGridCellCoordNormalizer.d.ts +26 -0
  31. package/dist/src/useDataGridCellCoordNormalizer.d.ts.map +1 -0
  32. package/dist/src/useDataGridCellCoordNormalizer.js +29 -0
  33. package/dist/src/useDataGridCellDatasetResolver.d.ts +16 -0
  34. package/dist/src/useDataGridCellDatasetResolver.d.ts.map +1 -0
  35. package/dist/src/useDataGridCellDatasetResolver.js +23 -0
  36. package/dist/src/useDataGridCellNavigation.d.ts +23 -0
  37. package/dist/src/useDataGridCellNavigation.d.ts.map +1 -0
  38. package/dist/src/useDataGridCellNavigation.js +111 -0
  39. package/dist/src/useDataGridCellPointerDownRouter.d.ts +42 -0
  40. package/dist/src/useDataGridCellPointerDownRouter.d.ts.map +1 -0
  41. package/dist/src/useDataGridCellPointerDownRouter.js +48 -0
  42. package/dist/src/useDataGridCellPointerHoverRouter.d.ts +24 -0
  43. package/dist/src/useDataGridCellPointerHoverRouter.d.ts.map +1 -0
  44. package/dist/src/useDataGridCellPointerHoverRouter.js +25 -0
  45. package/dist/src/useDataGridCellRangeHelpers.d.ts +30 -0
  46. package/dist/src/useDataGridCellRangeHelpers.d.ts.map +1 -0
  47. package/dist/src/useDataGridCellRangeHelpers.js +89 -0
  48. package/dist/src/useDataGridCellVisibilityScroller.d.ts +41 -0
  49. package/dist/src/useDataGridCellVisibilityScroller.d.ts.map +1 -0
  50. package/dist/src/useDataGridCellVisibilityScroller.js +43 -0
  51. package/dist/src/useDataGridCellVisualStatePredicates.d.ts +40 -0
  52. package/dist/src/useDataGridCellVisualStatePredicates.d.ts.map +1 -0
  53. package/dist/src/useDataGridCellVisualStatePredicates.js +126 -0
  54. package/dist/src/useDataGridClearSelectionLifecycle.d.ts +27 -0
  55. package/dist/src/useDataGridClearSelectionLifecycle.d.ts.map +1 -0
  56. package/dist/src/useDataGridClearSelectionLifecycle.js +21 -0
  57. package/dist/src/useDataGridClipboardBridge.d.ts +31 -0
  58. package/dist/src/useDataGridClipboardBridge.d.ts.map +1 -0
  59. package/dist/src/useDataGridClipboardBridge.js +138 -0
  60. package/dist/src/useDataGridClipboardMutations.d.ts +47 -0
  61. package/dist/src/useDataGridClipboardMutations.d.ts.map +1 -0
  62. package/dist/src/useDataGridClipboardMutations.js +216 -0
  63. package/dist/src/useDataGridClipboardValuePolicy.d.ts +5 -0
  64. package/dist/src/useDataGridClipboardValuePolicy.d.ts.map +1 -0
  65. package/dist/src/useDataGridClipboardValuePolicy.js +14 -0
  66. package/dist/src/useDataGridColumnFilterOrchestration.d.ts +64 -0
  67. package/dist/src/useDataGridColumnFilterOrchestration.d.ts.map +1 -0
  68. package/dist/src/useDataGridColumnFilterOrchestration.js +359 -0
  69. package/dist/src/useDataGridColumnLayoutOrchestration.d.ts +59 -0
  70. package/dist/src/useDataGridColumnLayoutOrchestration.d.ts.map +1 -0
  71. package/dist/src/useDataGridColumnLayoutOrchestration.js +151 -0
  72. package/dist/src/useDataGridColumnUiPolicy.d.ts +25 -0
  73. package/dist/src/useDataGridColumnUiPolicy.d.ts.map +1 -0
  74. package/dist/src/useDataGridColumnUiPolicy.js +55 -0
  75. package/dist/src/useDataGridContextMenu.d.ts +30 -0
  76. package/dist/src/useDataGridContextMenu.d.ts.map +1 -0
  77. package/dist/src/useDataGridContextMenu.js +147 -0
  78. package/dist/src/useDataGridContextMenuActionRouter.d.ts +19 -0
  79. package/dist/src/useDataGridContextMenuActionRouter.d.ts.map +1 -0
  80. package/dist/src/useDataGridContextMenuActionRouter.js +29 -0
  81. package/dist/src/useDataGridContextMenuAnchor.d.ts +33 -0
  82. package/dist/src/useDataGridContextMenuAnchor.d.ts.map +1 -0
  83. package/dist/src/useDataGridContextMenuAnchor.js +60 -0
  84. package/dist/src/useDataGridCopyRangeHelpers.d.ts +20 -0
  85. package/dist/src/useDataGridCopyRangeHelpers.d.ts.map +1 -0
  86. package/dist/src/useDataGridCopyRangeHelpers.js +28 -0
  87. package/dist/src/useDataGridDragPointerSelection.d.ts +22 -0
  88. package/dist/src/useDataGridDragPointerSelection.d.ts.map +1 -0
  89. package/dist/src/useDataGridDragPointerSelection.js +23 -0
  90. package/dist/src/useDataGridDragSelectionLifecycle.d.ts +18 -0
  91. package/dist/src/useDataGridDragSelectionLifecycle.d.ts.map +1 -0
  92. package/dist/src/useDataGridDragSelectionLifecycle.js +11 -0
  93. package/dist/src/useDataGridEditableValuePolicy.d.ts +32 -0
  94. package/dist/src/useDataGridEditableValuePolicy.d.ts.map +1 -0
  95. package/dist/src/useDataGridEditableValuePolicy.js +95 -0
  96. package/dist/src/useDataGridEnumTrigger.d.ts +17 -0
  97. package/dist/src/useDataGridEnumTrigger.d.ts.map +1 -0
  98. package/dist/src/useDataGridEnumTrigger.js +28 -0
  99. package/dist/src/useDataGridFillHandleStart.d.ts +30 -0
  100. package/dist/src/useDataGridFillHandleStart.d.ts.map +1 -0
  101. package/dist/src/useDataGridFillHandleStart.js +27 -0
  102. package/dist/src/useDataGridFillSelectionLifecycle.d.ts +24 -0
  103. package/dist/src/useDataGridFillSelectionLifecycle.d.ts.map +1 -0
  104. package/dist/src/useDataGridFillSelectionLifecycle.js +15 -0
  105. package/dist/src/useDataGridGlobalMouseDownContextMenuCloser.d.ts +10 -0
  106. package/dist/src/useDataGridGlobalMouseDownContextMenuCloser.d.ts.map +1 -0
  107. package/dist/src/useDataGridGlobalMouseDownContextMenuCloser.js +17 -0
  108. package/dist/src/useDataGridGlobalPointerLifecycle.d.ts +40 -0
  109. package/dist/src/useDataGridGlobalPointerLifecycle.d.ts.map +1 -0
  110. package/dist/src/useDataGridGlobalPointerLifecycle.js +153 -0
  111. package/dist/src/useDataGridGroupBadge.d.ts +13 -0
  112. package/dist/src/useDataGridGroupBadge.d.ts.map +1 -0
  113. package/dist/src/useDataGridGroupBadge.js +19 -0
  114. package/dist/src/useDataGridGroupMetaOrchestration.d.ts +18 -0
  115. package/dist/src/useDataGridGroupMetaOrchestration.d.ts.map +1 -0
  116. package/dist/src/useDataGridGroupMetaOrchestration.js +43 -0
  117. package/dist/src/useDataGridGroupValueLabelResolver.d.ts +10 -0
  118. package/dist/src/useDataGridGroupValueLabelResolver.d.ts.map +1 -0
  119. package/dist/src/useDataGridGroupValueLabelResolver.js +15 -0
  120. package/dist/src/useDataGridGroupingSortOrchestration.d.ts +13 -0
  121. package/dist/src/useDataGridGroupingSortOrchestration.d.ts.map +1 -0
  122. package/dist/src/useDataGridGroupingSortOrchestration.js +22 -0
  123. package/dist/src/useDataGridHeaderContextActions.d.ts +15 -0
  124. package/dist/src/useDataGridHeaderContextActions.d.ts.map +1 -0
  125. package/dist/src/useDataGridHeaderContextActions.js +41 -0
  126. package/dist/src/useDataGridHeaderInteractionRouter.d.ts +12 -0
  127. package/dist/src/useDataGridHeaderInteractionRouter.d.ts.map +1 -0
  128. package/dist/src/useDataGridHeaderInteractionRouter.js +35 -0
  129. package/dist/src/useDataGridHeaderLayerOrchestration.d.ts +13 -0
  130. package/dist/src/useDataGridHeaderLayerOrchestration.d.ts.map +1 -0
  131. package/dist/src/useDataGridHeaderLayerOrchestration.js +18 -0
  132. package/dist/src/useDataGridHeaderResizeOrchestration.d.ts +43 -0
  133. package/dist/src/useDataGridHeaderResizeOrchestration.d.ts.map +1 -0
  134. package/dist/src/useDataGridHeaderResizeOrchestration.js +180 -0
  135. package/dist/src/useDataGridHeaderSortOrchestration.d.ts +20 -0
  136. package/dist/src/useDataGridHeaderSortOrchestration.d.ts.map +1 -0
  137. package/dist/src/useDataGridHeaderSortOrchestration.js +86 -0
  138. package/dist/src/useDataGridHistoryActionRunner.d.ts +15 -0
  139. package/dist/src/useDataGridHistoryActionRunner.d.ts.map +1 -0
  140. package/dist/src/useDataGridHistoryActionRunner.js +35 -0
  141. package/dist/src/useDataGridInlineEditOrchestration.d.ts +46 -0
  142. package/dist/src/useDataGridInlineEditOrchestration.d.ts.map +1 -0
  143. package/dist/src/useDataGridInlineEditOrchestration.js +116 -0
  144. package/dist/src/useDataGridInlineEditorFocus.d.ts +9 -0
  145. package/dist/src/useDataGridInlineEditorFocus.d.ts.map +1 -0
  146. package/dist/src/useDataGridInlineEditorFocus.js +37 -0
  147. package/dist/src/useDataGridInlineEditorKeyRouter.d.ts +12 -0
  148. package/dist/src/useDataGridInlineEditorKeyRouter.d.ts.map +1 -0
  149. package/dist/src/useDataGridInlineEditorKeyRouter.js +31 -0
  150. package/dist/src/useDataGridInlineEditorSchema.d.ts +11 -0
  151. package/dist/src/useDataGridInlineEditorSchema.d.ts.map +1 -0
  152. package/dist/src/useDataGridInlineEditorSchema.js +26 -0
  153. package/dist/src/useDataGridInlineEditorTargetNavigation.d.ts +30 -0
  154. package/dist/src/useDataGridInlineEditorTargetNavigation.d.ts.map +1 -0
  155. package/dist/src/useDataGridInlineEditorTargetNavigation.js +66 -0
  156. package/dist/src/useDataGridIntentHistory.d.ts +25 -0
  157. package/dist/src/useDataGridIntentHistory.d.ts.map +1 -0
  158. package/dist/src/useDataGridIntentHistory.js +109 -0
  159. package/dist/src/useDataGridKeyboardCommandRouter.d.ts +18 -0
  160. package/dist/src/useDataGridKeyboardCommandRouter.d.ts.map +1 -0
  161. package/dist/src/useDataGridKeyboardCommandRouter.js +81 -0
  162. package/dist/src/useDataGridMoveMutationPolicy.d.ts +12 -0
  163. package/dist/src/useDataGridMoveMutationPolicy.d.ts.map +1 -0
  164. package/dist/src/useDataGridMoveMutationPolicy.js +81 -0
  165. package/dist/src/useDataGridMutationSnapshot.d.ts +46 -0
  166. package/dist/src/useDataGridMutationSnapshot.d.ts.map +1 -0
  167. package/dist/src/useDataGridMutationSnapshot.js +57 -0
  168. package/dist/src/useDataGridNavigationPrimitives.d.ts +42 -0
  169. package/dist/src/useDataGridNavigationPrimitives.d.ts.map +1 -0
  170. package/dist/src/useDataGridNavigationPrimitives.js +105 -0
  171. package/dist/src/useDataGridPointerAutoScroll.d.ts +32 -0
  172. package/dist/src/useDataGridPointerAutoScroll.d.ts.map +1 -0
  173. package/dist/src/useDataGridPointerAutoScroll.js +85 -0
  174. package/dist/src/useDataGridPointerCellCoordResolver.d.ts +45 -0
  175. package/dist/src/useDataGridPointerCellCoordResolver.d.ts.map +1 -0
  176. package/dist/src/useDataGridPointerCellCoordResolver.js +107 -0
  177. package/dist/src/useDataGridPointerModifierPolicy.d.ts +5 -0
  178. package/dist/src/useDataGridPointerModifierPolicy.d.ts.map +1 -0
  179. package/dist/src/useDataGridPointerModifierPolicy.js +8 -0
  180. package/dist/src/useDataGridPointerPreviewRouter.d.ts +37 -0
  181. package/dist/src/useDataGridPointerPreviewRouter.d.ts.map +1 -0
  182. package/dist/src/useDataGridPointerPreviewRouter.js +55 -0
  183. package/dist/src/useDataGridQuickFilterActions.d.ts +10 -0
  184. package/dist/src/useDataGridQuickFilterActions.d.ts.map +1 -0
  185. package/dist/src/useDataGridQuickFilterActions.js +12 -0
  186. package/dist/src/useDataGridRangeMoveLifecycle.d.ts +15 -0
  187. package/dist/src/useDataGridRangeMoveLifecycle.d.ts.map +1 -0
  188. package/dist/src/useDataGridRangeMoveLifecycle.js +21 -0
  189. package/dist/src/useDataGridRangeMoveStart.d.ts +34 -0
  190. package/dist/src/useDataGridRangeMoveStart.d.ts.map +1 -0
  191. package/dist/src/useDataGridRangeMoveStart.js +23 -0
  192. package/dist/src/useDataGridRangeMutationEngine.d.ts +44 -0
  193. package/dist/src/useDataGridRangeMutationEngine.d.ts.map +1 -0
  194. package/dist/src/useDataGridRangeMutationEngine.js +210 -0
  195. package/dist/src/useDataGridRowSelectionInputHandlers.d.ts +10 -0
  196. package/dist/src/useDataGridRowSelectionInputHandlers.d.ts.map +1 -0
  197. package/dist/src/useDataGridRowSelectionInputHandlers.js +12 -0
  198. package/dist/src/useDataGridRowSelectionOrchestration.d.ts +7 -0
  199. package/dist/src/useDataGridRowSelectionOrchestration.d.ts.map +1 -0
  200. package/dist/src/useDataGridRowSelectionOrchestration.js +60 -0
  201. package/dist/src/useDataGridRowsProjection.d.ts +21 -0
  202. package/dist/src/useDataGridRowsProjection.d.ts.map +1 -0
  203. package/dist/src/useDataGridRowsProjection.js +69 -0
  204. package/dist/src/useDataGridRuntimeService.d.ts +33 -0
  205. package/dist/src/useDataGridRuntimeService.d.ts.map +1 -0
  206. package/dist/src/useDataGridRuntimeService.js +209 -0
  207. package/dist/src/useDataGridSelectionComparators.d.ts +16 -0
  208. package/dist/src/useDataGridSelectionComparators.d.ts.map +1 -0
  209. package/dist/src/useDataGridSelectionComparators.js +21 -0
  210. package/dist/src/useDataGridSelectionMoveHandle.d.ts +38 -0
  211. package/dist/src/useDataGridSelectionMoveHandle.d.ts.map +1 -0
  212. package/dist/src/useDataGridSelectionMoveHandle.js +49 -0
  213. package/dist/src/useDataGridSelectionOverlayOrchestration.d.ts +60 -0
  214. package/dist/src/useDataGridSelectionOverlayOrchestration.d.ts.map +1 -0
  215. package/dist/src/useDataGridSelectionOverlayOrchestration.js +137 -0
  216. package/dist/src/useDataGridTabTargetResolver.d.ts +17 -0
  217. package/dist/src/useDataGridTabTargetResolver.d.ts.map +1 -0
  218. package/dist/src/useDataGridTabTargetResolver.js +30 -0
  219. package/dist/src/useDataGridViewportBlurHandler.d.ts +16 -0
  220. package/dist/src/useDataGridViewportBlurHandler.d.ts.map +1 -0
  221. package/dist/src/useDataGridViewportBlurHandler.js +62 -0
  222. package/dist/src/useDataGridViewportContextMenuRouter.d.ts +31 -0
  223. package/dist/src/useDataGridViewportContextMenuRouter.d.ts.map +1 -0
  224. package/dist/src/useDataGridViewportContextMenuRouter.js +78 -0
  225. package/dist/src/useDataGridViewportMeasureScheduler.d.ts +22 -0
  226. package/dist/src/useDataGridViewportMeasureScheduler.d.ts.map +1 -0
  227. package/dist/src/useDataGridViewportMeasureScheduler.js +65 -0
  228. package/dist/src/useDataGridViewportScrollLifecycle.d.ts +16 -0
  229. package/dist/src/useDataGridViewportScrollLifecycle.d.ts.map +1 -0
  230. package/dist/src/useDataGridViewportScrollLifecycle.js +28 -0
  231. package/dist/src/useDataGridVirtualRangeMetrics.d.ts +32 -0
  232. package/dist/src/useDataGridVirtualRangeMetrics.d.ts.map +1 -0
  233. package/dist/src/useDataGridVirtualRangeMetrics.js +26 -0
  234. package/dist/src/useDataGridVisibleRowsSyncScheduler.d.ts +21 -0
  235. package/dist/src/useDataGridVisibleRowsSyncScheduler.d.ts.map +1 -0
  236. package/dist/src/useDataGridVisibleRowsSyncScheduler.js +70 -0
  237. package/dist/tsconfig.public.tsbuildinfo +1 -0
  238. package/dist/tsconfig.tsbuildinfo +1 -0
  239. package/package.json +50 -0
@@ -0,0 +1,81 @@
1
+ function applyRecordValueForMove(record, columnKey, value) {
2
+ if (!(columnKey in record)) {
3
+ return false;
4
+ }
5
+ const current = record[columnKey];
6
+ if (typeof current === "number") {
7
+ const numeric = Number(value);
8
+ if (!Number.isFinite(numeric)) {
9
+ return false;
10
+ }
11
+ record[columnKey] = numeric;
12
+ return true;
13
+ }
14
+ if (typeof current === "boolean") {
15
+ const normalized = value.trim().toLowerCase();
16
+ if (normalized === "true" || normalized === "1") {
17
+ record[columnKey] = true;
18
+ return true;
19
+ }
20
+ if (normalized === "false" || normalized === "0") {
21
+ record[columnKey] = false;
22
+ return true;
23
+ }
24
+ return false;
25
+ }
26
+ record[columnKey] = value;
27
+ return true;
28
+ }
29
+ function clearRecordValueForMove(record, columnKey) {
30
+ if (!(columnKey in record)) {
31
+ return false;
32
+ }
33
+ const current = record[columnKey];
34
+ if (typeof current === "number") {
35
+ if (current === 0) {
36
+ return false;
37
+ }
38
+ record[columnKey] = 0;
39
+ return true;
40
+ }
41
+ if (typeof current === "boolean") {
42
+ if (!current) {
43
+ return false;
44
+ }
45
+ record[columnKey] = false;
46
+ return true;
47
+ }
48
+ if (current == null || String(current) === "") {
49
+ return false;
50
+ }
51
+ record[columnKey] = "";
52
+ return true;
53
+ }
54
+ export function useDataGridMoveMutationPolicy(options) {
55
+ function isBlockedColumn(columnKey) {
56
+ return options.isBlockedColumn ? options.isBlockedColumn(columnKey) : false;
57
+ }
58
+ function applyValueForMove(row, columnKey, value) {
59
+ if (isBlockedColumn(columnKey)) {
60
+ return false;
61
+ }
62
+ if (!options.isEditableColumn(columnKey)) {
63
+ return false;
64
+ }
65
+ options.applyEditedValue(row, columnKey, value);
66
+ return true;
67
+ }
68
+ function clearValueForMove(row, columnKey) {
69
+ if (isBlockedColumn(columnKey)) {
70
+ return false;
71
+ }
72
+ if (!options.isEditableColumn(columnKey)) {
73
+ return false;
74
+ }
75
+ return options.clearEditedValue(row, columnKey);
76
+ }
77
+ return {
78
+ applyValueForMove,
79
+ clearValueForMove,
80
+ };
81
+ }
@@ -0,0 +1,46 @@
1
+ export interface DataGridMutationSnapshotCoord {
2
+ rowIndex: number;
3
+ columnIndex: number;
4
+ }
5
+ export interface DataGridMutationSnapshotRange {
6
+ startRow: number;
7
+ endRow: number;
8
+ startColumn: number;
9
+ endColumn: number;
10
+ }
11
+ export interface DataGridMutationAffectedRange {
12
+ startRow: number;
13
+ endRow: number;
14
+ startColumn: number;
15
+ endColumn: number;
16
+ }
17
+ export interface DataGridMutationSnapshotState<TRow, TCoord extends DataGridMutationSnapshotCoord = DataGridMutationSnapshotCoord, TRange extends DataGridMutationSnapshotRange = DataGridMutationSnapshotRange> {
18
+ sourceRows: TRow[];
19
+ cellAnchor: TCoord | null;
20
+ cellFocus: TCoord | null;
21
+ activeCell: TCoord | null;
22
+ copiedSelectionRange: TRange | null;
23
+ }
24
+ export interface UseDataGridMutationSnapshotOptions<TRow, TCoord extends DataGridMutationSnapshotCoord = DataGridMutationSnapshotCoord, TRange extends DataGridMutationSnapshotRange = DataGridMutationSnapshotRange> {
25
+ resolveRows: () => readonly TRow[];
26
+ setRows: (rows: TRow[]) => void;
27
+ resolveCellAnchor: () => TCoord | null;
28
+ setCellAnchor: (coord: TCoord | null) => void;
29
+ resolveCellFocus: () => TCoord | null;
30
+ setCellFocus: (coord: TCoord | null) => void;
31
+ resolveActiveCell: () => TCoord | null;
32
+ setActiveCell: (coord: TCoord | null) => void;
33
+ resolveCopiedSelectionRange: () => TRange | null;
34
+ setCopiedSelectionRange: (range: TRange | null) => void;
35
+ cloneRow: (row: TRow) => TRow;
36
+ cloneCoord?: (coord: TCoord) => TCoord;
37
+ cloneRange?: (range: TRange) => TRange;
38
+ }
39
+ export interface UseDataGridMutationSnapshotResult<TRow, TCoord extends DataGridMutationSnapshotCoord = DataGridMutationSnapshotCoord, TRange extends DataGridMutationSnapshotRange = DataGridMutationSnapshotRange> {
40
+ captureGridMutationSnapshot: () => DataGridMutationSnapshotState<TRow, TCoord, TRange>;
41
+ applyGridMutationSnapshot: (snapshot: DataGridMutationSnapshotState<TRow, TCoord, TRange>) => void;
42
+ toTransactionRange: (range: TRange | null) => DataGridMutationAffectedRange | null;
43
+ toSingleCellRange: (coord: TCoord | null) => TRange | null;
44
+ }
45
+ export declare function useDataGridMutationSnapshot<TRow, TCoord extends DataGridMutationSnapshotCoord = DataGridMutationSnapshotCoord, TRange extends DataGridMutationSnapshotRange = DataGridMutationSnapshotRange>(options: UseDataGridMutationSnapshotOptions<TRow, TCoord, TRange>): UseDataGridMutationSnapshotResult<TRow, TCoord, TRange>;
46
+ //# sourceMappingURL=useDataGridMutationSnapshot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridMutationSnapshot.d.ts","sourceRoot":"","sources":["../../src/useDataGridMutationSnapshot.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ export function useDataGridMutationSnapshot(options) {
2
+ const cloneCoord = options.cloneCoord ?? ((coord) => ({ ...coord }));
3
+ const cloneRange = options.cloneRange ?? ((range) => ({ ...range }));
4
+ function cloneRows(rows) {
5
+ return rows.map(row => options.cloneRow(row));
6
+ }
7
+ function cloneCoordOrNull(coord) {
8
+ return coord ? cloneCoord(coord) : null;
9
+ }
10
+ function cloneRangeOrNull(range) {
11
+ return range ? cloneRange(range) : null;
12
+ }
13
+ function captureGridMutationSnapshot() {
14
+ return {
15
+ sourceRows: cloneRows(options.resolveRows()),
16
+ cellAnchor: cloneCoordOrNull(options.resolveCellAnchor()),
17
+ cellFocus: cloneCoordOrNull(options.resolveCellFocus()),
18
+ activeCell: cloneCoordOrNull(options.resolveActiveCell()),
19
+ copiedSelectionRange: cloneRangeOrNull(options.resolveCopiedSelectionRange()),
20
+ };
21
+ }
22
+ function applyGridMutationSnapshot(snapshot) {
23
+ options.setRows(cloneRows(snapshot.sourceRows));
24
+ options.setCellAnchor(cloneCoordOrNull(snapshot.cellAnchor));
25
+ options.setCellFocus(cloneCoordOrNull(snapshot.cellFocus));
26
+ options.setActiveCell(cloneCoordOrNull(snapshot.activeCell));
27
+ options.setCopiedSelectionRange(cloneRangeOrNull(snapshot.copiedSelectionRange));
28
+ }
29
+ function toTransactionRange(range) {
30
+ if (!range) {
31
+ return null;
32
+ }
33
+ return {
34
+ startRow: range.startRow,
35
+ endRow: range.endRow,
36
+ startColumn: range.startColumn,
37
+ endColumn: range.endColumn,
38
+ };
39
+ }
40
+ function toSingleCellRange(coord) {
41
+ if (!coord) {
42
+ return null;
43
+ }
44
+ return {
45
+ startRow: coord.rowIndex,
46
+ endRow: coord.rowIndex,
47
+ startColumn: coord.columnIndex,
48
+ endColumn: coord.columnIndex,
49
+ };
50
+ }
51
+ return {
52
+ captureGridMutationSnapshot,
53
+ applyGridMutationSnapshot,
54
+ toTransactionRange,
55
+ toSingleCellRange,
56
+ };
57
+ }
@@ -0,0 +1,42 @@
1
+ import type { DataGridRowNode } from "@affino/datagrid-core";
2
+ export interface DataGridNavigationPrimitiveCoord {
3
+ rowIndex: number;
4
+ columnIndex: number;
5
+ }
6
+ export interface DataGridNavigationPrimitiveRange {
7
+ startRow: number;
8
+ endRow: number;
9
+ startColumn: number;
10
+ endColumn: number;
11
+ }
12
+ export interface DataGridNavigationPrimitiveColumn {
13
+ key: string;
14
+ }
15
+ export interface UseDataGridNavigationPrimitivesOptions<TCoord extends DataGridNavigationPrimitiveCoord = DataGridNavigationPrimitiveCoord, TRange extends DataGridNavigationPrimitiveRange = DataGridNavigationPrimitiveRange, TColumn extends DataGridNavigationPrimitiveColumn = DataGridNavigationPrimitiveColumn> {
16
+ resolveColumns: () => readonly TColumn[];
17
+ resolveRowsLength: () => number;
18
+ resolveNavigableColumnIndexes: () => readonly number[];
19
+ normalizeCellCoord: (coord: TCoord) => TCoord | null;
20
+ resolveCellAnchor: () => TCoord | null;
21
+ resolveCellFocus: () => TCoord | null;
22
+ resolveActiveCell: () => TCoord | null;
23
+ setCellAnchor: (coord: TCoord) => void;
24
+ setCellFocus: (coord: TCoord) => void;
25
+ setActiveCell: (coord: TCoord) => void;
26
+ ensureCellVisible: (coord: TCoord) => void;
27
+ coordsEqual: (left: TCoord | null, right: TCoord | null) => boolean;
28
+ }
29
+ export interface UseDataGridNavigationPrimitivesResult<TCoord extends DataGridNavigationPrimitiveCoord = DataGridNavigationPrimitiveCoord, TRange extends DataGridNavigationPrimitiveRange = DataGridNavigationPrimitiveRange> {
30
+ resolveRowIndex: (row: DataGridRowNode<unknown>) => number;
31
+ resolveColumnIndex: (columnKey: string) => number;
32
+ clampRowIndex: (rowIndex: number) => number;
33
+ getFirstNavigableColumnIndex: () => number;
34
+ getLastNavigableColumnIndex: () => number;
35
+ resolveNearestNavigableColumnIndex: (columnIndex: number, direction?: 1 | -1) => number;
36
+ getAdjacentNavigableColumnIndex: (columnIndex: number, direction: 1 | -1) => number;
37
+ positiveModulo: (value: number, divisor: number) => number;
38
+ applyCellSelection: (nextCoord: TCoord, extend: boolean, fallbackAnchor?: TCoord, ensureVisible?: boolean) => void;
39
+ isCoordInsideRange: (coord: TCoord, range: TRange) => boolean;
40
+ }
41
+ export declare function useDataGridNavigationPrimitives<TCoord extends DataGridNavigationPrimitiveCoord = DataGridNavigationPrimitiveCoord, TRange extends DataGridNavigationPrimitiveRange = DataGridNavigationPrimitiveRange, TColumn extends DataGridNavigationPrimitiveColumn = DataGridNavigationPrimitiveColumn>(options: UseDataGridNavigationPrimitivesOptions<TCoord, TRange, TColumn>): UseDataGridNavigationPrimitivesResult<TCoord, TRange>;
42
+ //# sourceMappingURL=useDataGridNavigationPrimitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridNavigationPrimitives.d.ts","sourceRoot":"","sources":["../../src/useDataGridNavigationPrimitives.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ export function useDataGridNavigationPrimitives(options) {
2
+ function resolveRowIndex(row) {
3
+ const candidate = [row.displayIndex, row.sourceIndex, row.originalIndex].find(Number.isFinite) ?? 0;
4
+ return Math.max(0, Math.trunc(candidate));
5
+ }
6
+ function resolveColumnIndex(columnKey) {
7
+ return options.resolveColumns().findIndex(column => column.key === columnKey);
8
+ }
9
+ function clampRowIndex(rowIndex) {
10
+ const maxRowIndex = Math.max(0, options.resolveRowsLength() - 1);
11
+ return Math.max(0, Math.min(maxRowIndex, Math.trunc(rowIndex)));
12
+ }
13
+ function getFirstNavigableColumnIndex() {
14
+ return options.resolveNavigableColumnIndexes()[0] ?? -1;
15
+ }
16
+ function getLastNavigableColumnIndex() {
17
+ const indexes = options.resolveNavigableColumnIndexes();
18
+ return indexes[indexes.length - 1] ?? -1;
19
+ }
20
+ function resolveNearestNavigableColumnIndex(columnIndex, direction = 1) {
21
+ const indexes = options.resolveNavigableColumnIndexes();
22
+ if (!indexes.length) {
23
+ return -1;
24
+ }
25
+ if (indexes.includes(columnIndex)) {
26
+ return columnIndex;
27
+ }
28
+ if (direction > 0) {
29
+ return indexes.find(index => index >= columnIndex) ?? getLastNavigableColumnIndex();
30
+ }
31
+ for (let index = indexes.length - 1; index >= 0; index -= 1) {
32
+ const candidate = indexes[index];
33
+ if (candidate !== undefined && candidate <= columnIndex) {
34
+ return candidate;
35
+ }
36
+ }
37
+ return getFirstNavigableColumnIndex();
38
+ }
39
+ function getAdjacentNavigableColumnIndex(columnIndex, direction) {
40
+ const indexes = options.resolveNavigableColumnIndexes();
41
+ if (!indexes.length) {
42
+ return -1;
43
+ }
44
+ const currentPos = indexes.indexOf(columnIndex);
45
+ if (currentPos === -1) {
46
+ return resolveNearestNavigableColumnIndex(columnIndex, direction);
47
+ }
48
+ const nextPos = Math.max(0, Math.min(indexes.length - 1, currentPos + direction));
49
+ return indexes[nextPos] ?? columnIndex;
50
+ }
51
+ function positiveModulo(value, divisor) {
52
+ if (divisor <= 0) {
53
+ return 0;
54
+ }
55
+ const remainder = value % divisor;
56
+ return remainder < 0 ? remainder + divisor : remainder;
57
+ }
58
+ function applyCellSelection(nextCoord, extend, fallbackAnchor, ensureVisible = true) {
59
+ const normalized = options.normalizeCellCoord(nextCoord);
60
+ if (!normalized) {
61
+ return;
62
+ }
63
+ let nextAnchor;
64
+ let nextFocus;
65
+ if (extend) {
66
+ const anchor = options.resolveCellAnchor() ?? fallbackAnchor ?? options.resolveActiveCell() ?? normalized;
67
+ nextAnchor = options.normalizeCellCoord(anchor) ?? normalized;
68
+ nextFocus = normalized;
69
+ }
70
+ else {
71
+ nextAnchor = normalized;
72
+ nextFocus = normalized;
73
+ }
74
+ if (!options.coordsEqual(options.resolveCellAnchor(), nextAnchor)) {
75
+ options.setCellAnchor(nextAnchor);
76
+ }
77
+ if (!options.coordsEqual(options.resolveCellFocus(), nextFocus)) {
78
+ options.setCellFocus(nextFocus);
79
+ }
80
+ if (!options.coordsEqual(options.resolveActiveCell(), normalized)) {
81
+ options.setActiveCell(normalized);
82
+ }
83
+ if (ensureVisible) {
84
+ options.ensureCellVisible(normalized);
85
+ }
86
+ }
87
+ function isCoordInsideRange(coord, range) {
88
+ return (coord.rowIndex >= range.startRow &&
89
+ coord.rowIndex <= range.endRow &&
90
+ coord.columnIndex >= range.startColumn &&
91
+ coord.columnIndex <= range.endColumn);
92
+ }
93
+ return {
94
+ resolveRowIndex,
95
+ resolveColumnIndex,
96
+ clampRowIndex,
97
+ getFirstNavigableColumnIndex,
98
+ getLastNavigableColumnIndex,
99
+ resolveNearestNavigableColumnIndex,
100
+ getAdjacentNavigableColumnIndex,
101
+ positiveModulo,
102
+ applyCellSelection,
103
+ isCoordInsideRange,
104
+ };
105
+ }
@@ -0,0 +1,32 @@
1
+ import type { DataGridPointerCoordinates } from "./dataGridPointerContracts";
2
+ export interface DataGridPointerAutoScrollInteractionState {
3
+ isDragSelecting: boolean;
4
+ isFillDragging: boolean;
5
+ isRangeMoving: boolean;
6
+ }
7
+ export interface DataGridPointerAutoScrollPosition {
8
+ top: number;
9
+ left: number;
10
+ }
11
+ export interface UseDataGridPointerAutoScrollOptions {
12
+ resolveInteractionState: () => DataGridPointerAutoScrollInteractionState;
13
+ resolveRangeMovePointer: () => DataGridPointerCoordinates | null;
14
+ resolveFillPointer: () => DataGridPointerCoordinates | null;
15
+ resolveDragPointer: () => DataGridPointerCoordinates | null;
16
+ resolveViewportElement: () => HTMLElement | null;
17
+ resolveHeaderHeight: () => number;
18
+ resolveAxisAutoScrollDelta: (pointer: number, min: number, max: number) => number;
19
+ setScrollPosition: (next: DataGridPointerAutoScrollPosition) => void;
20
+ applyRangeMovePreviewFromPointer: () => void;
21
+ applyFillPreviewFromPointer: () => void;
22
+ applyDragSelectionFromPointer: () => void;
23
+ requestAnimationFrame?: (callback: FrameRequestCallback) => number;
24
+ cancelAnimationFrame?: (handle: number) => void;
25
+ }
26
+ export interface UseDataGridPointerAutoScrollResult {
27
+ startInteractionAutoScroll: () => void;
28
+ stopAutoScrollFrameIfIdle: () => void;
29
+ dispose: () => void;
30
+ }
31
+ export declare function useDataGridPointerAutoScroll(options: UseDataGridPointerAutoScrollOptions): UseDataGridPointerAutoScrollResult;
32
+ //# sourceMappingURL=useDataGridPointerAutoScroll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridPointerAutoScroll.d.ts","sourceRoot":"","sources":["../../src/useDataGridPointerAutoScroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAA;AAE5E,MAAM,WAAW,yCAAyC;IACxD,eAAe,EAAE,OAAO,CAAA;IACxB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,iCAAiC;IAChD,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,mCAAmC;IAClD,uBAAuB,EAAE,MAAM,yCAAyC,CAAA;IACxE,uBAAuB,EAAE,MAAM,0BAA0B,GAAG,IAAI,CAAA;IAChE,kBAAkB,EAAE,MAAM,0BAA0B,GAAG,IAAI,CAAA;IAC3D,kBAAkB,EAAE,MAAM,0BAA0B,GAAG,IAAI,CAAA;IAC3D,sBAAsB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAChD,mBAAmB,EAAE,MAAM,MAAM,CAAA;IACjC,0BAA0B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACjF,iBAAiB,EAAE,CAAC,IAAI,EAAE,iCAAiC,KAAK,IAAI,CAAA;IACpE,gCAAgC,EAAE,MAAM,IAAI,CAAA;IAC5C,2BAA2B,EAAE,MAAM,IAAI,CAAA;IACvC,6BAA6B,EAAE,MAAM,IAAI,CAAA;IACzC,qBAAqB,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,KAAK,MAAM,CAAA;IAClE,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CAChD;AAED,MAAM,WAAW,kCAAkC;IACjD,0BAA0B,EAAE,MAAM,IAAI,CAAA;IACtC,yBAAyB,EAAE,MAAM,IAAI,CAAA;IACrC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAsBD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,kCAAkC,CA+EpC"}
@@ -0,0 +1,85 @@
1
+ function isPointerInteractionActive(state) {
2
+ return state.isDragSelecting || state.isFillDragging || state.isRangeMoving;
3
+ }
4
+ function resolveActiveInteractionPointer(options, state) {
5
+ if (state.isRangeMoving) {
6
+ return options.resolveRangeMovePointer();
7
+ }
8
+ if (state.isFillDragging) {
9
+ return options.resolveFillPointer();
10
+ }
11
+ if (state.isDragSelecting) {
12
+ return options.resolveDragPointer();
13
+ }
14
+ return null;
15
+ }
16
+ export function useDataGridPointerAutoScroll(options) {
17
+ const requestFrame = options.requestAnimationFrame ?? ((callback) => window.requestAnimationFrame(callback));
18
+ const cancelFrame = options.cancelAnimationFrame ?? ((handle) => window.cancelAnimationFrame(handle));
19
+ let frameHandle = null;
20
+ const runFrame = () => {
21
+ const interactionState = options.resolveInteractionState();
22
+ if (!isPointerInteractionActive(interactionState)) {
23
+ frameHandle = null;
24
+ return;
25
+ }
26
+ const viewport = options.resolveViewportElement();
27
+ const pointer = resolveActiveInteractionPointer(options, interactionState);
28
+ if (viewport && pointer) {
29
+ const rect = viewport.getBoundingClientRect();
30
+ const topBoundary = rect.top + options.resolveHeaderHeight();
31
+ const deltaY = options.resolveAxisAutoScrollDelta(pointer.clientY, topBoundary, rect.bottom);
32
+ const deltaX = options.resolveAxisAutoScrollDelta(pointer.clientX, rect.left, rect.right);
33
+ if (deltaX !== 0 || deltaY !== 0) {
34
+ const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight);
35
+ const maxScrollLeft = Math.max(0, viewport.scrollWidth - viewport.clientWidth);
36
+ const nextTop = Math.max(0, Math.min(maxScrollTop, viewport.scrollTop + deltaY));
37
+ const nextLeft = Math.max(0, Math.min(maxScrollLeft, viewport.scrollLeft + deltaX));
38
+ if (nextTop !== viewport.scrollTop) {
39
+ viewport.scrollTop = nextTop;
40
+ }
41
+ if (nextLeft !== viewport.scrollLeft) {
42
+ viewport.scrollLeft = nextLeft;
43
+ }
44
+ options.setScrollPosition({
45
+ top: viewport.scrollTop,
46
+ left: viewport.scrollLeft,
47
+ });
48
+ }
49
+ if (interactionState.isRangeMoving) {
50
+ options.applyRangeMovePreviewFromPointer();
51
+ }
52
+ else if (interactionState.isFillDragging) {
53
+ options.applyFillPreviewFromPointer();
54
+ }
55
+ else if (interactionState.isDragSelecting) {
56
+ options.applyDragSelectionFromPointer();
57
+ }
58
+ }
59
+ frameHandle = requestFrame(runFrame);
60
+ };
61
+ function startInteractionAutoScroll() {
62
+ if (frameHandle !== null) {
63
+ return;
64
+ }
65
+ frameHandle = requestFrame(runFrame);
66
+ }
67
+ function stopAutoScrollFrameIfIdle() {
68
+ if (!isPointerInteractionActive(options.resolveInteractionState()) && frameHandle !== null) {
69
+ cancelFrame(frameHandle);
70
+ frameHandle = null;
71
+ }
72
+ }
73
+ function dispose() {
74
+ if (frameHandle === null) {
75
+ return;
76
+ }
77
+ cancelFrame(frameHandle);
78
+ frameHandle = null;
79
+ }
80
+ return {
81
+ startInteractionAutoScroll,
82
+ stopAutoScrollFrameIfIdle,
83
+ dispose,
84
+ };
85
+ }
@@ -0,0 +1,45 @@
1
+ export interface DataGridPointerCellCoord {
2
+ rowIndex: number;
3
+ columnIndex: number;
4
+ }
5
+ export interface DataGridPointerColumnMetric {
6
+ columnIndex: number;
7
+ start: number;
8
+ end: number;
9
+ width: number;
10
+ }
11
+ import type { DataGridColumnPin } from "@affino/datagrid-core";
12
+ export interface DataGridPointerColumnSnapshot {
13
+ pin?: DataGridColumnPin | null;
14
+ }
15
+ export interface DataGridPointerVirtualWindowSnapshot {
16
+ rowStart?: number;
17
+ rowEnd?: number;
18
+ rowTotal: number;
19
+ colStart?: number;
20
+ colEnd?: number;
21
+ colTotal: number;
22
+ overscan?: {
23
+ top?: number;
24
+ bottom?: number;
25
+ left?: number;
26
+ right?: number;
27
+ };
28
+ }
29
+ export interface UseDataGridPointerCellCoordResolverOptions<TCoord extends DataGridPointerCellCoord> {
30
+ resolveViewportElement: () => HTMLElement | null;
31
+ resolveColumnMetrics: () => readonly DataGridPointerColumnMetric[];
32
+ resolveColumns: () => readonly DataGridPointerColumnSnapshot[];
33
+ resolveVirtualWindow: () => DataGridPointerVirtualWindowSnapshot | null | undefined;
34
+ resolveHeaderHeight: () => number;
35
+ resolveRowHeight: () => number;
36
+ resolveRowIndexAtOffset?: (offset: number) => number;
37
+ resolveNearestNavigableColumnIndex: (columnIndex: number) => number;
38
+ normalizeCellCoord: (coord: TCoord) => TCoord | null;
39
+ }
40
+ export interface UseDataGridPointerCellCoordResolverResult<TCoord extends DataGridPointerCellCoord> {
41
+ resolveColumnIndexByAbsoluteX: (absoluteX: number) => number;
42
+ resolveCellCoordFromPointer: (clientX: number, clientY: number) => TCoord | null;
43
+ }
44
+ export declare function useDataGridPointerCellCoordResolver<TCoord extends DataGridPointerCellCoord>(options: UseDataGridPointerCellCoordResolverOptions<TCoord>): UseDataGridPointerCellCoordResolverResult<TCoord>;
45
+ //# sourceMappingURL=useDataGridPointerCellCoordResolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridPointerCellCoordResolver.d.ts","sourceRoot":"","sources":["../../src/useDataGridPointerCellCoordResolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;CACd;AAED,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAE9D,MAAM,WAAW,6BAA6B;IAC5C,GAAG,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAC/B;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAA;QACZ,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,KAAK,CAAC,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED,MAAM,WAAW,0CAA0C,CAAC,MAAM,SAAS,wBAAwB;IACjG,sBAAsB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAChD,oBAAoB,EAAE,MAAM,SAAS,2BAA2B,EAAE,CAAA;IAClE,cAAc,EAAE,MAAM,SAAS,6BAA6B,EAAE,CAAA;IAC9D,oBAAoB,EAAE,MAAM,oCAAoC,GAAG,IAAI,GAAG,SAAS,CAAA;IACnF,mBAAmB,EAAE,MAAM,MAAM,CAAA;IACjC,gBAAgB,EAAE,MAAM,MAAM,CAAA;IAC9B,uBAAuB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD,kCAAkC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;IACnE,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CACrD;AAED,MAAM,WAAW,yCAAyC,CAAC,MAAM,SAAS,wBAAwB;IAChG,6BAA6B,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,CAAA;IAC5D,2BAA2B,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;CACjF;AAED,wBAAgB,mCAAmC,CAAC,MAAM,SAAS,wBAAwB,EACzF,OAAO,EAAE,0CAA0C,CAAC,MAAM,CAAC,GAC1D,yCAAyC,CAAC,MAAM,CAAC,CAkHnD"}
@@ -0,0 +1,107 @@
1
+ export function useDataGridPointerCellCoordResolver(options) {
2
+ function resolveRowCount() {
3
+ const snapshot = options.resolveVirtualWindow();
4
+ return Math.max(0, Math.trunc(snapshot?.rowTotal ?? 0));
5
+ }
6
+ function resolveColumnCountFromWindow(metricsLength) {
7
+ const snapshot = options.resolveVirtualWindow();
8
+ if (!snapshot) {
9
+ return 0;
10
+ }
11
+ return Math.max(0, Math.min(metricsLength, Math.trunc(snapshot.colTotal)));
12
+ }
13
+ function resolveColumnIndexByAbsoluteX(absoluteX) {
14
+ const metrics = options.resolveColumnMetrics();
15
+ const lastMetric = metrics[metrics.length - 1];
16
+ if (!lastMetric) {
17
+ return -1;
18
+ }
19
+ const columnCount = resolveColumnCountFromWindow(metrics.length);
20
+ if (columnCount <= 0) {
21
+ return -1;
22
+ }
23
+ const lastAllowedMetric = metrics[Math.max(0, columnCount - 1)];
24
+ if (!lastAllowedMetric) {
25
+ return -1;
26
+ }
27
+ const clampedX = Math.max(0, Math.min(absoluteX, Math.max(0, lastMetric.end - 1)));
28
+ for (const metric of metrics) {
29
+ if (clampedX < metric.end) {
30
+ return Math.min(metric.columnIndex, lastAllowedMetric.columnIndex);
31
+ }
32
+ }
33
+ return lastAllowedMetric.columnIndex;
34
+ }
35
+ function resolveCellCoordFromPointer(clientX, clientY) {
36
+ const viewport = options.resolveViewportElement();
37
+ const rowCount = resolveRowCount();
38
+ if (!viewport || rowCount === 0) {
39
+ return null;
40
+ }
41
+ const rect = viewport.getBoundingClientRect();
42
+ if (rect.width <= 0 || rect.height <= 0) {
43
+ return null;
44
+ }
45
+ const metrics = options.resolveColumnMetrics();
46
+ const lastMetric = metrics[metrics.length - 1];
47
+ if (!lastMetric) {
48
+ return null;
49
+ }
50
+ const totalWidth = lastMetric.end;
51
+ if (totalWidth <= 0) {
52
+ return null;
53
+ }
54
+ let leftPinnedWidth = 0;
55
+ let rightPinnedWidth = 0;
56
+ const columns = options.resolveColumns();
57
+ for (const metric of metrics) {
58
+ const column = columns[metric.columnIndex];
59
+ if (column?.pin === "left") {
60
+ leftPinnedWidth = metric.end;
61
+ }
62
+ else if (column?.pin === "right") {
63
+ rightPinnedWidth += metric.width;
64
+ }
65
+ }
66
+ const pointerXInViewport = clientX - rect.left;
67
+ const pointerYInViewport = clientY - rect.top;
68
+ const clampedY = Math.max(0, Math.min(rect.height - 1, pointerYInViewport));
69
+ const rowOffset = viewport.scrollTop + clampedY - options.resolveHeaderHeight();
70
+ const rowRawIndex = options.resolveRowIndexAtOffset
71
+ ? options.resolveRowIndexAtOffset(rowOffset)
72
+ : Math.floor(rowOffset / options.resolveRowHeight());
73
+ let absoluteX;
74
+ if (pointerXInViewport <= leftPinnedWidth) {
75
+ absoluteX = pointerXInViewport;
76
+ }
77
+ else if (rightPinnedWidth > 0 && pointerXInViewport >= rect.width - rightPinnedWidth) {
78
+ absoluteX = totalWidth - rightPinnedWidth + (pointerXInViewport - (rect.width - rightPinnedWidth));
79
+ }
80
+ else {
81
+ absoluteX = viewport.scrollLeft + pointerXInViewport;
82
+ }
83
+ const columnRawIndex = resolveColumnIndexByAbsoluteX(absoluteX);
84
+ if (columnRawIndex < 0) {
85
+ return null;
86
+ }
87
+ const columnIndex = options.resolveNearestNavigableColumnIndex(columnRawIndex);
88
+ if (columnIndex < 0) {
89
+ return null;
90
+ }
91
+ const normalized = options.normalizeCellCoord({
92
+ rowIndex: rowRawIndex,
93
+ columnIndex,
94
+ });
95
+ if (!normalized) {
96
+ return null;
97
+ }
98
+ if (normalized.rowIndex < 0 || normalized.rowIndex >= rowCount) {
99
+ return null;
100
+ }
101
+ return normalized;
102
+ }
103
+ return {
104
+ resolveColumnIndexByAbsoluteX,
105
+ resolveCellCoordFromPointer,
106
+ };
107
+ }
@@ -0,0 +1,5 @@
1
+ export interface UseDataGridPointerModifierPolicyResult {
2
+ isRangeMoveModifierActive: (event: MouseEvent | KeyboardEvent) => boolean;
3
+ }
4
+ export declare function useDataGridPointerModifierPolicy(): UseDataGridPointerModifierPolicyResult;
5
+ //# sourceMappingURL=useDataGridPointerModifierPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridPointerModifierPolicy.d.ts","sourceRoot":"","sources":["../../src/useDataGridPointerModifierPolicy.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sCAAsC;IACrD,yBAAyB,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,KAAK,OAAO,CAAA;CAC1E;AAED,wBAAgB,gCAAgC,IAAI,sCAAsC,CAQzF"}
@@ -0,0 +1,8 @@
1
+ export function useDataGridPointerModifierPolicy() {
2
+ function isRangeMoveModifierActive(event) {
3
+ return event.altKey || event.ctrlKey || event.metaKey;
4
+ }
5
+ return {
6
+ isRangeMoveModifierActive,
7
+ };
8
+ }