@infinite-table/infinite-react 0.4.13 → 0.5.1

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 +102 -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,10 @@
1
+ import { InfiniteTableGroupColumnBase } from '../../components/InfiniteTable/types';
2
+ import { KeyOfNoSymbol } from '../../components/InfiniteTable/types/Utility';
3
+
4
+ export type GroupKeyType<T extends any = any> = T; //string | number | symbol | null | undefined;
5
+
6
+ export type GroupBy<DataType, KeyType> = {
7
+ field: KeyOfNoSymbol<DataType>;
8
+ toKey?: (value: any, data: DataType) => GroupKeyType<KeyType>;
9
+ column?: Partial<InfiniteTableGroupColumnBase<DataType>>;
10
+ };
@@ -0,0 +1,4 @@
1
+ const join = (...args: (string | number | void | null)[]): string =>
2
+ args.filter((x) => !!`${x}`).join(' ');
3
+
4
+ export { join };
@@ -0,0 +1,21 @@
1
+ export function arrayIntersection<T>(...arrays: T[][]): T[] {
2
+ if (!arrays.length) {
3
+ return [] as T[];
4
+ }
5
+ const map = new Map();
6
+ arrays.forEach((arr) => {
7
+ for (let i = 0, len = arr.length; i < len; i++) {
8
+ const item = arr[i];
9
+ const count = map.get(item) ?? 0;
10
+
11
+ map.set(item, count + 1);
12
+ }
13
+
14
+ return map;
15
+ });
16
+
17
+ const len = arrays.length;
18
+ return arrays[0].filter((x: T) => {
19
+ return map.get(x) === len;
20
+ });
21
+ }
@@ -0,0 +1,2 @@
1
+ declare const minified: boolean;
2
+ export default minified;
@@ -0,0 +1,6 @@
1
+ function checkMinified(arg) {
2
+ /* this is a simple comment */
3
+ }
4
+
5
+ export default checkMinified.toString() !=
6
+ 'function checkMinified(arg) { /* this is a simple comment */ }';
@@ -0,0 +1,151 @@
1
+ import TYPES from './sortTypes';
2
+
3
+ export type SortDir = 1 | -1;
4
+
5
+ export type MultisortInfo<T> = {
6
+ /**
7
+ * The sorting direction
8
+ */
9
+ dir: SortDir;
10
+
11
+ /**
12
+ * for now 'string' and 'number' are known types, meaning they have
13
+ * sort functions already implemented
14
+ */
15
+ type?: string;
16
+
17
+ fn?: (a: any, b: any) => number;
18
+
19
+ /**
20
+ * a property whose value to use for sorting on the array items
21
+ */
22
+ field?: keyof T;
23
+
24
+ /**
25
+ * or a function to retrieve the item value to use for sorting
26
+ */
27
+ valueGetter?: (item: T) => any;
28
+ };
29
+
30
+ export type MultisortInfoAllowMultipleFields<T> = Omit<
31
+ MultisortInfo<T>,
32
+ 'field'
33
+ > & {
34
+ field?: keyof T | (keyof T)[];
35
+ };
36
+
37
+ export interface MultisortFn<T> {
38
+ (sortInfo: MultisortInfo<T>[], array: T[]): T[];
39
+ knownTypes: {
40
+ [key: string]: (first: T, second: T) => number;
41
+ };
42
+ }
43
+
44
+ export const multisort = <T>(
45
+ sortInfo: MultisortInfoAllowMultipleFields<T>[],
46
+ array: T[],
47
+ get?: (item: any) => T,
48
+ ): T[] => {
49
+ const plainSortInfo = sortInfo
50
+ .map((sortInfo) => {
51
+ if (Array.isArray(sortInfo.field)) {
52
+ return sortInfo.field.map((field) => {
53
+ return { ...sortInfo, field } as MultisortInfo<T>;
54
+ });
55
+ }
56
+
57
+ return sortInfo as MultisortInfo<T>;
58
+ })
59
+ .flat();
60
+
61
+ array.sort(getMultisortFunction<T>(plainSortInfo, get));
62
+
63
+ return array;
64
+ };
65
+
66
+ multisort.knownTypes = TYPES;
67
+
68
+ const getSingleSortFunction = <T>(info: MultisortInfo<T>) => {
69
+ if (!info) {
70
+ return;
71
+ }
72
+
73
+ const field = info.field;
74
+ const valueGetter = info.valueGetter;
75
+ const dir = info.dir < 0 ? -1 : info.dir > 0 ? 1 : 0;
76
+
77
+ if (!dir) {
78
+ return;
79
+ }
80
+
81
+ let fn = info.fn;
82
+
83
+ if (!fn && info.type) {
84
+ fn = multisort.knownTypes[info.type];
85
+ if (!fn) {
86
+ console.warn(
87
+ `Unknown sort type "${info.type}" - please pass one of ${Object.keys(
88
+ multisort.knownTypes,
89
+ ).join(', ')}`,
90
+ );
91
+ }
92
+ }
93
+
94
+ if (!fn) {
95
+ fn = TYPES.string;
96
+ }
97
+
98
+ return (first: T, second: T) => {
99
+ const a = valueGetter ? valueGetter(first) : field ? first[field] : first;
100
+ const b = valueGetter
101
+ ? valueGetter(second)
102
+ : field
103
+ ? second[field]
104
+ : second;
105
+
106
+ return dir * fn!(a, b);
107
+ };
108
+ };
109
+
110
+ const getSortFunctions = <T>(sortInfo: MultisortInfo<T>[]) => {
111
+ return sortInfo
112
+ .map(getSingleSortFunction)
113
+ .filter((fn) => fn instanceof Function);
114
+ };
115
+
116
+ const getMultisortFunction = <T>(
117
+ sortInfo: MultisortInfo<T>[],
118
+ get?: (item: any) => T,
119
+ ) => {
120
+ const fns = getSortFunctions<T>(sortInfo);
121
+
122
+ return (first: T, second: T): number => {
123
+ if (get) {
124
+ first = get(first);
125
+ second = get(second);
126
+ }
127
+
128
+ let result = 0;
129
+ let i = 0;
130
+ let fn;
131
+
132
+ const len = fns.length;
133
+
134
+ for (; i < len; i++) {
135
+ fn = fns[i];
136
+ if (!fn) {
137
+ continue;
138
+ }
139
+
140
+ result = fn(first, second);
141
+
142
+ if (result !== 0) {
143
+ return result;
144
+ }
145
+ }
146
+
147
+ return result;
148
+ };
149
+ };
150
+
151
+ export { getMultisortFunction, getSortFunctions };
@@ -0,0 +1,25 @@
1
+ export const numberComparator = function (
2
+ first: number,
3
+ second: number,
4
+ ): number {
5
+ return first - second;
6
+ };
7
+
8
+ export const stringComparator = function (
9
+ first: string,
10
+ second: string,
11
+ ): number {
12
+ first = `${first}`;
13
+ second = `${second}`;
14
+
15
+ return first.localeCompare(second);
16
+ };
17
+
18
+ export const defaultSortTypes: {
19
+ [key: string]: (first: any, second: any) => number;
20
+ } = {
21
+ number: numberComparator,
22
+ string: stringComparator,
23
+ };
24
+
25
+ export default defaultSortTypes;
@@ -0,0 +1,92 @@
1
+ # Row status:
2
+
3
+ 1. inspired by react-query?
4
+
5
+ - https://react-query.tanstack.com/guides/queries
6
+ - familiar for react devs
7
+
8
+ 2. HTTP status codes? https://developer.mozilla.org/en-US/docs/Web/HTTP/Status
9
+
10
+ - too much?
11
+
12
+ # Row vs Cell Status vs Column Status
13
+
14
+ - should we support independent cell status or just derive from row status?
15
+ - column status?
16
+ - group status?
17
+
18
+ # Error status
19
+
20
+ - how to keep error info?
21
+ - per row: unnecessary overhead as most errors will be per row batch
22
+ - er batch: how to keep it in sync with the individual rows?
23
+
24
+ # Retry/refetch info
25
+
26
+ - do we even (intend to) support this?
27
+ - if yes, do we want to keep track of it (ex. refetching, 3. try, etc)?
28
+
29
+ # add statusin rowInfo object or in some state map?
30
+
31
+ - support for:
32
+ - lazy loaded normal row
33
+ - lazy loaded group (children) rows
34
+
35
+ // batched lazy loading
36
+
37
+ // per batch
38
+ RowInfo.ts:
39
+ status: not_loaded
40
+ directChildrenStatus: not_loaded
41
+ allChildrenStatus: not_loaded
42
+
43
+ RowInfo.ts:
44
+ status: loading
45
+ directChildrenStatus: not_loaded
46
+ allChildrenStatus: not_loaded
47
+
48
+ RowInfo.ts:
49
+ status: available
50
+ directChildrenStatus: not_loaded
51
+ allChildrenStatus: not_loaded
52
+
53
+ // stable viewport
54
+
55
+ $$
56
+ expand
57
+
58
+ RowInfo.ts:
59
+ status: available
60
+ directChildrenStatus: loading
61
+ allChildrenStatus: not_loaded
62
+
63
+ // stable viewport
64
+
65
+ RowInfo.ts:
66
+ status: available
67
+ directChildrenStatus: available
68
+ allChildrenStatus: not_loaded
69
+
70
+ // 1. child Row Info
71
+ RowInfo.ts:
72
+ status: available
73
+ addDirectChildrenStatus: not_loaded
74
+ allChildrenStatus: not_loaded
75
+
76
+
77
+ // type status =
78
+ 'available' | // rowInfo.data !== null
79
+ 'loading' | // status === 'loading'
80
+ 'not_loaded' | // rowInfo.data === null
81
+ 'error' // rowInfo.errorInfo !== null
82
+
83
+ Available status:
84
+ data available
85
+ all direct children data available
86
+ all children data available
87
+ Loading status:
88
+
89
+
90
+ $$
91
+
92
+ // differentiate between no_data & loading_Data??
@@ -0,0 +1,34 @@
1
+ import { Point, PointCoords } from './Point';
2
+
3
+ import { PolyWithPoints } from './PolyWithPoints';
4
+ import { ArrayWithAtLeast3 } from './types';
5
+
6
+ export class ConvexPoly extends PolyWithPoints {
7
+ points!: ArrayWithAtLeast3<Point>;
8
+
9
+ static clone(points: ArrayWithAtLeast3<PointCoords>) {
10
+ return new ConvexPoly(points);
11
+ }
12
+
13
+ constructor(points: ArrayWithAtLeast3<PointCoords>) {
14
+ super();
15
+ this.points = points.map(Point.clone) as ArrayWithAtLeast3<Point>;
16
+ }
17
+
18
+ getPoints() {
19
+ return this.points as ArrayWithAtLeast3<PointCoords>;
20
+ }
21
+
22
+ shift(
23
+ shiftOptions:
24
+ | { top: number }
25
+ | { top: number; left: number }
26
+ | { left: number },
27
+ ) {
28
+ this.points.forEach((p) => {
29
+ p.shift(shiftOptions);
30
+ });
31
+
32
+ return this;
33
+ }
34
+ }
@@ -0,0 +1,51 @@
1
+ export type PointCoords = {
2
+ top: number;
3
+ left: number;
4
+ };
5
+ export class Point {
6
+ top: PointCoords['top'] = 0;
7
+ left: PointCoords['left'] = 0;
8
+
9
+ static clone(point: PointCoords) {
10
+ return new Point(point);
11
+ }
12
+
13
+ static from(point: PointCoords) {
14
+ return new Point(point);
15
+ }
16
+
17
+ constructor(point: PointCoords) {
18
+ this.left = point.left;
19
+ this.top = point.top;
20
+ }
21
+
22
+ shift(
23
+ shiftOptions:
24
+ | { top: number }
25
+ | { top: number; left: number }
26
+ | { left: number },
27
+ ) {
28
+ if ((shiftOptions as { top: number }).top != null) {
29
+ this.top += (shiftOptions as { top: number }).top;
30
+ }
31
+ if ((shiftOptions as { left: number }).left != null) {
32
+ this.left += (shiftOptions as { left: number }).left;
33
+ }
34
+ return this;
35
+ }
36
+
37
+ getDistanceToPoint(point: PointCoords) {
38
+ const shiftTop = point.top - this.top;
39
+ const shiftLeft = point.left - this.left;
40
+
41
+ return {
42
+ top: shiftTop,
43
+ left: shiftLeft,
44
+ };
45
+ }
46
+ }
47
+
48
+ export const originPoint: PointCoords = {
49
+ left: 0,
50
+ top: 0,
51
+ };
@@ -0,0 +1,52 @@
1
+ import { PointCoords } from './Point';
2
+ import { polyContainsPoint } from './polyContainsPoint';
3
+ import { ArrayWithAtLeast3 } from './types';
4
+
5
+ export abstract class PolyWithPoints {
6
+ abstract getPoints(): ArrayWithAtLeast3<PointCoords>;
7
+
8
+ abstract shift(
9
+ shiftOptions:
10
+ | { top: number }
11
+ | { top: number; left: number }
12
+ | { left: number },
13
+ ): PolyWithPoints;
14
+
15
+ containsPoint(point: PointCoords): boolean {
16
+ return polyContainsPoint(this.getPoints(), point);
17
+ }
18
+ contains(poly: PolyWithPoints): boolean {
19
+ const points = poly.getPoints();
20
+
21
+ for (let i = 0, len = points.length; i < len; i++) {
22
+ if (!this.containsPoint(points[i])) {
23
+ return false;
24
+ }
25
+ }
26
+
27
+ return true;
28
+ }
29
+ intersects(r: PolyWithPoints): boolean {
30
+ return this.privateIntersects(r, false);
31
+ }
32
+
33
+ privateIntersects(r: PolyWithPoints, skipOtherCheck: boolean): boolean {
34
+ const pointsOfR = r.getPoints();
35
+ for (let i = 0, len = pointsOfR.length; i < len; i++) {
36
+ if (this.containsPoint(pointsOfR[i])) {
37
+ return true;
38
+ }
39
+ }
40
+ if (skipOtherCheck) {
41
+ return false;
42
+ }
43
+ // there is another case, when we have 2 rectangles, r1, and r2
44
+ // and r2 is fully inside r1 - intersects should treat this case as well
45
+
46
+ // calling r2.intersects(r1) should return true
47
+ // but the above is not enough for this
48
+
49
+ // so we execute the reverse as well
50
+ return r.privateIntersects(this, true);
51
+ }
52
+ }
@@ -0,0 +1,98 @@
1
+ import { ConvexPoly } from './ConvexPoly';
2
+ import { Point, PointCoords } from './Point';
3
+ import { PolyWithPoints } from './PolyWithPoints';
4
+
5
+ type CoordsWithSize = {
6
+ width: number;
7
+ height: number;
8
+ left: number;
9
+ top: number;
10
+ };
11
+ type CoordsNoSize = {
12
+ right: number;
13
+ bottom: number;
14
+ left: number;
15
+ top: number;
16
+ };
17
+
18
+ export type RectangleCoords = CoordsWithSize | CoordsNoSize;
19
+ export class Rectangle extends PolyWithPoints {
20
+ top: number = 0;
21
+ left: number = 0;
22
+
23
+ width: number = 0;
24
+ height: number = 0;
25
+
26
+ static fromDOMRect(rect: DOMRect) {
27
+ return new Rectangle(rect);
28
+ }
29
+
30
+ static clone(rect: DOMRect | Rectangle | RectangleCoords) {
31
+ return new Rectangle(rect);
32
+ }
33
+
34
+ static from(rect: DOMRect | Rectangle | RectangleCoords) {
35
+ return Rectangle.clone(rect);
36
+ }
37
+
38
+ constructor(coordsAndSize: RectangleCoords) {
39
+ super();
40
+ if (!coordsAndSize) {
41
+ debugger;
42
+ }
43
+ this.top = coordsAndSize.top;
44
+ this.left = coordsAndSize.left;
45
+
46
+ if (typeof (coordsAndSize as CoordsWithSize).width === 'number') {
47
+ this.width = (coordsAndSize as CoordsWithSize).width;
48
+ this.height = (coordsAndSize as CoordsWithSize).height;
49
+ } else {
50
+ this.width = (coordsAndSize as CoordsNoSize).right - coordsAndSize.left;
51
+ this.height = (coordsAndSize as CoordsNoSize).bottom - coordsAndSize.top;
52
+ }
53
+ }
54
+
55
+ containsPoint(p: PointCoords) {
56
+ return new ConvexPoly(this.getPoints()).containsPoint(p);
57
+ }
58
+
59
+ getTopLeft() {
60
+ return { left: this.left, top: this.top };
61
+ }
62
+
63
+ getTopRight() {
64
+ return { left: this.left + this.width, top: this.top };
65
+ }
66
+
67
+ getBottomLeft() {
68
+ return { left: this.left, top: this.top + this.height };
69
+ }
70
+
71
+ getBottomRight() {
72
+ return { left: this.left + this.width, top: this.top + this.height };
73
+ }
74
+
75
+ getPoints() {
76
+ return [
77
+ this.getTopLeft(),
78
+ this.getTopRight(),
79
+ this.getBottomLeft(),
80
+ this.getBottomRight(),
81
+ ].map(Point.from) as [Point, Point, Point, Point];
82
+ }
83
+
84
+ shift(
85
+ shiftOptions:
86
+ | { top: number }
87
+ | { top: number; left: number }
88
+ | { left: number },
89
+ ) {
90
+ if ((shiftOptions as { top: number }).top != null) {
91
+ this.top += (shiftOptions as { top: number }).top;
92
+ }
93
+ if ((shiftOptions as { left: number }).left != null) {
94
+ this.left += (shiftOptions as { left: number }).left;
95
+ }
96
+ return this;
97
+ }
98
+ }
@@ -0,0 +1,16 @@
1
+ import { ConvexPoly } from './ConvexPoly';
2
+ import { PointCoords } from './Point';
3
+ import { ArrayWith3 } from './types';
4
+
5
+ type PointCoordsTimes3 = ArrayWith3<PointCoords>;
6
+
7
+ export class Triangle extends ConvexPoly {
8
+ // uncommenting this here breaks our tests - WHAT????
9
+ // it's just narrowing down the type of the points member variable
10
+ // - this should not introduce any change in behavior!!! however, TS is crazy about this one
11
+ // points!: PointTimes3;
12
+
13
+ constructor(points: PointCoordsTimes3) {
14
+ super(points.slice(0, 3) as PointCoordsTimes3);
15
+ }
16
+ }