@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.
- package/LICENSE.md +100 -0
- package/Readme.md +53 -59
- package/dist/cjs/Cell.d.ts +35 -0
- package/dist/cjs/Cell.d.ts.map +1 -0
- package/dist/cjs/Cell.js +29 -0
- package/dist/{CellOverlay.d.ts → cjs/CellOverlay.d.ts} +5 -5
- package/dist/cjs/CellOverlay.d.ts.map +1 -0
- package/dist/cjs/CellOverlay.js +126 -0
- package/dist/cjs/Context.d.ts +8 -0
- package/dist/cjs/Context.d.ts.map +1 -0
- package/dist/cjs/Context.js +13 -0
- package/dist/{FillHandle.d.ts → cjs/FillHandle.d.ts} +2 -1
- package/dist/cjs/FillHandle.d.ts.map +1 -0
- package/dist/cjs/FillHandle.js +26 -0
- package/dist/cjs/Grid.d.ts +558 -0
- package/dist/cjs/Grid.d.ts.map +1 -0
- package/dist/cjs/Grid.js +2446 -0
- package/dist/{GridLine.d.ts → cjs/GridLine.d.ts} +2 -1
- package/dist/cjs/GridLine.d.ts.map +1 -0
- package/dist/cjs/GridLine.js +10 -0
- package/dist/cjs/Image.d.ts +11 -0
- package/dist/cjs/Image.d.ts.map +1 -0
- package/dist/cjs/Image.js +57 -0
- package/dist/cjs/MemoizedGrid.d.ts +49 -0
- package/dist/cjs/MemoizedGrid.d.ts.map +1 -0
- package/dist/cjs/MemoizedGrid.js +105 -0
- package/dist/cjs/Selection.d.ts +5 -0
- package/dist/cjs/Selection.d.ts.map +1 -0
- package/dist/cjs/Selection.js +10 -0
- package/dist/{helpers.d.ts → cjs/helpers.d.ts} +59 -39
- package/dist/cjs/helpers.d.ts.map +1 -0
- package/dist/cjs/helpers.js +1409 -0
- package/dist/{hooks → cjs/hooks}/useCopyPaste.d.ts +3 -2
- package/dist/cjs/hooks/useCopyPaste.d.ts.map +1 -0
- package/dist/cjs/hooks/useCopyPaste.js +230 -0
- package/dist/{hooks → cjs/hooks}/useEditable.d.ts +21 -8
- package/dist/cjs/hooks/useEditable.d.ts.map +1 -0
- package/dist/cjs/hooks/useEditable.js +491 -0
- package/dist/{hooks → cjs/hooks}/useFilter.d.ts +3 -2
- package/dist/cjs/hooks/useFilter.d.ts.map +1 -0
- package/dist/cjs/hooks/useFilter.js +97 -0
- package/dist/{hooks → cjs/hooks}/useImage.d.ts +1 -0
- package/dist/cjs/hooks/useImage.d.ts.map +1 -0
- package/dist/cjs/hooks/useImage.js +80 -0
- package/dist/{hooks → cjs/hooks}/usePagination.d.ts +3 -2
- package/dist/cjs/hooks/usePagination.d.ts.map +1 -0
- package/dist/cjs/hooks/usePagination.js +53 -0
- package/dist/{hooks → cjs/hooks}/useSizer.d.ts +28 -29
- package/dist/cjs/hooks/useSizer.d.ts.map +1 -0
- package/dist/cjs/hooks/useSizer.js +176 -0
- package/dist/{hooks → cjs/hooks}/useTooltip.d.ts +2 -1
- package/dist/cjs/hooks/useTooltip.d.ts.map +1 -0
- package/dist/cjs/hooks/useTooltip.js +82 -0
- package/dist/{hooks → cjs/hooks}/useUndo.d.ts +2 -1
- package/dist/cjs/hooks/useUndo.d.ts.map +1 -0
- package/dist/cjs/hooks/useUndo.js +87 -0
- package/dist/cjs/index.d.ts +19 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +29 -0
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/{types.d.ts → cjs/types.d.ts} +8 -3
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/{types.js → cjs/types.js} +7 -8
- package/dist/cjs/utils.d.ts +9 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +58 -0
- package/dist/cjs/vitest.config.d.ts +3 -0
- package/dist/cjs/vitest.config.d.ts.map +1 -0
- package/dist/cjs/vitest.config.js +24 -0
- package/dist/esm/Cell.d.ts +35 -0
- package/dist/esm/Cell.d.ts.map +1 -0
- package/dist/esm/Cell.js +24 -0
- package/dist/esm/CellOverlay.d.ts +21 -0
- package/dist/esm/CellOverlay.d.ts.map +1 -0
- package/dist/esm/CellOverlay.js +120 -0
- package/dist/esm/Context.d.ts +8 -0
- package/dist/esm/Context.d.ts.map +1 -0
- package/dist/esm/Context.js +9 -0
- package/dist/esm/FillHandle.d.ts +8 -0
- package/dist/esm/FillHandle.d.ts.map +1 -0
- package/dist/{FillHandle.js → esm/FillHandle.js} +5 -11
- package/dist/esm/Grid.d.ts +558 -0
- package/dist/esm/Grid.d.ts.map +1 -0
- package/dist/esm/Grid.js +2451 -0
- package/dist/esm/GridLine.d.ts +5 -0
- package/dist/esm/GridLine.d.ts.map +1 -0
- package/dist/esm/GridLine.js +7 -0
- package/dist/esm/Image.d.ts +11 -0
- package/dist/esm/Image.d.ts.map +1 -0
- package/dist/esm/Image.js +53 -0
- package/dist/esm/MemoizedGrid.d.ts +49 -0
- package/dist/esm/MemoizedGrid.d.ts.map +1 -0
- package/dist/esm/MemoizedGrid.js +98 -0
- package/dist/esm/Selection.d.ts +5 -0
- package/dist/esm/Selection.d.ts.map +1 -0
- package/dist/esm/Selection.js +7 -0
- package/dist/esm/helpers.d.ts +281 -0
- package/dist/esm/helpers.d.ts.map +1 -0
- package/dist/esm/helpers.js +1260 -0
- package/dist/esm/hooks/useCopyPaste.d.ts +53 -0
- package/dist/esm/hooks/useCopyPaste.d.ts.map +1 -0
- package/dist/{hooks → esm/hooks}/useCopyPaste.js +40 -46
- package/dist/esm/hooks/useEditable.d.ts +253 -0
- package/dist/esm/hooks/useEditable.d.ts.map +1 -0
- package/dist/esm/hooks/useEditable.js +482 -0
- package/dist/esm/hooks/useFilter.d.ts +69 -0
- package/dist/esm/hooks/useFilter.d.ts.map +1 -0
- package/dist/{hooks → esm/hooks}/useFilter.js +22 -42
- package/dist/esm/hooks/useImage.d.ts +13 -0
- package/dist/esm/hooks/useImage.d.ts.map +1 -0
- package/dist/esm/hooks/useImage.js +76 -0
- package/dist/esm/hooks/usePagination.d.ts +69 -0
- package/dist/esm/hooks/usePagination.d.ts.map +1 -0
- package/dist/esm/hooks/usePagination.js +47 -0
- package/dist/esm/hooks/useSizer.d.ts +114 -0
- package/dist/esm/hooks/useSizer.d.ts.map +1 -0
- package/dist/esm/hooks/useSizer.js +176 -0
- package/dist/esm/hooks/useTooltip.d.ts +43 -0
- package/dist/esm/hooks/useTooltip.d.ts.map +1 -0
- package/dist/esm/hooks/useTooltip.js +80 -0
- package/dist/esm/hooks/useUndo.d.ts +36 -0
- package/dist/esm/hooks/useUndo.d.ts.map +1 -0
- package/dist/{hooks → esm/hooks}/useUndo.js +16 -25
- package/dist/esm/index.d.ts +19 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +17 -0
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -0
- package/dist/esm/types.d.ts +70 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +68 -0
- package/dist/esm/utils.d.ts +9 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +104 -0
- package/dist/esm/vitest.config.d.ts +3 -0
- package/dist/esm/vitest.config.d.ts.map +1 -0
- package/dist/esm/vitest.config.js +22 -0
- package/package.json +28 -29
- package/dist/Cell.d.ts +0 -23
- package/dist/Cell.js +0 -55
- package/dist/Cell.js.map +0 -1
- package/dist/CellOverlay.js +0 -116
- package/dist/CellOverlay.js.map +0 -1
- package/dist/FillHandle.js.map +0 -1
- package/dist/Grid.d.ts +0 -385
- package/dist/Grid.js +0 -1684
- package/dist/Grid.js.map +0 -1
- package/dist/GridLine.js +0 -13
- package/dist/GridLine.js.map +0 -1
- package/dist/Image.d.ts +0 -8
- package/dist/Image.js +0 -50
- package/dist/Image.js.map +0 -1
- package/dist/Selection.d.ts +0 -4
- package/dist/Selection.js +0 -9
- package/dist/Selection.js.map +0 -1
- package/dist/helpers.js +0 -1033
- package/dist/helpers.js.map +0 -1
- package/dist/hooks/useCopyPaste.js.map +0 -1
- package/dist/hooks/useEditable.js +0 -477
- package/dist/hooks/useEditable.js.map +0 -1
- package/dist/hooks/useFilter.js.map +0 -1
- package/dist/hooks/useImage.js +0 -42
- package/dist/hooks/useImage.js.map +0 -1
- package/dist/hooks/usePagination.js +0 -73
- package/dist/hooks/usePagination.js.map +0 -1
- package/dist/hooks/useSelection.d.ts +0 -175
- package/dist/hooks/useSelection.js +0 -982
- package/dist/hooks/useSelection.js.map +0 -1
- package/dist/hooks/useSizer.js +0 -150
- package/dist/hooks/useSizer.js.map +0 -1
- package/dist/hooks/useTooltip.js +0 -106
- package/dist/hooks/useTooltip.js.map +0 -1
- package/dist/hooks/useTouch.d.ts +0 -21
- package/dist/hooks/useTouch.js +0 -73
- package/dist/hooks/useTouch.js.map +0 -1
- package/dist/hooks/useUndo.js.map +0 -1
- package/dist/index.d.ts +0 -25
- package/dist/index.js +0 -61
- package/dist/index.js.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils.d.ts +0 -8
- package/dist/utils.js +0 -153
- package/dist/utils.js.map +0 -1
- package/src/Cell.tsx +0 -100
- package/src/CellOverlay.tsx +0 -191
- package/src/FillHandle.tsx +0 -37
- package/src/Grid.tsx +0 -2677
- package/src/GridLine.tsx +0 -23
- package/src/Image.tsx +0 -43
- package/src/Selection.tsx +0 -9
- package/src/helpers.ts +0 -1455
- package/src/hooks/useCopyPaste.ts +0 -265
- package/src/hooks/useEditable.tsx +0 -945
- package/src/hooks/useFilter.tsx +0 -233
- package/src/hooks/useImage.ts +0 -57
- package/src/hooks/usePagination.tsx +0 -153
- package/src/hooks/useSelection.ts +0 -1440
- package/src/hooks/useSizer.ts +0 -312
- package/src/hooks/useTooltip.tsx +0 -172
- package/src/hooks/useTouch.ts +0 -116
- package/src/hooks/useUndo.ts +0 -134
- package/src/index.tsx +0 -46
- package/src/tests/Grid.spec.tsx +0 -47
- package/src/tests/helpers.test.ts +0 -292
- package/src/tests/usePagination.test.ts +0 -28
- package/src/tests/useSelection.test.ts +0 -27
- package/src/tests/useUndo.test.ts +0 -73
- package/src/types.ts +0 -69
- 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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
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 =
|
|
18
|
-
const cutSelections =
|
|
15
|
+
const selectionRef = useRef({ selections, activeCell, getValue });
|
|
16
|
+
const cutSelections = useRef(undefined);
|
|
19
17
|
/* Keep selections and activeCell upto date */
|
|
20
|
-
|
|
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
|
-
:
|
|
24
|
+
: selectionFromActiveCell(selectionRef.current.activeCell);
|
|
27
25
|
return sel[sel.length - 1];
|
|
28
26
|
};
|
|
29
|
-
|
|
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 =
|
|
42
|
-
|
|
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 =
|
|
50
|
-
|
|
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 {
|
|
57
|
-
const { top, left, right, bottom } =
|
|
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
|
-
|
|
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] =
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
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
|
|
81
|
+
onCopy?.([selection]);
|
|
86
82
|
}, [currentSelections]);
|
|
87
83
|
const handlePaste = (e) => {
|
|
88
|
-
|
|
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 =
|
|
87
|
+
const items = e.clipboardData?.items;
|
|
93
88
|
if (!items)
|
|
94
89
|
return;
|
|
95
90
|
const mimeTypes = [
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
91
|
+
MimeType.json,
|
|
92
|
+
MimeType.html,
|
|
93
|
+
MimeType.csv,
|
|
94
|
+
MimeType.plain,
|
|
100
95
|
];
|
|
101
96
|
let type;
|
|
102
97
|
let value;
|
|
103
|
-
|
|
98
|
+
const plainTextValue = e.clipboardData?.getData(MimeType.plain);
|
|
104
99
|
for (type of mimeTypes) {
|
|
105
|
-
value =
|
|
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
|
-
|
|
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 ===
|
|
138
|
+
else if (type === MimeType.json) {
|
|
144
139
|
rows = JSON.parse(value);
|
|
145
140
|
}
|
|
146
|
-
else if (type ===
|
|
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(
|
|
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 =
|
|
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 =
|
|
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(
|
|
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
|
-
|
|
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":"AAAA,OAAO,KAMN,MAAM,OAAO,CAAC;AAEf,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,OAAO,EACP,YAAY,EACZ,aAAa,EACd,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,OAAO,EAAE,SAAS,EAAY,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,GAAG,CAAC;IACxB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI,KAAK,KAAK,CAAC,WAAW,CAAC;IAC9D;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,GAAG,CAAC;IAC1D;;OAEG;IACH,QAAQ,CAAC,EAAE,CACT,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CACrB,mBAAmB,GAAG,gBAAgB,GAAG,cAAc,CACxD,KACE,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9D;;OAEG;IACH,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,EACzB,cAAc,CAAC,EAAE,aAAa,GAAG,IAAI,KAClC,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,KAAK,IAAI,CAAC;IAC5E;;OAEG;IACH,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,OAAO,CAAC;IAC7C;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,WAAW,EAAE,UAAU,CAAC;IACxB;;OAEG;IACH,cAAc,EAAE,UAAU,CAAC;IAC3B;;OAEG;IACH,WAAW,EAAE,MAAM,CAAC;IACpB;;OAEG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,CACV,CAAC,EAAE,KAAK,CAAC,aAAa,CACpB,gBAAgB,GAAG,mBAAmB,GAAG,cAAc,CACxD,KACE,IAAI,CAAC;IACV;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,KAAK,IAAI,CAAC;IAC/C;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B;;OAEG;IACH,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC;;OAEG;IACH,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC7D;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IACzC;;OAEG;IACH,SAAS,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC5D;;OAEG;IACH,oBAAoB,EAAE,CACpB,WAAW,EAAE,aAAa,EAC1B,SAAS,EAAE,SAAS,KACjB,aAAa,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAC;IAC1B;;OAEG;IACH,WAAW,EAAE,aAAa,GAAG,IAAI,CAAC;IAClC;;OAEG;IACH,YAAY,EAAE,CACZ,IAAI,EAAE,aAAa,EACnB,KAAK,CAAC,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,OAAO,KAChB,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,EACzB,aAAa,CAAC,EAAE,MAAM,KACnB,IAAI,CAAC;IACV;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB;;OAEG;IACH,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB;;OAEG;IACH,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC;IAC3D;;OAEG;IACH,YAAY,EAAE,CACZ,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,EACzB,cAAc,CAAC,EAAE,aAAa,GAAG,IAAI,KAClC,IAAI,CAAC;IACV;;OAEG;IACH,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC;IAC7B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,aAAa,KAAK,IAAI,CAAC;IAC9D;;OAEG;IACH,QAAQ,CAAC,EAAE,CACT,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,UAAU,EAAE,aAAa,EACzB,cAAc,CAAC,EAAE,aAAa,GAAG,IAAI,KAClC,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,EAAE,CACT,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,CACrB,mBAAmB,GAAG,gBAAgB,GAAG,cAAc,CACxD,KACE,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,UAAU,EAAE,aAAa,CAAC;IAC1B;;OAEG;IACH,IAAI,EAAE,aAAa,CAAC;IACpB;;OAEG;IACH,cAAc,EAAE,YAAY,CAAC;IAC7B;;OAEG;IACH,oBAAoB,CAAC,EAAE,CACrB,UAAU,EAAE,aAAa,EACzB,SAAS,CAAC,EAAE,SAAS,KAClB,aAAa,GAAG,IAAI,CAAC;IAC1B;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,CACV,CAAC,EAAE,KAAK,CAAC,aAAa,CACpB,gBAAgB,GAAG,mBAAmB,GAAG,cAAc,CACxD,KACE,IAAI,CAAC;IACV;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAuKD,eAAO,MAAM,gBAAgB,GAAI,MAAM,aAAa,GAAG,IAAI,0BAAkB,CAAC;AAI9E;;;;;;;;;;;GAWG;AACH,QAAA,MAAM,WAAW,GAAI,uUA0BlB,kBAAkB,KAAG,eAwfvB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|