ydb-ui-components 3.5.0 → 3.6.0
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/CHANGELOG.md +7 -0
- package/build/cjs/components/TreeView/TreeView.css +9 -4
- package/build/cjs/components/TreeView/TreeView.d.ts +1 -1
- package/build/cjs/components/TreeView/TreeView.js +52 -51
- package/build/esm/components/TreeView/TreeView.css +9 -4
- package/build/esm/components/TreeView/TreeView.d.ts +1 -1
- package/build/esm/components/TreeView/TreeView.js +48 -48
- package/package.json +2 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [3.6.0](https://github.com/ydb-platform/ydb-ui-components/compare/v3.5.0...v3.6.0) (2024-01-15)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **TreeView:** remove `react-treeview` package to avoid using native `addEventListener` ([#64](https://github.com/ydb-platform/ydb-ui-components/issues/64)) ([48d0e4e](https://github.com/ydb-platform/ydb-ui-components/commit/48d0e4e32e28c3d0bebcbeaa086c3b82312f0848))
|
|
9
|
+
|
|
3
10
|
## [3.5.0](https://github.com/ydb-platform/ydb-ui-components/compare/v3.4.0...v3.5.0) (2023-12-12)
|
|
4
11
|
|
|
5
12
|
|
|
@@ -57,20 +57,25 @@
|
|
|
57
57
|
margin-left: 6px;
|
|
58
58
|
align-items: center;
|
|
59
59
|
}
|
|
60
|
-
.ydb-tree-
|
|
60
|
+
.ydb-tree-view__arrow {
|
|
61
61
|
flex-shrink: 0;
|
|
62
62
|
width: 24px;
|
|
63
63
|
height: 24px;
|
|
64
|
+
padding: 0;
|
|
64
65
|
cursor: pointer;
|
|
66
|
+
border: none;
|
|
65
67
|
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 12" width="6" height="12"><path d="M0.192529 10.7483C-0.0845649 11.0562 -0.0596061 11.5304 0.248276 11.8075C0.556159 12.0846 1.03038 12.0596 1.30747 11.7517L0.192529 10.7483ZM5.25 6.25L5.80747 6.75172C6.06418 6.46649 6.06418 6.0335 5.80747 5.74828L5.25 6.25ZM1.30747 0.748277C1.03038 0.440394 0.556159 0.415435 0.248276 0.69253C-0.0596065 0.969624 -0.0845653 1.44384 0.192529 1.75172L1.30747 0.748277ZM1.30747 11.7517L5.80747 6.75172L4.69253 5.74828L0.192529 10.7483L1.30747 11.7517ZM5.80747 5.74828L1.30747 0.748277L0.192529 1.75172L4.69253 6.75172L5.80747 5.74828Z" fill="rgba(0, 0, 0, 0.85)"/></svg>') no-repeat center center;
|
|
66
68
|
}
|
|
67
|
-
.g-root_theme_dark .ydb-tree-
|
|
69
|
+
.g-root_theme_dark .ydb-tree-view__arrow {
|
|
68
70
|
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 12" width="6" height="12"><path d="M0.192529 10.7483C-0.0845649 11.0562 -0.0596061 11.5304 0.248276 11.8075C0.556159 12.0846 1.03038 12.0596 1.30747 11.7517L0.192529 10.7483ZM5.25 6.25L5.80747 6.75172C6.06418 6.46649 6.06418 6.0335 5.80747 5.74828L5.25 6.25ZM1.30747 0.748277C1.03038 0.440394 0.556159 0.415435 0.248276 0.69253C-0.0596065 0.969624 -0.0845653 1.44384 0.192529 1.75172L1.30747 0.748277ZM1.30747 11.7517L5.80747 6.75172L4.69253 5.74828L0.192529 10.7483L1.30747 11.7517ZM5.80747 5.74828L1.30747 0.748277L0.192529 1.75172L4.69253 6.75172L5.80747 5.74828Z" fill="rgba(255, 255, 255, 0.85)"/></svg>') no-repeat center center;
|
|
69
71
|
}
|
|
70
|
-
.ydb-tree-
|
|
72
|
+
.ydb-tree-view__arrow:focus-visible {
|
|
73
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
74
|
+
}
|
|
75
|
+
.ydb-tree-view__arrow:not(.ydb-tree-view__arrow_collapsed) {
|
|
71
76
|
transform: rotate(90deg);
|
|
72
77
|
}
|
|
73
|
-
.ydb-tree-
|
|
78
|
+
.ydb-tree-view__arrow_hidden {
|
|
74
79
|
visibility: hidden;
|
|
75
80
|
}
|
|
76
81
|
.ydb-tree-view .ydb-tree-view .ydb-tree-view__item {
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
+
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
6
8
|
exports.TreeView = TreeView;
|
|
7
9
|
|
|
8
|
-
var
|
|
10
|
+
var _uikit = require("@gravity-ui/uikit");
|
|
9
11
|
|
|
10
12
|
var _bemCnLite = _interopRequireDefault(require("bem-cn-lite"));
|
|
11
13
|
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
var _uikit = require("@gravity-ui/uikit");
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
15
|
|
|
16
16
|
require("./TreeView.css");
|
|
17
17
|
|
|
18
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
|
+
|
|
20
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
+
|
|
18
22
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
19
23
|
|
|
20
24
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
@@ -38,10 +42,47 @@ function TreeView(_ref) {
|
|
|
38
42
|
actions = _ref.actions,
|
|
39
43
|
additionalNodeElements = _ref.additionalNodeElements,
|
|
40
44
|
level = _ref.level;
|
|
45
|
+
var handleClick = (0, _react.useCallback)(function (event) {
|
|
46
|
+
if (!onClick) return;
|
|
47
|
+
var shouldSkip = event.nativeEvent.composedPath().some(function (target) {
|
|
48
|
+
return target instanceof HTMLElement && (target.nodeName === 'BUTTON' && !target.hasAttribute('disabled') || target.hasAttribute('tabindex') && target.tabIndex > -1);
|
|
49
|
+
});
|
|
50
|
+
if (!shouldSkip) onClick();
|
|
51
|
+
}, [onClick]);
|
|
52
|
+
var handleArrowClick = onArrowClick || onClick;
|
|
53
|
+
/**
|
|
54
|
+
* These `className`s are left here for backward compatibility of CSS selectors.
|
|
55
|
+
* @link https://github.com/ydb-platform/ydb-ui-components/pull/64
|
|
56
|
+
*/
|
|
57
|
+
|
|
58
|
+
var itemClassName = 'tree-view_item';
|
|
59
|
+
var arrowClassName = 'tree-view_arrow';
|
|
60
|
+
var containerClassName = 'tree-view_children';
|
|
41
61
|
|
|
42
|
-
|
|
62
|
+
if (collapsed) {
|
|
63
|
+
arrowClassName += ' tree-view_arrow-collapsed';
|
|
64
|
+
containerClassName += ' tree-view_children-collapsed';
|
|
65
|
+
}
|
|
43
66
|
|
|
44
|
-
|
|
67
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
68
|
+
className: b(),
|
|
69
|
+
style: _defineProperty({}, TREE_LEVEL_CSS_VAR, level)
|
|
70
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
71
|
+
className: "tree-view"
|
|
72
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
73
|
+
className: "".concat(itemClassName, " ").concat(b('item', {
|
|
74
|
+
active: active
|
|
75
|
+
})),
|
|
76
|
+
onClick: handleClick
|
|
77
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
78
|
+
type: "button",
|
|
79
|
+
className: "".concat(arrowClassName, " ").concat(b('arrow', {
|
|
80
|
+
collapsed: collapsed,
|
|
81
|
+
hidden: !hasArrow
|
|
82
|
+
})),
|
|
83
|
+
disabled: !handleArrowClick,
|
|
84
|
+
onClick: handleArrowClick
|
|
85
|
+
}), /*#__PURE__*/_react["default"].createElement("div", {
|
|
45
86
|
className: b('content')
|
|
46
87
|
}, icon && /*#__PURE__*/_react["default"].createElement("div", {
|
|
47
88
|
className: b('icon')
|
|
@@ -57,49 +98,9 @@ function TreeView(_ref) {
|
|
|
57
98
|
pin: 'brick-brick'
|
|
58
99
|
},
|
|
59
100
|
items: actions
|
|
60
|
-
})))
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
if (!onClick || !itemEl) {
|
|
67
|
-
return;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
var skipClicksSelector = ".tree-view_arrow, .".concat(b('actions'));
|
|
71
|
-
|
|
72
|
-
function handleClick(event) {
|
|
73
|
-
var path = event.composedPath().filter(function (item) {
|
|
74
|
-
return item.nodeType === Node.ELEMENT_NODE;
|
|
75
|
-
});
|
|
76
|
-
var hasSkipped = path.some(function (el) {
|
|
77
|
-
return el.matches(skipClicksSelector);
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
if (!hasSkipped) {
|
|
81
|
-
onClick();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
itemEl.addEventListener('click', handleClick);
|
|
86
|
-
return function () {
|
|
87
|
-
itemEl.removeEventListener('click', handleClick);
|
|
88
|
-
};
|
|
89
|
-
}, [onClick]);
|
|
90
|
-
|
|
91
|
-
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
92
|
-
ref: rootRef,
|
|
93
|
-
className: b({
|
|
94
|
-
'no-arrow': !hasArrow
|
|
95
|
-
}),
|
|
96
|
-
style: _defineProperty({}, TREE_LEVEL_CSS_VAR, level)
|
|
97
|
-
}, /*#__PURE__*/_react["default"].createElement(_reactTreeview["default"], {
|
|
98
|
-
collapsed: collapsed,
|
|
99
|
-
itemClassName: b('item', {
|
|
100
|
-
active: active
|
|
101
|
-
}),
|
|
102
|
-
nodeLabel: nodeLabel,
|
|
103
|
-
onClick: onArrowClick
|
|
104
|
-
}, children));
|
|
101
|
+
})))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
102
|
+
className: "".concat(containerClassName, " ").concat(b('container', {
|
|
103
|
+
collapsed: collapsed
|
|
104
|
+
}))
|
|
105
|
+
}, collapsed ? null : children)));
|
|
105
106
|
}
|
|
@@ -57,20 +57,25 @@
|
|
|
57
57
|
margin-left: 6px;
|
|
58
58
|
align-items: center;
|
|
59
59
|
}
|
|
60
|
-
.ydb-tree-
|
|
60
|
+
.ydb-tree-view__arrow {
|
|
61
61
|
flex-shrink: 0;
|
|
62
62
|
width: 24px;
|
|
63
63
|
height: 24px;
|
|
64
|
+
padding: 0;
|
|
64
65
|
cursor: pointer;
|
|
66
|
+
border: none;
|
|
65
67
|
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 12" width="6" height="12"><path d="M0.192529 10.7483C-0.0845649 11.0562 -0.0596061 11.5304 0.248276 11.8075C0.556159 12.0846 1.03038 12.0596 1.30747 11.7517L0.192529 10.7483ZM5.25 6.25L5.80747 6.75172C6.06418 6.46649 6.06418 6.0335 5.80747 5.74828L5.25 6.25ZM1.30747 0.748277C1.03038 0.440394 0.556159 0.415435 0.248276 0.69253C-0.0596065 0.969624 -0.0845653 1.44384 0.192529 1.75172L1.30747 0.748277ZM1.30747 11.7517L5.80747 6.75172L4.69253 5.74828L0.192529 10.7483L1.30747 11.7517ZM5.80747 5.74828L1.30747 0.748277L0.192529 1.75172L4.69253 6.75172L5.80747 5.74828Z" fill="rgba(0, 0, 0, 0.85)"/></svg>') no-repeat center center;
|
|
66
68
|
}
|
|
67
|
-
.g-root_theme_dark .ydb-tree-
|
|
69
|
+
.g-root_theme_dark .ydb-tree-view__arrow {
|
|
68
70
|
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 6 12" width="6" height="12"><path d="M0.192529 10.7483C-0.0845649 11.0562 -0.0596061 11.5304 0.248276 11.8075C0.556159 12.0846 1.03038 12.0596 1.30747 11.7517L0.192529 10.7483ZM5.25 6.25L5.80747 6.75172C6.06418 6.46649 6.06418 6.0335 5.80747 5.74828L5.25 6.25ZM1.30747 0.748277C1.03038 0.440394 0.556159 0.415435 0.248276 0.69253C-0.0596065 0.969624 -0.0845653 1.44384 0.192529 1.75172L1.30747 0.748277ZM1.30747 11.7517L5.80747 6.75172L4.69253 5.74828L0.192529 10.7483L1.30747 11.7517ZM5.80747 5.74828L1.30747 0.748277L0.192529 1.75172L4.69253 6.75172L5.80747 5.74828Z" fill="rgba(255, 255, 255, 0.85)"/></svg>') no-repeat center center;
|
|
69
71
|
}
|
|
70
|
-
.ydb-tree-
|
|
72
|
+
.ydb-tree-view__arrow:focus-visible {
|
|
73
|
+
outline: 2px solid var(--g-color-line-focus);
|
|
74
|
+
}
|
|
75
|
+
.ydb-tree-view__arrow:not(.ydb-tree-view__arrow_collapsed) {
|
|
71
76
|
transform: rotate(90deg);
|
|
72
77
|
}
|
|
73
|
-
.ydb-tree-
|
|
78
|
+
.ydb-tree-view__arrow_hidden {
|
|
74
79
|
visibility: hidden;
|
|
75
80
|
}
|
|
76
81
|
.ydb-tree-view .ydb-tree-view .ydb-tree-view__item {
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
2
|
|
|
3
|
-
import React from 'react';
|
|
4
|
-
import block from 'bem-cn-lite';
|
|
5
|
-
import ReactTreeView from 'react-treeview';
|
|
6
3
|
import { DropdownMenu } from '@gravity-ui/uikit';
|
|
4
|
+
import block from 'bem-cn-lite';
|
|
5
|
+
import React, { useCallback } from 'react';
|
|
7
6
|
import './TreeView.css';
|
|
8
7
|
var TREE_LEVEL_CSS_VAR = '--ydb-tree-view-level';
|
|
9
8
|
var b = block('ydb-tree-view');
|
|
@@ -23,8 +22,47 @@ export function TreeView(_ref) {
|
|
|
23
22
|
actions = _ref.actions,
|
|
24
23
|
additionalNodeElements = _ref.additionalNodeElements,
|
|
25
24
|
level = _ref.level;
|
|
26
|
-
var
|
|
27
|
-
|
|
25
|
+
var handleClick = useCallback(function (event) {
|
|
26
|
+
if (!onClick) return;
|
|
27
|
+
var shouldSkip = event.nativeEvent.composedPath().some(function (target) {
|
|
28
|
+
return target instanceof HTMLElement && (target.nodeName === 'BUTTON' && !target.hasAttribute('disabled') || target.hasAttribute('tabindex') && target.tabIndex > -1);
|
|
29
|
+
});
|
|
30
|
+
if (!shouldSkip) onClick();
|
|
31
|
+
}, [onClick]);
|
|
32
|
+
var handleArrowClick = onArrowClick || onClick;
|
|
33
|
+
/**
|
|
34
|
+
* These `className`s are left here for backward compatibility of CSS selectors.
|
|
35
|
+
* @link https://github.com/ydb-platform/ydb-ui-components/pull/64
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
var itemClassName = 'tree-view_item';
|
|
39
|
+
var arrowClassName = 'tree-view_arrow';
|
|
40
|
+
var containerClassName = 'tree-view_children';
|
|
41
|
+
|
|
42
|
+
if (collapsed) {
|
|
43
|
+
arrowClassName += ' tree-view_arrow-collapsed';
|
|
44
|
+
containerClassName += ' tree-view_children-collapsed';
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
48
|
+
className: b(),
|
|
49
|
+
style: _defineProperty({}, TREE_LEVEL_CSS_VAR, level)
|
|
50
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
51
|
+
className: "tree-view"
|
|
52
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
53
|
+
className: "".concat(itemClassName, " ").concat(b('item', {
|
|
54
|
+
active: active
|
|
55
|
+
})),
|
|
56
|
+
onClick: handleClick
|
|
57
|
+
}, /*#__PURE__*/React.createElement("button", {
|
|
58
|
+
type: "button",
|
|
59
|
+
className: "".concat(arrowClassName, " ").concat(b('arrow', {
|
|
60
|
+
collapsed: collapsed,
|
|
61
|
+
hidden: !hasArrow
|
|
62
|
+
})),
|
|
63
|
+
disabled: !handleArrowClick,
|
|
64
|
+
onClick: handleArrowClick
|
|
65
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
28
66
|
className: b('content')
|
|
29
67
|
}, icon && /*#__PURE__*/React.createElement("div", {
|
|
30
68
|
className: b('icon')
|
|
@@ -40,47 +78,9 @@ export function TreeView(_ref) {
|
|
|
40
78
|
pin: 'brick-brick'
|
|
41
79
|
},
|
|
42
80
|
items: actions
|
|
43
|
-
})))
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
if (!onClick || !itemEl) {
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
var skipClicksSelector = ".tree-view_arrow, .".concat(b('actions'));
|
|
53
|
-
|
|
54
|
-
function handleClick(event) {
|
|
55
|
-
var path = event.composedPath().filter(function (item) {
|
|
56
|
-
return item.nodeType === Node.ELEMENT_NODE;
|
|
57
|
-
});
|
|
58
|
-
var hasSkipped = path.some(function (el) {
|
|
59
|
-
return el.matches(skipClicksSelector);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
if (!hasSkipped) {
|
|
63
|
-
onClick();
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
itemEl.addEventListener('click', handleClick);
|
|
68
|
-
return function () {
|
|
69
|
-
itemEl.removeEventListener('click', handleClick);
|
|
70
|
-
};
|
|
71
|
-
}, [onClick]);
|
|
72
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
73
|
-
ref: rootRef,
|
|
74
|
-
className: b({
|
|
75
|
-
'no-arrow': !hasArrow
|
|
76
|
-
}),
|
|
77
|
-
style: _defineProperty({}, TREE_LEVEL_CSS_VAR, level)
|
|
78
|
-
}, /*#__PURE__*/React.createElement(ReactTreeView, {
|
|
79
|
-
collapsed: collapsed,
|
|
80
|
-
itemClassName: b('item', {
|
|
81
|
-
active: active
|
|
82
|
-
}),
|
|
83
|
-
nodeLabel: nodeLabel,
|
|
84
|
-
onClick: onArrowClick
|
|
85
|
-
}, children));
|
|
81
|
+
})))), /*#__PURE__*/React.createElement("div", {
|
|
82
|
+
className: "".concat(containerClassName, " ").concat(b('container', {
|
|
83
|
+
collapsed: collapsed
|
|
84
|
+
}))
|
|
85
|
+
}, collapsed ? null : children)));
|
|
86
86
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ydb-ui-components",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"exports": {
|
|
@@ -33,8 +33,7 @@
|
|
|
33
33
|
"dependencies": {
|
|
34
34
|
"@gravity-ui/i18n": "^1.0.0",
|
|
35
35
|
"bem-cn-lite": "^4.1.0",
|
|
36
|
-
"react-list": "^0.8.17"
|
|
37
|
-
"react-treeview": "^0.4.7"
|
|
36
|
+
"react-list": "^0.8.17"
|
|
38
37
|
},
|
|
39
38
|
"devDependencies": {
|
|
40
39
|
"@babel/core": "^7.17.8",
|