@rowsncolumns/grid 9.0.4 → 13.2.33

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 (208) hide show
  1. package/LICENSE.md +100 -0
  2. package/Readme.md +53 -59
  3. package/dist/cjs/Cell.d.ts +35 -0
  4. package/dist/cjs/Cell.d.ts.map +1 -0
  5. package/dist/cjs/Cell.js +29 -0
  6. package/dist/{CellOverlay.d.ts → cjs/CellOverlay.d.ts} +5 -5
  7. package/dist/cjs/CellOverlay.d.ts.map +1 -0
  8. package/dist/cjs/CellOverlay.js +126 -0
  9. package/dist/cjs/Context.d.ts +8 -0
  10. package/dist/cjs/Context.d.ts.map +1 -0
  11. package/dist/cjs/Context.js +13 -0
  12. package/dist/{FillHandle.d.ts → cjs/FillHandle.d.ts} +2 -1
  13. package/dist/cjs/FillHandle.d.ts.map +1 -0
  14. package/dist/cjs/FillHandle.js +26 -0
  15. package/dist/cjs/Grid.d.ts +558 -0
  16. package/dist/cjs/Grid.d.ts.map +1 -0
  17. package/dist/cjs/Grid.js +2446 -0
  18. package/dist/{GridLine.d.ts → cjs/GridLine.d.ts} +2 -1
  19. package/dist/cjs/GridLine.d.ts.map +1 -0
  20. package/dist/cjs/GridLine.js +10 -0
  21. package/dist/cjs/Image.d.ts +11 -0
  22. package/dist/cjs/Image.d.ts.map +1 -0
  23. package/dist/cjs/Image.js +57 -0
  24. package/dist/cjs/MemoizedGrid.d.ts +49 -0
  25. package/dist/cjs/MemoizedGrid.d.ts.map +1 -0
  26. package/dist/cjs/MemoizedGrid.js +105 -0
  27. package/dist/cjs/Selection.d.ts +5 -0
  28. package/dist/cjs/Selection.d.ts.map +1 -0
  29. package/dist/cjs/Selection.js +10 -0
  30. package/dist/{helpers.d.ts → cjs/helpers.d.ts} +59 -39
  31. package/dist/cjs/helpers.d.ts.map +1 -0
  32. package/dist/cjs/helpers.js +1409 -0
  33. package/dist/{hooks → cjs/hooks}/useCopyPaste.d.ts +3 -2
  34. package/dist/cjs/hooks/useCopyPaste.d.ts.map +1 -0
  35. package/dist/cjs/hooks/useCopyPaste.js +230 -0
  36. package/dist/{hooks → cjs/hooks}/useEditable.d.ts +21 -8
  37. package/dist/cjs/hooks/useEditable.d.ts.map +1 -0
  38. package/dist/cjs/hooks/useEditable.js +491 -0
  39. package/dist/{hooks → cjs/hooks}/useFilter.d.ts +3 -2
  40. package/dist/cjs/hooks/useFilter.d.ts.map +1 -0
  41. package/dist/cjs/hooks/useFilter.js +97 -0
  42. package/dist/{hooks → cjs/hooks}/useImage.d.ts +1 -0
  43. package/dist/cjs/hooks/useImage.d.ts.map +1 -0
  44. package/dist/cjs/hooks/useImage.js +80 -0
  45. package/dist/{hooks → cjs/hooks}/usePagination.d.ts +3 -2
  46. package/dist/cjs/hooks/usePagination.d.ts.map +1 -0
  47. package/dist/cjs/hooks/usePagination.js +53 -0
  48. package/dist/{hooks → cjs/hooks}/useSizer.d.ts +28 -29
  49. package/dist/cjs/hooks/useSizer.d.ts.map +1 -0
  50. package/dist/cjs/hooks/useSizer.js +176 -0
  51. package/dist/{hooks → cjs/hooks}/useTooltip.d.ts +2 -1
  52. package/dist/cjs/hooks/useTooltip.d.ts.map +1 -0
  53. package/dist/cjs/hooks/useTooltip.js +82 -0
  54. package/dist/{hooks → cjs/hooks}/useUndo.d.ts +2 -1
  55. package/dist/cjs/hooks/useUndo.d.ts.map +1 -0
  56. package/dist/cjs/hooks/useUndo.js +87 -0
  57. package/dist/cjs/index.d.ts +19 -0
  58. package/dist/cjs/index.d.ts.map +1 -0
  59. package/dist/cjs/index.js +29 -0
  60. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
  61. package/dist/{types.d.ts → cjs/types.d.ts} +8 -3
  62. package/dist/cjs/types.d.ts.map +1 -0
  63. package/dist/{types.js → cjs/types.js} +7 -8
  64. package/dist/cjs/utils.d.ts +9 -0
  65. package/dist/cjs/utils.d.ts.map +1 -0
  66. package/dist/cjs/utils.js +58 -0
  67. package/dist/cjs/vitest.config.d.ts +3 -0
  68. package/dist/cjs/vitest.config.d.ts.map +1 -0
  69. package/dist/cjs/vitest.config.js +24 -0
  70. package/dist/esm/Cell.d.ts +35 -0
  71. package/dist/esm/Cell.d.ts.map +1 -0
  72. package/dist/esm/Cell.js +24 -0
  73. package/dist/esm/CellOverlay.d.ts +21 -0
  74. package/dist/esm/CellOverlay.d.ts.map +1 -0
  75. package/dist/esm/CellOverlay.js +120 -0
  76. package/dist/esm/Context.d.ts +8 -0
  77. package/dist/esm/Context.d.ts.map +1 -0
  78. package/dist/esm/Context.js +9 -0
  79. package/dist/esm/FillHandle.d.ts +8 -0
  80. package/dist/esm/FillHandle.d.ts.map +1 -0
  81. package/dist/{FillHandle.js → esm/FillHandle.js} +5 -11
  82. package/dist/esm/Grid.d.ts +558 -0
  83. package/dist/esm/Grid.d.ts.map +1 -0
  84. package/dist/esm/Grid.js +2451 -0
  85. package/dist/esm/GridLine.d.ts +5 -0
  86. package/dist/esm/GridLine.d.ts.map +1 -0
  87. package/dist/esm/GridLine.js +7 -0
  88. package/dist/esm/Image.d.ts +11 -0
  89. package/dist/esm/Image.d.ts.map +1 -0
  90. package/dist/esm/Image.js +53 -0
  91. package/dist/esm/MemoizedGrid.d.ts +49 -0
  92. package/dist/esm/MemoizedGrid.d.ts.map +1 -0
  93. package/dist/esm/MemoizedGrid.js +98 -0
  94. package/dist/esm/Selection.d.ts +5 -0
  95. package/dist/esm/Selection.d.ts.map +1 -0
  96. package/dist/esm/Selection.js +7 -0
  97. package/dist/esm/helpers.d.ts +281 -0
  98. package/dist/esm/helpers.d.ts.map +1 -0
  99. package/dist/esm/helpers.js +1260 -0
  100. package/dist/esm/hooks/useCopyPaste.d.ts +53 -0
  101. package/dist/esm/hooks/useCopyPaste.d.ts.map +1 -0
  102. package/dist/{hooks → esm/hooks}/useCopyPaste.js +40 -46
  103. package/dist/esm/hooks/useEditable.d.ts +253 -0
  104. package/dist/esm/hooks/useEditable.d.ts.map +1 -0
  105. package/dist/esm/hooks/useEditable.js +482 -0
  106. package/dist/esm/hooks/useFilter.d.ts +69 -0
  107. package/dist/esm/hooks/useFilter.d.ts.map +1 -0
  108. package/dist/{hooks → esm/hooks}/useFilter.js +22 -42
  109. package/dist/esm/hooks/useImage.d.ts +13 -0
  110. package/dist/esm/hooks/useImage.d.ts.map +1 -0
  111. package/dist/esm/hooks/useImage.js +76 -0
  112. package/dist/esm/hooks/usePagination.d.ts +69 -0
  113. package/dist/esm/hooks/usePagination.d.ts.map +1 -0
  114. package/dist/esm/hooks/usePagination.js +47 -0
  115. package/dist/esm/hooks/useSizer.d.ts +114 -0
  116. package/dist/esm/hooks/useSizer.d.ts.map +1 -0
  117. package/dist/esm/hooks/useSizer.js +176 -0
  118. package/dist/esm/hooks/useTooltip.d.ts +43 -0
  119. package/dist/esm/hooks/useTooltip.d.ts.map +1 -0
  120. package/dist/esm/hooks/useTooltip.js +80 -0
  121. package/dist/esm/hooks/useUndo.d.ts +36 -0
  122. package/dist/esm/hooks/useUndo.d.ts.map +1 -0
  123. package/dist/{hooks → esm/hooks}/useUndo.js +16 -25
  124. package/dist/esm/index.d.ts +19 -0
  125. package/dist/esm/index.d.ts.map +1 -0
  126. package/dist/esm/index.js +17 -0
  127. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
  128. package/dist/esm/types.d.ts +70 -0
  129. package/dist/esm/types.d.ts.map +1 -0
  130. package/dist/esm/types.js +68 -0
  131. package/dist/esm/utils.d.ts +9 -0
  132. package/dist/esm/utils.d.ts.map +1 -0
  133. package/dist/esm/utils.js +104 -0
  134. package/dist/esm/vitest.config.d.ts +3 -0
  135. package/dist/esm/vitest.config.d.ts.map +1 -0
  136. package/dist/esm/vitest.config.js +22 -0
  137. package/package.json +28 -29
  138. package/dist/Cell.d.ts +0 -23
  139. package/dist/Cell.js +0 -55
  140. package/dist/Cell.js.map +0 -1
  141. package/dist/CellOverlay.js +0 -116
  142. package/dist/CellOverlay.js.map +0 -1
  143. package/dist/FillHandle.js.map +0 -1
  144. package/dist/Grid.d.ts +0 -385
  145. package/dist/Grid.js +0 -1684
  146. package/dist/Grid.js.map +0 -1
  147. package/dist/GridLine.js +0 -13
  148. package/dist/GridLine.js.map +0 -1
  149. package/dist/Image.d.ts +0 -8
  150. package/dist/Image.js +0 -50
  151. package/dist/Image.js.map +0 -1
  152. package/dist/Selection.d.ts +0 -4
  153. package/dist/Selection.js +0 -9
  154. package/dist/Selection.js.map +0 -1
  155. package/dist/helpers.js +0 -1033
  156. package/dist/helpers.js.map +0 -1
  157. package/dist/hooks/useCopyPaste.js.map +0 -1
  158. package/dist/hooks/useEditable.js +0 -477
  159. package/dist/hooks/useEditable.js.map +0 -1
  160. package/dist/hooks/useFilter.js.map +0 -1
  161. package/dist/hooks/useImage.js +0 -42
  162. package/dist/hooks/useImage.js.map +0 -1
  163. package/dist/hooks/usePagination.js +0 -73
  164. package/dist/hooks/usePagination.js.map +0 -1
  165. package/dist/hooks/useSelection.d.ts +0 -175
  166. package/dist/hooks/useSelection.js +0 -982
  167. package/dist/hooks/useSelection.js.map +0 -1
  168. package/dist/hooks/useSizer.js +0 -150
  169. package/dist/hooks/useSizer.js.map +0 -1
  170. package/dist/hooks/useTooltip.js +0 -106
  171. package/dist/hooks/useTooltip.js.map +0 -1
  172. package/dist/hooks/useTouch.d.ts +0 -21
  173. package/dist/hooks/useTouch.js +0 -73
  174. package/dist/hooks/useTouch.js.map +0 -1
  175. package/dist/hooks/useUndo.js.map +0 -1
  176. package/dist/index.d.ts +0 -25
  177. package/dist/index.js +0 -61
  178. package/dist/index.js.map +0 -1
  179. package/dist/types.js.map +0 -1
  180. package/dist/utils.d.ts +0 -8
  181. package/dist/utils.js +0 -153
  182. package/dist/utils.js.map +0 -1
  183. package/src/Cell.tsx +0 -100
  184. package/src/CellOverlay.tsx +0 -191
  185. package/src/FillHandle.tsx +0 -37
  186. package/src/Grid.tsx +0 -2677
  187. package/src/GridLine.tsx +0 -23
  188. package/src/Image.tsx +0 -43
  189. package/src/Selection.tsx +0 -9
  190. package/src/helpers.ts +0 -1455
  191. package/src/hooks/useCopyPaste.ts +0 -265
  192. package/src/hooks/useEditable.tsx +0 -945
  193. package/src/hooks/useFilter.tsx +0 -233
  194. package/src/hooks/useImage.ts +0 -57
  195. package/src/hooks/usePagination.tsx +0 -153
  196. package/src/hooks/useSelection.ts +0 -1440
  197. package/src/hooks/useSizer.ts +0 -312
  198. package/src/hooks/useTooltip.tsx +0 -172
  199. package/src/hooks/useTouch.ts +0 -116
  200. package/src/hooks/useUndo.ts +0 -134
  201. package/src/index.tsx +0 -46
  202. package/src/tests/Grid.spec.tsx +0 -47
  203. package/src/tests/helpers.test.ts +0 -292
  204. package/src/tests/usePagination.test.ts +0 -28
  205. package/src/tests/useSelection.test.ts +0 -27
  206. package/src/tests/useUndo.test.ts +0 -73
  207. package/src/types.ts +0 -69
  208. package/src/utils.tsx +0 -287
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = require("react");
5
+ // Global cache to share images across all component instances
6
+ var imageCache = new Map();
7
+ var loadImage = function (url, crossOrigin) {
8
+ var existing = imageCache.get(url);
9
+ if (existing) {
10
+ return existing;
11
+ }
12
+ var img = new Image();
13
+ img.crossOrigin = crossOrigin || "anonymous";
14
+ var entry = {
15
+ image: img,
16
+ status: "loading",
17
+ width: 0,
18
+ height: 0,
19
+ subscribers: new Set(),
20
+ };
21
+ imageCache.set(url, entry);
22
+ var onload = function () {
23
+ entry.status = "loaded";
24
+ entry.width = img.width;
25
+ entry.height = img.height;
26
+ entry.subscribers.forEach(function (callback) { return callback(entry); });
27
+ };
28
+ var onerror = function () {
29
+ entry.status = "failed";
30
+ entry.subscribers.forEach(function (callback) { return callback(entry); });
31
+ };
32
+ img.addEventListener("load", onload);
33
+ img.addEventListener("error", onerror);
34
+ img.src = url;
35
+ return entry;
36
+ };
37
+ var useImage = function (_a) {
38
+ var url = _a.url, crossOrigin = _a.crossOrigin;
39
+ var _b = tslib_1.__read((0, react_1.useState)(function () {
40
+ if (!url) {
41
+ return {
42
+ image: undefined,
43
+ status: "loading",
44
+ width: 0,
45
+ height: 0,
46
+ };
47
+ }
48
+ var entry = loadImage(url, crossOrigin);
49
+ return {
50
+ image: entry.status === "loaded" ? entry.image : undefined,
51
+ status: entry.status,
52
+ width: entry.width,
53
+ height: entry.height,
54
+ };
55
+ }), 2), state = _b[0], setState = _b[1];
56
+ (0, react_1.useEffect)(function () {
57
+ if (!url)
58
+ return;
59
+ var entry = loadImage(url, crossOrigin);
60
+ var updateState = function (entry) {
61
+ setState({
62
+ image: entry.status === "loaded" ? entry.image : undefined,
63
+ status: entry.status,
64
+ width: entry.width,
65
+ height: entry.height,
66
+ });
67
+ };
68
+ // Subscribe to updates
69
+ entry.subscribers.add(updateState);
70
+ // If already loaded, update immediately
71
+ if (entry.status !== "loading") {
72
+ updateState(entry);
73
+ }
74
+ return function () {
75
+ entry.subscribers.delete(updateState);
76
+ };
77
+ }, [url, crossOrigin]);
78
+ return state;
79
+ };
80
+ exports.default = useImage;
@@ -5,9 +5,9 @@ export interface PaginationProps {
5
5
  */
6
6
  pageSize: number;
7
7
  /**
8
- * Initial page index. Start from 1
8
+ * Initial current page index. Start from 1
9
9
  */
10
- initialPage?: number;
10
+ initialCurrentPage?: number;
11
11
  /**
12
12
  * Total number of rows
13
13
  */
@@ -66,3 +66,4 @@ export interface PaginationResults {
66
66
  */
67
67
  declare const usePagination: (props: PaginationProps) => PaginationResults;
68
68
  export default usePagination;
69
+ //# sourceMappingURL=usePagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePagination.d.ts","sourceRoot":"","sources":["../../../hooks/usePagination.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,SAAS,CAAC,EACN,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAAC,GAClC,KAAK,CAAC,cAAc,CAAC,wBAAwB,CAAC,CAAC;CACpD;AAED,MAAM,MAAM,wBAAwB,GAAG,IAAI,CACzC,iBAAiB,EACjB,qBAAqB,CACtB,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC;IACrC;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;OAEG;IACH,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED;;;GAGG;AACH,QAAA,MAAM,aAAa,GAAI,OAAO,eAAe,KAAG,iBAsC/C,CAAC;AAuCF,eAAe,aAAa,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = tslib_1.__importStar(require("react"));
5
+ /**
6
+ * Pagination hook
7
+ * @param props
8
+ */
9
+ var usePagination = function (props) {
10
+ var _a = props.initialCurrentPage, initialCurrentPage = _a === void 0 ? 1 : _a, _b = props.pageSize, pageSize = _b === void 0 ? 10 : _b, _c = props.total, total = _c === void 0 ? 0 : _c, onChange = props.onChange, _d = props.component, component = _d === void 0 ? PaginationComponent : _d;
11
+ var _e = tslib_1.__read((0, react_1.useState)(initialCurrentPage), 2), currentPage = _e[0], setCurrentPage = _e[1];
12
+ var totalPages = Math.ceil(total / pageSize);
13
+ var nextPage = function () {
14
+ return setCurrentPage(function (prev) { return Math.min(prev + 1, totalPages); });
15
+ };
16
+ var prevPage = function () { return setCurrentPage(function (prev) { return Math.max(prev - 1, 1); }); };
17
+ var goToFirst = function () { return setCurrentPage(1); };
18
+ var goToLast = function () { return setCurrentPage(totalPages); };
19
+ var goToPage = function (page) { return setCurrentPage(page); };
20
+ (0, react_1.useEffect)(function () {
21
+ onChange && onChange(currentPage);
22
+ }, [currentPage]);
23
+ var pageProps = {
24
+ currentPage: currentPage,
25
+ totalPages: totalPages,
26
+ nextPage: nextPage,
27
+ prevPage: prevPage,
28
+ goToFirst: goToFirst,
29
+ goToLast: goToLast,
30
+ goToPage: goToPage,
31
+ pageSize: pageSize,
32
+ };
33
+ var paginationComponent = react_1.default.createElement(component, pageProps);
34
+ return tslib_1.__assign({ paginationComponent: paginationComponent }, pageProps);
35
+ };
36
+ var PaginationComponent = function (_a) {
37
+ var currentPage = _a.currentPage, goToFirst = _a.goToFirst, goToLast = _a.goToLast, goToPage = _a.goToPage, totalPages = _a.totalPages, nextPage = _a.nextPage, prevPage = _a.prevPage;
38
+ var pages = [];
39
+ var _loop_1 = function (i) {
40
+ var isActive = currentPage === i;
41
+ pages.push(react_1.default.createElement("button", { onClick: function () { return goToPage(i); } }, isActive ? react_1.default.createElement("strong", null, i) : i));
42
+ };
43
+ for (var i = 1; i <= totalPages; i++) {
44
+ _loop_1(i);
45
+ }
46
+ return (react_1.default.createElement("div", null,
47
+ react_1.default.createElement("button", { onClick: goToFirst, disabled: currentPage === 1 }, "First page"),
48
+ react_1.default.createElement("button", { onClick: prevPage, disabled: currentPage === 1 }, "Prev page"),
49
+ pages,
50
+ react_1.default.createElement("button", { onClick: nextPage, disabled: currentPage === totalPages }, "Next page"),
51
+ react_1.default.createElement("button", { onClick: goToLast, disabled: currentPage === totalPages }, "Last page")));
52
+ };
53
+ exports.default = usePagination;
@@ -1,6 +1,6 @@
1
- import React from "react";
2
- import { ViewPortProps, GridRef, CellInterface, ItemSizer } from "./../Grid";
3
- import { HiddenType } from "./../helpers";
1
+ import type React from "react";
2
+ import type { GridRef, ViewPortProps } from "./../Grid";
3
+ import type { HiddenType } from "./../helpers";
4
4
  export interface IProps {
5
5
  /**
6
6
  * Used to access grid functions
@@ -9,15 +9,17 @@ export interface IProps {
9
9
  /**
10
10
  * Value getter for a cell
11
11
  */
12
- getValue: (cell: CellInterface) => any;
12
+ getTextFormat?: (rowIndex: number, columnIndex: number) => any;
13
13
  /**
14
14
  * Visible rows when the grid is first visible, Since we do not know how many rows can fit
15
15
  */
16
16
  initialVisibleRows?: number;
17
+ initialVisibleColumns?: number;
17
18
  /**
18
19
  * Restrict column width by this number
19
20
  */
20
- minColumnWidth?: number;
21
+ minColumnDimension?: number;
22
+ minRowDimension?: number;
21
23
  /**
22
24
  * Cell padding, used for width calculation
23
25
  */
@@ -49,14 +51,11 @@ export interface IProps {
49
51
  * No of rows in teh grid
50
52
  */
51
53
  rowCount?: number;
54
+ columnCount?: number;
52
55
  /**
53
56
  * Enable autoresize
54
57
  */
55
58
  autoResize?: boolean;
56
- /**
57
- * Map of index to size
58
- */
59
- columnSizes?: SizeType;
60
59
  /**
61
60
  * Hidden rows
62
61
  */
@@ -69,6 +68,7 @@ export interface IProps {
69
68
  * Number of frozen rows
70
69
  */
71
70
  frozenRows?: number;
71
+ frozenColumns?: number;
72
72
  /**
73
73
  * Current scaling factor
74
74
  */
@@ -76,27 +76,9 @@ export interface IProps {
76
76
  /**
77
77
  * Get text value
78
78
  */
79
- getText: (config: any) => string | undefined;
79
+ getTextValue?: (rowIndex: number, columnIndex: number) => string | undefined;
80
80
  }
81
81
  export type ResizeStrategy = "lazy" | "full";
82
- export interface AutoResizerResults {
83
- /**
84
- * Column width function consumed by the grid
85
- */
86
- columnWidth?: ItemSizer;
87
- /**
88
- * Callback when viewport is changed
89
- */
90
- onViewChange: (cells: ViewPortProps) => void;
91
- /**
92
- * Get column width based on resize strategy
93
- */
94
- getColumnWidth: (columnIndex: number, scale?: number) => number;
95
- /**
96
- * Text size getter
97
- */
98
- getTextMetrics: (text: string | number) => TextDimensions;
99
- }
100
82
  export interface TextDimensions {
101
83
  width: number;
102
84
  height: number;
@@ -104,6 +86,13 @@ export interface TextDimensions {
104
86
  export type SizeType = {
105
87
  [key: number]: number;
106
88
  };
89
+ export interface TextFormat {
90
+ bold?: boolean;
91
+ spacing?: number;
92
+ fontSize?: number;
93
+ fontFamily?: string;
94
+ italic?: boolean;
95
+ }
107
96
  /**
108
97
  * Auto sizer hook
109
98
  * @param param
@@ -111,5 +100,15 @@ export type SizeType = {
111
100
  * TODO
112
101
  * Dynamically resize columns after user has scrolled down/view port changed ?
113
102
  */
114
- declare const useAutoSizer: ({ gridRef, getValue, initialVisibleRows, cellSpacing, minColumnWidth, timeout, resizeStrategy, rowCount, resizeOnScroll, fontFamily, fontSize, fontWeight, fontStyle, autoResize, columnSizes, frozenRows, scale, isHiddenRow, isHiddenColumn, getText, }: IProps) => AutoResizerResults;
103
+ declare const useAutoSizer: ({ gridRef, getTextFormat, initialVisibleRows, initialVisibleColumns, cellSpacing, minColumnDimension, minRowDimension, timeout, resizeStrategy, rowCount, columnCount, resizeOnScroll, fontFamily, fontSize, fontWeight, fontStyle, autoResize, frozenRows, frozenColumns, scale, isHiddenRow, isHiddenColumn, getTextValue, }: IProps) => {
104
+ getColumnWidth: (columnIndex: number) => number;
105
+ getRowHeight: (rowIndex: number) => number;
106
+ onViewChange: (cells: ViewPortProps) => void;
107
+ getCellDimensions: (rowIndex: number, columnIndex: number, textOverride?: string) => {
108
+ width: number;
109
+ height: number;
110
+ };
111
+ columnWidth?: ((columnIndex: number) => number) | undefined;
112
+ };
115
113
  export default useAutoSizer;
114
+ //# sourceMappingURL=useSizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSizer.d.ts","sourceRoot":"","sources":["../../../hooks/useSizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,KAAK,EAAiB,OAAO,EAAC,aAAa,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,KAAK,EACV,UAAU,EAAC,MAAM,cAAc,CAAC;AAOlC,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,GAAG,CAAC;IAC/D;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,WAAW,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,cAAc,EAAE,UAAU,CAAC;IAC3B;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;CAC9E;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,MAAM,CAAC;AAE7C,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAID;;;;;;GAMG;AACH,QAAA,MAAM,YAAY,GAAI,gUAwBnB,MAAM;kCAgFS,MAAM;6BA8CT,MAAM;0BA0CT,aAAa;kCA/HV,MAAM,eAAe,MAAM,iBAAiB,MAAM;;;;iCAuC/C,MAAM;CAuHvB,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -0,0 +1,176 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = require("react");
5
+ var tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant"));
6
+ var helpers_1 = require("./../helpers");
7
+ var defaultGetText = function (text) { return text; };
8
+ /**
9
+ * Auto sizer hook
10
+ * @param param
11
+ *
12
+ * TODO
13
+ * Dynamically resize columns after user has scrolled down/view port changed ?
14
+ */
15
+ var useAutoSizer = function (_a) {
16
+ var gridRef = _a.gridRef, getTextFormat = _a.getTextFormat, _b = _a.initialVisibleRows, initialVisibleRows = _b === void 0 ? 20 : _b, _c = _a.initialVisibleColumns, initialVisibleColumns = _c === void 0 ? 20 : _c, _d = _a.cellSpacing, cellSpacing = _d === void 0 ? 10 : _d, _e = _a.minColumnDimension, minColumnDimension = _e === void 0 ? 60 : _e, _f = _a.minRowDimension, minRowDimension = _f === void 0 ? 60 : _f, _g = _a.timeout, timeout = _g === void 0 ? 300 : _g, _h = _a.resizeStrategy, resizeStrategy = _h === void 0 ? "lazy" : _h, rowCount = _a.rowCount, columnCount = _a.columnCount, _j = _a.resizeOnScroll, resizeOnScroll = _j === void 0 ? true : _j, _k = _a.fontFamily, fontFamily = _k === void 0 ? "Arial" : _k, _l = _a.fontSize, fontSize = _l === void 0 ? 12 : _l, _m = _a.fontWeight, fontWeight = _m === void 0 ? "" : _m, _o = _a.fontStyle, fontStyle = _o === void 0 ? "" : _o, _p = _a.autoResize, autoResize = _p === void 0 ? true : _p, _q = _a.frozenRows, frozenRows = _q === void 0 ? 0 : _q, _r = _a.frozenColumns, frozenColumns = _r === void 0 ? 0 : _r, _s = _a.scale, scale = _s === void 0 ? 1 : _s, isHiddenRow = _a.isHiddenRow, isHiddenColumn = _a.isHiddenColumn, _t = _a.getTextValue, getTextValue = _t === void 0 ? defaultGetText : _t;
17
+ (0, tiny_invariant_1.default)(!(resizeStrategy === "full" && rowCount === void 0), "Row count should be specified if resize stragtegy is full");
18
+ var autoSizer = (0, react_1.useRef)(helpers_1.autoSizerCanvas);
19
+ var _u = tslib_1.__read((0, react_1.useState)({
20
+ rowStartIndex: 0,
21
+ rowStopIndex: 0,
22
+ columnStartIndex: 0,
23
+ columnStopIndex: 0,
24
+ visibleRowStartIndex: 0,
25
+ visibleRowStopIndex: 0,
26
+ visibleColumnStartIndex: 0,
27
+ visibleColumnStopIndex: 0,
28
+ }), 2), viewport = _u[0], setViewport = _u[1];
29
+ var isMounted = (0, react_1.useRef)(false);
30
+ var handleResize = (0, react_1.useCallback)(function (_a) {
31
+ var rowIndex = _a.rowIndex, columnIndex = _a.columnIndex;
32
+ gridRef.current &&
33
+ gridRef.current.resetAfterIndices({ rowIndex: rowIndex, columnIndex: columnIndex });
34
+ }, []);
35
+ var debounceResizer = (0, react_1.useRef)(null);
36
+ (0, react_1.useEffect)(function () {
37
+ isMounted.current = true;
38
+ debounceResizer.current = (0, helpers_1.debounce)(handleResize, timeout);
39
+ }, []);
40
+ /* Update any styles, fonts if necessary */
41
+ (0, react_1.useEffect)(function () {
42
+ autoSizer.current.setFont({ fontFamily: fontFamily, fontSize: fontSize, fontWeight: fontWeight, fontStyle: fontStyle });
43
+ }, [fontFamily, fontSize, fontWeight, fontStyle]);
44
+ /**
45
+ * Get width of a single cell
46
+ */
47
+ var getCellDimensions = (0, react_1.useCallback)(function (rowIndex, columnIndex, textOverride) {
48
+ var _a, _b, _c, _d;
49
+ var cell = { rowIndex: rowIndex, columnIndex: columnIndex };
50
+ var textFormat = getTextFormat === null || getTextFormat === void 0 ? void 0 : getTextFormat(cell.rowIndex, cell.columnIndex);
51
+ var text = textOverride !== null && textOverride !== void 0 ? textOverride : getTextValue(cell.rowIndex, cell.columnIndex);
52
+ var width = (_a = textFormat === null || textFormat === void 0 ? void 0 : textFormat.spacing) !== null && _a !== void 0 ? _a : 0;
53
+ var height = (_b = textFormat === null || textFormat === void 0 ? void 0 : textFormat.spacing) !== null && _b !== void 0 ? _b : 0;
54
+ /* Check if its null */
55
+ if (!(0, helpers_1.isNull)(text) && text !== void 0) {
56
+ /* Reset fonts */
57
+ autoSizer.current.reset();
58
+ if (textFormat) {
59
+ var isBold = textFormat.bold;
60
+ autoSizer.current.setFont({
61
+ fontWeight: isBold ? "bold" : "",
62
+ fontSize: ((_c = textFormat.fontSize) !== null && _c !== void 0 ? _c : fontSize) * scale,
63
+ fontFamily: (_d = textFormat.fontFamily) !== null && _d !== void 0 ? _d : fontFamily,
64
+ fontStyle: textFormat.italic ? "italic" : "",
65
+ });
66
+ }
67
+ var metrics = autoSizer.current.measureText(text);
68
+ if (metrics) {
69
+ width += Math.ceil(metrics.width) + cellSpacing;
70
+ height += Math.ceil(metrics.height) + cellSpacing;
71
+ }
72
+ }
73
+ return { width: width, height: height };
74
+ }, [scale, getTextFormat, cellSpacing, getTextValue]);
75
+ /**
76
+ * Calculate column width
77
+ */
78
+ var getColumnWidth = (0, react_1.useCallback)(function (columnIndex) {
79
+ var _a = viewport !== null && viewport !== void 0 ? viewport : {}, _b = _a.rowStartIndex, rowStartIndex = _b === void 0 ? 0 : _b, _c = _a.rowStopIndex, rowStopIndex = _c === void 0 ? 0 : _c;
80
+ var visibleRows = resizeStrategy === "full"
81
+ ? rowCount
82
+ : rowStopIndex || initialVisibleRows;
83
+ var start = resizeStrategy === "full" ? 0 : rowStartIndex;
84
+ var maxWidth = minColumnDimension;
85
+ /* Calculate for frozen rows */
86
+ for (var i = 0; i < frozenRows; i++) {
87
+ if (isHiddenRow(i)) {
88
+ continue;
89
+ }
90
+ var width = getCellDimensions(i, columnIndex).width;
91
+ if (width > maxWidth)
92
+ maxWidth = width;
93
+ }
94
+ /* Loop through all visible rows */
95
+ while (start < visibleRows) {
96
+ if (isHiddenRow(start)) {
97
+ start++;
98
+ continue;
99
+ }
100
+ var width = getCellDimensions(start, columnIndex).width;
101
+ if (width > maxWidth)
102
+ maxWidth = width;
103
+ start++;
104
+ }
105
+ return maxWidth / scale;
106
+ }, [
107
+ viewport,
108
+ initialVisibleRows,
109
+ minColumnDimension,
110
+ frozenRows,
111
+ scale,
112
+ getCellDimensions,
113
+ isHiddenRow,
114
+ ]);
115
+ /**
116
+ * Calculate Row height
117
+ */
118
+ var getRowHeight = (0, react_1.useCallback)(function (rowIndex) {
119
+ var _a = viewport !== null && viewport !== void 0 ? viewport : {}, _b = _a.columnStartIndex, columnStartIndex = _b === void 0 ? 0 : _b, _c = _a.columnStopIndex, columnStopIndex = _c === void 0 ? 0 : _c;
120
+ var visibleColumns = resizeStrategy === "full"
121
+ ? columnCount
122
+ : columnStopIndex || initialVisibleColumns;
123
+ var start = resizeStrategy === "full" ? 0 : columnStartIndex;
124
+ var maxHeight = minRowDimension;
125
+ /* Calculate for frozen rows */
126
+ for (var i = 0; i < frozenColumns; i++) {
127
+ if (isHiddenColumn(i)) {
128
+ continue;
129
+ }
130
+ var height = getCellDimensions(i, rowIndex).height;
131
+ if (height > maxHeight)
132
+ maxHeight = height;
133
+ }
134
+ /* Loop through all visible rows */
135
+ while (start < visibleColumns) {
136
+ if (isHiddenRow(start)) {
137
+ start++;
138
+ continue;
139
+ }
140
+ var height = getCellDimensions(rowIndex, start).height;
141
+ if (height > maxHeight)
142
+ maxHeight = height;
143
+ start++;
144
+ }
145
+ return maxHeight / scale;
146
+ }, [
147
+ viewport,
148
+ initialVisibleColumns,
149
+ minRowDimension,
150
+ isHiddenColumn,
151
+ frozenColumns,
152
+ scale,
153
+ getCellDimensions,
154
+ ]);
155
+ var handleViewChange = (0, react_1.useCallback)(function (cells) {
156
+ /* Update viewport cells */
157
+ setViewport(cells);
158
+ /* Check if viewport has changed */
159
+ if (resizeStrategy === "full" ||
160
+ !resizeOnScroll ||
161
+ (cells.rowStartIndex === viewport.rowStartIndex &&
162
+ cells.columnStartIndex === viewport.columnStartIndex))
163
+ return;
164
+ if (gridRef.current) {
165
+ /* During first mount, column width is calculated. Do not re-calculate */
166
+ if (!isMounted.current)
167
+ return;
168
+ debounceResizer.current({
169
+ rowIndex: cells.rowStartIndex,
170
+ columnIndex: cells.columnStartIndex,
171
+ });
172
+ }
173
+ }, [resizeOnScroll, viewport, resizeStrategy]);
174
+ return tslib_1.__assign(tslib_1.__assign({}, (autoResize ? { columnWidth: getColumnWidth } : undefined)), { getColumnWidth: getColumnWidth, getRowHeight: getRowHeight, onViewChange: handleViewChange, getCellDimensions: getCellDimensions });
175
+ };
176
+ exports.default = useAutoSizer;
@@ -1,5 +1,5 @@
1
1
  import React from "react";
2
- import { CellInterface, GridRef } from "../Grid";
2
+ import type { CellInterface, GridRef } from "../Grid";
3
3
  export interface TooltipOptions {
4
4
  /**
5
5
  * Tooltip component
@@ -40,3 +40,4 @@ export interface DefaultTooltipProps {
40
40
  }
41
41
  declare const useTooltip: ({ gridRef, getTooltip, }: TooltipOptions) => TooltipResults;
42
42
  export default useTooltip;
43
+ //# sourceMappingURL=useTooltip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTooltip.d.ts","sourceRoot":"","sources":["../../../hooks/useTooltip.tsx"],"names":[],"mappings":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAGtD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;IACtE;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,gBAAgB,EAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IAC5C;;OAEG;IACH,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACtE;;OAEG;IACH,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACxE;AAED,MAAM,WAAW,mBAAmB;IAClC;;OAEG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAmCD,QAAA,MAAM,UAAU,GAAI,0BAGjB,cAAc,KAAG,cAmFnB,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,82 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = tslib_1.__importStar(require("react"));
5
+ var helpers_1 = require("../helpers");
6
+ var DefaultTooltipComponent = function (_a) {
7
+ var _b = _a.x, x = _b === void 0 ? 0 : _b, _c = _a.y, y = _c === void 0 ? 0 : _c, _d = _a.scrollLeft, scrollLeft = _d === void 0 ? 0 : _d, _e = _a.scrollTop, scrollTop = _e === void 0 ? 0 : _e, _f = _a.width, width = _f === void 0 ? 0 : _f, _g = _a.height, height = _g === void 0 ? 0 : _g;
8
+ var posX = x + width - scrollLeft;
9
+ var posY = y - scrollTop;
10
+ return (react_1.default.createElement("div", { style: {
11
+ position: "absolute",
12
+ left: 0,
13
+ top: 0,
14
+ transform: "translate(".concat(posX, "px, ").concat(posY, "px)"),
15
+ maxWidth: 200,
16
+ minWidth: 160,
17
+ background: "white",
18
+ boxShadow: "0 4px 8px 3px rgba(60,64,67,.15)",
19
+ padding: 12,
20
+ borderRadius: 4,
21
+ fontSize: 13,
22
+ } }, x));
23
+ };
24
+ var getDefaultTooltip = function () { return DefaultTooltipComponent; };
25
+ var useTooltip = function (_a) {
26
+ var gridRef = _a.gridRef, _b = _a.getTooltip, getTooltip = _b === void 0 ? getDefaultTooltip : _b;
27
+ var _c = tslib_1.__read((0, react_1.useState)(null), 2), activeCell = _c[0], setActiveCell = _c[1];
28
+ var isTooltipActive = (0, react_1.useRef)(false);
29
+ var activeCellRef = (0, react_1.useRef)(activeCell);
30
+ var _d = tslib_1.__read((0, react_1.useState)({}), 2), tooltipPosition = _d[0], setTooltipPosition = _d[1];
31
+ var showTooltip = !!activeCell;
32
+ var TooltipComponent = (0, react_1.useMemo)(function () {
33
+ return getTooltip(activeCell);
34
+ }, [activeCell, getTooltip]);
35
+ var handleTooltipMouseEnter = (0, react_1.useCallback)(function () {
36
+ isTooltipActive.current = true;
37
+ }, []);
38
+ var handleTooltipMouseLeave = (0, react_1.useCallback)(function () {
39
+ isTooltipActive.current = false;
40
+ setActiveCell(null);
41
+ }, []);
42
+ var tooltipComponent = showTooltip && TooltipComponent ? (react_1.default.createElement(TooltipComponent, tslib_1.__assign({}, tooltipPosition, { onMouseEnter: handleTooltipMouseEnter, onMouseLeave: handleTooltipMouseLeave }))) : null;
43
+ var handleMouseMove = (0, react_1.useCallback)(function (e) {
44
+ if (!gridRef.current)
45
+ return;
46
+ var coords = gridRef.current.getCellCoordsFromOffset(e.clientX, e.clientY);
47
+ if (!coords)
48
+ return;
49
+ var rowIndex = coords.rowIndex, columnIndex = coords.columnIndex;
50
+ /* Exit if its the same cell */
51
+ if (activeCellRef.current &&
52
+ activeCellRef.current.rowIndex === rowIndex &&
53
+ activeCellRef.current.columnIndex === columnIndex)
54
+ return;
55
+ var pos = gridRef.current.getCellOffsetFromCoords(coords);
56
+ var scrollPosition = gridRef.current.getScrollPosition();
57
+ setTooltipPosition(tslib_1.__assign(tslib_1.__assign({}, pos), scrollPosition));
58
+ setActiveCell({ rowIndex: rowIndex, columnIndex: columnIndex });
59
+ }, []);
60
+ var handleMouseLeave = (0, react_1.useCallback)(function () {
61
+ if (isTooltipActive.current)
62
+ return;
63
+ setActiveCell(null);
64
+ }, []);
65
+ /* Raf throttler */
66
+ var mouseMoveThrottler = (0, react_1.useRef)(undefined);
67
+ var mouseLeaveThrottler = (0, react_1.useRef)(undefined);
68
+ (0, react_1.useEffect)(function () {
69
+ mouseMoveThrottler.current = (0, helpers_1.throttle)(handleMouseMove, 100);
70
+ mouseLeaveThrottler.current = (0, helpers_1.debounce)(handleMouseLeave, 2000);
71
+ }, []);
72
+ /* Update activecell ref */
73
+ (0, react_1.useEffect)(function () {
74
+ activeCellRef.current = activeCell;
75
+ }, [activeCell]);
76
+ return {
77
+ tooltipComponent: tooltipComponent,
78
+ onMouseMove: mouseMoveThrottler.current,
79
+ onMouseLeave: mouseLeaveThrottler.current,
80
+ };
81
+ };
82
+ exports.default = useTooltip;
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import type React from "react";
2
2
  /**
3
3
  * Spec: https://tools.ietf.org/html/rfc6902
4
4
  *
@@ -33,3 +33,4 @@ export interface PatchInterface<T> {
33
33
  */
34
34
  declare const useUndo: <T>(props?: UndoProps) => UndoManager;
35
35
  export default useUndo;
36
+ //# sourceMappingURL=useUndo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUndo.d.ts","sourceRoot":"","sources":["../../../hooks/useUndo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B;;;;;;;;GAQG;AAEH,MAAM,WAAW,SAAS;IACxB,uBAAuB,CAAC,EAAE,OAAO,CAAC;IAClC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,GAAG,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,GAAG,EAAE,CAAC,OAAO,EAAE,GAAG,KAAK,IAAI,CAAC;IAC5B,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,KAAK,IAAI,CAAC;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,cAAc,EAAE,CAAC,EAAE,CAAC;CACrB;AAED;;;GAGG;AACH,QAAA,MAAM,OAAO,GAAI,CAAC,EAAE,QAAO,SAAc,KAAG,WAsF3C,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var tslib_1 = require("tslib");
4
+ var react_1 = require("react");
5
+ var types_1 = require("../types");
6
+ /**
7
+ * Undo/Redo hook
8
+ * @param
9
+ */
10
+ var useUndo = function (props) {
11
+ if (props === void 0) { props = {}; }
12
+ var enableGlobalKeyHandlers = props.enableGlobalKeyHandlers, onRedo = props.onRedo, onUndo = props.onUndo, identifier = props.identifier;
13
+ var undoStack = (0, react_1.useRef)([]);
14
+ var undoStackPointer = (0, react_1.useRef)(-1);
15
+ var _a = tslib_1.__read((0, react_1.useReducer)(function (s) { return s + 1; }, 0), 2), _ = _a[0], forceRender = _a[1];
16
+ (0, react_1.useEffect)(function () {
17
+ if (enableGlobalKeyHandlers)
18
+ document.addEventListener("keydown", handleKeyDown);
19
+ return function () { return document.removeEventListener("keydown", handleKeyDown); };
20
+ }, [enableGlobalKeyHandlers]);
21
+ var handleKeyDown = (0, react_1.useCallback)(function (e) {
22
+ /* Is user focused on an input, textarea or select element */
23
+ var isMeta = e.metaKey || e.ctrlKey;
24
+ var isUndo = isMeta && e.which === types_1.KeyCodes.Z;
25
+ var isRedo = (e.shiftKey && isUndo) || e.which === types_1.KeyCodes.KEY_Y;
26
+ if (!isRedo && !isUndo)
27
+ return;
28
+ if (isRedo) {
29
+ handleRedo();
30
+ }
31
+ else {
32
+ handleUndo();
33
+ }
34
+ }, []);
35
+ var handleUndo = (0, react_1.useCallback)(function () {
36
+ if (undoStackPointer.current < 0)
37
+ return;
38
+ var patches = undoStack.current[undoStackPointer.current].inversePatches;
39
+ undoStackPointer.current--;
40
+ onUndo && onUndo(patches);
41
+ forceRender();
42
+ }, []);
43
+ var handleRedo = (0, react_1.useCallback)(function () {
44
+ if (undoStackPointer.current === undoStack.current.length - 1)
45
+ return;
46
+ undoStackPointer.current++;
47
+ var patches = undoStack.current[undoStackPointer.current].patches;
48
+ onRedo && onRedo(patches);
49
+ forceRender();
50
+ }, []);
51
+ var addUndoable = (0, react_1.useCallback)(function (history) {
52
+ var patches = history.patches, inversePatches = history.inversePatches;
53
+ var pointer = ++undoStackPointer.current;
54
+ undoStack.current.length = pointer;
55
+ undoStack.current[pointer] = { patches: patches, inversePatches: inversePatches };
56
+ forceRender();
57
+ }, []);
58
+ /**
59
+ * Use for async update where you want to replace the last patch
60
+ */
61
+ var replaceLastPatch = (0, react_1.useCallback)(function (patches, inversePatches) {
62
+ var _a, _b;
63
+ if (patches === void 0) {
64
+ return;
65
+ }
66
+ var currentStack = undoStack.current;
67
+ var pointer = undoStackPointer.current;
68
+ var curPatches = currentStack[pointer];
69
+ if ((curPatches === null || curPatches === void 0 ? void 0 : curPatches.patches) === void 0) {
70
+ return;
71
+ }
72
+ (_a = curPatches.patches).push.apply(_a, tslib_1.__spreadArray([], tslib_1.__read(patches), false));
73
+ if (inversePatches && (curPatches === null || curPatches === void 0 ? void 0 : curPatches.inversePatches)) {
74
+ (_b = curPatches.inversePatches).unshift.apply(_b, tslib_1.__spreadArray([], tslib_1.__read(inversePatches), false));
75
+ }
76
+ }, []);
77
+ return {
78
+ undo: handleUndo,
79
+ redo: handleRedo,
80
+ add: addUndoable,
81
+ replace: replaceLastPatch,
82
+ onKeyDown: enableGlobalKeyHandlers ? undefined : handleKeyDown,
83
+ canUndo: !(undoStackPointer.current < 0),
84
+ canRedo: !(undoStackPointer.current === undoStack.current.length - 1),
85
+ };
86
+ };
87
+ exports.default = useUndo;