trotl-table 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +146 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.esm.js +142 -0
- package/dist/index.esm.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var React = require('react');
|
|
4
|
+
|
|
5
|
+
const TableContext = /*#__PURE__*/React.createContext(null);
|
|
6
|
+
const useTable = () => React.useContext(TableContext);
|
|
7
|
+
const TableProvider = ({
|
|
8
|
+
children
|
|
9
|
+
}) => {
|
|
10
|
+
// Stores meta per tableId
|
|
11
|
+
const [tables, setTables] = React.useState({});
|
|
12
|
+
|
|
13
|
+
// Store selected rows per table
|
|
14
|
+
const [selectedRows, setSelectedRows] = React.useState({});
|
|
15
|
+
|
|
16
|
+
// Store sorting per table
|
|
17
|
+
const [sorting, setSorting] = React.useState({});
|
|
18
|
+
|
|
19
|
+
// -----------------------------
|
|
20
|
+
// Stable functions (useCallback)
|
|
21
|
+
// -----------------------------
|
|
22
|
+
|
|
23
|
+
const registerTable = React.useCallback((tableId, meta = {}) => {
|
|
24
|
+
setTables(prev => ({
|
|
25
|
+
...prev,
|
|
26
|
+
[tableId]: {
|
|
27
|
+
...(prev[tableId] || {}),
|
|
28
|
+
...meta
|
|
29
|
+
}
|
|
30
|
+
}));
|
|
31
|
+
}, []);
|
|
32
|
+
const unregisterTable = React.useCallback(tableId => {
|
|
33
|
+
setTables(prev => {
|
|
34
|
+
const newTables = {
|
|
35
|
+
...prev
|
|
36
|
+
};
|
|
37
|
+
delete newTables[tableId];
|
|
38
|
+
return newTables;
|
|
39
|
+
});
|
|
40
|
+
setSelectedRows(prev => {
|
|
41
|
+
const x = {
|
|
42
|
+
...prev
|
|
43
|
+
};
|
|
44
|
+
delete x[tableId];
|
|
45
|
+
return x;
|
|
46
|
+
});
|
|
47
|
+
setSorting(prev => {
|
|
48
|
+
const x = {
|
|
49
|
+
...prev
|
|
50
|
+
};
|
|
51
|
+
delete x[tableId];
|
|
52
|
+
return x;
|
|
53
|
+
});
|
|
54
|
+
}, []);
|
|
55
|
+
const updateTableMeta = React.useCallback((tableId, patch = {}) => {
|
|
56
|
+
setTables(prev => ({
|
|
57
|
+
...prev,
|
|
58
|
+
[tableId]: {
|
|
59
|
+
...(prev[tableId] || {}),
|
|
60
|
+
...patch
|
|
61
|
+
}
|
|
62
|
+
}));
|
|
63
|
+
}, []);
|
|
64
|
+
|
|
65
|
+
// -----------------------------
|
|
66
|
+
// Manage Selected Rows
|
|
67
|
+
// -----------------------------
|
|
68
|
+
|
|
69
|
+
const toggleRowSelection = React.useCallback((tableId, rowId) => {
|
|
70
|
+
setSelectedRows(prev => {
|
|
71
|
+
const rowSet = new Set(prev[tableId] || []);
|
|
72
|
+
rowSet.has(rowId) ? rowSet.delete(rowId) : rowSet.add(rowId);
|
|
73
|
+
return {
|
|
74
|
+
...prev,
|
|
75
|
+
[tableId]: Array.from(rowSet)
|
|
76
|
+
};
|
|
77
|
+
});
|
|
78
|
+
}, []);
|
|
79
|
+
const clearSelection = React.useCallback(tableId => {
|
|
80
|
+
setSelectedRows(prev => ({
|
|
81
|
+
...prev,
|
|
82
|
+
[tableId]: []
|
|
83
|
+
}));
|
|
84
|
+
}, []);
|
|
85
|
+
|
|
86
|
+
// -----------------------------
|
|
87
|
+
// Sorting
|
|
88
|
+
// -----------------------------
|
|
89
|
+
|
|
90
|
+
const setSort = React.useCallback((tableId, column) => {
|
|
91
|
+
setSorting(prev => {
|
|
92
|
+
const current = prev[tableId];
|
|
93
|
+
|
|
94
|
+
// cycling: null → asc → desc → null
|
|
95
|
+
if (!current || current.column !== column) {
|
|
96
|
+
return {
|
|
97
|
+
...prev,
|
|
98
|
+
[tableId]: {
|
|
99
|
+
column,
|
|
100
|
+
direction: "asc"
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
if (current.direction === "asc") {
|
|
105
|
+
return {
|
|
106
|
+
...prev,
|
|
107
|
+
[tableId]: {
|
|
108
|
+
column,
|
|
109
|
+
direction: "desc"
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// if direction === "desc" → remove sorting
|
|
115
|
+
return {
|
|
116
|
+
...prev,
|
|
117
|
+
[tableId]: null
|
|
118
|
+
};
|
|
119
|
+
});
|
|
120
|
+
}, []);
|
|
121
|
+
|
|
122
|
+
// ------------------------------------
|
|
123
|
+
// Memoized final context value
|
|
124
|
+
// ------------------------------------
|
|
125
|
+
const value = React.useMemo(() => {
|
|
126
|
+
return {
|
|
127
|
+
tables,
|
|
128
|
+
selectedRows,
|
|
129
|
+
sorting,
|
|
130
|
+
registerTable,
|
|
131
|
+
unregisterTable,
|
|
132
|
+
updateTableMeta,
|
|
133
|
+
toggleRowSelection,
|
|
134
|
+
clearSelection,
|
|
135
|
+
setSort
|
|
136
|
+
};
|
|
137
|
+
}, [tables, selectedRows, sorting, registerTable, unregisterTable, updateTableMeta, toggleRowSelection, clearSelection, setSort]);
|
|
138
|
+
return /*#__PURE__*/React.createElement(TableContext.Provider, {
|
|
139
|
+
value: value
|
|
140
|
+
}, children);
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
exports.TableContext = TableContext;
|
|
144
|
+
exports.TableProvider = TableProvider;
|
|
145
|
+
exports.useTable = useTable;
|
|
146
|
+
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../src/TableContext.jsx"],"sourcesContent":["import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useCallback,\r\n useMemo\r\n} from \"react\";\r\n\r\nexport const TableContext = createContext(null);\r\n\r\nexport const useTable = () => useContext(TableContext);\r\n\r\nexport const TableProvider = ({ children }) => {\r\n // Stores meta per tableId\r\n const [tables, setTables] = useState({});\r\n\r\n // Store selected rows per table\r\n const [selectedRows, setSelectedRows] = useState({});\r\n\r\n // Store sorting per table\r\n const [sorting, setSorting] = useState({});\r\n\r\n // -----------------------------\r\n // Stable functions (useCallback)\r\n // -----------------------------\r\n\r\n const registerTable = useCallback((tableId, meta = {}) => {\r\n setTables((prev) => ({\r\n ...prev,\r\n [tableId]: { ...(prev[tableId] || {}), ...meta }\r\n }));\r\n }, []);\r\n\r\n const unregisterTable = useCallback((tableId) => {\r\n setTables((prev) => {\r\n const newTables = { ...prev };\r\n delete newTables[tableId];\r\n return newTables;\r\n });\r\n\r\n setSelectedRows((prev) => {\r\n const x = { ...prev };\r\n delete x[tableId];\r\n return x;\r\n });\r\n\r\n setSorting((prev) => {\r\n const x = { ...prev };\r\n delete x[tableId];\r\n return x;\r\n });\r\n }, []);\r\n\r\n const updateTableMeta = useCallback((tableId, patch = {}) => {\r\n setTables((prev) => ({\r\n ...prev,\r\n [tableId]: { ...(prev[tableId] || {}), ...patch }\r\n }));\r\n }, []);\r\n\r\n // -----------------------------\r\n // Manage Selected Rows\r\n // -----------------------------\r\n\r\n const toggleRowSelection = useCallback((tableId, rowId) => {\r\n setSelectedRows((prev) => {\r\n const rowSet = new Set(prev[tableId] || []);\r\n rowSet.has(rowId) ? rowSet.delete(rowId) : rowSet.add(rowId);\r\n\r\n return {\r\n ...prev,\r\n [tableId]: Array.from(rowSet)\r\n };\r\n });\r\n }, []);\r\n\r\n const clearSelection = useCallback((tableId) => {\r\n setSelectedRows((prev) => ({\r\n ...prev,\r\n [tableId]: []\r\n }));\r\n }, []);\r\n\r\n // -----------------------------\r\n // Sorting\r\n // -----------------------------\r\n\r\n const setSort = useCallback((tableId, column) => {\r\n setSorting((prev) => {\r\n const current = prev[tableId];\r\n\r\n // cycling: null → asc → desc → null\r\n if (!current || current.column !== column) {\r\n return { ...prev, [tableId]: { column, direction: \"asc\" } };\r\n }\r\n\r\n if (current.direction === \"asc\") {\r\n return { ...prev, [tableId]: { column, direction: \"desc\" } };\r\n }\r\n\r\n // if direction === \"desc\" → remove sorting\r\n return {\r\n ...prev,\r\n [tableId]: null\r\n };\r\n });\r\n }, []);\r\n\r\n // ------------------------------------\r\n // Memoized final context value\r\n // ------------------------------------\r\n const value = useMemo(() => {\r\n return {\r\n tables,\r\n selectedRows,\r\n sorting,\r\n\r\n registerTable,\r\n unregisterTable,\r\n updateTableMeta,\r\n\r\n toggleRowSelection,\r\n clearSelection,\r\n\r\n setSort\r\n };\r\n }, [\r\n tables,\r\n selectedRows,\r\n sorting,\r\n registerTable,\r\n unregisterTable,\r\n updateTableMeta,\r\n toggleRowSelection,\r\n clearSelection,\r\n setSort\r\n ]);\r\n\r\n return (\r\n <TableContext.Provider value={value}>{children}</TableContext.Provider>\r\n );\r\n};\r\n"],"names":["TableContext","createContext","useTable","useContext","TableProvider","children","tables","setTables","useState","selectedRows","setSelectedRows","sorting","setSorting","registerTable","useCallback","tableId","meta","prev","unregisterTable","newTables","x","updateTableMeta","patch","toggleRowSelection","rowId","rowSet","Set","has","delete","add","Array","from","clearSelection","setSort","column","current","direction","value","useMemo","React","createElement","Provider"],"mappings":"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"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import React, { useContext, createContext, useState, useCallback, useMemo } from 'react';
|
|
2
|
+
|
|
3
|
+
const TableContext = /*#__PURE__*/createContext(null);
|
|
4
|
+
const useTable = () => useContext(TableContext);
|
|
5
|
+
const TableProvider = ({
|
|
6
|
+
children
|
|
7
|
+
}) => {
|
|
8
|
+
// Stores meta per tableId
|
|
9
|
+
const [tables, setTables] = useState({});
|
|
10
|
+
|
|
11
|
+
// Store selected rows per table
|
|
12
|
+
const [selectedRows, setSelectedRows] = useState({});
|
|
13
|
+
|
|
14
|
+
// Store sorting per table
|
|
15
|
+
const [sorting, setSorting] = useState({});
|
|
16
|
+
|
|
17
|
+
// -----------------------------
|
|
18
|
+
// Stable functions (useCallback)
|
|
19
|
+
// -----------------------------
|
|
20
|
+
|
|
21
|
+
const registerTable = useCallback((tableId, meta = {}) => {
|
|
22
|
+
setTables(prev => ({
|
|
23
|
+
...prev,
|
|
24
|
+
[tableId]: {
|
|
25
|
+
...(prev[tableId] || {}),
|
|
26
|
+
...meta
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
29
|
+
}, []);
|
|
30
|
+
const unregisterTable = useCallback(tableId => {
|
|
31
|
+
setTables(prev => {
|
|
32
|
+
const newTables = {
|
|
33
|
+
...prev
|
|
34
|
+
};
|
|
35
|
+
delete newTables[tableId];
|
|
36
|
+
return newTables;
|
|
37
|
+
});
|
|
38
|
+
setSelectedRows(prev => {
|
|
39
|
+
const x = {
|
|
40
|
+
...prev
|
|
41
|
+
};
|
|
42
|
+
delete x[tableId];
|
|
43
|
+
return x;
|
|
44
|
+
});
|
|
45
|
+
setSorting(prev => {
|
|
46
|
+
const x = {
|
|
47
|
+
...prev
|
|
48
|
+
};
|
|
49
|
+
delete x[tableId];
|
|
50
|
+
return x;
|
|
51
|
+
});
|
|
52
|
+
}, []);
|
|
53
|
+
const updateTableMeta = useCallback((tableId, patch = {}) => {
|
|
54
|
+
setTables(prev => ({
|
|
55
|
+
...prev,
|
|
56
|
+
[tableId]: {
|
|
57
|
+
...(prev[tableId] || {}),
|
|
58
|
+
...patch
|
|
59
|
+
}
|
|
60
|
+
}));
|
|
61
|
+
}, []);
|
|
62
|
+
|
|
63
|
+
// -----------------------------
|
|
64
|
+
// Manage Selected Rows
|
|
65
|
+
// -----------------------------
|
|
66
|
+
|
|
67
|
+
const toggleRowSelection = useCallback((tableId, rowId) => {
|
|
68
|
+
setSelectedRows(prev => {
|
|
69
|
+
const rowSet = new Set(prev[tableId] || []);
|
|
70
|
+
rowSet.has(rowId) ? rowSet.delete(rowId) : rowSet.add(rowId);
|
|
71
|
+
return {
|
|
72
|
+
...prev,
|
|
73
|
+
[tableId]: Array.from(rowSet)
|
|
74
|
+
};
|
|
75
|
+
});
|
|
76
|
+
}, []);
|
|
77
|
+
const clearSelection = useCallback(tableId => {
|
|
78
|
+
setSelectedRows(prev => ({
|
|
79
|
+
...prev,
|
|
80
|
+
[tableId]: []
|
|
81
|
+
}));
|
|
82
|
+
}, []);
|
|
83
|
+
|
|
84
|
+
// -----------------------------
|
|
85
|
+
// Sorting
|
|
86
|
+
// -----------------------------
|
|
87
|
+
|
|
88
|
+
const setSort = useCallback((tableId, column) => {
|
|
89
|
+
setSorting(prev => {
|
|
90
|
+
const current = prev[tableId];
|
|
91
|
+
|
|
92
|
+
// cycling: null → asc → desc → null
|
|
93
|
+
if (!current || current.column !== column) {
|
|
94
|
+
return {
|
|
95
|
+
...prev,
|
|
96
|
+
[tableId]: {
|
|
97
|
+
column,
|
|
98
|
+
direction: "asc"
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (current.direction === "asc") {
|
|
103
|
+
return {
|
|
104
|
+
...prev,
|
|
105
|
+
[tableId]: {
|
|
106
|
+
column,
|
|
107
|
+
direction: "desc"
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// if direction === "desc" → remove sorting
|
|
113
|
+
return {
|
|
114
|
+
...prev,
|
|
115
|
+
[tableId]: null
|
|
116
|
+
};
|
|
117
|
+
});
|
|
118
|
+
}, []);
|
|
119
|
+
|
|
120
|
+
// ------------------------------------
|
|
121
|
+
// Memoized final context value
|
|
122
|
+
// ------------------------------------
|
|
123
|
+
const value = useMemo(() => {
|
|
124
|
+
return {
|
|
125
|
+
tables,
|
|
126
|
+
selectedRows,
|
|
127
|
+
sorting,
|
|
128
|
+
registerTable,
|
|
129
|
+
unregisterTable,
|
|
130
|
+
updateTableMeta,
|
|
131
|
+
toggleRowSelection,
|
|
132
|
+
clearSelection,
|
|
133
|
+
setSort
|
|
134
|
+
};
|
|
135
|
+
}, [tables, selectedRows, sorting, registerTable, unregisterTable, updateTableMeta, toggleRowSelection, clearSelection, setSort]);
|
|
136
|
+
return /*#__PURE__*/React.createElement(TableContext.Provider, {
|
|
137
|
+
value: value
|
|
138
|
+
}, children);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
export { TableContext, TableProvider, useTable };
|
|
142
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/TableContext.jsx"],"sourcesContent":["import React, {\r\n createContext,\r\n useContext,\r\n useState,\r\n useCallback,\r\n useMemo\r\n} from \"react\";\r\n\r\nexport const TableContext = createContext(null);\r\n\r\nexport const useTable = () => useContext(TableContext);\r\n\r\nexport const TableProvider = ({ children }) => {\r\n // Stores meta per tableId\r\n const [tables, setTables] = useState({});\r\n\r\n // Store selected rows per table\r\n const [selectedRows, setSelectedRows] = useState({});\r\n\r\n // Store sorting per table\r\n const [sorting, setSorting] = useState({});\r\n\r\n // -----------------------------\r\n // Stable functions (useCallback)\r\n // -----------------------------\r\n\r\n const registerTable = useCallback((tableId, meta = {}) => {\r\n setTables((prev) => ({\r\n ...prev,\r\n [tableId]: { ...(prev[tableId] || {}), ...meta }\r\n }));\r\n }, []);\r\n\r\n const unregisterTable = useCallback((tableId) => {\r\n setTables((prev) => {\r\n const newTables = { ...prev };\r\n delete newTables[tableId];\r\n return newTables;\r\n });\r\n\r\n setSelectedRows((prev) => {\r\n const x = { ...prev };\r\n delete x[tableId];\r\n return x;\r\n });\r\n\r\n setSorting((prev) => {\r\n const x = { ...prev };\r\n delete x[tableId];\r\n return x;\r\n });\r\n }, []);\r\n\r\n const updateTableMeta = useCallback((tableId, patch = {}) => {\r\n setTables((prev) => ({\r\n ...prev,\r\n [tableId]: { ...(prev[tableId] || {}), ...patch }\r\n }));\r\n }, []);\r\n\r\n // -----------------------------\r\n // Manage Selected Rows\r\n // -----------------------------\r\n\r\n const toggleRowSelection = useCallback((tableId, rowId) => {\r\n setSelectedRows((prev) => {\r\n const rowSet = new Set(prev[tableId] || []);\r\n rowSet.has(rowId) ? rowSet.delete(rowId) : rowSet.add(rowId);\r\n\r\n return {\r\n ...prev,\r\n [tableId]: Array.from(rowSet)\r\n };\r\n });\r\n }, []);\r\n\r\n const clearSelection = useCallback((tableId) => {\r\n setSelectedRows((prev) => ({\r\n ...prev,\r\n [tableId]: []\r\n }));\r\n }, []);\r\n\r\n // -----------------------------\r\n // Sorting\r\n // -----------------------------\r\n\r\n const setSort = useCallback((tableId, column) => {\r\n setSorting((prev) => {\r\n const current = prev[tableId];\r\n\r\n // cycling: null → asc → desc → null\r\n if (!current || current.column !== column) {\r\n return { ...prev, [tableId]: { column, direction: \"asc\" } };\r\n }\r\n\r\n if (current.direction === \"asc\") {\r\n return { ...prev, [tableId]: { column, direction: \"desc\" } };\r\n }\r\n\r\n // if direction === \"desc\" → remove sorting\r\n return {\r\n ...prev,\r\n [tableId]: null\r\n };\r\n });\r\n }, []);\r\n\r\n // ------------------------------------\r\n // Memoized final context value\r\n // ------------------------------------\r\n const value = useMemo(() => {\r\n return {\r\n tables,\r\n selectedRows,\r\n sorting,\r\n\r\n registerTable,\r\n unregisterTable,\r\n updateTableMeta,\r\n\r\n toggleRowSelection,\r\n clearSelection,\r\n\r\n setSort\r\n };\r\n }, [\r\n tables,\r\n selectedRows,\r\n sorting,\r\n registerTable,\r\n unregisterTable,\r\n updateTableMeta,\r\n toggleRowSelection,\r\n clearSelection,\r\n setSort\r\n ]);\r\n\r\n return (\r\n <TableContext.Provider value={value}>{children}</TableContext.Provider>\r\n );\r\n};\r\n"],"names":["TableContext","createContext","useTable","useContext","TableProvider","children","tables","setTables","useState","selectedRows","setSelectedRows","sorting","setSorting","registerTable","useCallback","tableId","meta","prev","unregisterTable","newTables","x","updateTableMeta","patch","toggleRowSelection","rowId","rowSet","Set","has","delete","add","Array","from","clearSelection","setSort","column","current","direction","value","useMemo","React","createElement","Provider"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "trotl-table",
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Reusable table UI",
|
|
5
|
+
"main": "dist/index.cjs.js",
|
|
6
|
+
"module": "dist/index.esm.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist",
|
|
10
|
+
"dist/index.css"
|
|
11
|
+
],
|
|
12
|
+
"scripts": {
|
|
13
|
+
"dev": "vite",
|
|
14
|
+
"build": "rollup -c",
|
|
15
|
+
"prepublishOnly": "npm run build"
|
|
16
|
+
},
|
|
17
|
+
"peerDependencies": {
|
|
18
|
+
"react": ">=17",
|
|
19
|
+
"react-dnd": ">=16",
|
|
20
|
+
"react-dnd-html5-backend": ">=16",
|
|
21
|
+
"react-dom": ">=17"
|
|
22
|
+
},
|
|
23
|
+
"author": "DejanTrotl",
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"type": "module",
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@babel/preset-react": "^7.28.5",
|
|
28
|
+
"@eslint/js": "^9.39.1",
|
|
29
|
+
"@rollup/plugin-babel": "^6.1.0",
|
|
30
|
+
"@rollup/plugin-commonjs": "^29.0.0",
|
|
31
|
+
"@rollup/plugin-node-resolve": "^16.0.3",
|
|
32
|
+
"@types/react": "^19.2.5",
|
|
33
|
+
"@types/react-dom": "^19.2.3",
|
|
34
|
+
"@vitejs/plugin-react": "^5.1.1",
|
|
35
|
+
"eslint": "^9.39.1",
|
|
36
|
+
"eslint-plugin-react-hooks": "^7.0.1",
|
|
37
|
+
"eslint-plugin-react-refresh": "^0.4.24",
|
|
38
|
+
"globals": "^16.5.0",
|
|
39
|
+
"rollup": "^4.53.3",
|
|
40
|
+
"rollup-plugin-peer-deps-external": "^2.2.4",
|
|
41
|
+
"rollup-plugin-postcss": "^4.0.2",
|
|
42
|
+
"vite": "^7.2.4"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"react": ">=17",
|
|
46
|
+
"react-dnd": ">=16",
|
|
47
|
+
"react-dnd-html5-backend": ">=16",
|
|
48
|
+
"react-dom": ">=17",
|
|
49
|
+
"react-virtualized": "^9.22.6"
|
|
50
|
+
},
|
|
51
|
+
"keywords": [
|
|
52
|
+
"react",
|
|
53
|
+
"calendar",
|
|
54
|
+
"drag-and-drop",
|
|
55
|
+
"ui-library"
|
|
56
|
+
]
|
|
57
|
+
}
|