@infinite-table/infinite-react 0.4.13 → 0.5.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 (282) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/API.md +0 -0
  3. package/build/buildPackageJson.js +43 -0
  4. package/build/scripts/test.js +37 -0
  5. package/bundler.config.js +25 -0
  6. package/globals.d.ts +7 -0
  7. package/package.json +95 -3
  8. package/rollup.config.js +15 -0
  9. package/run-build-deepmap.js +47 -0
  10. package/run-build.js +45 -0
  11. package/run-dts-concat.js +21 -0
  12. package/src/components/CSSVariableWatch.tsx +82 -0
  13. package/src/components/DataSource/BooleanCollectionState.ts +214 -0
  14. package/src/components/DataSource/BooleanDeepCollectionState.ts +208 -0
  15. package/src/components/DataSource/DataSourceContext.ts +20 -0
  16. package/src/components/DataSource/GroupRowsState.ts +74 -0
  17. package/src/components/DataSource/Indexer.ts +27 -0
  18. package/src/components/DataSource/RowSelectionState.ts +763 -0
  19. package/src/components/DataSource/defaultFilterTypes.ts +64 -0
  20. package/src/components/DataSource/index.tsx +108 -0
  21. package/src/components/DataSource/privateHooks/getChangeDetect.ts +7 -0
  22. package/src/components/DataSource/privateHooks/useLoadData.ts +783 -0
  23. package/src/components/DataSource/publicHooks/useDataSource.ts +19 -0
  24. package/src/components/DataSource/publicHooks/useDataSourceActions.ts +14 -0
  25. package/src/components/DataSource/state/getInitialState.ts +494 -0
  26. package/src/components/DataSource/state/normalizeSortInfo.ts +35 -0
  27. package/src/components/DataSource/state/reducer.ts +466 -0
  28. package/src/components/DataSource/state/rowInfoStatus.ts +27 -0
  29. package/src/components/DataSource/types.ts +548 -0
  30. package/src/components/HeadlessTable/HeadlessTableWithPinnedContainers.tsx +142 -0
  31. package/src/components/HeadlessTable/MappedCells.ts +251 -0
  32. package/src/components/HeadlessTable/RawTable.tsx +98 -0
  33. package/src/components/HeadlessTable/ReactHeadlessTableRenderer.tsx +1516 -0
  34. package/src/components/HeadlessTable/index.tsx +234 -0
  35. package/src/components/InfiniteTable/InfiniteCls.css.ts +164 -0
  36. package/src/components/InfiniteTable/InfiniteTableContext.ts +16 -0
  37. package/src/components/InfiniteTable/api/getImperativeApi.ts +391 -0
  38. package/src/components/InfiniteTable/api/getSelectionApi.ts +364 -0
  39. package/src/components/InfiniteTable/api/type.ts +11 -0
  40. package/src/components/InfiniteTable/components/ActiveCellIndicator.css.ts +51 -0
  41. package/src/components/InfiniteTable/components/ActiveCellIndicator.tsx +116 -0
  42. package/src/components/InfiniteTable/components/ActiveRowIndicator.css.ts +56 -0
  43. package/src/components/InfiniteTable/components/ActiveRowIndicator.tsx +94 -0
  44. package/src/components/InfiniteTable/components/CheckBox.css.ts +13 -0
  45. package/src/components/InfiniteTable/components/CheckBox.tsx +96 -0
  46. package/src/components/InfiniteTable/components/FilterEditors.tsx +52 -0
  47. package/src/components/InfiniteTable/components/InfiniteTableBody/InfiniteTableBody.tsx +27 -0
  48. package/src/components/InfiniteTable/components/InfiniteTableBody/index.tsx +1 -0
  49. package/src/components/InfiniteTable/components/InfiniteTableFooter/InfiniteTableFooter.tsx +31 -0
  50. package/src/components/InfiniteTable/components/InfiniteTableFooter/index.tsx +1 -0
  51. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableColumnHeaderFilter.tsx +102 -0
  52. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeader.tsx +163 -0
  53. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderCell.tsx +574 -0
  54. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderGroup.tsx +79 -0
  55. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderTypes.tsx +25 -0
  56. package/src/components/InfiniteTable/components/InfiniteTableHeader/InfiniteTableHeaderWrapper.tsx +185 -0
  57. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/GroupResizeHandle.tsx +159 -0
  58. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/ResizeHandle.css.ts +124 -0
  59. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/columnResizer.ts +166 -0
  60. package/src/components/InfiniteTable/components/InfiniteTableHeader/ResizeHandle/index.tsx +146 -0
  61. package/src/components/InfiniteTable/components/InfiniteTableHeader/buildColumnAndGroupTree.ts +240 -0
  62. package/src/components/InfiniteTable/components/InfiniteTableHeader/header.css.ts +358 -0
  63. package/src/components/InfiniteTable/components/InfiniteTableHeader/index.tsx +1 -0
  64. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnGroupResizeHandle.tsx +114 -0
  65. package/src/components/InfiniteTable/components/InfiniteTableHeader/useColumnResizeHandle.tsx +146 -0
  66. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/footer.css.ts +7 -0
  67. package/src/components/InfiniteTable/components/InfiniteTableLicenseFooter/index.tsx +110 -0
  68. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCell.tsx +120 -0
  69. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableCellTypes.ts +74 -0
  70. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableColumnCell.tsx +457 -0
  71. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRow.tsx +107 -0
  72. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowClassName.ts +6 -0
  73. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowTypes.ts +32 -0
  74. package/src/components/InfiniteTable/components/InfiniteTableRow/InfiniteTableRowUnvirtualized.tsx +75 -0
  75. package/src/components/InfiniteTable/components/InfiniteTableRow/columnRendering.tsx +263 -0
  76. package/src/components/InfiniteTable/components/InfiniteTableRow/index.tsx +1 -0
  77. package/src/components/InfiniteTable/components/InfiniteTableRow/row.css.ts +74 -0
  78. package/src/components/InfiniteTable/components/InfiniteTableRow/useRowDOMProps.ts +199 -0
  79. package/src/components/InfiniteTable/components/LoadMask.css.ts +34 -0
  80. package/src/components/InfiniteTable/components/LoadMask.tsx +27 -0
  81. package/src/components/InfiniteTable/components/ScrollbarPlaceholder.tsx +56 -0
  82. package/src/components/InfiniteTable/components/cell.css.ts +192 -0
  83. package/src/components/InfiniteTable/components/icons/ArrowDown.tsx +14 -0
  84. package/src/components/InfiniteTable/components/icons/ArrowUp.tsx +14 -0
  85. package/src/components/InfiniteTable/components/icons/ExpanderIcon.css.ts +31 -0
  86. package/src/components/InfiniteTable/components/icons/ExpanderIcon.tsx +63 -0
  87. package/src/components/InfiniteTable/components/icons/Icon.tsx +18 -0
  88. package/src/components/InfiniteTable/components/icons/InfiniteTableIconClassName.ts +1 -0
  89. package/src/components/InfiniteTable/components/icons/LoadingIcon.css.ts +8 -0
  90. package/src/components/InfiniteTable/components/icons/LoadingIcon.tsx +45 -0
  91. package/src/components/InfiniteTable/components/icons/MenuIcon.tsx +50 -0
  92. package/src/components/InfiniteTable/components/icons/SortIcon.tsx +113 -0
  93. package/src/components/InfiniteTable/eventHandlers/eventHandlerTypes.ts +57 -0
  94. package/src/components/InfiniteTable/eventHandlers/index.ts +95 -0
  95. package/src/components/InfiniteTable/eventHandlers/keyboardNavigation.ts +232 -0
  96. package/src/components/InfiniteTable/eventHandlers/keyboardSelection.ts +110 -0
  97. package/src/components/InfiniteTable/eventHandlers/onCellClick.ts +94 -0
  98. package/src/components/InfiniteTable/eventHandlers/onKeyDown.ts +25 -0
  99. package/src/components/InfiniteTable/hooks/adjustColumnOrderForAllColumns.ts +70 -0
  100. package/src/components/InfiniteTable/hooks/reorderColumnsOnDrag.ts +476 -0
  101. package/src/components/InfiniteTable/hooks/useAutoSizeColumns.ts +206 -0
  102. package/src/components/InfiniteTable/hooks/useCellClassName.ts +80 -0
  103. package/src/components/InfiniteTable/hooks/useCellRendering.tsx +217 -0
  104. package/src/components/InfiniteTable/hooks/useColumnGroups.ts +71 -0
  105. package/src/components/InfiniteTable/hooks/useColumnMenu.ts +72 -0
  106. package/src/components/InfiniteTable/hooks/useColumnPointerEvents.ts +258 -0
  107. package/src/components/InfiniteTable/hooks/useColumnRowspan.ts +43 -0
  108. package/src/components/InfiniteTable/hooks/useColumnSizeFn.ts +24 -0
  109. package/src/components/InfiniteTable/hooks/useColumnsWhen.ts +582 -0
  110. package/src/components/InfiniteTable/hooks/useComputed.ts +186 -0
  111. package/src/components/InfiniteTable/hooks/useComputedVisibleColumns.ts +219 -0
  112. package/src/components/InfiniteTable/hooks/useDOMProps.ts +306 -0
  113. package/src/components/InfiniteTable/hooks/useEffectWithRaf.ts +47 -0
  114. package/src/components/InfiniteTable/hooks/useInfiniteTable.ts +10 -0
  115. package/src/components/InfiniteTable/hooks/useInfiniteTableState.ts +11 -0
  116. package/src/components/InfiniteTable/hooks/useInternalProps.ts +8 -0
  117. package/src/components/InfiniteTable/hooks/useLicense/LicenseDetails.ts +13 -0
  118. package/src/components/InfiniteTable/hooks/useLicense/crc32.ts +56 -0
  119. package/src/components/InfiniteTable/hooks/useLicense/decode.ts +147 -0
  120. package/src/components/InfiniteTable/hooks/useLicense/useLicense.ts +39 -0
  121. package/src/components/InfiniteTable/hooks/useRerenderOnKeyChange.ts +21 -0
  122. package/src/components/InfiniteTable/hooks/useRowHover.ts +18 -0
  123. package/src/components/InfiniteTable/hooks/useScrollToActiveCell.ts +48 -0
  124. package/src/components/InfiniteTable/hooks/useScrollToActiveRow.ts +44 -0
  125. package/src/components/InfiniteTable/hooks/useScrollbars.ts +51 -0
  126. package/src/components/InfiniteTable/hooks/useToggleGroupRow.ts +56 -0
  127. package/src/components/InfiniteTable/hooks/useUnpinnedRendering.tsx +165 -0
  128. package/src/components/InfiniteTable/hooks/useYourBrain.ts +55 -0
  129. package/src/components/InfiniteTable/index.tsx +352 -0
  130. package/src/components/InfiniteTable/internalProps.ts +4 -0
  131. package/src/components/InfiniteTable/state/computeColumnGroupsDepths.ts +29 -0
  132. package/src/components/InfiniteTable/state/getColumnVisibilityForHideEmptyGroupColumns.ts +127 -0
  133. package/src/components/InfiniteTable/state/getInitialState.ts +375 -0
  134. package/src/components/InfiniteTable/theme.css.ts +556 -0
  135. package/src/components/InfiniteTable/types/InfiniteTableAction.ts +6 -0
  136. package/src/components/InfiniteTable/types/InfiniteTableActionType.ts +12 -0
  137. package/src/components/InfiniteTable/types/InfiniteTableColumn.ts +478 -0
  138. package/src/components/InfiniteTable/types/InfiniteTableComputedValues.ts +43 -0
  139. package/src/components/InfiniteTable/types/InfiniteTableContextValue.ts +12 -0
  140. package/src/components/InfiniteTable/types/InfiniteTableInternalProps.ts +3 -0
  141. package/src/components/InfiniteTable/types/InfiniteTableProps.ts +511 -0
  142. package/src/components/InfiniteTable/types/InfiniteTableState.ts +195 -0
  143. package/src/components/InfiniteTable/types/Utility.ts +35 -0
  144. package/src/components/InfiniteTable/types/index.ts +96 -0
  145. package/src/components/InfiniteTable/utilities.css.ts +179 -0
  146. package/src/components/InfiniteTable/utils/MultiRowSelector.ts +111 -0
  147. package/src/components/InfiniteTable/utils/RenderHookComponentForInfinite.tsx +52 -0
  148. package/src/components/InfiniteTable/utils/adjustColumnOrderForPinning.ts +33 -0
  149. package/src/components/InfiniteTable/utils/assignFiltered.ts +29 -0
  150. package/src/components/InfiniteTable/utils/defaultGetColumContextMenuItems.tsx +108 -0
  151. package/src/components/InfiniteTable/utils/getColumnComputedType.ts +33 -0
  152. package/src/components/InfiniteTable/utils/getColumnForGroupBy.tsx +313 -0
  153. package/src/components/InfiniteTable/utils/getComputedVisibleColumns.ts +773 -0
  154. package/src/components/InfiniteTable/utils/getContextMenuForColumn.tsx +72 -0
  155. package/src/components/InfiniteTable/utils/infiniteDOMUtils.ts +189 -0
  156. package/src/components/InfiniteTable/utils/mapToObject.ts +20 -0
  157. package/src/components/InfiniteTable/utils/moveXatY.ts +25 -0
  158. package/src/components/InfiniteTable/utils/objectValuesExcept.ts +9 -0
  159. package/src/components/InfiniteTable/utils/progressiveSpeedScroller.ts +158 -0
  160. package/src/components/InfiniteTable/utils/rafFn.ts +13 -0
  161. package/src/components/InfiniteTable/utils/toCSSVarName.ts +1 -0
  162. package/src/components/InfiniteTable/utils/toMap.ts +24 -0
  163. package/src/components/Menu/Menu.tsx +750 -0
  164. package/src/components/Menu/MenuCls.css.ts +139 -0
  165. package/src/components/Menu/MenuContext.ts +10 -0
  166. package/src/components/Menu/MenuContextValue.ts +15 -0
  167. package/src/components/Menu/MenuProps.ts +98 -0
  168. package/src/components/Menu/MenuState.ts +56 -0
  169. package/src/components/Menu/MenuTriangleContext.ts +352 -0
  170. package/src/components/Menu/childrenToRuntimeItems.tsx +103 -0
  171. package/src/components/Menu/getMenuState.tsx +119 -0
  172. package/src/components/Menu/index.tsx +88 -0
  173. package/src/components/Menu/propToIdentifyMenu.ts +1 -0
  174. package/src/components/RawList/AvoidReactDiff.tsx +48 -0
  175. package/src/components/RawList/MappedItems.ts +143 -0
  176. package/src/components/RawList/ReactVirtualRenderer.tsx +307 -0
  177. package/src/components/RawList/index.tsx +42 -0
  178. package/src/components/RawList/types.ts +23 -0
  179. package/src/components/RawList/useVirtualRenderer.ts +36 -0
  180. package/src/components/RenderHookComponent.tsx +10 -0
  181. package/src/components/ResizeObserver/index.tsx +170 -0
  182. package/src/components/VirtualBrain/MatrixBrain.ts +1621 -0
  183. package/src/components/VirtualBrain/ScrollListener.ts +39 -0
  184. package/src/components/VirtualBrain/index.ts +664 -0
  185. package/src/components/VirtualList/ColumnListWithExternalScrolling.tsx +78 -0
  186. package/src/components/VirtualList/InfiniteListRootClassName.ts +1 -0
  187. package/src/components/VirtualList/RowListWithExternalScrolling.tsx +120 -0
  188. package/src/components/VirtualList/SpacePlaceholder.tsx +32 -0
  189. package/src/components/VirtualList/VirtualList.css.ts +29 -0
  190. package/src/components/VirtualList/VirtualList.tsx +141 -0
  191. package/src/components/VirtualList/VirtualRowList.tsx +34 -0
  192. package/src/components/VirtualList/types.ts +56 -0
  193. package/src/components/VirtualList/useCorrectHeightForRowElements.ts +14 -0
  194. package/src/components/VirtualScrollContainer/VirtualScrollContainer.css.ts +51 -0
  195. package/src/components/VirtualScrollContainer/getScrollableClassName.ts +30 -0
  196. package/src/components/VirtualScrollContainer/index.tsx +63 -0
  197. package/src/components/flexbox/index.ts +562 -0
  198. package/src/components/hooks/useComponentState/index.tsx +562 -0
  199. package/src/components/hooks/useComponentState/types.ts +32 -0
  200. package/src/components/hooks/useEffectOnceWithProperUnmount.ts +33 -0
  201. package/src/components/hooks/useEffectWithChanges.ts +56 -0
  202. package/src/components/hooks/useImmutableRef.ts +7 -0
  203. package/src/components/hooks/useInterceptedMap.ts +71 -0
  204. package/src/components/hooks/useLatest.tsx +8 -0
  205. package/src/components/hooks/useLazyLatest.ts +23 -0
  206. package/src/components/hooks/useMemoShallowObjectMerge.ts +16 -0
  207. package/src/components/hooks/useMounted.ts +18 -0
  208. package/src/components/hooks/useOnMount.ts +21 -0
  209. package/src/components/hooks/useOnScroll.ts +34 -0
  210. package/src/components/hooks/useOnce.ts +10 -0
  211. package/src/components/hooks/useOverlay/index.tsx +418 -0
  212. package/src/components/hooks/usePrevious.ts +8 -0
  213. package/src/components/hooks/usePropertyOld.ts +168 -0
  214. package/src/components/hooks/useRerender.ts +12 -0
  215. package/src/components/hooks/xuseProperty.ts +165 -0
  216. package/src/components/types/CellPosition.ts +4 -0
  217. package/src/components/types/NonUndefined.ts +1 -0
  218. package/src/components/types/RemoveObject.ts +22 -0
  219. package/src/components/types/Renderable.ts +3 -0
  220. package/src/components/types/ScrollPosition.ts +7 -0
  221. package/src/components/types/Setter.ts +2 -0
  222. package/src/components/types/Size.ts +6 -0
  223. package/src/components/types/SubscriptionCallback.ts +10 -0
  224. package/src/components/types/VoidFn.ts +1 -0
  225. package/src/components/utils/buildSubscriptionCallback.tsx +60 -0
  226. package/src/components/utils/clamp.ts +3 -0
  227. package/src/components/utils/debounce.ts +16 -0
  228. package/src/components/utils/decamelize.ts +11 -0
  229. package/src/components/utils/discardCallsWithEqualArg.ts +42 -0
  230. package/src/components/utils/getRenderIndexes.ts +33 -0
  231. package/src/components/utils/getScrollbarWidth.ts +31 -0
  232. package/src/components/utils/getVirtualRenderCount.ts +21 -0
  233. package/src/components/utils/isControlled.ts +12 -0
  234. package/src/components/utils/isControlledValue.ts +5 -0
  235. package/src/index.tsx +34 -0
  236. package/src/test.tsx +18 -0
  237. package/src/utils/DeepMap/index.ts +588 -0
  238. package/src/utils/DeepMap/once.ts +16 -0
  239. package/src/utils/DeepMap/sortAscending.ts +1 -0
  240. package/src/utils/DeepMap/tsconfig.deepmap.json +17 -0
  241. package/src/utils/DeepMap/xpackage.json +26 -0
  242. package/src/utils/debug.ts +40 -0
  243. package/src/utils/deepClone.ts +38 -0
  244. package/src/utils/getGlobal.ts +3 -0
  245. package/src/utils/groupAndPivot/defaultToKey.ts +3 -0
  246. package/src/utils/groupAndPivot/getGroupKeysForDataItem.ts +19 -0
  247. package/src/utils/groupAndPivot/getPivotColumnsAndColumnGroups.ts +361 -0
  248. package/src/utils/groupAndPivot/index.ts +1229 -0
  249. package/src/utils/groupAndPivot/types.ts +10 -0
  250. package/src/utils/join.ts +4 -0
  251. package/src/utils/mathIntersection.ts +21 -0
  252. package/src/utils/minified.d.ts +2 -0
  253. package/src/utils/minified.js +6 -0
  254. package/src/utils/multisort/index.ts +151 -0
  255. package/src/utils/multisort/sortTypes.ts +25 -0
  256. package/src/utils/notes-status.md +92 -0
  257. package/src/utils/pageGeometry/ConvexPoly.ts +34 -0
  258. package/src/utils/pageGeometry/Point.ts +51 -0
  259. package/src/utils/pageGeometry/PolyWithPoints.ts +52 -0
  260. package/src/utils/pageGeometry/Rectangle.ts +98 -0
  261. package/src/utils/pageGeometry/Triangle.ts +16 -0
  262. package/src/utils/pageGeometry/alignment/index.ts +221 -0
  263. package/src/utils/pageGeometry/polyContainsPoint.ts +182 -0
  264. package/src/utils/pageGeometry/types.ts +3 -0
  265. package/src/utils/proxyFnCall.ts +46 -0
  266. package/src/utils/raf.ts +13 -0
  267. package/src/utils/selectParent.ts +18 -0
  268. package/src/utils/shallowEqualObjects.ts +49 -0
  269. package/src/utils/stripVar.ts +3 -0
  270. package/src/utils/toUpperFirst.ts +5 -0
  271. package/todo.md +2 -0
  272. package/tsconfig.build.json +8 -0
  273. package/tsconfig.dev.json +7 -0
  274. package/tsconfig.json +30 -0
  275. package/tsconfig.typebundler.json +13 -0
  276. package/typedoc.json +4 -0
  277. package/README.md +0 -104
  278. package/index.css +0 -857
  279. package/index.d.ts +0 -2111
  280. package/index.esm.css +0 -857
  281. package/index.esm.js +0 -13695
  282. package/index.js +0 -13565
@@ -0,0 +1,72 @@
1
+ import * as React from 'react';
2
+ import { useCallback } from 'react';
3
+ import { Menu } from '../../Menu';
4
+ import { MenuState } from '../../Menu/MenuState';
5
+ import { InfiniteTableContextValue } from '../types';
6
+ import { defaultGetColumContextMenuItems } from './defaultGetColumContextMenuItems';
7
+
8
+ export function getContextMenuForColumn<T>(
9
+ columnId: string | null,
10
+ context: InfiniteTableContextValue<T>,
11
+ onHideIntent?: VoidFunction,
12
+ ) {
13
+ if (columnId == null) {
14
+ return null;
15
+ }
16
+ const {
17
+ getComputed,
18
+ getState,
19
+ imperativeApi,
20
+ componentActions: actions,
21
+ } = context;
22
+
23
+ const { components, getColumContextMenuItems } = getState();
24
+
25
+ const MenuCmp = components?.Menu ?? Menu;
26
+
27
+ const column = getComputed().computedColumnsMap.get(columnId);
28
+
29
+ if (!column) {
30
+ return null;
31
+ }
32
+
33
+ const getItems = getColumContextMenuItems || defaultGetColumContextMenuItems;
34
+
35
+ const items = getItems({
36
+ column,
37
+ api: imperativeApi,
38
+ getState,
39
+ getComputed,
40
+ actions,
41
+ });
42
+
43
+ const onRootMouseDown: EventListener = React.useCallback((event: Event) => {
44
+ //@ts-ignore
45
+ event.__insideMenu = true;
46
+ }, []);
47
+
48
+ const onHide = (state: MenuState) => {
49
+ state.domRef.current?.parentNode?.removeEventListener(
50
+ 'mousedown',
51
+ onRootMouseDown,
52
+ );
53
+ };
54
+
55
+ return (
56
+ <MenuCmp
57
+ autoFocus
58
+ items={items}
59
+ onShow={(state) => {
60
+ state.domRef.current?.parentNode?.addEventListener(
61
+ 'mousedown',
62
+ onRootMouseDown,
63
+ );
64
+ }}
65
+ onHide={onHide}
66
+ onHideIntent={useCallback((state: MenuState) => {
67
+ onHide(state);
68
+ onHideIntent?.();
69
+ }, [])}
70
+ />
71
+ );
72
+ }
@@ -0,0 +1,189 @@
1
+ import { selectParent } from '../../../utils/selectParent';
2
+ import { stripVar } from '../../../utils/stripVar';
3
+ import { ScrollPosition } from '../../types/ScrollPosition';
4
+ import { internalProps } from '../internalProps';
5
+ import { InternalVars, ThemeVars } from '../theme.css';
6
+ import { InfiniteTableComputedColumn } from '../types';
7
+
8
+ const InfiniteSelector = `.${internalProps.rootClassName}`;
9
+ export function getParentInfiniteNode(node: HTMLElement) {
10
+ return selectParent(node, InfiniteSelector);
11
+ }
12
+
13
+ const scrollLeft = stripVar(InternalVars.scrollLeft);
14
+ const scrollTop = stripVar(InternalVars.scrollTop);
15
+
16
+ const columnWidthAtIndex = stripVar(InternalVars.columnWidthAtIndex);
17
+ const columnOffsetAtIndex = stripVar(InternalVars.columnOffsetAtIndex);
18
+ const columnReorderEffectDurationAtIndex = stripVar(
19
+ InternalVars.columnReorderEffectDurationAtIndex,
20
+ );
21
+ const columnOffsetAtIndexWhileReordering = stripVar(
22
+ InternalVars.columnOffsetAtIndexWhileReordering,
23
+ );
24
+ const columnZIndexAtIndex = stripVar(InternalVars.columnZIndexAtIndex);
25
+
26
+ export function setInfiniteVarOnRoot(
27
+ varName: keyof typeof InternalVars | string,
28
+ varValue: string | number,
29
+ node: HTMLElement | null,
30
+ ) {
31
+ const infinite = node
32
+ ? getParentInfiniteNode(node)
33
+ : (document.querySelector(InfiniteSelector) as HTMLElement);
34
+
35
+ setInfiniteVarOnNode(varName, varValue, infinite);
36
+ }
37
+
38
+ export function setInfiniteVarOnNode(
39
+ varName: keyof typeof InternalVars | string,
40
+ varValue: string | number,
41
+ node: HTMLElement | null,
42
+ ) {
43
+ if (node) {
44
+ const prop = InternalVars[varName as keyof typeof InternalVars]
45
+ ? stripVar(InternalVars[varName as keyof typeof InternalVars])
46
+ : varName;
47
+
48
+ node.style.setProperty(prop, `${varValue}`);
49
+ }
50
+ }
51
+
52
+ export function setInfiniteVarsOnRoot(
53
+ vars: Partial<Record<keyof typeof InternalVars | string, string | number>>,
54
+ node: HTMLElement | null,
55
+ ) {
56
+ const infinite = node
57
+ ? getParentInfiniteNode(node)
58
+ : (document.querySelector(InfiniteSelector) as HTMLElement);
59
+
60
+ setInfiniteVarsOnNode(vars, infinite);
61
+ }
62
+
63
+ export function setInfiniteVarsOnNode(
64
+ vars: Partial<Record<keyof typeof InternalVars, string | number>>,
65
+ node: HTMLElement | null,
66
+ ) {
67
+ if (node) {
68
+ for (var varName in vars) {
69
+ node.style.setProperty(
70
+ InternalVars[varName as keyof typeof InternalVars]
71
+ ? stripVar(InternalVars[varName as keyof typeof InternalVars])
72
+ : varName,
73
+ `${vars[varName as keyof typeof InternalVars]}`,
74
+ );
75
+ }
76
+ }
77
+ }
78
+
79
+ export function setInfiniteColumnWidth(
80
+ colIndex: number,
81
+ colWidth: number | string,
82
+ node: HTMLElement | null,
83
+ ) {
84
+ setInfiniteVarOnRoot(
85
+ `${columnWidthAtIndex}-${colIndex}`,
86
+ typeof colWidth === 'number' ? colWidth + 'px' : colWidth,
87
+ node,
88
+ );
89
+ }
90
+
91
+ export function setInfiniteColumnOffset(
92
+ colIndex: number,
93
+ colOffset: number | string,
94
+ node: HTMLElement | null,
95
+ ) {
96
+ setInfiniteVarOnRoot(
97
+ `${columnOffsetAtIndex}-${colIndex}`,
98
+ typeof colOffset === 'number' ? colOffset + 'px' : colOffset,
99
+ node,
100
+ );
101
+ }
102
+
103
+ export function addToInfiniteColumnOffset<T>(
104
+ column: InfiniteTableComputedColumn<T>,
105
+ amountToAdd: number,
106
+ node: HTMLElement | null,
107
+ ) {
108
+ setInfiniteVarOnRoot(
109
+ `${columnOffsetAtIndex}-${column.computedVisibleIndex}`,
110
+ !column.computedPinned
111
+ ? `${column.computedAbsoluteOffset + amountToAdd}px`
112
+ : `calc( ${
113
+ column.computedAbsoluteOffset + amountToAdd
114
+ }px + var(${scrollLeft}))`,
115
+
116
+ node,
117
+ );
118
+ }
119
+
120
+ export function setInfiniteColumnZIndex(
121
+ colIndex: number,
122
+ colZIndex: number | string,
123
+ node: HTMLElement | null,
124
+ ) {
125
+ setInfiniteVarOnRoot(
126
+ `${columnZIndexAtIndex}-${colIndex}`,
127
+ `${colZIndex}`,
128
+ node,
129
+ );
130
+ }
131
+
132
+ export function setInfiniteColumnOffsetWhileReordering(
133
+ colIndex: number,
134
+ offset: string | number,
135
+ node: HTMLElement | null,
136
+ ) {
137
+ setInfiniteVarOnRoot(
138
+ `${columnOffsetAtIndexWhileReordering}-${colIndex}`,
139
+ typeof offset === 'number'
140
+ ? `calc( var(${columnOffsetAtIndex}-${colIndex}) + ${offset}px )`
141
+ : offset,
142
+ node,
143
+ );
144
+ }
145
+
146
+ export function clearInfiniteColumnReorderDuration(
147
+ colIndex: number,
148
+ node: HTMLElement | null,
149
+ defaultValue?: string,
150
+ ) {
151
+ setInfiniteVarOnRoot(
152
+ `${columnReorderEffectDurationAtIndex}-${colIndex}`,
153
+ defaultValue ?? '',
154
+ node,
155
+ );
156
+ }
157
+
158
+ export function restoreInfiniteColumnReorderDuration(
159
+ colIndex: number,
160
+ node: HTMLElement | null,
161
+ ) {
162
+ const varName = `${columnReorderEffectDurationAtIndex}-${colIndex}`;
163
+
164
+ setInfiniteVarOnRoot(
165
+ varName,
166
+ ThemeVars.components.Cell.reorderEffectDuration,
167
+ node,
168
+ );
169
+ }
170
+
171
+ export function getCSSVarNameForColWidth(colIndex: number) {
172
+ return `${columnWidthAtIndex}-${colIndex}`;
173
+ }
174
+ export function getCSSVarNameForColOffset(colIndex: number) {
175
+ return `${columnOffsetAtIndex}-${colIndex}`;
176
+ }
177
+
178
+ export function setInfiniteScrollPosition(
179
+ scrollPosition: ScrollPosition,
180
+ node: HTMLElement | null,
181
+ ) {
182
+ setInfiniteVarsOnNode(
183
+ {
184
+ [scrollLeft]: `${scrollPosition.scrollLeft}px`,
185
+ [scrollTop]: `${scrollPosition.scrollTop}px`,
186
+ },
187
+ node,
188
+ );
189
+ }
@@ -0,0 +1,20 @@
1
+ export function mapToObject<K extends string, V>(
2
+ mapOrObject?: Map<K, V> | Record<K, V>,
3
+ ): Record<K, V> {
4
+ if (!mapOrObject) {
5
+ return {} as Record<K, V>;
6
+ }
7
+
8
+ if (mapOrObject instanceof Map) {
9
+ const result = {} as Record<K, V>;
10
+ const entries = [...mapOrObject.entries()] as [K, V][];
11
+
12
+ entries.forEach(([key, value]) => {
13
+ result[key] = value;
14
+ });
15
+
16
+ return result;
17
+ }
18
+
19
+ return mapOrObject;
20
+ }
@@ -0,0 +1,25 @@
1
+ export const moveXatY = <T>(
2
+ arr: T[],
3
+ dragIndex: number,
4
+ dropIndex: number,
5
+ ): T[] => {
6
+ arr = [...arr];
7
+ if (
8
+ dragIndex === dropIndex ||
9
+ arr[dragIndex] === undefined ||
10
+ arr[dropIndex] === undefined
11
+ ) {
12
+ return arr;
13
+ }
14
+ const dragItem = arr[dragIndex];
15
+
16
+ if (dropIndex < dragIndex) {
17
+ arr.splice(dragIndex, 1);
18
+ arr.splice(dropIndex, 0, dragItem);
19
+ } else {
20
+ arr.splice(dragIndex, 1);
21
+ arr.splice(dropIndex, 0, dragItem);
22
+ }
23
+
24
+ return arr;
25
+ };
@@ -0,0 +1,9 @@
1
+ export function objectValuesExcept(obj: any, exceptList: Record<string, true>) {
2
+ const result: any[] = [];
3
+ for (const k in obj)
4
+ if (obj.hasOwnProperty(k) && !exceptList.hasOwnProperty(k)) {
5
+ result.push(obj[k]);
6
+ }
7
+
8
+ return result;
9
+ }
@@ -0,0 +1,158 @@
1
+ import { cancelRaf, raf } from '../../../utils/raf';
2
+ import { NonUndefined } from '../../types/NonUndefined';
3
+
4
+ type ProgressiveSpeedScrollerDynamicOptions = {
5
+ mousePosition: { clientX: number; clientY: number };
6
+
7
+ set scrollLeft(value: number);
8
+ get scrollLeft();
9
+ };
10
+
11
+ type ProgressiveSpeedScrollerStaticOptions = {
12
+ scrollOffsetEnd: number;
13
+ scrollOffsetStart: number;
14
+ offset?: number;
15
+ scrollAmountsPerRaf?: number[];
16
+ };
17
+
18
+ type ProgressiveSpeedScrollerOptions = ProgressiveSpeedScrollerStaticOptions &
19
+ ProgressiveSpeedScrollerDynamicOptions & {
20
+ offset: NonUndefined<ProgressiveSpeedScrollerStaticOptions['offset']>;
21
+ } & {
22
+ scrollAmountsPerRaf: NonUndefined<
23
+ ProgressiveSpeedScrollerStaticOptions['scrollAmountsPerRaf']
24
+ >;
25
+ };
26
+
27
+ export const progressiveSpeedScroller = (
28
+ staticOptions: ProgressiveSpeedScrollerStaticOptions,
29
+ ) => {
30
+ let scrollLeftRafId: number | null = null;
31
+ let scrollRightRafId: number | null = null;
32
+
33
+ return {
34
+ stop() {
35
+ if (scrollLeftRafId !== null) {
36
+ cancelRaf(scrollLeftRafId);
37
+ }
38
+ if (scrollRightRafId != null) {
39
+ cancelRaf(scrollRightRafId);
40
+ }
41
+ },
42
+ scroll(dynamicOptions: ProgressiveSpeedScrollerDynamicOptions) {
43
+ if (scrollLeftRafId !== null) {
44
+ cancelRaf(scrollLeftRafId);
45
+ }
46
+ if (scrollRightRafId != null) {
47
+ cancelRaf(scrollRightRafId);
48
+ }
49
+
50
+ const opts: ProgressiveSpeedScrollerOptions = {
51
+ offset: 100,
52
+ scrollAmountsPerRaf: [1, 1, 2, 4, 6, 8, 11, 15],
53
+ ...staticOptions,
54
+ ...dynamicOptions,
55
+ };
56
+
57
+ const self = this;
58
+
59
+ function scrollLeft() {
60
+ /**
61
+ * 0 - viewport scrollOffsetStart
62
+ * left
63
+ * .----------------.----------------. scrollOffsetStart + offset
64
+ * | | |
65
+ * | | |
66
+ * | | | <- the user goes in this direction with the arrow
67
+ * | | |
68
+ * | | x mouse |
69
+ * | | |
70
+ * | ------- | - this is margin distance - the distance the user entered the offset
71
+ *
72
+ */
73
+
74
+ const marginDistance =
75
+ opts.scrollOffsetStart + opts.offset - opts.mousePosition.clientX;
76
+
77
+ const shouldScrollLeft =
78
+ marginDistance > 0 && marginDistance <= opts.offset;
79
+
80
+ if (!shouldScrollLeft) {
81
+ return false;
82
+ }
83
+
84
+ const segmentCount = opts.scrollAmountsPerRaf.length;
85
+ const segmentDistance = Math.round(opts.offset / segmentCount);
86
+
87
+ let speed: number = 0;
88
+ for (let i = 0; i < segmentCount; i++) {
89
+ if (marginDistance > (i + 1) * segmentDistance) {
90
+ speed = opts.scrollAmountsPerRaf[i];
91
+ }
92
+ }
93
+
94
+ dynamicOptions.scrollLeft = dynamicOptions.scrollLeft - speed;
95
+
96
+ scrollLeftRafId = raf(() => {
97
+ self.scroll(dynamicOptions);
98
+ });
99
+
100
+ return true;
101
+ }
102
+
103
+ /**
104
+ * 0 - viewport scrollOffsetEnd - offset
105
+ * left
106
+ * .----------------.----------------. scrollOffsetEnd
107
+ * | | |
108
+ * | | |
109
+ * | | |
110
+ * | | |
111
+ * | | x mouse |
112
+ * | | |
113
+ * | -----| | - this is margin distance - the distance the user entered the offset
114
+ *
115
+ * the user goes in this ->
116
+ * direction with the arrow
117
+ *
118
+ */
119
+ function scrollRight() {
120
+ const marginDistance =
121
+ opts.mousePosition.clientX - (opts.scrollOffsetEnd - opts.offset);
122
+
123
+ const shouldScrollRight =
124
+ marginDistance > 0 && marginDistance <= opts.offset;
125
+
126
+ if (!shouldScrollRight) {
127
+ return false;
128
+ }
129
+
130
+ const segmentCount = opts.scrollAmountsPerRaf.length;
131
+ const segmentDistance = Math.round(opts.offset / segmentCount);
132
+
133
+ let speed: number = 0;
134
+ for (let i = 0; i < segmentCount; i++) {
135
+ if (marginDistance > (i + 1) * segmentDistance) {
136
+ speed = opts.scrollAmountsPerRaf[i];
137
+ }
138
+ }
139
+
140
+ dynamicOptions.scrollLeft = dynamicOptions.scrollLeft + speed;
141
+
142
+ scrollRightRafId = raf(() => {
143
+ self.scroll(dynamicOptions);
144
+ });
145
+
146
+ return true;
147
+ }
148
+
149
+ if (scrollLeft()) {
150
+ return true;
151
+ }
152
+ if (scrollRight()) {
153
+ return true;
154
+ }
155
+ return false;
156
+ },
157
+ };
158
+ };
@@ -0,0 +1,13 @@
1
+ export const rafFn = (fn: (...args: any[]) => void) => {
2
+ let rafId: number = 0;
3
+
4
+ return (...args: any[]) => {
5
+ if (rafId) {
6
+ cancelAnimationFrame(rafId);
7
+ }
8
+ rafId = requestAnimationFrame(() => {
9
+ rafId = 0;
10
+ fn(...args);
11
+ });
12
+ };
13
+ };
@@ -0,0 +1 @@
1
+ export const toCSSVarName = (value: string | null) => `--infinite-${value}`;
@@ -0,0 +1,24 @@
1
+ export function toMap<K extends string, V>(
2
+ mapOrObject?: Map<K, V> | Record<K, V>,
3
+ weakMapCache?: WeakMap<any, any>,
4
+ ): Map<K, V> {
5
+ if (!mapOrObject) {
6
+ return new Map<K, V>();
7
+ }
8
+
9
+ if (mapOrObject instanceof Map) {
10
+ return mapOrObject;
11
+ }
12
+
13
+ if (weakMapCache && weakMapCache.has(mapOrObject)) {
14
+ return weakMapCache.get(mapOrObject) as Map<K, V>;
15
+ }
16
+
17
+ const result = new Map<K, V>(Object.entries(mapOrObject) as [K, V][]);
18
+
19
+ if (weakMapCache) {
20
+ weakMapCache.set(mapOrObject, result);
21
+ }
22
+
23
+ return result;
24
+ }