@sis-cc/dotstatsuite-visions 12.0.0 → 12.2.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/es/CollapseButtons/Item.js +1 -0
- package/es/InputNumber/InputNumber.js +1 -1
- package/es/TableHtml5/header.js +1 -1
- package/es/VirtualizedTree/withSpotlight.js +38 -13
- package/es/theme.js +20 -7
- package/lib/CollapseButtons/Item.js +1 -0
- package/lib/InputNumber/InputNumber.js +1 -1
- package/lib/TableHtml5/header.js +1 -1
- package/lib/VirtualizedTree/withSpotlight.js +37 -12
- package/lib/theme.js +21 -7
- package/package.json +3 -4
- package/umd/@sis-cc/dotstatsuite-visions.js +65 -26
- package/umd/@sis-cc/dotstatsuite-visions.min.js +4 -4
- package/umd/@sis-cc/dotstatsuite-visions.min.js.map +1 -1
|
@@ -23,7 +23,7 @@ var useStyles = makeStyles(function (theme) {
|
|
|
23
23
|
margin: '0px 10px 0 10px'
|
|
24
24
|
},
|
|
25
25
|
input: {
|
|
26
|
-
padding: '4px
|
|
26
|
+
padding: '4px 4px',
|
|
27
27
|
height: 27,
|
|
28
28
|
'&[type=number]::-webkit-inner-spin-button, &[type=number]::-webkit-outer-spin-button': {
|
|
29
29
|
'-webkit-appearance': 'none',
|
package/es/TableHtml5/header.js
CHANGED
|
@@ -63,7 +63,7 @@ var Header = function Header(_ref) {
|
|
|
63
63
|
var theme = useTheme();
|
|
64
64
|
var isRtl = getIsRtl(theme);
|
|
65
65
|
|
|
66
|
-
var stickyLabelPosition = R.last(subHeadCellsWidth) +
|
|
66
|
+
var stickyLabelPosition = R.last(subHeadCellsWidth) + 'px + 30px + ' + theme.spacing(1);
|
|
67
67
|
|
|
68
68
|
if (R.compose(R.anyPass([R.isNil, R.isEmpty]), R.path([0, 'data']))(headerData)) return null;
|
|
69
69
|
return timesIndexed(function (index) {
|
|
@@ -5,31 +5,55 @@ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in ob
|
|
|
5
5
|
/* eslint react/prop-types: 0 */
|
|
6
6
|
import * as R from 'ramda';
|
|
7
7
|
import React, { useEffect, useMemo, useState } from 'react';
|
|
8
|
-
import { getHierarchicalId } from './utils';
|
|
8
|
+
import { getDescendants, getHierarchicalId } from './utils';
|
|
9
9
|
|
|
10
10
|
export var spotlightFilter = function spotlightFilter(term) {
|
|
11
11
|
var labelRenderer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : R.prop('label');
|
|
12
|
+
var displayChildren = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
12
13
|
return function (items) {
|
|
13
14
|
if (R.isEmpty(term) || R.isNil(term)) {
|
|
14
15
|
return items;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
var groupedItemsByParentId = R.groupBy(R.propOr('#ROOT', 'parentId'), items);
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
|
|
20
|
+
var findParents = function findParents(item) {
|
|
21
|
+
var acc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
22
|
+
|
|
23
|
+
var parentId = R.prop('parentId', item);
|
|
24
|
+
if (parentId && parentId !== '#ROOT') {
|
|
25
|
+
var parent = R.find(R.propEq('id', parentId), items);
|
|
26
|
+
if (parent) {
|
|
27
|
+
return findParents(parent, [parent].concat(acc));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return acc;
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
var recurse = function recurse(item) {
|
|
34
|
+
var isValidItem = R.includes(R.toLower(term), R.toLower(labelRenderer(item)));
|
|
35
|
+
|
|
36
|
+
var result = [];
|
|
37
|
+
|
|
20
38
|
if (isValidItem) {
|
|
21
|
-
|
|
39
|
+
var parents = findParents(item);
|
|
40
|
+
result = [].concat(parents, [item]);
|
|
41
|
+
if (displayChildren) {
|
|
42
|
+
var children = getDescendants(R.prop('id', item), groupedItemsByParentId);
|
|
43
|
+
return [].concat(parents, [item], children);
|
|
44
|
+
}
|
|
22
45
|
}
|
|
23
46
|
if (R.has(getHierarchicalId(item), groupedItemsByParentId)) {
|
|
24
|
-
var
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
47
|
+
var childItems = groupedItemsByParentId[getHierarchicalId(item)] || [];
|
|
48
|
+
var matchingChildren = R.chain(recurse, childItems);
|
|
49
|
+
|
|
50
|
+
// res with any matching children
|
|
51
|
+
return R.uniq([].concat(result, matchingChildren));
|
|
28
52
|
}
|
|
29
|
-
return
|
|
30
|
-
}
|
|
53
|
+
return result;
|
|
54
|
+
};
|
|
31
55
|
|
|
32
|
-
return recurse
|
|
56
|
+
return R.uniq(R.chain(recurse, groupedItemsByParentId['#ROOT'] || []));
|
|
33
57
|
};
|
|
34
58
|
};
|
|
35
59
|
|
|
@@ -38,7 +62,8 @@ var withSpotlight = function withSpotlight(Component) {
|
|
|
38
62
|
var items = _ref.items,
|
|
39
63
|
defaultSpotlight = _ref.defaultSpotlight,
|
|
40
64
|
labelRenderer = _ref.labelRenderer,
|
|
41
|
-
|
|
65
|
+
displayChildren = _ref.displayChildren,
|
|
66
|
+
rest = _objectWithoutProperties(_ref, ['items', 'defaultSpotlight', 'labelRenderer', 'displayChildren']);
|
|
42
67
|
|
|
43
68
|
var _useState = useState({ term: '' }),
|
|
44
69
|
term = _useState[0].term,
|
|
@@ -51,7 +76,7 @@ var withSpotlight = function withSpotlight(Component) {
|
|
|
51
76
|
}, [defaultSpotlight]);
|
|
52
77
|
|
|
53
78
|
var filteredItems = useMemo(function () {
|
|
54
|
-
return spotlightFilter(term, labelRenderer)(items);
|
|
79
|
+
return spotlightFilter(term, labelRenderer, displayChildren)(items);
|
|
55
80
|
}, [term, items]);
|
|
56
81
|
|
|
57
82
|
return React.createElement(Component, _extends({}, rest, {
|
package/es/theme.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
2
|
+
|
|
1
3
|
export var innerPalette = {
|
|
2
4
|
highlight1: '#f7a42c',
|
|
3
5
|
highlight2: '#8CC841',
|
|
@@ -13,7 +15,8 @@ export var innerPalette = {
|
|
|
13
15
|
|
|
14
16
|
export var sisccTheme = function sisccTheme(_ref) {
|
|
15
17
|
var rtl = _ref.rtl,
|
|
16
|
-
isA11y = _ref.isA11y,
|
|
18
|
+
_ref$isA11y = _ref.isA11y,
|
|
19
|
+
isA11y = _ref$isA11y === undefined ? false : _ref$isA11y,
|
|
17
20
|
_ref$outerPalette = _ref.outerPalette,
|
|
18
21
|
outerPalette = _ref$outerPalette === undefined ? {} : _ref$outerPalette;
|
|
19
22
|
|
|
@@ -21,9 +24,9 @@ export var sisccTheme = function sisccTheme(_ref) {
|
|
|
21
24
|
outlineColor: outerPalette.highlight1 || innerPalette.highlight1
|
|
22
25
|
};
|
|
23
26
|
|
|
24
|
-
var buttonBaseFocus = {
|
|
27
|
+
var buttonBaseFocus = isA11y && {
|
|
25
28
|
borderColor: outerPalette.highlight1 || innerPalette.highlight1,
|
|
26
|
-
'
|
|
29
|
+
'&:focus': {
|
|
27
30
|
outlineColor: outerPalette.highlight1 || innerPalette.highlight1,
|
|
28
31
|
outlineWidth: 1,
|
|
29
32
|
outlineStyle: 'auto'
|
|
@@ -44,7 +47,11 @@ export var sisccTheme = function sisccTheme(_ref) {
|
|
|
44
47
|
disableRipple: true
|
|
45
48
|
},
|
|
46
49
|
styleOverrides: {
|
|
47
|
-
root:
|
|
50
|
+
root: _extends({
|
|
51
|
+
'&:focus': {
|
|
52
|
+
outline: 'none'
|
|
53
|
+
}
|
|
54
|
+
}, buttonBaseFocus)
|
|
48
55
|
}
|
|
49
56
|
},
|
|
50
57
|
MuiUseMediaQuery: {
|
|
@@ -79,7 +86,7 @@ export var sisccTheme = function sisccTheme(_ref) {
|
|
|
79
86
|
MuiAccordion: {
|
|
80
87
|
styleOverrides: {
|
|
81
88
|
root: {
|
|
82
|
-
'
|
|
89
|
+
'&.Mui-expanded': {
|
|
83
90
|
margin: 0
|
|
84
91
|
}
|
|
85
92
|
}
|
|
@@ -88,7 +95,10 @@ export var sisccTheme = function sisccTheme(_ref) {
|
|
|
88
95
|
MuiButton: {
|
|
89
96
|
styleOverrides: {
|
|
90
97
|
root: {
|
|
91
|
-
textTransform: 'none'
|
|
98
|
+
textTransform: 'none',
|
|
99
|
+
'&:focus': {
|
|
100
|
+
outline: 'none'
|
|
101
|
+
}
|
|
92
102
|
},
|
|
93
103
|
textPrimary: {
|
|
94
104
|
'&:hover': {
|
|
@@ -125,6 +135,9 @@ export var sisccTheme = function sisccTheme(_ref) {
|
|
|
125
135
|
}
|
|
126
136
|
},
|
|
127
137
|
MuiLink: {
|
|
138
|
+
defaultProps: {
|
|
139
|
+
underline: 'none'
|
|
140
|
+
},
|
|
128
141
|
styleOverrides: {
|
|
129
142
|
root: {
|
|
130
143
|
color: outerPalette.primaryMain || innerPalette.primaryMain,
|
|
@@ -134,7 +147,7 @@ export var sisccTheme = function sisccTheme(_ref) {
|
|
|
134
147
|
'&.Mui-focused': isA11y && focus
|
|
135
148
|
},
|
|
136
149
|
button: {
|
|
137
|
-
'
|
|
150
|
+
'&:focus': isA11y && focus
|
|
138
151
|
}
|
|
139
152
|
}
|
|
140
153
|
},
|
|
@@ -58,7 +58,7 @@ var useStyles = (0, _makeStyles2.default)(function (theme) {
|
|
|
58
58
|
margin: '0px 10px 0 10px'
|
|
59
59
|
},
|
|
60
60
|
input: {
|
|
61
|
-
padding: '4px
|
|
61
|
+
padding: '4px 4px',
|
|
62
62
|
height: 27,
|
|
63
63
|
'&[type=number]::-webkit-inner-spin-button, &[type=number]::-webkit-outer-spin-button': {
|
|
64
64
|
'-webkit-appearance': 'none',
|
package/lib/TableHtml5/header.js
CHANGED
|
@@ -100,7 +100,7 @@ var Header = function Header(_ref) {
|
|
|
100
100
|
var theme = (0, _styles.useTheme)();
|
|
101
101
|
var isRtl = (0, _utils.getIsRtl)(theme);
|
|
102
102
|
|
|
103
|
-
var stickyLabelPosition = R.last(subHeadCellsWidth) +
|
|
103
|
+
var stickyLabelPosition = R.last(subHeadCellsWidth) + 'px + 30px + ' + theme.spacing(1);
|
|
104
104
|
|
|
105
105
|
if (R.compose(R.anyPass([R.isNil, R.isEmpty]), R.path([0, 'data']))(headerData)) return null;
|
|
106
106
|
return timesIndexed(function (index) {
|
|
@@ -24,27 +24,51 @@ function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in ob
|
|
|
24
24
|
|
|
25
25
|
var spotlightFilter = exports.spotlightFilter = function spotlightFilter(term) {
|
|
26
26
|
var labelRenderer = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : R.prop('label');
|
|
27
|
+
var displayChildren = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
|
|
27
28
|
return function (items) {
|
|
28
29
|
if (R.isEmpty(term) || R.isNil(term)) {
|
|
29
30
|
return items;
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
var groupedItemsByParentId = R.groupBy(R.propOr('#ROOT', 'parentId'), items);
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
|
|
35
|
+
var findParents = function findParents(item) {
|
|
36
|
+
var acc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
37
|
+
|
|
38
|
+
var parentId = R.prop('parentId', item);
|
|
39
|
+
if (parentId && parentId !== '#ROOT') {
|
|
40
|
+
var parent = R.find(R.propEq('id', parentId), items);
|
|
41
|
+
if (parent) {
|
|
42
|
+
return findParents(parent, [parent].concat(acc));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return acc;
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
var recurse = function recurse(item) {
|
|
49
|
+
var isValidItem = R.includes(R.toLower(term), R.toLower(labelRenderer(item)));
|
|
50
|
+
|
|
51
|
+
var result = [];
|
|
52
|
+
|
|
35
53
|
if (isValidItem) {
|
|
36
|
-
|
|
54
|
+
var parents = findParents(item);
|
|
55
|
+
result = [].concat(parents, [item]);
|
|
56
|
+
if (displayChildren) {
|
|
57
|
+
var children = (0, _utils.getDescendants)(R.prop('id', item), groupedItemsByParentId);
|
|
58
|
+
return [].concat(parents, [item], children);
|
|
59
|
+
}
|
|
37
60
|
}
|
|
38
61
|
if (R.has((0, _utils.getHierarchicalId)(item), groupedItemsByParentId)) {
|
|
39
|
-
var
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
62
|
+
var childItems = groupedItemsByParentId[(0, _utils.getHierarchicalId)(item)] || [];
|
|
63
|
+
var matchingChildren = R.chain(recurse, childItems);
|
|
64
|
+
|
|
65
|
+
// res with any matching children
|
|
66
|
+
return R.uniq([].concat(result, matchingChildren));
|
|
43
67
|
}
|
|
44
|
-
return
|
|
45
|
-
}
|
|
68
|
+
return result;
|
|
69
|
+
};
|
|
46
70
|
|
|
47
|
-
return recurse
|
|
71
|
+
return R.uniq(R.chain(recurse, groupedItemsByParentId['#ROOT'] || []));
|
|
48
72
|
};
|
|
49
73
|
};
|
|
50
74
|
|
|
@@ -53,7 +77,8 @@ var withSpotlight = function withSpotlight(Component) {
|
|
|
53
77
|
var items = _ref.items,
|
|
54
78
|
defaultSpotlight = _ref.defaultSpotlight,
|
|
55
79
|
labelRenderer = _ref.labelRenderer,
|
|
56
|
-
|
|
80
|
+
displayChildren = _ref.displayChildren,
|
|
81
|
+
rest = _objectWithoutProperties(_ref, ['items', 'defaultSpotlight', 'labelRenderer', 'displayChildren']);
|
|
57
82
|
|
|
58
83
|
var _useState = (0, _react.useState)({ term: '' }),
|
|
59
84
|
term = _useState[0].term,
|
|
@@ -66,7 +91,7 @@ var withSpotlight = function withSpotlight(Component) {
|
|
|
66
91
|
}, [defaultSpotlight]);
|
|
67
92
|
|
|
68
93
|
var filteredItems = (0, _react.useMemo)(function () {
|
|
69
|
-
return spotlightFilter(term, labelRenderer)(items);
|
|
94
|
+
return spotlightFilter(term, labelRenderer, displayChildren)(items);
|
|
70
95
|
}, [term, items]);
|
|
71
96
|
|
|
72
97
|
return _react2.default.createElement(Component, _extends({}, rest, {
|
package/lib/theme.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
exports.__esModule = true;
|
|
4
|
+
|
|
5
|
+
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };
|
|
6
|
+
|
|
4
7
|
var innerPalette = exports.innerPalette = {
|
|
5
8
|
highlight1: '#f7a42c',
|
|
6
9
|
highlight2: '#8CC841',
|
|
@@ -16,7 +19,8 @@ var innerPalette = exports.innerPalette = {
|
|
|
16
19
|
|
|
17
20
|
var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
18
21
|
var rtl = _ref.rtl,
|
|
19
|
-
isA11y = _ref.isA11y,
|
|
22
|
+
_ref$isA11y = _ref.isA11y,
|
|
23
|
+
isA11y = _ref$isA11y === undefined ? false : _ref$isA11y,
|
|
20
24
|
_ref$outerPalette = _ref.outerPalette,
|
|
21
25
|
outerPalette = _ref$outerPalette === undefined ? {} : _ref$outerPalette;
|
|
22
26
|
|
|
@@ -24,9 +28,9 @@ var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
|
24
28
|
outlineColor: outerPalette.highlight1 || innerPalette.highlight1
|
|
25
29
|
};
|
|
26
30
|
|
|
27
|
-
var buttonBaseFocus = {
|
|
31
|
+
var buttonBaseFocus = isA11y && {
|
|
28
32
|
borderColor: outerPalette.highlight1 || innerPalette.highlight1,
|
|
29
|
-
'
|
|
33
|
+
'&:focus': {
|
|
30
34
|
outlineColor: outerPalette.highlight1 || innerPalette.highlight1,
|
|
31
35
|
outlineWidth: 1,
|
|
32
36
|
outlineStyle: 'auto'
|
|
@@ -47,7 +51,11 @@ var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
|
47
51
|
disableRipple: true
|
|
48
52
|
},
|
|
49
53
|
styleOverrides: {
|
|
50
|
-
root:
|
|
54
|
+
root: _extends({
|
|
55
|
+
'&:focus': {
|
|
56
|
+
outline: 'none'
|
|
57
|
+
}
|
|
58
|
+
}, buttonBaseFocus)
|
|
51
59
|
}
|
|
52
60
|
},
|
|
53
61
|
MuiUseMediaQuery: {
|
|
@@ -82,7 +90,7 @@ var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
|
82
90
|
MuiAccordion: {
|
|
83
91
|
styleOverrides: {
|
|
84
92
|
root: {
|
|
85
|
-
'
|
|
93
|
+
'&.Mui-expanded': {
|
|
86
94
|
margin: 0
|
|
87
95
|
}
|
|
88
96
|
}
|
|
@@ -91,7 +99,10 @@ var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
|
91
99
|
MuiButton: {
|
|
92
100
|
styleOverrides: {
|
|
93
101
|
root: {
|
|
94
|
-
textTransform: 'none'
|
|
102
|
+
textTransform: 'none',
|
|
103
|
+
'&:focus': {
|
|
104
|
+
outline: 'none'
|
|
105
|
+
}
|
|
95
106
|
},
|
|
96
107
|
textPrimary: {
|
|
97
108
|
'&:hover': {
|
|
@@ -128,6 +139,9 @@ var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
|
128
139
|
}
|
|
129
140
|
},
|
|
130
141
|
MuiLink: {
|
|
142
|
+
defaultProps: {
|
|
143
|
+
underline: 'none'
|
|
144
|
+
},
|
|
131
145
|
styleOverrides: {
|
|
132
146
|
root: {
|
|
133
147
|
color: outerPalette.primaryMain || innerPalette.primaryMain,
|
|
@@ -137,7 +151,7 @@ var sisccTheme = exports.sisccTheme = function sisccTheme(_ref) {
|
|
|
137
151
|
'&.Mui-focused': isA11y && focus
|
|
138
152
|
},
|
|
139
153
|
button: {
|
|
140
|
-
'
|
|
154
|
+
'&:focus': isA11y && focus
|
|
141
155
|
}
|
|
142
156
|
}
|
|
143
157
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sis-cc/dotstatsuite-visions",
|
|
3
|
-
"version": "12.
|
|
3
|
+
"version": "12.2.0",
|
|
4
4
|
"description": "Library of visual components",
|
|
5
5
|
"author": "OECD",
|
|
6
6
|
"homepage": "https://visions-qa.siscc.org/#o",
|
|
@@ -31,17 +31,18 @@
|
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@emotion/react": "^11.13.0",
|
|
33
33
|
"@emotion/styled": "^11.13.0",
|
|
34
|
+
"@hello-pangea/dnd": "^16.6.0",
|
|
34
35
|
"@mui/icons-material": "^5.16.5",
|
|
35
36
|
"@mui/material": "^5.16.5",
|
|
36
37
|
"@mui/styles": "^5.16.5",
|
|
37
38
|
"@react-hook/size": "^2.1.1",
|
|
38
39
|
"classnames": "^2.2.6",
|
|
40
|
+
"cross-env": "^7.0.3",
|
|
39
41
|
"date-fns": "^1.30.1",
|
|
40
42
|
"isemail": "^3.2.0",
|
|
41
43
|
"numeral": "^2.0.6",
|
|
42
44
|
"prop-types": "^15.7.2",
|
|
43
45
|
"ramda": "^0.27.0",
|
|
44
|
-
"@hello-pangea/dnd": "^16.6.0",
|
|
45
46
|
"react-draggable": "^4.4.5",
|
|
46
47
|
"react-error-boundary": "^4.0.10",
|
|
47
48
|
"react-virtualized": "^9.21.2"
|
|
@@ -49,7 +50,6 @@
|
|
|
49
50
|
"peerDependencies": {
|
|
50
51
|
"@mui/icons-material": "^5.16.5",
|
|
51
52
|
"@mui/material": "^5.16.5",
|
|
52
|
-
"@sis-cc/dotstatsuite-sdmxjs": "^8.x",
|
|
53
53
|
"react": "^18",
|
|
54
54
|
"react-dom": "^18"
|
|
55
55
|
},
|
|
@@ -59,7 +59,6 @@
|
|
|
59
59
|
"@cfaester/enzyme-adapter-react-18": "^0.7.0",
|
|
60
60
|
"@mui/icons-material": "^5.16.5",
|
|
61
61
|
"@mui/material": "^5.16.5",
|
|
62
|
-
"@sis-cc/dotstatsuite-sdmxjs": "*",
|
|
63
62
|
"@testing-library/jest-dom": "^5.16.5",
|
|
64
63
|
"@testing-library/react": "^14.0.0",
|
|
65
64
|
"babel-jest": "^24.8.0",
|