@rowsncolumns/grid 9.0.4 → 13.2.32

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,53 @@
1
+ import type React from "react";
2
+ import type { CellInterface, GridRef, SelectionArea } from "../Grid";
3
+ export interface CopyProps {
4
+ /**
5
+ * Selection bounds
6
+ */
7
+ selections: SelectionArea[];
8
+ /**
9
+ * Active cell
10
+ */
11
+ activeCell?: CellInterface | null;
12
+ /**
13
+ * Value getter of a cell
14
+ */
15
+ getValue: (cell: CellInterface) => any;
16
+ /**
17
+ * Get text value
18
+ */
19
+ getText: (config: any) => string | undefined;
20
+ /**
21
+ * Grid reference to access grid methods
22
+ */
23
+ gridRef: React.MutableRefObject<GridRef | null>;
24
+ /**
25
+ * Callback when a paste is executed
26
+ */
27
+ onPaste?: (rows: (string | null)[][], activeCell: CellInterface | null, selectionArea: SelectionArea[], selection?: SelectionArea) => void;
28
+ /**
29
+ * When user tries to cut a selection
30
+ */
31
+ onCut?: (selection: SelectionArea) => void;
32
+ /**
33
+ * Callback on copy event
34
+ */
35
+ onCopy?: (selection: SelectionArea[]) => void;
36
+ }
37
+ export interface CopyResults {
38
+ copy: () => void;
39
+ paste: () => void;
40
+ cut: () => void;
41
+ }
42
+ /**
43
+ * Copy paste hook
44
+ * Usage
45
+ *
46
+ * useCopyPaste ({
47
+ * onPaste: (text) => {
48
+ * }
49
+ * })
50
+ */
51
+ declare const useCopyPaste: ({ selections, activeCell, getValue, gridRef, onPaste, onCut, onCopy, getText, }: CopyProps) => CopyResults;
52
+ export default useCopyPaste;
53
+ //# sourceMappingURL=useCopyPaste.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCopyPaste.d.ts","sourceRoot":"","sources":["../../../hooks/useCopyPaste.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAIrE,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC;;OAEG;IACH,QAAQ,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,GAAG,CAAC;IACvC;;OAEG;IACH,OAAO,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,MAAM,GAAG,SAAS,CAAC;IAC7C;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD;;OAEG;IACH,OAAO,CAAC,EAAE,CACR,IAAI,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,EAAE,EACzB,UAAU,EAAE,aAAa,GAAG,IAAI,EAChC,aAAa,EAAE,aAAa,EAAE,EAE9B,SAAS,CAAC,EAAE,aAAa,KACtB,IAAI,CAAC;IACV;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAC;IAC3C;;OAEG;IACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;CAC/C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,IAAI,CAAC;CACjB;AAWD;;;;;;;;GAQG;AACH,QAAA,MAAM,YAAY,GAAI,iFASnB,SAAS,KAAG,WA4Ld,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,9 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const react_1 = require("react");
4
- const helpers_1 = require("./../helpers");
5
- const types_1 = require("../types");
6
- const defaultGetText = (config) => config.text;
1
+ import { useCallback, useEffect, useRef } from "react";
2
+ import { MimeType } from "../types";
3
+ import { prepareClipboardData, selectionFromActiveCell } from "./../helpers";
4
+ const defaultGetText = (text) => text;
7
5
  /**
8
6
  * Copy paste hook
9
7
  * Usage
@@ -14,19 +12,19 @@ const defaultGetText = (config) => config.text;
14
12
  * })
15
13
  */
16
14
  const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, onPaste, onCut, onCopy, getText = defaultGetText, }) => {
17
- const selectionRef = (0, react_1.useRef)({ selections, activeCell, getValue });
18
- const cutSelections = (0, react_1.useRef)();
15
+ const selectionRef = useRef({ selections, activeCell, getValue });
16
+ const cutSelections = useRef(undefined);
19
17
  /* Keep selections and activeCell upto date */
20
- (0, react_1.useEffect)(() => {
18
+ useEffect(() => {
21
19
  selectionRef.current = { selections, activeCell, getValue };
22
20
  }, [selections, activeCell, getValue]);
23
21
  const currentSelections = () => {
24
22
  const sel = selectionRef.current.selections.length
25
23
  ? selectionRef.current.selections
26
- : (0, helpers_1.selectionFromActiveCell)(selectionRef.current.activeCell);
24
+ : selectionFromActiveCell(selectionRef.current.activeCell);
27
25
  return sel[sel.length - 1];
28
26
  };
29
- (0, react_1.useEffect)(() => {
27
+ useEffect(() => {
30
28
  if (!gridRef.current)
31
29
  return;
32
30
  document.addEventListener("copy", handleCopy);
@@ -38,23 +36,21 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
38
36
  document.removeEventListener("cut", handleCut);
39
37
  };
40
38
  }, []);
41
- const handleCut = (0, react_1.useCallback)(() => {
42
- var _a;
43
- if (document.activeElement !== ((_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.container)) {
39
+ const handleCut = useCallback(() => {
40
+ if (document.activeElement !== gridRef.current?.container) {
44
41
  return;
45
42
  }
46
43
  cutSelections.current = currentSelections();
47
44
  handleProgramaticCopy();
48
45
  }, []);
49
- const handleCopy = (0, react_1.useCallback)((e) => {
50
- var _a, _b, _c, _d, _e;
51
- if (document.activeElement !== ((_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.container)) {
46
+ const handleCopy = useCallback((e) => {
47
+ if (document.activeElement !== gridRef.current?.container) {
52
48
  return;
53
49
  }
54
50
  /* Only copy the last selection */
55
51
  const selection = currentSelections();
56
- const { bounds } = selection;
57
- const { top, left, right, bottom } = bounds;
52
+ const { range } = selection;
53
+ const { startRowIndex: top, startColumnIndex: left, endColumnIndex: right, endRowIndex: bottom, } = range;
58
54
  const rows = [];
59
55
  const cells = [];
60
56
  for (let i = top; i <= bottom; i++) {
@@ -66,7 +62,7 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
66
62
  columnIndex: j,
67
63
  };
68
64
  const config = {
69
- text: selectionRef.current.getValue(coords),
65
+ ...selectionRef.current.getValue(coords),
70
66
  sourceCell: coords,
71
67
  };
72
68
  const value = getText(config);
@@ -76,33 +72,32 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
76
72
  rows.push(row);
77
73
  cells.push(cell);
78
74
  }
79
- const [html, csv] = (0, helpers_1.prepareClipboardData)(rows);
80
- (_b = e.clipboardData) === null || _b === void 0 ? void 0 : _b.setData(types_1.MimeType.html, html);
81
- (_c = e.clipboardData) === null || _c === void 0 ? void 0 : _c.setData(types_1.MimeType.plain, csv);
82
- (_d = e.clipboardData) === null || _d === void 0 ? void 0 : _d.setData(types_1.MimeType.csv, csv);
83
- (_e = e.clipboardData) === null || _e === void 0 ? void 0 : _e.setData(types_1.MimeType.json, JSON.stringify(cells));
75
+ const [html, csv] = prepareClipboardData(rows);
76
+ e.clipboardData?.setData(MimeType.html, html);
77
+ e.clipboardData?.setData(MimeType.plain, csv);
78
+ e.clipboardData?.setData(MimeType.csv, csv);
79
+ e.clipboardData?.setData(MimeType.json, JSON.stringify(cells));
84
80
  e.preventDefault();
85
- onCopy === null || onCopy === void 0 ? void 0 : onCopy([selection]);
81
+ onCopy?.([selection]);
86
82
  }, [currentSelections]);
87
83
  const handlePaste = (e) => {
88
- var _a, _b, _c, _d;
89
- if (document.activeElement !== ((_a = gridRef.current) === null || _a === void 0 ? void 0 : _a.container)) {
84
+ if (document.activeElement !== gridRef.current?.container) {
90
85
  return;
91
86
  }
92
- const items = (_b = e.clipboardData) === null || _b === void 0 ? void 0 : _b.items;
87
+ const items = e.clipboardData?.items;
93
88
  if (!items)
94
89
  return;
95
90
  const mimeTypes = [
96
- types_1.MimeType.json,
97
- types_1.MimeType.html,
98
- types_1.MimeType.csv,
99
- types_1.MimeType.plain,
91
+ MimeType.json,
92
+ MimeType.html,
93
+ MimeType.csv,
94
+ MimeType.plain,
100
95
  ];
101
96
  let type;
102
97
  let value;
103
- let plainTextValue = (_c = e.clipboardData) === null || _c === void 0 ? void 0 : _c.getData(types_1.MimeType.plain);
98
+ const plainTextValue = e.clipboardData?.getData(MimeType.plain);
104
99
  for (type of mimeTypes) {
105
- value = (_d = e.clipboardData) === null || _d === void 0 ? void 0 : _d.getData(type);
100
+ value = e.clipboardData?.getData(type);
106
101
  if (value)
107
102
  break;
108
103
  }
@@ -115,7 +110,7 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
115
110
  const domparser = new DOMParser();
116
111
  const doc = domparser.parseFromString(value, type);
117
112
  const supportedNodes = "table, p, h1, h2, h3, h4, h5, h6";
118
- let nodes = doc.querySelectorAll(supportedNodes);
113
+ const nodes = doc.querySelectorAll(supportedNodes);
119
114
  if (nodes.length === 0) {
120
115
  rows.push([plainTextValue]);
121
116
  }
@@ -140,10 +135,10 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
140
135
  }
141
136
  }
142
137
  }
143
- else if (type === types_1.MimeType.json) {
138
+ else if (type === MimeType.json) {
144
139
  rows = JSON.parse(value);
145
140
  }
146
- else if (type === types_1.MimeType.plain) {
141
+ else if (type === MimeType.plain) {
147
142
  rows = [[value]];
148
143
  }
149
144
  else {
@@ -151,7 +146,7 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
151
146
  for (const val of values) {
152
147
  const row = [];
153
148
  for (const cell of val.split(",")) {
154
- row.push(cell.replace(/^\"|\"$/gi, ""));
149
+ row.push(cell.replace(/^"|"$/gi, ""));
155
150
  }
156
151
  rows.push(row);
157
152
  }
@@ -163,30 +158,29 @@ const useCopyPaste = ({ selections = [], activeCell = null, getValue, gridRef, o
163
158
  /**
164
159
  * User is trying to copy from outisde the app
165
160
  */
166
- const handleProgramaticCopy = (0, react_1.useCallback)(() => {
161
+ const handleProgramaticCopy = useCallback(() => {
167
162
  if (!gridRef.current)
168
163
  return;
169
164
  gridRef.current.focus();
170
165
  document.execCommand("copy");
171
- }, []);
166
+ }, [gridRef]);
172
167
  /**
173
168
  * User is trying to paste from outisde the app
174
169
  */
175
- const handleProgramaticPaste = (0, react_1.useCallback)(async () => {
170
+ const handleProgramaticPaste = useCallback(async () => {
176
171
  if (!gridRef.current)
177
172
  return;
178
173
  gridRef.current.focus();
179
174
  const text = await navigator.clipboard.readText();
180
175
  const clipboardData = new DataTransfer();
181
- clipboardData.setData(types_1.MimeType.plain, text);
176
+ clipboardData.setData(MimeType.plain, text);
182
177
  const event = new ClipboardEvent("paste", { clipboardData });
183
178
  handlePaste(event);
184
- }, []);
179
+ }, [gridRef, handlePaste]);
185
180
  return {
186
181
  copy: handleProgramaticCopy,
187
182
  paste: handleProgramaticPaste,
188
183
  cut: handleCut,
189
184
  };
190
185
  };
191
- exports.default = useCopyPaste;
192
- //# sourceMappingURL=useCopyPaste.js.map
186
+ export default useCopyPaste;
@@ -0,0 +1,253 @@
1
+ import React from "react";
2
+ import type { CellInterface, CellPosition, GridRef, ScrollCoords, SelectionArea } from "../Grid";
3
+ import type { HiddenType } from "../helpers";
4
+ import { Direction } from "./../types";
5
+ export interface UseEditableOptions {
6
+ editorProps?: () => any;
7
+ /**
8
+ * Inject custom editors based on a cell
9
+ */
10
+ getEditor?: (cell: CellInterface | null) => React.ElementType;
11
+ /**
12
+ * Access grid methods
13
+ */
14
+ gridRef: React.MutableRefObject<GridRef | null>;
15
+ /**
16
+ * Value getter
17
+ */
18
+ getValue?: (rowIndex: number, columnIndex: number) => any;
19
+ /**
20
+ * Callback when user cancels editing
21
+ */
22
+ onCancel?: (e?: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement | HTMLDivElement>) => void;
23
+ /**
24
+ * Callback when user changes a value in editor
25
+ */
26
+ onChange?: (value: string, activeCell: CellInterface) => void;
27
+ /**
28
+ * Callback when user submits a value. Use this to update state
29
+ */
30
+ onSubmit?: (value: string, activeCell: CellInterface, nextActiveCell?: CellInterface | null) => void;
31
+ /**
32
+ * Callback when user selects an area and presses delete key
33
+ */
34
+ onDelete?: (activeCell: CellInterface, selections: SelectionArea[]) => void;
35
+ /**
36
+ * Currently selected cells, injected by useSelection
37
+ */
38
+ selections: SelectionArea[];
39
+ /**
40
+ * Active selected cell. This can change, if the user is in formula mode
41
+ */
42
+ activeCell?: CellInterface | null;
43
+ /**
44
+ * Callback fired before editing. Can be used to prevent editing. Do not use it, Can be removed in next release.
45
+ */
46
+ canEdit?: (coords: CellInterface) => boolean;
47
+ /**
48
+ * Number of frozen columns
49
+ */
50
+ frozenColumns?: number;
51
+ /**
52
+ * Number of frozen rows
53
+ */
54
+ frozenRows?: number;
55
+ /**
56
+ * Hide editor on blur
57
+ */
58
+ hideOnBlur?: boolean;
59
+ /**
60
+ * Hidden rows
61
+ */
62
+ isHiddenRow: HiddenType;
63
+ /**
64
+ * Hidden columns
65
+ */
66
+ isHiddenColumn: HiddenType;
67
+ /**
68
+ * No of columns in the grid
69
+ */
70
+ columnCount: number;
71
+ /**
72
+ * No of rows in the grid
73
+ */
74
+ rowCount: number;
75
+ /**
76
+ * Top bound of selection
77
+ */
78
+ selectionTopBound?: number;
79
+ /**
80
+ * Bottom bound
81
+ */
82
+ selectionBottomBound?: number;
83
+ /**
84
+ * Left bound
85
+ */
86
+ selectionLeftBound?: number;
87
+ /**
88
+ * Right bound
89
+ */
90
+ selectionRightBound?: number;
91
+ onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement | HTMLDivElement>) => void;
92
+ /**
93
+ * Sync callback before a cell is edited
94
+ */
95
+ onBeforeEdit?: (coords: CellInterface) => void;
96
+ /**
97
+ * If true, Once the editor is active, it will be always visible.
98
+ * Editor will not scroll with the grid
99
+ */
100
+ sticky?: boolean;
101
+ }
102
+ export interface EditableResults {
103
+ /**
104
+ * Editor component that can be injected
105
+ */
106
+ editorComponent: React.ReactNode;
107
+ /**
108
+ * Double click listener, activates the grid
109
+ */
110
+ onDoubleClick: (e: React.MouseEvent<HTMLDivElement>) => void;
111
+ /**
112
+ * OnScroll listener to align the editor
113
+ */
114
+ onScroll?: (props: ScrollCoords) => void;
115
+ /**
116
+ * Key down listeners
117
+ */
118
+ onKeyDown: (e: React.KeyboardEvent<HTMLDivElement>) => void;
119
+ /**
120
+ * Get next focusable cell based on current activeCell and direction user is moving
121
+ */
122
+ getNextFocusableCell: (currentCell: CellInterface, direction: Direction) => CellInterface | null;
123
+ /**
124
+ * Is editing in progress
125
+ */
126
+ isEditInProgress: boolean;
127
+ /**
128
+ * Currently editing cell
129
+ */
130
+ editingCell: CellInterface | null;
131
+ /**
132
+ * Make a cell editable
133
+ */
134
+ makeEditable: (cell: CellInterface, value?: string, autoFocus?: boolean) => void;
135
+ /**
136
+ * Set editable value imperatively
137
+ */
138
+ setValue: (value: string, activeCell: CellInterface, previousValue?: string) => void;
139
+ /**
140
+ * Hide editor
141
+ */
142
+ hideEditor: () => void;
143
+ /**
144
+ * Show editor
145
+ */
146
+ showEditor: () => void;
147
+ /**
148
+ * Bind to mousedown event
149
+ */
150
+ onMouseDown: (e: React.MouseEvent<HTMLDivElement>) => void;
151
+ /**
152
+ * Imperatively trigger submit
153
+ */
154
+ submitEditor: (value: string, activeCell: CellInterface, nextActiveCell?: CellInterface | null) => void;
155
+ /**
156
+ * Cancels an edit
157
+ */
158
+ cancelEditor: () => void;
159
+ }
160
+ export interface EditorProps {
161
+ /**
162
+ * Currently selected bounds, useful for fomulas
163
+ */
164
+ selections?: SelectionArea[];
165
+ /**
166
+ * Initial value of the cell
167
+ */
168
+ value?: string;
169
+ /**
170
+ * Is user entering a new value
171
+ */
172
+ isNewValue?: boolean;
173
+ /**
174
+ * Callback when a value has changed.
175
+ */
176
+ onChange?: (value: string, activeCell: CellInterface) => void;
177
+ /**
178
+ * Callback to submit the value back to data store
179
+ */
180
+ onSubmit?: (value: string | number, activeCell: CellInterface, nextActiveCell?: CellInterface | null) => void;
181
+ /**
182
+ * On Cancel callbacks. Hides the editor
183
+ */
184
+ onCancel?: (e?: React.KeyboardEvent<HTMLTextAreaElement | HTMLInputElement | HTMLDivElement>) => void;
185
+ /**
186
+ * Cell position, x, y, width and height
187
+ */
188
+ position: CellPosition;
189
+ /**
190
+ * Currently active cell, based on selection
191
+ */
192
+ activeCell: CellInterface;
193
+ /**
194
+ * Currrently edited cell
195
+ */
196
+ cell: CellInterface;
197
+ /**
198
+ * Scroll position of the grid
199
+ */
200
+ scrollPosition: ScrollCoords;
201
+ /**
202
+ * Next cell that should receive focus
203
+ */
204
+ getNextFocusableCell?: (activeCell: CellInterface, direction?: Direction) => CellInterface | null;
205
+ /**
206
+ * Autofocus the editor when open
207
+ */
208
+ autoFocus?: boolean;
209
+ /**
210
+ * On keydown event
211
+ */
212
+ onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement | HTMLDivElement>) => void;
213
+ /**
214
+ * Max editor width
215
+ */
216
+ maxWidth?: string | number;
217
+ /**
218
+ * Max editor height
219
+ */
220
+ maxHeight?: string | number;
221
+ /**
222
+ * Indicates if the cell is part of frozen row
223
+ */
224
+ isFrozenRow?: boolean;
225
+ /**
226
+ * Indicates if the cell is part of frozen column
227
+ */
228
+ isFrozenColumn?: boolean;
229
+ /**
230
+ * Frozen row offset
231
+ */
232
+ frozenRowOffset?: number;
233
+ /**
234
+ * Frozen column offset
235
+ */
236
+ frozenColumnOffset?: number;
237
+ }
238
+ export declare const getDefaultEditor: (cell: CellInterface | null) => React.FC<EditorProps>;
239
+ /**
240
+ * Hook to make grid editable
241
+ * @param param
242
+ *
243
+ * TODO:
244
+ * 1. Edit a cell
245
+ * 2. Tab to next cell
246
+ * 3. Enter a value
247
+ * 4. Press down key
248
+ *
249
+ * Moves to incorrect cell
250
+ */
251
+ declare const useEditable: ({ getEditor, gridRef, getValue, onChange, onSubmit, onCancel, onDelete, selections, activeCell, canEdit, frozenRows, frozenColumns, hideOnBlur, isHiddenRow, isHiddenColumn, rowCount, columnCount, selectionTopBound, selectionBottomBound, selectionLeftBound, selectionRightBound, editorProps, onBeforeEdit, onKeyDown, sticky, }: UseEditableOptions) => EditableResults;
252
+ export default useEditable;
253
+ //# sourceMappingURL=useEditable.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useEditable.d.ts","sourceRoot":"","sources":["../../../hooks/useEditable.tsx"],"names":[],"mappings":"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"}