@infinite-table/infinite-react 0.5.1 → 0.5.3

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 +3 -95
  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,562 +0,0 @@
1
- import { InfiniteTableComputedColumn } from '../InfiniteTable';
2
- import { InfiniteTablePropColumnSizing } from '../InfiniteTable/types/InfiniteTableProps';
3
- import { RequireAtLeastOne } from '../InfiniteTable/types/Utility';
4
-
5
- type FlexItem = {
6
- size?: number | null;
7
- flex?: number | null;
8
- maxSize?: number | null;
9
- minSize?: number | null;
10
- };
11
-
12
- type FlexItemWithSizeOrFlex = RequireAtLeastOne<FlexItem, 'size' | 'flex'>;
13
-
14
- type FlexComputeParams = {
15
- availableSize: number;
16
- minSize?: number;
17
- maxSize?: number;
18
- items: FlexItemWithSizeOrFlex[];
19
- computeSpecialSpaceDistribution?: boolean;
20
- };
21
-
22
- type SizedFlexItem = FlexItem & {
23
- flexSize?: number;
24
- computedSize?: number;
25
- };
26
-
27
- type FlexComputeResult = {
28
- items: SizedFlexItem[];
29
- flexSizes: number[];
30
- computedSizes: number[];
31
- minSizes: (number | undefined)[];
32
- maxSizes: (number | undefined)[];
33
- remainingSize: number;
34
- };
35
-
36
- export const computeFlex = (params: FlexComputeParams): FlexComputeResult => {
37
- const {
38
- availableSize,
39
- items,
40
- minSize: defaultMinSize,
41
- maxSize: defaultMaxSize,
42
- } = params;
43
-
44
- if (availableSize < 0) {
45
- throw 'The provided availableSize cannot be negative!';
46
- }
47
-
48
- let totalFixedSize = 0;
49
- let totalFlex = 0;
50
- let totalFlexCount = 0;
51
-
52
- const minSizes: (number | undefined)[] = [];
53
- const maxSizes: (number | undefined)[] = [];
54
-
55
- items.forEach((item, i) => {
56
- let maxSize = item.maxSize ?? defaultMaxSize ?? undefined;
57
- let minSize = item.minSize ?? defaultMinSize ?? undefined;
58
-
59
- minSizes.push(minSize);
60
- maxSizes.push(maxSize);
61
-
62
- if (item.size != null) {
63
- if (maxSize != null && item.size > maxSize) {
64
- item.size = maxSize;
65
- }
66
- if (minSize != null && item.size < minSize) {
67
- item.size = minSize;
68
- }
69
- }
70
-
71
- const itemFlex = item.flex == 0 ? null : item.flex;
72
-
73
- if (item.size == null && itemFlex == null) {
74
- throw `Items must specify either a size or a flex property. Item at index ${i} doesn't have either of those.`;
75
- }
76
-
77
- if (itemFlex != null) {
78
- totalFlexCount += 1;
79
- }
80
-
81
- totalFlex += itemFlex ?? 0;
82
- totalFixedSize += item.size ?? 0;
83
- });
84
-
85
- let availableSizeForFlex = params.computeSpecialSpaceDistribution
86
- ? Math.max(availableSize, 0)
87
- : Math.max(availableSize - totalFixedSize, 0);
88
- let sizePerFlex = availableSizeForFlex / totalFlex;
89
-
90
- // now we need another iteration in order to adjust constrained items
91
- let maxxedFlexItems: { [key: number]: boolean } = {};
92
- let minnedFlexItems: { [key: number]: boolean } = {};
93
- let constrainedCount = 0;
94
-
95
- items.forEach((item, index) => {
96
- if (item.flex != null) {
97
- const approxFlexSize = sizePerFlex * item.flex;
98
- let maxSize = item.maxSize ?? defaultMaxSize ?? undefined;
99
- let minSize = item.minSize ?? defaultMinSize ?? undefined;
100
-
101
- let constrained: boolean = false;
102
- let substractSize = 0;
103
-
104
- if (maxSize != null && approxFlexSize > maxSize) {
105
- maxxedFlexItems[index] = true;
106
- constrained = true;
107
- substractSize = maxSize;
108
- }
109
-
110
- if (minSize != null && approxFlexSize < minSize) {
111
- minnedFlexItems[index] = true;
112
- constrained = true;
113
- substractSize = minSize;
114
- }
115
-
116
- if (constrained) {
117
- constrainedCount += 1;
118
- // no longer will be considered a flex item
119
- // so substract it from the count
120
- totalFlexCount -= 1;
121
- totalFlex -= item.flex;
122
- availableSizeForFlex -= substractSize;
123
- }
124
- }
125
- });
126
-
127
- // adjust those calculations we did previously
128
- if (constrainedCount) {
129
- sizePerFlex = availableSizeForFlex / totalFlex;
130
- }
131
-
132
- let flexSizes: number[] = [];
133
- let currentFlexCount = 0;
134
- let remainingSizeForFlex = availableSizeForFlex;
135
- let remainingFlex = totalFlex;
136
-
137
- let totalTakenSize = 0;
138
-
139
- let flexSizeSum = 0;
140
-
141
- const computedSizes: number[] = [];
142
-
143
- const resultItems: SizedFlexItem[] = items.map((item, index) => {
144
- const sizedItem: SizedFlexItem = { ...item };
145
-
146
- let maxSize = item.maxSize ?? defaultMaxSize ?? undefined;
147
- let minSize = item.minSize ?? defaultMinSize ?? undefined;
148
-
149
- let flexSize = 0;
150
- const maxxed = maxxedFlexItems[index];
151
- const minned = minnedFlexItems[index];
152
- const constrained = maxxed || minned;
153
-
154
- let computedSize = item.size ?? 0;
155
-
156
- if (item.flex != null) {
157
- if (constrained) {
158
- if (minned) {
159
- flexSize = minSize!;
160
- }
161
- if (maxxed) {
162
- flexSize = maxSize!;
163
- }
164
- } else {
165
- currentFlexCount += 1;
166
-
167
- const constrain = (size: number) => {
168
- if (maxSize != null && size > maxSize) {
169
- size = maxSize;
170
- }
171
- if (minSize != null && size < minSize) {
172
- size = minSize;
173
- }
174
-
175
- return size;
176
- };
177
-
178
- if (currentFlexCount === totalFlexCount) {
179
- flexSize = constrain(remainingSizeForFlex);
180
- } else {
181
- flexSize = constrain(Math.round(item.flex * sizePerFlex));
182
-
183
- flexSizeSum += flexSize;
184
- remainingSizeForFlex = availableSizeForFlex - flexSizeSum;
185
- remainingFlex -= item.flex;
186
-
187
- sizePerFlex = remainingSizeForFlex / remainingFlex;
188
- }
189
- }
190
-
191
- computedSize = flexSize;
192
- sizedItem.flexSize = flexSize;
193
- }
194
-
195
- flexSizes.push(flexSize);
196
-
197
- computedSizes.push(computedSize);
198
-
199
- sizedItem.computedSize = computedSize;
200
-
201
- totalTakenSize += computedSize;
202
-
203
- return sizedItem;
204
- });
205
-
206
- return {
207
- items: resultItems,
208
- flexSizes,
209
- minSizes,
210
- maxSizes,
211
- computedSizes,
212
- remainingSize: Math.round(availableSize - totalTakenSize),
213
- };
214
- };
215
-
216
- type FlexComputeResizeItem = {
217
- id: InfiniteTableComputedColumn<any>['id'];
218
- computedWidth: InfiniteTableComputedColumn<any>['computedWidth'];
219
- computedFlex: InfiniteTableComputedColumn<any>['computedFlex'];
220
- computedMinWidth: InfiniteTableComputedColumn<any>['computedMinWidth'];
221
- computedMaxWidth: InfiniteTableComputedColumn<any>['computedMaxWidth'];
222
- };
223
- type FlexComputeResizeParams = {
224
- items: FlexComputeResizeItem[];
225
- columnSizing: InfiniteTablePropColumnSizing;
226
- availableSize: number;
227
- reservedWidth: number;
228
- dragHandlePositionAfter: number;
229
- dragHandleOffset: number;
230
- shareSpaceOnResize: boolean;
231
- };
232
-
233
- type FlexComputeGroupResizeParams = Omit<
234
- FlexComputeResizeParams,
235
- 'shareSpaceOnResize' | 'items'
236
- > & {
237
- columnGroupSize: number;
238
- items: (FlexComputeResizeItem & { resizable: boolean })[];
239
- };
240
-
241
- export type FlexComputeResizeResult = {
242
- reservedWidth: number;
243
- adjustedDiff: number;
244
- maxReached: boolean;
245
- minReached: boolean;
246
- constrained: boolean;
247
- columnSizing: InfiniteTablePropColumnSizing;
248
- };
249
-
250
- export type FlexComputeGroupResizeResult = {
251
- reservedWidth: number;
252
- adjustedDiffs: number[];
253
- adjustedDiff: number;
254
- maxReached: boolean;
255
- minReached: boolean;
256
- constrained: boolean;
257
- columnSizing: InfiniteTablePropColumnSizing;
258
- };
259
-
260
- function resizeClamp(
261
- value: number,
262
- min: number | null,
263
- max: number | null,
264
- direction: 1 | -1,
265
- ): { value: number; clamped: 'min' | 'max' | false; diff: number } {
266
- if (min != null && value <= min) {
267
- return { value: min, clamped: 'min', diff: (value - min) * direction };
268
- }
269
- if (max != null && value >= max) {
270
- return { value: max, clamped: 'max', diff: (max - value) * direction };
271
- }
272
- return { value, clamped: false, diff: 0 };
273
- }
274
-
275
- export const computeResize = (
276
- params: FlexComputeResizeParams,
277
- ): FlexComputeResizeResult => {
278
- const { availableSize, reservedWidth = 0 } = params;
279
-
280
- const columnSizing: InfiniteTablePropColumnSizing = Object.keys(
281
- params.columnSizing,
282
- ).reduce((acc, key) => {
283
- acc[key] = { ...params.columnSizing[key] };
284
- return acc;
285
- }, {} as InfiniteTablePropColumnSizing);
286
-
287
- if (availableSize < 0) {
288
- throw 'The provided availableSize cannot be negative!';
289
- }
290
-
291
- let dragHandleOffset = params.dragHandleOffset;
292
-
293
- const firstIndex = params.dragHandlePositionAfter;
294
- const secondIndex = params.dragHandlePositionAfter + 1;
295
-
296
- const firstItem = params.items[firstIndex];
297
- const secondItem: FlexComputeResizeItem | undefined =
298
- params.items[secondIndex];
299
-
300
- const firstId = firstItem.id;
301
- const secondId = secondItem?.id;
302
-
303
- // the computed width holds the actual size
304
- const firstSize = firstItem.computedWidth;
305
- const firstMinSize = firstItem.computedMinWidth;
306
- const firstMaxSize = firstItem.computedMaxWidth;
307
- // even though if flex is present, we use it to determine which property to put in the result
308
- const firstPropertyToAdjust = firstItem.computedFlex ? 'flex' : 'width';
309
-
310
- const secondSize = secondItem?.computedWidth;
311
- const secondMinSize = secondItem?.computedMinWidth;
312
- const secondMaxSize = secondItem?.computedMaxWidth;
313
- const secondPropertyToAdjust = secondItem?.computedFlex ? 'flex' : 'width';
314
-
315
- let maxReached = false;
316
- let minReached = false;
317
-
318
- const direction = dragHandleOffset > 0 ? 1 : -1;
319
-
320
- let {
321
- value: firstAdjustedSize,
322
- clamped: firstClamped,
323
- diff: firstDiff,
324
- } = resizeClamp(
325
- firstSize + dragHandleOffset,
326
- firstMinSize,
327
- firstMaxSize,
328
- direction,
329
- );
330
-
331
- if (params.shareSpaceOnResize) {
332
- // there's no item on the right side of the handle
333
- if (secondItem == null) {
334
- columnSizing[firstId] = {
335
- ...columnSizing[firstId],
336
- [firstPropertyToAdjust]: firstAdjustedSize,
337
- };
338
-
339
- minReached = firstClamped === 'min';
340
- maxReached = firstClamped === 'max';
341
-
342
- const adjustedDiff = firstAdjustedSize - firstSize;
343
- return {
344
- adjustedDiff,
345
- reservedWidth,
346
- columnSizing,
347
- minReached,
348
- maxReached,
349
- constrained: minReached || maxReached,
350
- };
351
- }
352
- let {
353
- value: secondAdjustedSize,
354
- clamped: secondClamped,
355
- diff: secondDiff,
356
- } = resizeClamp(
357
- secondSize - dragHandleOffset,
358
- secondMinSize,
359
- secondMaxSize,
360
- direction,
361
- );
362
-
363
- if (firstClamped && secondClamped) {
364
- // both are clamped, so decide which one to take
365
- // take the one with the greater diff
366
- if (Math.abs(firstDiff) > Math.abs(secondDiff)) {
367
- // first is smaller, so make second not clamped
368
- secondClamped = false;
369
- } else {
370
- // second is smaller, so make first not clamped
371
- firstClamped = false;
372
- }
373
- }
374
-
375
- if (!firstClamped && !secondClamped) {
376
- //this is the happy case, so all good
377
- } else if (firstClamped) {
378
- const clampResultForSecond = resizeClamp(
379
- secondSize - dragHandleOffset - firstDiff,
380
- secondMinSize,
381
- secondMaxSize,
382
- direction,
383
- );
384
- secondAdjustedSize = clampResultForSecond.value;
385
- secondClamped = clampResultForSecond.clamped;
386
- secondDiff = clampResultForSecond.diff;
387
- } else if (secondClamped) {
388
- const clampResultForFirst = resizeClamp(
389
- firstSize + dragHandleOffset + secondDiff,
390
- firstMinSize,
391
- firstMaxSize,
392
- direction,
393
- );
394
- firstAdjustedSize = clampResultForFirst.value;
395
- firstClamped = clampResultForFirst.clamped;
396
- firstDiff = clampResultForFirst.diff;
397
- }
398
-
399
- columnSizing[firstId] = {
400
- ...columnSizing[firstId],
401
- [firstPropertyToAdjust]: firstAdjustedSize,
402
- };
403
- columnSizing[secondId] = {
404
- ...columnSizing[secondId],
405
- [secondPropertyToAdjust]: secondAdjustedSize,
406
- };
407
-
408
- minReached = firstClamped === 'min' || secondClamped === 'min';
409
- maxReached = firstClamped === 'max' || secondClamped === 'max';
410
- } else {
411
- columnSizing[firstId] = {
412
- ...columnSizing[firstId],
413
- [firstPropertyToAdjust]: firstAdjustedSize,
414
- };
415
-
416
- minReached = firstClamped === 'min';
417
- maxReached = firstClamped === 'max';
418
- }
419
-
420
- const adjustedDiff = firstAdjustedSize - firstSize;
421
- return {
422
- adjustedDiff,
423
- reservedWidth: !params.shareSpaceOnResize
424
- ? reservedWidth - adjustedDiff
425
- : reservedWidth,
426
- columnSizing,
427
- minReached,
428
- maxReached,
429
- constrained: minReached || maxReached,
430
- };
431
- };
432
-
433
- function sum(a: number, b: number) {
434
- return a + b;
435
- }
436
-
437
- function cloneColumnSizing(columnSizing: InfiniteTablePropColumnSizing) {
438
- const newColumnSizing: InfiniteTablePropColumnSizing = Object.keys(
439
- columnSizing,
440
- ).reduce((acc, key) => {
441
- acc[key] = { ...columnSizing[key] };
442
- return acc;
443
- }, {} as InfiniteTablePropColumnSizing);
444
-
445
- return newColumnSizing;
446
- }
447
- export const computeGroupResize = (
448
- params: FlexComputeGroupResizeParams,
449
- ): FlexComputeGroupResizeResult => {
450
- const { availableSize, reservedWidth = 0 } = params;
451
-
452
- const columnSizing: InfiniteTablePropColumnSizing = Object.keys(
453
- params.columnSizing,
454
- ).reduce((acc, key) => {
455
- acc[key] = { ...params.columnSizing[key] };
456
- return acc;
457
- }, {} as InfiniteTablePropColumnSizing);
458
-
459
- if (availableSize < 0) {
460
- throw 'The provided availableSize cannot be negative!';
461
- }
462
-
463
- let dragHandleOffset = params.dragHandleOffset;
464
-
465
- const beforeIndexes = [...new Array(params.columnGroupSize)]
466
- .map((_, index) => params.dragHandlePositionAfter - index)
467
- .reverse();
468
-
469
- const beforeItems = beforeIndexes.map((i) => params.items[i]);
470
-
471
- // the computed width holds the actual size
472
- const beforeSizes = beforeItems.map((item) => item.computedWidth);
473
-
474
- // even though if flex is present, we use it to determine which property to put in the result
475
- const beforePropertiesToAdjust = beforeItems.map((item) =>
476
- item.computedFlex ? 'flex' : 'width',
477
- );
478
-
479
- let unresizableWidth = 0;
480
- const { computedSizes } = computeFlex({
481
- items: beforeItems.map((item) => {
482
- if (item.resizable === false) {
483
- unresizableWidth += item.computedWidth;
484
- }
485
- return {
486
- maxSize: item.computedMaxWidth,
487
- minSize: item.computedMinWidth,
488
- flex: item.resizable ? item.computedWidth : null,
489
- size: 0,
490
- };
491
- }),
492
- computeSpecialSpaceDistribution: true,
493
- availableSize: Math.max(
494
- beforeSizes.reduce(sum, 0) + dragHandleOffset - unresizableWidth,
495
- 0,
496
- ),
497
- });
498
-
499
- const diffsForEachItem = beforeItems.map((item, index) => {
500
- return computedSizes[index] - item.computedWidth;
501
- });
502
-
503
- let groupMinReached = true;
504
- let groupMaxReached = true;
505
- let groupConstrained = true;
506
-
507
- const adjustedDiffs: number[] = [];
508
-
509
- diffsForEachItem.forEach((diff, i) => {
510
- const item = beforeItems[i];
511
-
512
- if (!item.resizable) {
513
- adjustedDiffs.push(0);
514
- return;
515
- }
516
- const propertyToAdjust = beforePropertiesToAdjust[i];
517
- const itemSize = beforeSizes[i];
518
-
519
- const currentColumnSizing = cloneColumnSizing(columnSizing);
520
- const { maxReached, minReached, constrained, adjustedDiff } = computeResize(
521
- {
522
- availableSize: params.availableSize,
523
- reservedWidth: params.reservedWidth,
524
- dragHandleOffset: diff,
525
- // doesn't matter for share space on resize: false
526
- dragHandlePositionAfter: beforeIndexes[i],
527
- shareSpaceOnResize: false,
528
- items: params.items,
529
- columnSizing: currentColumnSizing,
530
- },
531
- );
532
-
533
- columnSizing[item.id] = {
534
- ...currentColumnSizing[item.id],
535
- [propertyToAdjust]: itemSize + adjustedDiff,
536
- };
537
-
538
- adjustedDiffs.push(adjustedDiff);
539
-
540
- if (!maxReached) {
541
- groupMaxReached = false;
542
- }
543
- if (!minReached) {
544
- groupMinReached = false;
545
- }
546
- if (!constrained) {
547
- groupConstrained = false;
548
- }
549
- });
550
-
551
- const adjustedDiff = adjustedDiffs.reduce(sum, 0);
552
-
553
- return {
554
- minReached: groupMinReached,
555
- maxReached: groupMaxReached,
556
- constrained: groupConstrained,
557
- adjustedDiffs,
558
- adjustedDiff,
559
- columnSizing,
560
- reservedWidth: reservedWidth - adjustedDiff,
561
- };
562
- };