@infinite-table/infinite-react 0.5.0 → 0.5.2

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 (282) hide show
  1. package/README.md +104 -0
  2. package/index.css +896 -0
  3. package/index.d.ts +2264 -0
  4. package/index.esm.css +896 -0
  5. package/index.esm.js +15404 -0
  6. package/index.js +15240 -0
  7. package/package.json +9 -94
  8. package/.vscode/settings.json +0 -3
  9. package/API.md +0 -0
  10. package/build/buildPackageJson.js +0 -43
  11. package/build/scripts/test.js +0 -37
  12. package/bundler.config.js +0 -25
  13. package/globals.d.ts +0 -7
  14. package/rollup.config.js +0 -15
  15. package/run-build-deepmap.js +0 -47
  16. package/run-build.js +0 -45
  17. package/run-dts-concat.js +0 -21
  18. package/src/components/CSSVariableWatch.tsx +0 -82
  19. package/src/components/DataSource/BooleanCollectionState.ts +0 -214
  20. package/src/components/DataSource/BooleanDeepCollectionState.ts +0 -208
  21. package/src/components/DataSource/DataSourceContext.ts +0 -20
  22. package/src/components/DataSource/GroupRowsState.ts +0 -74
  23. package/src/components/DataSource/Indexer.ts +0 -27
  24. package/src/components/DataSource/RowSelectionState.ts +0 -763
  25. package/src/components/DataSource/defaultFilterTypes.ts +0 -64
  26. package/src/components/DataSource/index.tsx +0 -108
  27. package/src/components/DataSource/privateHooks/getChangeDetect.ts +0 -7
  28. package/src/components/DataSource/privateHooks/useLoadData.ts +0 -783
  29. package/src/components/DataSource/publicHooks/useDataSource.ts +0 -19
  30. package/src/components/DataSource/publicHooks/useDataSourceActions.ts +0 -14
  31. package/src/components/DataSource/state/getInitialState.ts +0 -494
  32. package/src/components/DataSource/state/normalizeSortInfo.ts +0 -35
  33. package/src/components/DataSource/state/reducer.ts +0 -466
  34. package/src/components/DataSource/state/rowInfoStatus.ts +0 -27
  35. package/src/components/DataSource/types.ts +0 -548
  36. package/src/components/HeadlessTable/HeadlessTableWithPinnedContainers.tsx +0 -142
  37. package/src/components/HeadlessTable/MappedCells.ts +0 -251
  38. package/src/components/HeadlessTable/RawTable.tsx +0 -98
  39. package/src/components/HeadlessTable/ReactHeadlessTableRenderer.tsx +0 -1516
  40. package/src/components/HeadlessTable/index.tsx +0 -234
  41. package/src/components/InfiniteTable/InfiniteCls.css.ts +0 -164
  42. package/src/components/InfiniteTable/InfiniteTableContext.ts +0 -16
  43. package/src/components/InfiniteTable/api/getImperativeApi.ts +0 -391
  44. package/src/components/InfiniteTable/api/getSelectionApi.ts +0 -364
  45. package/src/components/InfiniteTable/api/type.ts +0 -11
  46. package/src/components/InfiniteTable/components/ActiveCellIndicator.css.ts +0 -51
  47. package/src/components/InfiniteTable/components/ActiveCellIndicator.tsx +0 -116
  48. package/src/components/InfiniteTable/components/ActiveRowIndicator.css.ts +0 -56
  49. package/src/components/InfiniteTable/components/ActiveRowIndicator.tsx +0 -94
  50. package/src/components/InfiniteTable/components/CheckBox.css.ts +0 -13
  51. package/src/components/InfiniteTable/components/CheckBox.tsx +0 -96
  52. package/src/components/InfiniteTable/components/FilterEditors.tsx +0 -52
  53. package/src/components/InfiniteTable/components/InfiniteTableBody/InfiniteTableBody.tsx +0 -27
  54. package/src/components/InfiniteTable/components/InfiniteTableBody/index.tsx +0 -1
  55. package/src/components/InfiniteTable/components/InfiniteTableFooter/InfiniteTableFooter.tsx +0 -31
  56. package/src/components/InfiniteTable/components/InfiniteTableFooter/index.tsx +0 -1
  57. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableColumnHeaderFilter.tsx +0 -102
  58. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeader.tsx +0 -163
  59. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderCell.tsx +0 -574
  60. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderGroup.tsx +0 -79
  61. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderTypes.tsx +0 -25
  62. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderWrapper.tsx +0 -185
  63. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/GroupResizeHandle.tsx +0 -159
  64. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/ResizeHandle.css.ts +0 -124
  65. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/columnResizer.ts +0 -166
  66. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/index.tsx +0 -146
  67. package/src/components/InfiniteTable/components/InfiniteTableHeader/buildColumnAndGroupTree.ts +0 -240
  68. package/src/components/InfiniteTable/components/InfiniteTableHeader/header.css.ts +0 -358
  69. package/src/components/InfiniteTable/components/InfiniteTableHeader/index.tsx +0 -1
  70. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnGroupResizeHandle.tsx +0 -114
  71. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnResizeHandle.tsx +0 -146
  72. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/footer.css.ts +0 -7
  73. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/index.tsx +0 -110
  74. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCell.tsx +0 -120
  75. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCellTypes.ts +0 -74
  76. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx +0 -457
  77. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRow.tsx +0 -107
  78. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowClassName.ts +0 -6
  79. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowTypes.ts +0 -32
  80. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowUnvirtualized.tsx +0 -75
  81. package/src/components/InfiniteTable/components/InfiniteTableRow/columnRendering.tsx +0 -263
  82. package/src/components/InfiniteTable/components/InfiniteTableRow/index.tsx +0 -1
  83. package/src/components/InfiniteTable/components/InfiniteTableRow/row.css.ts +0 -74
  84. package/src/components/InfiniteTable/components/InfiniteTableRow/useRowDOMProps.ts +0 -199
  85. package/src/components/InfiniteTable/components/LoadMask.css.ts +0 -34
  86. package/src/components/InfiniteTable/components/LoadMask.tsx +0 -27
  87. package/src/components/InfiniteTable/components/ScrollbarPlaceholder.tsx +0 -56
  88. package/src/components/InfiniteTable/components/cell.css.ts +0 -192
  89. package/src/components/InfiniteTable/components/icons/ArrowDown.tsx +0 -14
  90. package/src/components/InfiniteTable/components/icons/ArrowUp.tsx +0 -14
  91. package/src/components/InfiniteTable/components/icons/ExpanderIcon.css.ts +0 -31
  92. package/src/components/InfiniteTable/components/icons/ExpanderIcon.tsx +0 -63
  93. package/src/components/InfiniteTable/components/icons/Icon.tsx +0 -18
  94. package/src/components/InfiniteTable/components/icons/InfiniteTableIconClassName.ts +0 -1
  95. package/src/components/InfiniteTable/components/icons/LoadingIcon.css.ts +0 -8
  96. package/src/components/InfiniteTable/components/icons/LoadingIcon.tsx +0 -45
  97. package/src/components/InfiniteTable/components/icons/MenuIcon.tsx +0 -50
  98. package/src/components/InfiniteTable/components/icons/SortIcon.tsx +0 -113
  99. package/src/components/InfiniteTable/eventHandlers/eventHandlerTypes.ts +0 -57
  100. package/src/components/InfiniteTable/eventHandlers/index.ts +0 -95
  101. package/src/components/InfiniteTable/eventHandlers/keyboardNavigation.ts +0 -232
  102. package/src/components/InfiniteTable/eventHandlers/keyboardSelection.ts +0 -110
  103. package/src/components/InfiniteTable/eventHandlers/onCellClick.ts +0 -94
  104. package/src/components/InfiniteTable/eventHandlers/onKeyDown.ts +0 -25
  105. package/src/components/InfiniteTable/hooks/adjustColumnOrderForAllColumns.ts +0 -70
  106. package/src/components/InfiniteTable/hooks/reorderColumnsOnDrag.ts +0 -476
  107. package/src/components/InfiniteTable/hooks/useAutoSizeColumns.ts +0 -206
  108. package/src/components/InfiniteTable/hooks/useCellClassName.ts +0 -80
  109. package/src/components/InfiniteTable/hooks/useCellRendering.tsx +0 -217
  110. package/src/components/InfiniteTable/hooks/useColumnGroups.ts +0 -71
  111. package/src/components/InfiniteTable/hooks/useColumnMenu.ts +0 -72
  112. package/src/components/InfiniteTable/hooks/useColumnPointerEvents.ts +0 -258
  113. package/src/components/InfiniteTable/hooks/useColumnRowspan.ts +0 -43
  114. package/src/components/InfiniteTable/hooks/useColumnSizeFn.ts +0 -24
  115. package/src/components/InfiniteTable/hooks/useColumnsWhen.ts +0 -582
  116. package/src/components/InfiniteTable/hooks/useComputed.ts +0 -186
  117. package/src/components/InfiniteTable/hooks/useComputedVisibleColumns.ts +0 -219
  118. package/src/components/InfiniteTable/hooks/useDOMProps.ts +0 -306
  119. package/src/components/InfiniteTable/hooks/useEffectWithRaf.ts +0 -47
  120. package/src/components/InfiniteTable/hooks/useInfiniteTable.ts +0 -10
  121. package/src/components/InfiniteTable/hooks/useInfiniteTableState.ts +0 -11
  122. package/src/components/InfiniteTable/hooks/useInternalProps.ts +0 -8
  123. package/src/components/InfiniteTable/hooks/useLicense/LicenseDetails.ts +0 -13
  124. package/src/components/InfiniteTable/hooks/useLicense/crc32.ts +0 -56
  125. package/src/components/InfiniteTable/hooks/useLicense/decode.ts +0 -147
  126. package/src/components/InfiniteTable/hooks/useLicense/useLicense.ts +0 -39
  127. package/src/components/InfiniteTable/hooks/useRerenderOnKeyChange.ts +0 -21
  128. package/src/components/InfiniteTable/hooks/useRowHover.ts +0 -18
  129. package/src/components/InfiniteTable/hooks/useScrollToActiveCell.ts +0 -48
  130. package/src/components/InfiniteTable/hooks/useScrollToActiveRow.ts +0 -44
  131. package/src/components/InfiniteTable/hooks/useScrollbars.ts +0 -51
  132. package/src/components/InfiniteTable/hooks/useToggleGroupRow.ts +0 -56
  133. package/src/components/InfiniteTable/hooks/useUnpinnedRendering.tsx +0 -165
  134. package/src/components/InfiniteTable/hooks/useYourBrain.ts +0 -55
  135. package/src/components/InfiniteTable/index.tsx +0 -352
  136. package/src/components/InfiniteTable/internalProps.ts +0 -4
  137. package/src/components/InfiniteTable/state/computeColumnGroupsDepths.ts +0 -29
  138. package/src/components/InfiniteTable/state/getColumnVisibilityForHideEmptyGroupColumns.ts +0 -127
  139. package/src/components/InfiniteTable/state/getInitialState.ts +0 -375
  140. package/src/components/InfiniteTable/theme.css.ts +0 -556
  141. package/src/components/InfiniteTable/types/InfiniteTableAction.ts +0 -6
  142. package/src/components/InfiniteTable/types/InfiniteTableActionType.ts +0 -12
  143. package/src/components/InfiniteTable/types/InfiniteTableColumn.ts +0 -478
  144. package/src/components/InfiniteTable/types/InfiniteTableComputedValues.ts +0 -43
  145. package/src/components/InfiniteTable/types/InfiniteTableContextValue.ts +0 -12
  146. package/src/components/InfiniteTable/types/InfiniteTableInternalProps.ts +0 -3
  147. package/src/components/InfiniteTable/types/InfiniteTableProps.ts +0 -511
  148. package/src/components/InfiniteTable/types/InfiniteTableState.ts +0 -195
  149. package/src/components/InfiniteTable/types/Utility.ts +0 -35
  150. package/src/components/InfiniteTable/types/index.ts +0 -96
  151. package/src/components/InfiniteTable/utilities.css.ts +0 -179
  152. package/src/components/InfiniteTable/utils/MultiRowSelector.ts +0 -111
  153. package/src/components/InfiniteTable/utils/RenderHookComponentForInfinite.tsx +0 -52
  154. package/src/components/InfiniteTable/utils/adjustColumnOrderForPinning.ts +0 -33
  155. package/src/components/InfiniteTable/utils/assignFiltered.ts +0 -29
  156. package/src/components/InfiniteTable/utils/defaultGetColumContextMenuItems.tsx +0 -108
  157. package/src/components/InfiniteTable/utils/getColumnComputedType.ts +0 -33
  158. package/src/components/InfiniteTable/utils/getColumnForGroupBy.tsx +0 -313
  159. package/src/components/InfiniteTable/utils/getComputedVisibleColumns.ts +0 -773
  160. package/src/components/InfiniteTable/utils/getContextMenuForColumn.tsx +0 -72
  161. package/src/components/InfiniteTable/utils/infiniteDOMUtils.ts +0 -189
  162. package/src/components/InfiniteTable/utils/mapToObject.ts +0 -20
  163. package/src/components/InfiniteTable/utils/moveXatY.ts +0 -25
  164. package/src/components/InfiniteTable/utils/objectValuesExcept.ts +0 -9
  165. package/src/components/InfiniteTable/utils/progressiveSpeedScroller.ts +0 -158
  166. package/src/components/InfiniteTable/utils/rafFn.ts +0 -13
  167. package/src/components/InfiniteTable/utils/toCSSVarName.ts +0 -1
  168. package/src/components/InfiniteTable/utils/toMap.ts +0 -24
  169. package/src/components/Menu/Menu.tsx +0 -750
  170. package/src/components/Menu/MenuCls.css.ts +0 -139
  171. package/src/components/Menu/MenuContext.ts +0 -10
  172. package/src/components/Menu/MenuContextValue.ts +0 -15
  173. package/src/components/Menu/MenuProps.ts +0 -98
  174. package/src/components/Menu/MenuState.ts +0 -56
  175. package/src/components/Menu/MenuTriangleContext.ts +0 -352
  176. package/src/components/Menu/childrenToRuntimeItems.tsx +0 -103
  177. package/src/components/Menu/getMenuState.tsx +0 -119
  178. package/src/components/Menu/index.tsx +0 -88
  179. package/src/components/Menu/propToIdentifyMenu.ts +0 -1
  180. package/src/components/RawList/AvoidReactDiff.tsx +0 -48
  181. package/src/components/RawList/MappedItems.ts +0 -143
  182. package/src/components/RawList/ReactVirtualRenderer.tsx +0 -307
  183. package/src/components/RawList/index.tsx +0 -42
  184. package/src/components/RawList/types.ts +0 -23
  185. package/src/components/RawList/useVirtualRenderer.ts +0 -36
  186. package/src/components/RenderHookComponent.tsx +0 -10
  187. package/src/components/ResizeObserver/index.tsx +0 -170
  188. package/src/components/VirtualBrain/MatrixBrain.ts +0 -1621
  189. package/src/components/VirtualBrain/ScrollListener.ts +0 -39
  190. package/src/components/VirtualBrain/index.ts +0 -664
  191. package/src/components/VirtualList/ColumnListWithExternalScrolling.tsx +0 -78
  192. package/src/components/VirtualList/InfiniteListRootClassName.ts +0 -1
  193. package/src/components/VirtualList/RowListWithExternalScrolling.tsx +0 -120
  194. package/src/components/VirtualList/SpacePlaceholder.tsx +0 -32
  195. package/src/components/VirtualList/VirtualList.css.ts +0 -29
  196. package/src/components/VirtualList/VirtualList.tsx +0 -141
  197. package/src/components/VirtualList/VirtualRowList.tsx +0 -34
  198. package/src/components/VirtualList/types.ts +0 -56
  199. package/src/components/VirtualList/useCorrectHeightForRowElements.ts +0 -14
  200. package/src/components/VirtualScrollContainer/VirtualScrollContainer.css.ts +0 -51
  201. package/src/components/VirtualScrollContainer/getScrollableClassName.ts +0 -30
  202. package/src/components/VirtualScrollContainer/index.tsx +0 -63
  203. package/src/components/flexbox/index.ts +0 -562
  204. package/src/components/hooks/useComponentState/index.tsx +0 -562
  205. package/src/components/hooks/useComponentState/types.ts +0 -32
  206. package/src/components/hooks/useEffectOnceWithProperUnmount.ts +0 -33
  207. package/src/components/hooks/useEffectWithChanges.ts +0 -56
  208. package/src/components/hooks/useImmutableRef.ts +0 -7
  209. package/src/components/hooks/useInterceptedMap.ts +0 -71
  210. package/src/components/hooks/useLatest.tsx +0 -8
  211. package/src/components/hooks/useLazyLatest.ts +0 -23
  212. package/src/components/hooks/useMemoShallowObjectMerge.ts +0 -16
  213. package/src/components/hooks/useMounted.ts +0 -18
  214. package/src/components/hooks/useOnMount.ts +0 -21
  215. package/src/components/hooks/useOnScroll.ts +0 -34
  216. package/src/components/hooks/useOnce.ts +0 -10
  217. package/src/components/hooks/useOverlay/index.tsx +0 -418
  218. package/src/components/hooks/usePrevious.ts +0 -8
  219. package/src/components/hooks/usePropertyOld.ts +0 -168
  220. package/src/components/hooks/useRerender.ts +0 -12
  221. package/src/components/hooks/xuseProperty.ts +0 -165
  222. package/src/components/types/CellPosition.ts +0 -4
  223. package/src/components/types/NonUndefined.ts +0 -1
  224. package/src/components/types/RemoveObject.ts +0 -22
  225. package/src/components/types/Renderable.ts +0 -3
  226. package/src/components/types/ScrollPosition.ts +0 -7
  227. package/src/components/types/Setter.ts +0 -2
  228. package/src/components/types/Size.ts +0 -6
  229. package/src/components/types/SubscriptionCallback.ts +0 -10
  230. package/src/components/types/VoidFn.ts +0 -1
  231. package/src/components/utils/buildSubscriptionCallback.tsx +0 -60
  232. package/src/components/utils/clamp.ts +0 -3
  233. package/src/components/utils/debounce.ts +0 -16
  234. package/src/components/utils/decamelize.ts +0 -11
  235. package/src/components/utils/discardCallsWithEqualArg.ts +0 -42
  236. package/src/components/utils/getRenderIndexes.ts +0 -33
  237. package/src/components/utils/getScrollbarWidth.ts +0 -31
  238. package/src/components/utils/getVirtualRenderCount.ts +0 -21
  239. package/src/components/utils/isControlled.ts +0 -12
  240. package/src/components/utils/isControlledValue.ts +0 -5
  241. package/src/index.tsx +0 -34
  242. package/src/test.tsx +0 -18
  243. package/src/utils/DeepMap/index.ts +0 -588
  244. package/src/utils/DeepMap/once.ts +0 -16
  245. package/src/utils/DeepMap/sortAscending.ts +0 -1
  246. package/src/utils/DeepMap/tsconfig.deepmap.json +0 -17
  247. package/src/utils/DeepMap/xpackage.json +0 -26
  248. package/src/utils/debug.ts +0 -40
  249. package/src/utils/deepClone.ts +0 -38
  250. package/src/utils/getGlobal.ts +0 -3
  251. package/src/utils/groupAndPivot/defaultToKey.ts +0 -3
  252. package/src/utils/groupAndPivot/getGroupKeysForDataItem.ts +0 -19
  253. package/src/utils/groupAndPivot/getPivotColumnsAndColumnGroups.ts +0 -361
  254. package/src/utils/groupAndPivot/index.ts +0 -1229
  255. package/src/utils/groupAndPivot/types.ts +0 -10
  256. package/src/utils/join.ts +0 -4
  257. package/src/utils/mathIntersection.ts +0 -21
  258. package/src/utils/minified.d.ts +0 -2
  259. package/src/utils/minified.js +0 -6
  260. package/src/utils/multisort/index.ts +0 -151
  261. package/src/utils/multisort/sortTypes.ts +0 -25
  262. package/src/utils/notes-status.md +0 -92
  263. package/src/utils/pageGeometry/ConvexPoly.ts +0 -34
  264. package/src/utils/pageGeometry/Point.ts +0 -51
  265. package/src/utils/pageGeometry/PolyWithPoints.ts +0 -52
  266. package/src/utils/pageGeometry/Rectangle.ts +0 -98
  267. package/src/utils/pageGeometry/Triangle.ts +0 -16
  268. package/src/utils/pageGeometry/alignment/index.ts +0 -221
  269. package/src/utils/pageGeometry/polyContainsPoint.ts +0 -182
  270. package/src/utils/pageGeometry/types.ts +0 -3
  271. package/src/utils/proxyFnCall.ts +0 -46
  272. package/src/utils/raf.ts +0 -13
  273. package/src/utils/selectParent.ts +0 -18
  274. package/src/utils/shallowEqualObjects.ts +0 -49
  275. package/src/utils/stripVar.ts +0 -3
  276. package/src/utils/toUpperFirst.ts +0 -5
  277. package/todo.md +0 -2
  278. package/tsconfig.build.json +0 -8
  279. package/tsconfig.dev.json +0 -7
  280. package/tsconfig.json +0 -30
  281. package/tsconfig.typebundler.json +0 -13
  282. package/typedoc.json +0 -4
@@ -1,476 +0,0 @@
1
- import binarySearch from 'binary-search';
2
- import { stripVar } from '../../../utils/stripVar';
3
-
4
- import { MatrixBrain } from '../../VirtualBrain/MatrixBrain';
5
- import { InternalVars } from '../theme.css';
6
-
7
- import { InfiniteTableComputedColumn } from '../types';
8
- import {
9
- InfiniteTableApi,
10
- InfiniteTablePropColumnPinning,
11
- } from '../types/InfiniteTableProps';
12
- import {
13
- clearInfiniteColumnReorderDuration,
14
- restoreInfiniteColumnReorderDuration,
15
- setInfiniteColumnOffsetWhileReordering,
16
- setInfiniteVarOnRoot,
17
- } from '../utils/infiniteDOMUtils';
18
- import { moveXatY } from '../utils/moveXatY';
19
- import { progressiveSpeedScroller } from '../utils/progressiveSpeedScroller';
20
-
21
- type TopLeft = {
22
- left: number;
23
- top: number;
24
- };
25
- type TopLeftOrNull = TopLeft | null;
26
-
27
- type MousePosition = {
28
- clientX: number;
29
- clientY: number;
30
- };
31
-
32
- type ColumnBreakpoint = {
33
- columnId: string;
34
- index: number;
35
- breakpoint: number;
36
- };
37
-
38
- export type ReorderDragResult = {
39
- columnPinning: InfiniteTablePropColumnPinning;
40
- columnOrder: string[];
41
- };
42
-
43
- export type ReorderParams<T> = {
44
- computedVisibleColumns: InfiniteTableComputedColumn<T>[];
45
- computedPinnedStartColumns: InfiniteTableComputedColumn<T>[];
46
- computedPinnedEndColumns: InfiniteTableComputedColumn<T>[];
47
- computedUnpinnedColumns: InfiniteTableComputedColumn<T>[];
48
-
49
- computedVisibleColumnsMap: Map<string, InfiniteTableComputedColumn<T>>;
50
-
51
- brain: MatrixBrain;
52
-
53
- tableRect: DOMRect;
54
- /**
55
- * The rect of the column header which is being dragged
56
- */
57
- dragColumnHeaderTargetRect: DOMRect;
58
-
59
- infiniteDOMNode: HTMLElement;
60
-
61
- dragColumnId: string;
62
-
63
- initialMousePosition: MousePosition;
64
-
65
- imperativeApi: InfiniteTableApi<T>;
66
-
67
- setProxyPosition: (position: TopLeftOrNull) => void;
68
- columnOffsetAtIndexCSSVar: string;
69
- columnWidthAtIndexCSSVar: string;
70
- };
71
-
72
- const PROXY_OFFSET = 10;
73
-
74
- const pinnedStartWidthCSSVar = stripVar(InternalVars.pinnedStartWidth);
75
- // const pinnedEndWidthCSSVar = stripVar(InternalVars.pinnedEndWidth);
76
-
77
- export function reorderColumnsOnDrag<T>(params: ReorderParams<T>) {
78
- const {
79
- columnOffsetAtIndexCSSVar,
80
- columnWidthAtIndexCSSVar,
81
- computedVisibleColumns,
82
- computedVisibleColumnsMap,
83
- computedPinnedEndColumns,
84
- computedPinnedStartColumns,
85
- dragColumnId,
86
- infiniteDOMNode,
87
- brain,
88
- dragColumnHeaderTargetRect,
89
- tableRect,
90
- setProxyPosition,
91
- imperativeApi,
92
- } = params;
93
-
94
- // returns the total width of the pinned start columns
95
- // we need to take into account that one of them may be the drag column
96
- // and it might have been dragged out of pinning
97
- // so we need to substract it
98
- function getCurrentPinnedWidth(pinned: 'start' | 'end') {
99
- let currentWidth =
100
- pinned === 'start' ? pinnedStartInitialWidth : pinnedEndInitialWidth;
101
-
102
- // the pinning has not changed
103
- if (initialDragColumnPinned === currentDragColumnPinned) {
104
- return currentWidth;
105
- }
106
- if (currentDragColumnPinned === pinned) {
107
- // was not pinned, but is now
108
- return currentWidth + dragColumn.computedWidth;
109
- }
110
- if (initialDragColumnPinned === pinned) {
111
- // was pinned, but by dragging it's no longer pinned
112
- return currentWidth - dragColumn.computedWidth;
113
- }
114
-
115
- return currentWidth;
116
- }
117
-
118
- function isColumnVisible(b: ColumnBreakpoint) {
119
- if (b.index === dragColumnIndex) {
120
- return true;
121
- }
122
- const col = computedVisibleColumns[b.index];
123
-
124
- if (col.computedPinned) {
125
- return true;
126
- }
127
-
128
- const scrollLeft = brain.getScrollPosition().scrollLeft;
129
-
130
- return (
131
- col.computedOffset >= scrollLeft + getCurrentPinnedWidth('start') &&
132
- col.computedOffset + col.computedWidth <
133
- scrollLeft + tableRect.width - getCurrentPinnedWidth('end')
134
- );
135
- }
136
-
137
- const getBreakPoints = <T>(columns: InfiniteTableComputedColumn<T>[]) => {
138
- const breakpoints: ColumnBreakpoint[] = [];
139
-
140
- columns.forEach((c) => {
141
- const b = {
142
- columnId: c.id,
143
- index: c.computedVisibleIndex,
144
- breakpoint:
145
- // tableRect.left +
146
- c.computedOffset + Math.round(c.computedWidth / 2),
147
- };
148
-
149
- if (isColumnVisible(b)) {
150
- breakpoints.push(b);
151
- }
152
- // if (c.computedPinned === 'start' && c.computedLastInCategory) {
153
- // breakpoints.push({
154
- // index: c.computedVisibleIndex,
155
- // breakpoint: c.computedOffset + c.computedWidth,
156
- // });
157
- // }
158
-
159
- // if (c.computedPinned === 'end' && c.computedFirstInCategory) {
160
- // breakpoints.push({
161
- // index: c.computedVisibleIndex,
162
- // breakpoint: c.computedOffset,
163
- // });
164
- // }
165
- });
166
-
167
- return breakpoints;
168
- };
169
-
170
- const initialPinnedStartCount = computedPinnedStartColumns.length;
171
- let currentPinnedStartCount = initialPinnedStartCount;
172
-
173
- // const initialPinnedEndCount = computedPinnedEndColumns.length;
174
- // let currentPinnedEndCount = initialPinnedEndCount;
175
-
176
- const initialMousePosition: MousePosition = {
177
- clientX: Math.round(params.initialMousePosition.clientX),
178
- clientY: Math.round(params.initialMousePosition.clientY),
179
- };
180
-
181
- const initialProxyPosition: TopLeft = {
182
- left:
183
- initialMousePosition.clientX -
184
- tableRect.left -
185
- (initialMousePosition.clientX - dragColumnHeaderTargetRect.left) +
186
- PROXY_OFFSET,
187
- top:
188
- initialMousePosition.clientY -
189
- tableRect.top -
190
- (initialMousePosition.clientY - dragColumnHeaderTargetRect.top) +
191
- PROXY_OFFSET,
192
- };
193
-
194
- const initialScrollPosition = brain.getScrollPosition();
195
-
196
- const initialIndexes = computedVisibleColumns.map(
197
- (c) => c.computedVisibleIndex,
198
- );
199
- let currentIndexes = initialIndexes;
200
-
201
- const dragColumn = computedVisibleColumnsMap.get(dragColumnId)!;
202
- const dragColumnIndex = dragColumn.computedVisibleIndex;
203
- const initialDragColumnPinned = dragColumn?.computedPinned;
204
-
205
- let currentDropIndex = dragColumnIndex;
206
- let currentDragColumnPinned = initialDragColumnPinned;
207
-
208
- const pinnedStartInitialWidth = brain.getFixedStartColsWidth();
209
- const pinnedEndInitialWidth = brain.getFixedEndColsWidth();
210
-
211
- let currentMousePosition: MousePosition = initialMousePosition;
212
- let currentDiff = {
213
- x: 0,
214
- y: 0,
215
- };
216
-
217
- let dir: -1 | 1 = 1;
218
- let diffX = 0;
219
-
220
- function updatePositionAndDiff(mousePosition: MousePosition) {
221
- const clientX = Math.round(mousePosition.clientX);
222
- const clientY = Math.round(mousePosition.clientY);
223
-
224
- if (
225
- clientX === currentMousePosition.clientX &&
226
- clientY === currentMousePosition.clientY
227
- ) {
228
- return;
229
- }
230
-
231
- currentMousePosition = { clientX, clientY };
232
-
233
- const currentScrollLeft = brain.getScrollPosition().scrollLeft;
234
-
235
- const scrollLeftDiff = currentScrollLeft - initialScrollPosition.scrollLeft;
236
-
237
- currentDiff.x =
238
- currentMousePosition.clientX - initialMousePosition!.clientX;
239
- currentDiff.y =
240
- currentMousePosition.clientY - initialMousePosition!.clientY;
241
-
242
- diffX = currentDiff.x + scrollLeftDiff;
243
-
244
- dir = diffX < 0 ? -1 : 1;
245
-
246
- setProxyPosition({
247
- left: initialProxyPosition.left + currentDiff.x,
248
- top: initialProxyPosition.top + currentDiff.y,
249
- });
250
- }
251
-
252
- function updatePinnedStartCount(columnIndexes: number[]) {
253
- let pinnedStartCount = 0;
254
-
255
- if (!initialDragColumnPinned) {
256
- columnIndexes.forEach((colIndex, i) => {
257
- if (computedVisibleColumns[colIndex]?.computedPinned === 'start') {
258
- pinnedStartCount = i + 1;
259
- }
260
- });
261
- } else if (initialDragColumnPinned === 'start') {
262
- columnIndexes.forEach((colIndex, i) => {
263
- if (pinnedStartCount) {
264
- return;
265
- }
266
- if (computedVisibleColumns[colIndex]?.computedPinned !== 'start') {
267
- pinnedStartCount = i;
268
- }
269
- });
270
- }
271
-
272
- currentPinnedStartCount = pinnedStartCount;
273
-
274
- updatePinningMarker('start', columnIndexes, pinnedStartCount);
275
- }
276
-
277
- function updatePinningMarker(
278
- where: 'start', //| 'end' // pinning end marker coming soon
279
- columnIndexes: number[],
280
- pinnedCount: number,
281
- ) {
282
- if (where === 'start') {
283
- let width = 0;
284
-
285
- for (let i = 0; i < pinnedCount; i++) {
286
- const colIndex = columnIndexes[i];
287
- const col = computedVisibleColumns[colIndex];
288
- width += col.computedWidth;
289
- }
290
- // update pinned start marker to correct offset/width
291
- setInfiniteVarOnRoot(
292
- pinnedStartWidthCSSVar,
293
- `${width}px`,
294
- infiniteDOMNode,
295
- );
296
- }
297
- }
298
-
299
- function updateDropIndex(newDropIndex: number) {
300
- if (newDropIndex === currentDropIndex) {
301
- return;
302
- }
303
-
304
- currentDropIndex = newDropIndex;
305
-
306
- const newColumnIndexes = moveXatY(
307
- initialIndexes,
308
- dragColumnIndex,
309
- currentDropIndex > dragColumnIndex
310
- ? currentDropIndex - 1
311
- : currentDropIndex,
312
- );
313
-
314
- let pinnedStartCount = 0;
315
- // let pinnedEndCount = 0;
316
-
317
- currentPinnedStartCount = pinnedStartCount;
318
- // currentPinnedEndCount = pinnedEndCount;
319
-
320
- const indexesWithTransition = new Set<number>();
321
-
322
- newColumnIndexes.forEach((newIndex, i) => {
323
- const currentIndex = currentIndexes[i];
324
-
325
- if (newIndex !== currentIndex) {
326
- indexesWithTransition.add(newIndex);
327
- }
328
-
329
- updatePinnedStartCount(newColumnIndexes);
330
- });
331
-
332
- currentIndexes = newColumnIndexes;
333
-
334
- adjustAllOffsets(indexesWithTransition);
335
-
336
- return {
337
- newColumnIndexes,
338
- indexesWithTransition,
339
- pinnedStartCount: currentPinnedStartCount,
340
- };
341
- }
342
-
343
- function adjustAllOffsets(indexesWithTransition: Set<number>) {
344
- computedVisibleColumns.forEach((col) => {
345
- const colIndex = col.computedVisibleIndex;
346
-
347
- if (indexesWithTransition.has(colIndex)) {
348
- restoreInfiniteColumnReorderDuration(colIndex, infiniteDOMNode);
349
- } else {
350
- clearInfiniteColumnReorderDuration(colIndex, infiniteDOMNode);
351
- }
352
-
353
- const isDragColumn = colIndex === dragColumnIndex;
354
-
355
- let isOutsideCol =
356
- dir === -1
357
- ? colIndex < currentDropIndex || colIndex > dragColumnIndex
358
- : colIndex < dragColumnIndex || colIndex >= currentDropIndex;
359
-
360
- let newPosition: string = '';
361
- if (dir === -1) {
362
- newPosition = isDragColumn
363
- ? // this is the column we're dragging to the left
364
- // so we place it exactly at the offset of the currentDropIndex
365
- `var(${columnOffsetAtIndexCSSVar}-${currentDropIndex})`
366
- : isOutsideCol
367
- ? // this col should have the initial pos, so we're good
368
- `var(${columnOffsetAtIndexCSSVar}-${colIndex})`
369
- : // place it at the default offset + the width of the drag column
370
- // as these are columns situated between the dragindex and the dropindex
371
- `calc( var(${columnOffsetAtIndexCSSVar}-${colIndex}) + var(${columnWidthAtIndexCSSVar}-${dragColumnIndex}) )`;
372
-
373
- // newColumnIndexes.push(colCurrentIndex);
374
- } else {
375
- newPosition = isOutsideCol
376
- ? // this is the default value for a column
377
- `var(${columnOffsetAtIndexCSSVar}-${colIndex})`
378
- : isDragColumn
379
- ? // this is the column we're dragging to the right
380
- `calc( var(${columnOffsetAtIndexCSSVar}-${
381
- currentDropIndex - 1
382
- }) + var(${columnWidthAtIndexCSSVar}-${
383
- currentDropIndex - 1
384
- }) - var(${columnWidthAtIndexCSSVar}-${dragColumnIndex}) )`
385
- : `calc( var(${columnOffsetAtIndexCSSVar}-${colIndex}) - var(${columnWidthAtIndexCSSVar}-${dragColumnIndex}) )`;
386
- }
387
-
388
- setInfiniteColumnOffsetWhileReordering(
389
- colIndex,
390
- newPosition,
391
- infiniteDOMNode,
392
- );
393
- });
394
- }
395
-
396
- const pinnedStartColsRight = tableRect.left + getCurrentPinnedWidth('start');
397
- const pinnedEndColsLeft = tableRect.right - getCurrentPinnedWidth('end');
398
-
399
- const speedScroller = progressiveSpeedScroller({
400
- scrollOffsetStart: pinnedStartColsRight,
401
- scrollOffsetEnd: pinnedEndColsLeft,
402
- });
403
- updatePositionAndDiff(initialMousePosition);
404
-
405
- return {
406
- speedScroller,
407
- stop() {
408
- speedScroller.stop();
409
- },
410
- onMove(mousePosition: MousePosition): ReorderDragResult {
411
- updatePositionAndDiff(mousePosition);
412
-
413
- speedScroller.scroll({
414
- mousePosition: currentMousePosition,
415
- get scrollLeft() {
416
- return brain.getScrollPosition().scrollLeft;
417
- },
418
- set scrollLeft(value) {
419
- imperativeApi.scrollLeft = value;
420
- },
421
- });
422
-
423
- const breakpoints = getBreakPoints(computedVisibleColumns);
424
-
425
- let currentPos =
426
- dir === -1
427
- ? dragColumn.computedOffset + diffX
428
- : dragColumn.computedOffset + dragColumn.computedWidth + diffX;
429
-
430
- let idx = binarySearch<{ breakpoint: number }, number>(
431
- breakpoints,
432
- currentPos,
433
- ({ breakpoint }, value) => {
434
- return breakpoint < value ? -1 : breakpoint > value ? 1 : 0;
435
- },
436
- );
437
- if (idx < 0) {
438
- idx = ~idx;
439
- }
440
-
441
- idx = breakpoints[idx]
442
- ? breakpoints[idx].index
443
- : breakpoints[breakpoints.length - 1].index + 1;
444
-
445
- if (idx != null && idx !== currentDropIndex) {
446
- if (dir === 1 && currentDropIndex === dragColumnIndex + 1) {
447
- idx = dragColumnIndex;
448
- }
449
-
450
- updateDropIndex(idx);
451
- }
452
-
453
- const columnPinning: InfiniteTablePropColumnPinning = {};
454
-
455
- // will need to adjust pinning end to take into account the count of pinned end cols after the drag
456
- // but for now, we don't support column reordering when we have pinned end cols
457
- computedPinnedEndColumns.forEach((col) => {
458
- columnPinning[col.id] = 'end';
459
- });
460
-
461
- for (let i = 0; i < currentPinnedStartCount; i++) {
462
- const colIndex = currentIndexes[i];
463
- const col = computedVisibleColumns[colIndex];
464
- columnPinning[col.id] = 'start';
465
- }
466
-
467
- const columnOrder = currentIndexes.map((colIndex) => {
468
- return computedVisibleColumns[colIndex].id;
469
- });
470
- return {
471
- columnPinning,
472
- columnOrder,
473
- };
474
- },
475
- };
476
- }
@@ -1,206 +0,0 @@
1
- import {
2
- MutableRefObject,
3
- RefObject,
4
- useEffect,
5
- useRef,
6
- useState,
7
- } from 'react';
8
-
9
- import { getGlobal } from '../../../utils/getGlobal';
10
- import { useComponentState } from '../../hooks/useComponentState';
11
- import { useLatest } from '../../hooks/useLatest';
12
- import { InfiniteTableHeaderCellClassName } from '../components/InfiniteTableHeader/InfiniteTableHeaderCell';
13
- import {
14
- InfiniteTableCellClassName,
15
- InfiniteTableCellContentClassName,
16
- } from '../components/InfiniteTableRow/InfiniteTableCell';
17
- import { InfiniteTablePropColumnSizing, InfiniteTableState } from '../types';
18
- import { cssEllipsisClassName } from '../utilities.css';
19
-
20
- const OFFSET = 10;
21
-
22
- function getColumnContentMaxWidths(
23
- domRef: RefObject<HTMLElement>,
24
- options: {
25
- includeHeader: boolean;
26
- columnsToSkip?: Set<string>;
27
- columnsToResize?: Set<string>;
28
- },
29
- ) {
30
- const { includeHeader, columnsToResize, columnsToSkip } = options;
31
- const query = `.${InfiniteTableCellClassName} > .${InfiniteTableCellContentClassName}`;
32
-
33
- const match = domRef.current?.querySelectorAll(query);
34
-
35
- const measuredMaxWidths: Record<string, number> = {};
36
-
37
- const computedPaddingsForColumns: Record<string, number> = {};
38
-
39
- if (match && match.length) {
40
- match.forEach((content) => {
41
- const cell = content.parentElement!;
42
- const isHeader = cell.matches(`.${InfiniteTableHeaderCellClassName}`);
43
- if (includeHeader === false && isHeader) {
44
- return;
45
- }
46
-
47
- const colId = cell.getAttribute('data-column-id') as string;
48
-
49
- const contentClone = content.cloneNode(true) as HTMLElement;
50
- contentClone.style.visibility = 'hidden';
51
- contentClone.style.pointerEvents = 'none';
52
-
53
- contentClone.classList.remove(...cssEllipsisClassName.split(' '));
54
- contentClone.style.position = 'absolute';
55
- contentClone.style.width = 'auto';
56
-
57
- cell.appendChild(contentClone);
58
- let measuredWidth = contentClone.offsetWidth;
59
- cell.removeChild(contentClone);
60
-
61
- if (!computedPaddingsForColumns[colId]) {
62
- const cellComputedStyle = getGlobal().getComputedStyle(cell);
63
- computedPaddingsForColumns[colId] =
64
- parseInt(cellComputedStyle.paddingLeft, 10) +
65
- parseInt(cellComputedStyle.paddingRight, 10) +
66
- parseInt(cellComputedStyle.borderLeftWidth, 10) +
67
- parseInt(cellComputedStyle.borderRightWidth, 10) +
68
- OFFSET;
69
- }
70
-
71
- measuredWidth += computedPaddingsForColumns[colId]!;
72
-
73
- if (isHeader) {
74
- let otherElementsLength = 0;
75
- cell.childNodes.forEach((child) => {
76
- if (child !== content) {
77
- const el = child as HTMLElement;
78
- let elWidth = Math.max(
79
- el.offsetWidth,
80
- parseInt(el.style.width, 10),
81
- );
82
- if (isNaN(elWidth)) {
83
- elWidth = 0;
84
- }
85
-
86
- otherElementsLength += elWidth;
87
-
88
- if (elWidth > 0) {
89
- const style = getGlobal().getComputedStyle(el);
90
- otherElementsLength +=
91
- parseInt(style.marginLeft, 10) +
92
- parseInt(style.marginRight, 10);
93
- }
94
- }
95
- });
96
- measuredWidth += otherElementsLength;
97
- }
98
-
99
- if (columnsToSkip && columnsToSkip.has(colId)) {
100
- return;
101
- }
102
- if (columnsToResize && !columnsToResize.has(colId)) {
103
- return;
104
- }
105
-
106
- measuredMaxWidths[colId] = Math.max(
107
- measuredWidth,
108
- measuredMaxWidths[colId] || 0,
109
- );
110
- });
111
- }
112
- return measuredMaxWidths;
113
- }
114
-
115
- export function useAutoSizeColumns<T>() {
116
- const {
117
- getComponentState,
118
- componentActions,
119
- componentState: { domRef, ready, autoSizeColumnsKey, brain },
120
- } = useComponentState<InfiniteTableState<T>>();
121
-
122
- const [refreshId, setRefreshId] = useState(0);
123
-
124
- const theKey =
125
- typeof autoSizeColumnsKey === 'object'
126
- ? autoSizeColumnsKey.key
127
- : autoSizeColumnsKey;
128
-
129
- const getTheKey = useLatest<typeof theKey>(theKey);
130
-
131
- const lastExecutedIdentifierRef: MutableRefObject<string | number | null> =
132
- useRef(null);
133
-
134
- useEffect(() => {
135
- const key = getTheKey();
136
- if (key == null) {
137
- return;
138
- }
139
-
140
- const { current } = lastExecutedIdentifierRef;
141
-
142
- const onChange = () => {
143
- if (autoSizeColumnsKey !== current) {
144
- setRefreshId(refreshId + 1);
145
- }
146
- };
147
-
148
- return brain.onRenderRangeChange(onChange);
149
- }, [brain]);
150
-
151
- useEffect(() => {
152
- if (theKey == null) {
153
- return;
154
- }
155
-
156
- const { autoSizeColumnsKey } = getComponentState();
157
-
158
- let columnsToResize: Set<string> | undefined;
159
- let columnsToSkip: Set<string> | undefined;
160
-
161
- let includeHeader = true;
162
-
163
- if (typeof autoSizeColumnsKey === 'object') {
164
- if (autoSizeColumnsKey.columnsToResize) {
165
- columnsToResize = new Set(autoSizeColumnsKey.columnsToResize);
166
- }
167
- if (autoSizeColumnsKey.columnsToSkip) {
168
- columnsToSkip = new Set(autoSizeColumnsKey.columnsToSkip);
169
- }
170
- includeHeader = autoSizeColumnsKey.includeHeader ?? includeHeader;
171
- }
172
-
173
- lastExecutedIdentifierRef.current = theKey;
174
-
175
- const measuredMaxWidths = getColumnContentMaxWidths(domRef, {
176
- includeHeader,
177
- columnsToResize,
178
- columnsToSkip,
179
- });
180
-
181
- const colIds = Object.keys(measuredMaxWidths);
182
-
183
- if (!colIds.length) {
184
- return;
185
- }
186
-
187
- const columnSizing = getComponentState().columnSizing;
188
- const newColumnSizing: InfiniteTablePropColumnSizing = {
189
- ...columnSizing,
190
- };
191
-
192
- let changed = false;
193
-
194
- colIds.forEach((colId) => {
195
- newColumnSizing[colId] = {
196
- width: measuredMaxWidths[colId],
197
- };
198
- changed =
199
- changed || newColumnSizing[colId].width !== columnSizing[colId]?.width;
200
- });
201
-
202
- if (changed) {
203
- componentActions.columnSizing = newColumnSizing;
204
- }
205
- }, [theKey, ready, refreshId]);
206
- }