@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 @@
1
+ {"version":3,"file":"useDataGridTabTargetResolver.d.ts","sourceRoot":"","sources":["../../src/useDataGridTabTargetResolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,mCAAmC,CAAC,MAAM,SAAS,sBAAsB;IACxF,6BAA6B,EAAE,MAAM,SAAS,MAAM,EAAE,CAAA;IACtD,kBAAkB,EAAE,CAAC,IAAI,EAAE,0BAA0B,KAAK,MAAM,GAAG,IAAI,CAAA;CACxE;AAED,MAAM,WAAW,kCAAkC,CAAC,MAAM,SAAS,sBAAsB;IACvF,gBAAgB,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,CAAA;CACzE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,SAAS,sBAAsB,EAChF,OAAO,EAAE,mCAAmC,CAAC,MAAM,CAAC,GACnD,kCAAkC,CAAC,MAAM,CAAC,CAgC5C"}
@@ -0,0 +1,30 @@
1
+ export function useDataGridTabTargetResolver(options) {
2
+ function resolveTabTarget(current, backwards) {
3
+ const columns = options.resolveNavigableColumnIndexes();
4
+ if (!columns.length) {
5
+ return null;
6
+ }
7
+ const currentPos = columns.indexOf(current.columnIndex);
8
+ const resolvedPos = currentPos === -1
9
+ ? columns.findIndex(index => index >= current.columnIndex)
10
+ : currentPos;
11
+ const startPos = resolvedPos === -1 ? (backwards ? columns.length - 1 : 0) : resolvedPos;
12
+ let rowIndex = current.rowIndex;
13
+ let columnPos = startPos + (backwards ? -1 : 1);
14
+ if (columnPos < 0) {
15
+ columnPos = columns.length - 1;
16
+ rowIndex -= 1;
17
+ }
18
+ else if (columnPos >= columns.length) {
19
+ columnPos = 0;
20
+ rowIndex += 1;
21
+ }
22
+ return options.normalizeCellCoord({
23
+ rowIndex,
24
+ columnIndex: columns[columnPos] ?? columns[0] ?? 0,
25
+ });
26
+ }
27
+ return {
28
+ resolveTabTarget,
29
+ };
30
+ }
@@ -0,0 +1,16 @@
1
+ export interface UseDataGridViewportBlurHandlerOptions {
2
+ resolveViewportElement: () => HTMLElement | null;
3
+ resolveContextMenuElement: () => HTMLElement | null;
4
+ stopDragSelection: () => void;
5
+ stopFillSelection: (commit: boolean) => void;
6
+ stopRangeMove: (commit: boolean) => void;
7
+ stopColumnResize: () => void;
8
+ closeContextMenu: () => void;
9
+ hasInlineEditor: () => boolean;
10
+ commitInlineEdit: () => boolean;
11
+ }
12
+ export interface UseDataGridViewportBlurHandlerResult {
13
+ handleViewportBlur: (event: FocusEvent) => boolean;
14
+ }
15
+ export declare function useDataGridViewportBlurHandler(options: UseDataGridViewportBlurHandlerOptions): UseDataGridViewportBlurHandlerResult;
16
+ //# sourceMappingURL=useDataGridViewportBlurHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridViewportBlurHandler.d.ts","sourceRoot":"","sources":["../../src/useDataGridViewportBlurHandler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qCAAqC;IACpD,sBAAsB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAChD,yBAAyB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IACnD,iBAAiB,EAAE,MAAM,IAAI,CAAA;IAC7B,iBAAiB,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,aAAa,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAA;IACxC,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,eAAe,EAAE,MAAM,OAAO,CAAA;IAC9B,gBAAgB,EAAE,MAAM,OAAO,CAAA;CAChC;AAED,MAAM,WAAW,oCAAoC;IACnD,kBAAkB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAA;CACnD;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qCAAqC,GAC7C,oCAAoC,CAiEtC"}
@@ -0,0 +1,62 @@
1
+ export function useDataGridViewportBlurHandler(options) {
2
+ function finalizeBlurCleanup() {
3
+ options.stopDragSelection();
4
+ options.stopFillSelection(false);
5
+ options.stopRangeMove(false);
6
+ options.stopColumnResize();
7
+ options.closeContextMenu();
8
+ if (options.hasInlineEditor()) {
9
+ options.commitInlineEdit();
10
+ }
11
+ }
12
+ function handleViewportBlur(event) {
13
+ const viewport = options.resolveViewportElement();
14
+ const nextFocused = event.relatedTarget;
15
+ if (viewport && nextFocused && viewport.contains(nextFocused)) {
16
+ return false;
17
+ }
18
+ const menu = options.resolveContextMenuElement();
19
+ if (nextFocused && menu?.contains(nextFocused)) {
20
+ return false;
21
+ }
22
+ if (nextFocused && nextFocused instanceof HTMLElement) {
23
+ if (nextFocused.closest("[data-datagrid-menu-action],[data-datagrid-copy-menu],.datagrid-sugar-context")) {
24
+ return false;
25
+ }
26
+ }
27
+ if (!nextFocused && viewport) {
28
+ const runDeferred = () => {
29
+ const active = viewport.ownerDocument?.activeElement;
30
+ if (active && viewport.contains(active)) {
31
+ return;
32
+ }
33
+ const menuElement = options.resolveContextMenuElement();
34
+ if (active && menuElement?.contains(active)) {
35
+ return;
36
+ }
37
+ if (active && active instanceof HTMLElement) {
38
+ if (active.closest("[data-datagrid-menu-action],[data-datagrid-copy-menu],.datagrid-sugar-context")) {
39
+ return;
40
+ }
41
+ }
42
+ finalizeBlurCleanup();
43
+ };
44
+ const view = viewport.ownerDocument?.defaultView;
45
+ if (typeof view?.requestAnimationFrame === "function") {
46
+ view.requestAnimationFrame(() => view.requestAnimationFrame(runDeferred));
47
+ }
48
+ else if (typeof view?.setTimeout === "function") {
49
+ view.setTimeout(runDeferred, 0);
50
+ }
51
+ else {
52
+ setTimeout(runDeferred, 0);
53
+ }
54
+ return true;
55
+ }
56
+ finalizeBlurCleanup();
57
+ return true;
58
+ }
59
+ return {
60
+ handleViewportBlur,
61
+ };
62
+ }
@@ -0,0 +1,31 @@
1
+ import type { OpenDataGridContextMenuInput } from "./dataGridContextMenuContracts";
2
+ export interface DataGridViewportContextMenuCoord {
3
+ rowIndex: number;
4
+ columnIndex: number;
5
+ }
6
+ export interface DataGridViewportContextMenuRange {
7
+ startRow: number;
8
+ endRow: number;
9
+ startColumn: number;
10
+ endColumn: number;
11
+ }
12
+ export interface UseDataGridViewportContextMenuRouterOptions<TCoord extends DataGridViewportContextMenuCoord = DataGridViewportContextMenuCoord, TRange extends DataGridViewportContextMenuRange = DataGridViewportContextMenuRange> {
13
+ isInteractionBlocked: () => boolean;
14
+ isRangeMoveModifierActive: (event: MouseEvent) => boolean;
15
+ resolveSelectionRange: () => TRange | null;
16
+ resolveCellCoordFromDataset: (rowId: string, columnKey: string) => TCoord | null;
17
+ applyCellSelection: (coord: TCoord, extend: boolean, fallbackAnchor?: TCoord, ensureVisible?: boolean) => void;
18
+ resolveActiveCellCoord: () => TCoord | null;
19
+ setActiveCellCoord: (coord: TCoord) => void;
20
+ cellCoordsEqual: (a: TCoord | null, b: TCoord | null) => boolean;
21
+ isMultiCellSelection: (range: TRange | null) => boolean;
22
+ isCoordInsideRange: (coord: TCoord, range: TRange) => boolean;
23
+ openContextMenu: (clientX: number, clientY: number, context: OpenDataGridContextMenuInput) => void;
24
+ closeContextMenu: () => void;
25
+ isColumnContextEnabled?: (columnKey: string) => boolean;
26
+ }
27
+ export interface UseDataGridViewportContextMenuRouterResult {
28
+ dispatchViewportContextMenu: (event: MouseEvent) => boolean;
29
+ }
30
+ export declare function useDataGridViewportContextMenuRouter<TCoord extends DataGridViewportContextMenuCoord = DataGridViewportContextMenuCoord, TRange extends DataGridViewportContextMenuRange = DataGridViewportContextMenuRange>(options: UseDataGridViewportContextMenuRouterOptions<TCoord, TRange>): UseDataGridViewportContextMenuRouterResult;
31
+ //# sourceMappingURL=useDataGridViewportContextMenuRouter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridViewportContextMenuRouter.d.ts","sourceRoot":"","sources":["../../src/useDataGridViewportContextMenuRouter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,4BAA4B,EAC7B,MAAM,gCAAgC,CAAA;AAEvC,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,2CAA2C,CAC1D,MAAM,SAAS,gCAAgC,GAAG,gCAAgC,EAClF,MAAM,SAAS,gCAAgC,GAAG,gCAAgC;IAElF,oBAAoB,EAAE,MAAM,OAAO,CAAA;IACnC,yBAAyB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAA;IACzD,qBAAqB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC1C,2BAA2B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IAChF,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAC9G,sBAAsB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;IAC3C,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,eAAe,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAA;IAChE,oBAAoB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,OAAO,CAAA;IACvD,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;IAC7D,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,4BAA4B,KAAK,IAAI,CAAA;IAClG,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,sBAAsB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAA;CACxD;AAED,MAAM,WAAW,0CAA0C;IACzD,2BAA2B,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAA;CAC5D;AAYD,wBAAgB,oCAAoC,CAClD,MAAM,SAAS,gCAAgC,GAAG,gCAAgC,EAClF,MAAM,SAAS,gCAAgC,GAAG,gCAAgC,EAElF,OAAO,EAAE,2CAA2C,CAAC,MAAM,EAAE,MAAM,CAAC,GACnE,0CAA0C,CAkF5C"}
@@ -0,0 +1,78 @@
1
+ function isContextEnabled(columnKey, options) {
2
+ return options.isColumnContextEnabled?.(columnKey) ?? columnKey !== "select";
3
+ }
4
+ export function useDataGridViewportContextMenuRouter(options) {
5
+ function dispatchViewportContextMenu(event) {
6
+ if (options.isInteractionBlocked()) {
7
+ event.preventDefault();
8
+ return true;
9
+ }
10
+ const currentRange = options.resolveSelectionRange();
11
+ if (options.isRangeMoveModifierActive(event) && currentRange) {
12
+ event.preventDefault();
13
+ return true;
14
+ }
15
+ const targetNode = event.target;
16
+ if (!targetNode) {
17
+ return false;
18
+ }
19
+ const cell = targetNode.closest(".datagrid-stage__cell[data-row-id][data-column-key]");
20
+ if (cell) {
21
+ const rowId = cell.dataset.rowId ?? "";
22
+ const columnKey = cell.dataset.columnKey ?? "";
23
+ if (columnKey && isContextEnabled(columnKey, options)) {
24
+ let coord = null;
25
+ const rowIndex = cell.dataset.rowIndex;
26
+ const columnIndex = cell.dataset.columnIndex;
27
+ if (rowIndex !== undefined && columnIndex !== undefined) {
28
+ const parsedRow = Number(rowIndex);
29
+ const parsedColumn = Number(columnIndex);
30
+ if (Number.isFinite(parsedRow) && Number.isFinite(parsedColumn)) {
31
+ coord = { rowIndex: parsedRow, columnIndex: parsedColumn };
32
+ }
33
+ }
34
+ if (!coord) {
35
+ coord = options.resolveCellCoordFromDataset(rowId, columnKey);
36
+ }
37
+ if (!coord) {
38
+ event.preventDefault();
39
+ options.openContextMenu(event.clientX, event.clientY, { zone: "cell", columnKey, rowId });
40
+ return true;
41
+ }
42
+ if (coord) {
43
+ if (!currentRange || !options.isCoordInsideRange(coord, currentRange)) {
44
+ options.applyCellSelection(coord, false, coord, false);
45
+ }
46
+ else if (!options.cellCoordsEqual(options.resolveActiveCellCoord(), coord)) {
47
+ options.setActiveCellCoord(coord);
48
+ }
49
+ const nextRange = options.resolveSelectionRange();
50
+ const zone = options.isMultiCellSelection(nextRange) &&
51
+ !!nextRange &&
52
+ options.isCoordInsideRange(coord, nextRange)
53
+ ? "range"
54
+ : "cell";
55
+ event.preventDefault();
56
+ options.openContextMenu(event.clientX, event.clientY, { zone, columnKey, rowId });
57
+ return true;
58
+ }
59
+ }
60
+ }
61
+ const headerCell = targetNode.closest(".datagrid-stage__cell--header[data-column-key]");
62
+ if (headerCell) {
63
+ const columnKey = headerCell.dataset.columnKey ?? "";
64
+ if (columnKey && isContextEnabled(columnKey, options)) {
65
+ event.preventDefault();
66
+ options.openContextMenu(event.clientX, event.clientY, { zone: "header", columnKey });
67
+ return true;
68
+ }
69
+ return false;
70
+ }
71
+ event.preventDefault();
72
+ options.closeContextMenu();
73
+ return true;
74
+ }
75
+ return {
76
+ dispatchViewportContextMenu,
77
+ };
78
+ }
@@ -0,0 +1,22 @@
1
+ export interface DataGridViewportMeasuredState {
2
+ viewportHeight: number;
3
+ viewportWidth: number;
4
+ headerHeight: number;
5
+ }
6
+ export interface UseDataGridViewportMeasureSchedulerOptions {
7
+ resolveViewportElement: () => HTMLElement | null;
8
+ resolveHeaderElement: () => HTMLElement | null;
9
+ resolveCurrentState: () => DataGridViewportMeasuredState;
10
+ applyMeasuredState: (next: DataGridViewportMeasuredState) => void;
11
+ rowHeight: number;
12
+ minViewportBodyHeight?: number;
13
+ requestAnimationFrame?: (callback: FrameRequestCallback) => number;
14
+ cancelAnimationFrame?: (handle: number) => void;
15
+ }
16
+ export interface UseDataGridViewportMeasureSchedulerResult {
17
+ syncViewportHeight: () => void;
18
+ scheduleViewportMeasure: () => void;
19
+ dispose: () => void;
20
+ }
21
+ export declare function useDataGridViewportMeasureScheduler(options: UseDataGridViewportMeasureSchedulerOptions): UseDataGridViewportMeasureSchedulerResult;
22
+ //# sourceMappingURL=useDataGridViewportMeasureScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridViewportMeasureScheduler.d.ts","sourceRoot":"","sources":["../../src/useDataGridViewportMeasureScheduler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,6BAA6B;IAC5C,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,CAAA;IACrB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,0CAA0C;IACzD,sBAAsB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAChD,oBAAoB,EAAE,MAAM,WAAW,GAAG,IAAI,CAAA;IAC9C,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;IACxD,kBAAkB,EAAE,CAAC,IAAI,EAAE,6BAA6B,KAAK,IAAI,CAAA;IACjE,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,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,yCAAyC;IACxD,kBAAkB,EAAE,MAAM,IAAI,CAAA;IAC9B,uBAAuB,EAAE,MAAM,IAAI,CAAA;IACnC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,0CAA0C,GAClD,yCAAyC,CA4E3C"}
@@ -0,0 +1,65 @@
1
+ export function useDataGridViewportMeasureScheduler(options) {
2
+ const requestFrame = options.requestAnimationFrame ?? (callback => window.requestAnimationFrame(callback));
3
+ const cancelFrame = options.cancelAnimationFrame ?? (handle => window.cancelAnimationFrame(handle));
4
+ const minViewportBodyHeight = options.minViewportBodyHeight ?? 200;
5
+ let frame = null;
6
+ let pending = false;
7
+ function syncViewportHeight() {
8
+ const viewport = options.resolveViewportElement();
9
+ if (!viewport) {
10
+ return;
11
+ }
12
+ const current = options.resolveCurrentState();
13
+ const resolvedRowHeight = Number.isFinite(options.rowHeight) && options.rowHeight > 0
14
+ ? options.rowHeight
15
+ : 1;
16
+ const nextViewportWidth = viewport.clientWidth;
17
+ const header = options.resolveHeaderElement();
18
+ const nextHeaderHeight = header
19
+ ? Math.max(1, Math.round(header.getBoundingClientRect().height))
20
+ : current.headerHeight;
21
+ const bodyHeight = Math.max(minViewportBodyHeight, viewport.clientHeight - nextHeaderHeight);
22
+ const rowCount = Math.max(1, Math.ceil(bodyHeight / resolvedRowHeight));
23
+ const nextViewportHeight = rowCount * resolvedRowHeight;
24
+ if (nextViewportHeight === current.viewportHeight &&
25
+ nextViewportWidth === current.viewportWidth &&
26
+ nextHeaderHeight === current.headerHeight) {
27
+ return;
28
+ }
29
+ options.applyMeasuredState({
30
+ viewportHeight: nextViewportHeight,
31
+ viewportWidth: nextViewportWidth,
32
+ headerHeight: nextHeaderHeight,
33
+ });
34
+ }
35
+ function flushViewportMeasure() {
36
+ frame = null;
37
+ pending = false;
38
+ syncViewportHeight();
39
+ }
40
+ function scheduleViewportMeasure() {
41
+ if (pending) {
42
+ return;
43
+ }
44
+ pending = true;
45
+ if (typeof window === "undefined") {
46
+ flushViewportMeasure();
47
+ return;
48
+ }
49
+ frame = requestFrame(() => flushViewportMeasure());
50
+ }
51
+ function dispose() {
52
+ if (frame === null) {
53
+ pending = false;
54
+ return;
55
+ }
56
+ cancelFrame(frame);
57
+ frame = null;
58
+ pending = false;
59
+ }
60
+ return {
61
+ syncViewportHeight,
62
+ scheduleViewportMeasure,
63
+ dispose,
64
+ };
65
+ }
@@ -0,0 +1,16 @@
1
+ export interface UseDataGridViewportScrollLifecycleOptions {
2
+ isContextMenuVisible: () => boolean;
3
+ shouldCloseContextMenuOnScroll?: () => boolean;
4
+ closeContextMenu: () => void;
5
+ resolveScrollTop: () => number;
6
+ resolveScrollLeft: () => number;
7
+ setScrollTop: (value: number) => void;
8
+ setScrollLeft: (value: number) => void;
9
+ hasInlineEditor: () => boolean;
10
+ commitInlineEdit: () => void;
11
+ }
12
+ export interface UseDataGridViewportScrollLifecycleResult {
13
+ onViewportScroll: (event: Event) => void;
14
+ }
15
+ export declare function useDataGridViewportScrollLifecycle(options: UseDataGridViewportScrollLifecycleOptions): UseDataGridViewportScrollLifecycleResult;
16
+ //# sourceMappingURL=useDataGridViewportScrollLifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridViewportScrollLifecycle.d.ts","sourceRoot":"","sources":["../../src/useDataGridViewportScrollLifecycle.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yCAAyC;IACxD,oBAAoB,EAAE,MAAM,OAAO,CAAA;IACnC,8BAA8B,CAAC,EAAE,MAAM,OAAO,CAAA;IAC9C,gBAAgB,EAAE,MAAM,IAAI,CAAA;IAC5B,gBAAgB,EAAE,MAAM,MAAM,CAAA;IAC9B,iBAAiB,EAAE,MAAM,MAAM,CAAA;IAC/B,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACrC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,eAAe,EAAE,MAAM,OAAO,CAAA;IAC9B,gBAAgB,EAAE,MAAM,IAAI,CAAA;CAC7B;AAED,MAAM,WAAW,wCAAwC;IACvD,gBAAgB,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAA;CACzC;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,yCAAyC,GACjD,wCAAwC,CA4B1C"}
@@ -0,0 +1,28 @@
1
+ export function useDataGridViewportScrollLifecycle(options) {
2
+ function onViewportScroll(event) {
3
+ const target = event.currentTarget;
4
+ if (!target) {
5
+ return;
6
+ }
7
+ const shouldCloseContextMenu = options.shouldCloseContextMenuOnScroll
8
+ ? options.shouldCloseContextMenuOnScroll()
9
+ : true;
10
+ if (options.isContextMenuVisible() && shouldCloseContextMenu) {
11
+ options.closeContextMenu();
12
+ }
13
+ const nextTop = target.scrollTop;
14
+ const nextLeft = target.scrollLeft;
15
+ if (nextTop !== options.resolveScrollTop()) {
16
+ options.setScrollTop(nextTop);
17
+ }
18
+ if (nextLeft !== options.resolveScrollLeft()) {
19
+ options.setScrollLeft(nextLeft);
20
+ }
21
+ if (options.hasInlineEditor()) {
22
+ options.commitInlineEdit();
23
+ }
24
+ }
25
+ return {
26
+ onViewportScroll,
27
+ };
28
+ }
@@ -0,0 +1,32 @@
1
+ export interface DataGridVirtualRange {
2
+ start: number;
3
+ end: number;
4
+ }
5
+ export interface DataGridVirtualWindowRowSnapshot {
6
+ colStart?: number;
7
+ colEnd?: number;
8
+ colTotal?: number;
9
+ rowStart: number;
10
+ rowEnd: number;
11
+ rowTotal: number;
12
+ overscan?: {
13
+ top?: number;
14
+ bottom?: number;
15
+ left?: number;
16
+ right?: number;
17
+ };
18
+ }
19
+ export interface UseDataGridVirtualRangeMetricsWindowOptions {
20
+ virtualWindow: DataGridVirtualWindowRowSnapshot;
21
+ rowHeight: number;
22
+ }
23
+ export type UseDataGridVirtualRangeMetricsOptions = UseDataGridVirtualRangeMetricsWindowOptions;
24
+ export interface DataGridVirtualRangeMetricsSnapshot {
25
+ virtualRange: DataGridVirtualRange;
26
+ spacerTopHeight: number;
27
+ spacerBottomHeight: number;
28
+ rangeLabel: string;
29
+ }
30
+ export declare function computeDataGridVirtualRange(options: UseDataGridVirtualRangeMetricsOptions): DataGridVirtualRange;
31
+ export declare function useDataGridVirtualRangeMetrics(options: UseDataGridVirtualRangeMetricsOptions): DataGridVirtualRangeMetricsSnapshot;
32
+ //# sourceMappingURL=useDataGridVirtualRangeMetrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridVirtualRangeMetrics.d.ts","sourceRoot":"","sources":["../../src/useDataGridVirtualRangeMetrics.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,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,2CAA2C;IAC1D,aAAa,EAAE,gCAAgC,CAAA;IAC/C,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,qCAAqC,GAAG,2CAA2C,CAAA;AAE/F,MAAM,WAAW,mCAAmC;IAClD,YAAY,EAAE,oBAAoB,CAAA;IAClC,eAAe,EAAE,MAAM,CAAA;IACvB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,qCAAqC,GAC7C,oBAAoB,CAQtB;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,qCAAqC,GAC7C,mCAAmC,CAiBrC"}
@@ -0,0 +1,26 @@
1
+ export function computeDataGridVirtualRange(options) {
2
+ const total = Math.max(0, Math.trunc(options.virtualWindow.rowTotal));
3
+ if (total === 0) {
4
+ return { start: 0, end: -1 };
5
+ }
6
+ const start = Math.max(0, Math.min(total - 1, Math.trunc(options.virtualWindow.rowStart)));
7
+ const end = Math.max(start, Math.min(total - 1, Math.trunc(options.virtualWindow.rowEnd)));
8
+ return { start, end };
9
+ }
10
+ export function useDataGridVirtualRangeMetrics(options) {
11
+ const virtualRange = computeDataGridVirtualRange(options);
12
+ const totalRows = Math.max(0, Math.trunc(options.virtualWindow.rowTotal));
13
+ const spacerTopHeight = Math.max(0, virtualRange.start * options.rowHeight);
14
+ const spacerBottomHeight = totalRows === 0 || virtualRange.end < virtualRange.start
15
+ ? 0
16
+ : Math.max(0, (totalRows - (virtualRange.end + 1)) * options.rowHeight);
17
+ const rangeLabel = totalRows === 0 || virtualRange.end < virtualRange.start
18
+ ? "0-0"
19
+ : `${virtualRange.start + 1}-${virtualRange.end + 1}`;
20
+ return {
21
+ virtualRange,
22
+ spacerTopHeight,
23
+ spacerBottomHeight,
24
+ rangeLabel,
25
+ };
26
+ }
@@ -0,0 +1,21 @@
1
+ export interface DataGridVisibleRowsRange {
2
+ start: number;
3
+ end: number;
4
+ }
5
+ export interface UseDataGridVisibleRowsSyncSchedulerOptions<TRowSource, TVisibleRow> {
6
+ resolveRows: () => readonly TRowSource[];
7
+ resolveRange: () => DataGridVisibleRowsRange;
8
+ setRows: (rows: readonly TRowSource[]) => void;
9
+ syncRowsInRange: (range: DataGridVisibleRowsRange) => readonly TVisibleRow[];
10
+ applyVisibleRows: (rows: readonly TVisibleRow[]) => void;
11
+ requestAnimationFrame?: (callback: FrameRequestCallback) => number;
12
+ cancelAnimationFrame?: (handle: number) => void;
13
+ }
14
+ export interface UseDataGridVisibleRowsSyncSchedulerResult {
15
+ syncVisibleRows: () => void;
16
+ scheduleVisibleRowsSync: () => void;
17
+ resetVisibleRowsSyncCache: () => void;
18
+ dispose: () => void;
19
+ }
20
+ export declare function useDataGridVisibleRowsSyncScheduler<TRowSource, TVisibleRow>(options: UseDataGridVisibleRowsSyncSchedulerOptions<TRowSource, TVisibleRow>): UseDataGridVisibleRowsSyncSchedulerResult;
21
+ //# sourceMappingURL=useDataGridVisibleRowsSyncScheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDataGridVisibleRowsSyncScheduler.d.ts","sourceRoot":"","sources":["../../src/useDataGridVisibleRowsSyncScheduler.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,0CAA0C,CAAC,UAAU,EAAE,WAAW;IACjF,WAAW,EAAE,MAAM,SAAS,UAAU,EAAE,CAAA;IACxC,YAAY,EAAE,MAAM,wBAAwB,CAAA;IAC5C,OAAO,EAAE,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,KAAK,IAAI,CAAA;IAC9C,eAAe,EAAE,CAAC,KAAK,EAAE,wBAAwB,KAAK,SAAS,WAAW,EAAE,CAAA;IAC5E,gBAAgB,EAAE,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,KAAK,IAAI,CAAA;IACxD,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,yCAAyC;IACxD,eAAe,EAAE,MAAM,IAAI,CAAA;IAC3B,uBAAuB,EAAE,MAAM,IAAI,CAAA;IACnC,yBAAyB,EAAE,MAAM,IAAI,CAAA;IACrC,OAAO,EAAE,MAAM,IAAI,CAAA;CACpB;AAED,wBAAgB,mCAAmC,CAAC,UAAU,EAAE,WAAW,EACzE,OAAO,EAAE,0CAA0C,CAAC,UAAU,EAAE,WAAW,CAAC,GAC3E,yCAAyC,CA+E3C"}
@@ -0,0 +1,70 @@
1
+ export function useDataGridVisibleRowsSyncScheduler(options) {
2
+ const requestFrame = options.requestAnimationFrame ?? (callback => window.requestAnimationFrame(callback));
3
+ const cancelFrame = options.cancelAnimationFrame ?? (handle => window.cancelAnimationFrame(handle));
4
+ let frame = null;
5
+ let pending = false;
6
+ let lastSyncedRowsRef = null;
7
+ let lastSyncedRangeStart = Number.NaN;
8
+ let lastSyncedRangeEnd = Number.NaN;
9
+ function syncVisibleRows() {
10
+ const rows = options.resolveRows();
11
+ const range = options.resolveRange();
12
+ const hasSameRowsRef = lastSyncedRowsRef === rows;
13
+ const hasSameRange = lastSyncedRangeStart === range.start && lastSyncedRangeEnd === range.end;
14
+ if (hasSameRowsRef && hasSameRange) {
15
+ return;
16
+ }
17
+ if (!hasSameRowsRef) {
18
+ options.setRows(rows);
19
+ }
20
+ if (range.end < range.start) {
21
+ options.applyVisibleRows([]);
22
+ lastSyncedRowsRef = rows;
23
+ lastSyncedRangeStart = range.start;
24
+ lastSyncedRangeEnd = range.end;
25
+ return;
26
+ }
27
+ const nextVisibleRows = options.syncRowsInRange({
28
+ start: range.start,
29
+ end: range.end,
30
+ });
31
+ options.applyVisibleRows(nextVisibleRows);
32
+ lastSyncedRowsRef = rows;
33
+ lastSyncedRangeStart = range.start;
34
+ lastSyncedRangeEnd = range.end;
35
+ }
36
+ function flushVisibleRowsSync() {
37
+ frame = null;
38
+ pending = false;
39
+ syncVisibleRows();
40
+ }
41
+ function scheduleVisibleRowsSync() {
42
+ if (pending) {
43
+ return;
44
+ }
45
+ pending = true;
46
+ if (typeof window === "undefined") {
47
+ flushVisibleRowsSync();
48
+ return;
49
+ }
50
+ frame = requestFrame(() => flushVisibleRowsSync());
51
+ }
52
+ function resetVisibleRowsSyncCache() {
53
+ lastSyncedRowsRef = null;
54
+ lastSyncedRangeStart = Number.NaN;
55
+ lastSyncedRangeEnd = Number.NaN;
56
+ }
57
+ function dispose() {
58
+ if (frame !== null) {
59
+ cancelFrame(frame);
60
+ frame = null;
61
+ }
62
+ pending = false;
63
+ }
64
+ return {
65
+ syncVisibleRows,
66
+ scheduleVisibleRowsSync,
67
+ resetVisibleRowsSyncCache,
68
+ dispose,
69
+ };
70
+ }