@atlaskit/tokens 0.10.5 → 0.10.6
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/.eslintrc.js +35 -0
- package/CHANGELOG.md +6 -0
- package/README.md +1 -1
- package/dist/cjs/babel-plugin/plugin.js +57 -53
- package/dist/cjs/get-token.js +1 -1
- package/dist/cjs/version.json +1 -1
- package/dist/es2019/babel-plugin/plugin.js +50 -45
- package/dist/es2019/get-token.js +1 -1
- package/dist/es2019/version.json +1 -1
- package/dist/esm/babel-plugin/plugin.js +57 -53
- package/dist/esm/get-token.js +1 -1
- package/dist/esm/version.json +1 -1
- package/dist/types/babel-plugin/plugin.d.ts +5 -5
- package/package.json +4 -1
package/.eslintrc.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module.exports = {
|
|
2
|
+
overrides: [
|
|
3
|
+
{
|
|
4
|
+
// Lint documentation to ensure usage examples are up-to-date
|
|
5
|
+
files: ['./examples/**', './docs/**'],
|
|
6
|
+
rules: {
|
|
7
|
+
'@atlaskit/design-system/no-deprecated-design-token-usage': ['warn'],
|
|
8
|
+
'@atlaskit/design-system/ensure-design-token-usage': [
|
|
9
|
+
'error',
|
|
10
|
+
{ shouldEnforceFallbacks: true },
|
|
11
|
+
],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
{
|
|
15
|
+
// Constellation examples, and docs, include fallbacks for now
|
|
16
|
+
files: ['./examples/constellation/**', './docs/**'],
|
|
17
|
+
rules: {
|
|
18
|
+
'@atlaskit/design-system/no-unsafe-design-token-usage': [
|
|
19
|
+
'error',
|
|
20
|
+
{ shouldEnforceFallbacks: true },
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
// Atlaskit examples don't all have fallbacks
|
|
26
|
+
files: ['./examples/**.tsx'],
|
|
27
|
+
rules: {
|
|
28
|
+
'@atlaskit/design-system/no-unsafe-design-token-usage': [
|
|
29
|
+
'error',
|
|
30
|
+
{ shouldEnforceFallbacks: false },
|
|
31
|
+
],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -67,6 +67,6 @@ Add the plugin to your babel configuration:
|
|
|
67
67
|
### Options
|
|
68
68
|
|
|
69
69
|
Currently the plugin supports one option, `shouldUseAutoFallback`. When enabled, the plugin will fetch the token's value in the default
|
|
70
|
-
Atlassian theme (currently `atlassian-light`) and use it as the fallback value.
|
|
70
|
+
Atlassian theme (currently `atlassian-light`) and use it as the fallback value.
|
|
71
71
|
|
|
72
72
|
This is useful for cases where tokens are in use, but token definitions aren't present in the top-level page CSS.
|
|
@@ -22,75 +22,79 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
22
22
|
function plugin() {
|
|
23
23
|
return {
|
|
24
24
|
visitor: {
|
|
25
|
-
|
|
26
|
-
function
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
Program: {
|
|
26
|
+
enter: function enter(path, state) {
|
|
27
|
+
path.traverse({
|
|
28
|
+
CallExpression: function (_CallExpression) {
|
|
29
|
+
function CallExpression(_x) {
|
|
30
|
+
return _CallExpression.apply(this, arguments);
|
|
31
|
+
}
|
|
29
32
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
CallExpression.toString = function () {
|
|
34
|
+
return _CallExpression.toString();
|
|
35
|
+
};
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
return CallExpression;
|
|
38
|
+
}(function (path) {
|
|
39
|
+
var tokenImportScope = getTokenImportScope(path);
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
if (!tokenImportScope) {
|
|
42
|
+
return;
|
|
43
|
+
} // Check arguments have correct format
|
|
41
44
|
|
|
42
45
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
if (!path.node.arguments[0]) {
|
|
47
|
+
throw new Error("token() requires at least one argument");
|
|
48
|
+
} else if (!t.isStringLiteral(path.node.arguments[0])) {
|
|
49
|
+
throw new Error("token() must have a string as the first argument");
|
|
50
|
+
} else if (path.node.arguments.length > 2) {
|
|
51
|
+
throw new Error("token() does not accept ".concat(path.node.arguments.length, " arguments"));
|
|
52
|
+
} // Check the token exists
|
|
50
53
|
|
|
51
54
|
|
|
52
|
-
|
|
53
|
-
|
|
55
|
+
var tokenName = path.node.arguments[0].value;
|
|
56
|
+
var cssTokenValue = _tokenNames.default[tokenName];
|
|
54
57
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
if (!cssTokenValue) {
|
|
59
|
+
throw new Error("token '".concat(tokenName, "' does not exist"));
|
|
60
|
+
}
|
|
58
61
|
|
|
59
|
-
|
|
62
|
+
var replacementNode; // if no fallback is set, optionally find one from the default theme
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
if (path.node.arguments.length < 2) {
|
|
65
|
+
if (state.opts.shouldUseAutoFallback) {
|
|
66
|
+
replacementNode = t.stringLiteral("var(".concat(cssTokenValue, ", ").concat(getDefaultFallback(tokenName), ")"));
|
|
67
|
+
} else {
|
|
68
|
+
replacementNode = t.stringLiteral("var(".concat(cssTokenValue, ")"));
|
|
69
|
+
}
|
|
70
|
+
} // Handle fallbacks
|
|
68
71
|
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
var fallback = path.node.arguments[1];
|
|
71
74
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
75
|
+
if (t.isStringLiteral(fallback)) {
|
|
76
|
+
// String literals can be concatenated into css variable call
|
|
77
|
+
// Empty string fallbacks are ignored. For now, as the user did specify a fallback, no default is inserted
|
|
78
|
+
replacementNode = t.stringLiteral(fallback.value ? "var(".concat(cssTokenValue, ", ").concat(fallback.value, ")") : "var(".concat(cssTokenValue, ")"));
|
|
79
|
+
} else if (t.isExpression(fallback)) {
|
|
80
|
+
// Expressions should be placed in a template string/literal
|
|
81
|
+
replacementNode = t.templateLiteral([t.templateElement({
|
|
82
|
+
cooked: "var(".concat(cssTokenValue, ", "),
|
|
83
|
+
// Currently we create a "raw" value by inserting escape characters via regex (https://github.com/babel/babel/issues/9242)
|
|
84
|
+
raw: "var(".concat(cssTokenValue.replace(/\\|`|\${/g, '\\$&'), ", ")
|
|
85
|
+
}, false), t.templateElement({
|
|
86
|
+
raw: ')',
|
|
87
|
+
cooked: ')'
|
|
88
|
+
}, true)], [fallback]);
|
|
89
|
+
} // Replace path and call scope.crawl() to refresh the scope bindings + references
|
|
87
90
|
|
|
88
91
|
|
|
89
|
-
|
|
92
|
+
replacementNode && path.replaceWith(replacementNode); // @ts-ignore crawl is a valid property
|
|
90
93
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
+
tokenImportScope.crawl();
|
|
95
|
+
})
|
|
96
|
+
});
|
|
97
|
+
},
|
|
94
98
|
exit: function exit(path) {
|
|
95
99
|
path.traverse({
|
|
96
100
|
ImportDeclaration: function ImportDeclaration(path) {
|
package/dist/cjs/get-token.js
CHANGED
|
@@ -14,7 +14,7 @@ var _tokenNames = _interopRequireDefault(require("./artifacts/token-names"));
|
|
|
14
14
|
var _constants = require("./constants");
|
|
15
15
|
|
|
16
16
|
var name = "@atlaskit/tokens";
|
|
17
|
-
var version = "0.10.
|
|
17
|
+
var version = "0.10.6";
|
|
18
18
|
|
|
19
19
|
function token(path, fallback) {
|
|
20
20
|
var token = _tokenNames.default[path];
|
package/dist/cjs/version.json
CHANGED
|
@@ -4,66 +4,71 @@ import tokenNames from '../artifacts/token-names';
|
|
|
4
4
|
export default function plugin() {
|
|
5
5
|
return {
|
|
6
6
|
visitor: {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
Program: {
|
|
8
|
+
enter(path, state) {
|
|
9
|
+
path.traverse({
|
|
10
|
+
CallExpression(path) {
|
|
11
|
+
const tokenImportScope = getTokenImportScope(path);
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
if (!tokenImportScope) {
|
|
14
|
+
return;
|
|
15
|
+
} // Check arguments have correct format
|
|
13
16
|
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
if (!path.node.arguments[0]) {
|
|
19
|
+
throw new Error(`token() requires at least one argument`);
|
|
20
|
+
} else if (!t.isStringLiteral(path.node.arguments[0])) {
|
|
21
|
+
throw new Error(`token() must have a string as the first argument`);
|
|
22
|
+
} else if (path.node.arguments.length > 2) {
|
|
23
|
+
throw new Error(`token() does not accept ${path.node.arguments.length} arguments`);
|
|
24
|
+
} // Check the token exists
|
|
22
25
|
|
|
23
26
|
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
const tokenName = path.node.arguments[0].value;
|
|
28
|
+
const cssTokenValue = tokenNames[tokenName];
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
if (!cssTokenValue) {
|
|
31
|
+
throw new Error(`token '${tokenName}' does not exist`);
|
|
32
|
+
}
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
var replacementNode; // if no fallback is set, optionally find one from the default theme
|
|
32
35
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
if (path.node.arguments.length < 2) {
|
|
37
|
+
if (state.opts.shouldUseAutoFallback) {
|
|
38
|
+
replacementNode = t.stringLiteral(`var(${cssTokenValue}, ${getDefaultFallback(tokenName)})`);
|
|
39
|
+
} else {
|
|
40
|
+
replacementNode = t.stringLiteral(`var(${cssTokenValue})`);
|
|
41
|
+
}
|
|
42
|
+
} // Handle fallbacks
|
|
40
43
|
|
|
41
44
|
|
|
42
|
-
|
|
45
|
+
const fallback = path.node.arguments[1];
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
47
|
+
if (t.isStringLiteral(fallback)) {
|
|
48
|
+
// String literals can be concatenated into css variable call
|
|
49
|
+
// Empty string fallbacks are ignored. For now, as the user did specify a fallback, no default is inserted
|
|
50
|
+
replacementNode = t.stringLiteral(fallback.value ? `var(${cssTokenValue}, ${fallback.value})` : `var(${cssTokenValue})`);
|
|
51
|
+
} else if (t.isExpression(fallback)) {
|
|
52
|
+
// Expressions should be placed in a template string/literal
|
|
53
|
+
replacementNode = t.templateLiteral([t.templateElement({
|
|
54
|
+
cooked: `var(${cssTokenValue}, `,
|
|
55
|
+
// Currently we create a "raw" value by inserting escape characters via regex (https://github.com/babel/babel/issues/9242)
|
|
56
|
+
raw: `var(${cssTokenValue.replace(/\\|`|\${/g, '\\$&')}, `
|
|
57
|
+
}, false), t.templateElement({
|
|
58
|
+
raw: ')',
|
|
59
|
+
cooked: ')'
|
|
60
|
+
}, true)], [fallback]);
|
|
61
|
+
} // Replace path and call scope.crawl() to refresh the scope bindings + references
|
|
59
62
|
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
replacementNode && path.replaceWith(replacementNode); // @ts-ignore crawl is a valid property
|
|
62
65
|
|
|
63
|
-
|
|
64
|
-
|
|
66
|
+
tokenImportScope.crawl();
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
});
|
|
70
|
+
},
|
|
65
71
|
|
|
66
|
-
Program: {
|
|
67
72
|
exit(path) {
|
|
68
73
|
path.traverse({
|
|
69
74
|
ImportDeclaration(path) {
|
package/dist/es2019/get-token.js
CHANGED
|
@@ -2,7 +2,7 @@ import warnOnce from '@atlaskit/ds-lib/warn-once';
|
|
|
2
2
|
import tokens from './artifacts/token-names';
|
|
3
3
|
import { TOKEN_NOT_FOUND_CSS_VAR } from './constants';
|
|
4
4
|
const name = "@atlaskit/tokens";
|
|
5
|
-
const version = "0.10.
|
|
5
|
+
const version = "0.10.6";
|
|
6
6
|
|
|
7
7
|
function token(path, fallback) {
|
|
8
8
|
let token = tokens[path];
|
package/dist/es2019/version.json
CHANGED
|
@@ -4,75 +4,79 @@ import tokenNames from '../artifacts/token-names';
|
|
|
4
4
|
export default function plugin() {
|
|
5
5
|
return {
|
|
6
6
|
visitor: {
|
|
7
|
-
|
|
8
|
-
function
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
Program: {
|
|
8
|
+
enter: function enter(path, state) {
|
|
9
|
+
path.traverse({
|
|
10
|
+
CallExpression: function (_CallExpression) {
|
|
11
|
+
function CallExpression(_x) {
|
|
12
|
+
return _CallExpression.apply(this, arguments);
|
|
13
|
+
}
|
|
11
14
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
CallExpression.toString = function () {
|
|
16
|
+
return _CallExpression.toString();
|
|
17
|
+
};
|
|
15
18
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
return CallExpression;
|
|
20
|
+
}(function (path) {
|
|
21
|
+
var tokenImportScope = getTokenImportScope(path);
|
|
19
22
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
+
if (!tokenImportScope) {
|
|
24
|
+
return;
|
|
25
|
+
} // Check arguments have correct format
|
|
23
26
|
|
|
24
27
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
if (!path.node.arguments[0]) {
|
|
29
|
+
throw new Error("token() requires at least one argument");
|
|
30
|
+
} else if (!t.isStringLiteral(path.node.arguments[0])) {
|
|
31
|
+
throw new Error("token() must have a string as the first argument");
|
|
32
|
+
} else if (path.node.arguments.length > 2) {
|
|
33
|
+
throw new Error("token() does not accept ".concat(path.node.arguments.length, " arguments"));
|
|
34
|
+
} // Check the token exists
|
|
32
35
|
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
var tokenName = path.node.arguments[0].value;
|
|
38
|
+
var cssTokenValue = tokenNames[tokenName];
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
if (!cssTokenValue) {
|
|
41
|
+
throw new Error("token '".concat(tokenName, "' does not exist"));
|
|
42
|
+
}
|
|
40
43
|
|
|
41
|
-
|
|
44
|
+
var replacementNode; // if no fallback is set, optionally find one from the default theme
|
|
42
45
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
if (path.node.arguments.length < 2) {
|
|
47
|
+
if (state.opts.shouldUseAutoFallback) {
|
|
48
|
+
replacementNode = t.stringLiteral("var(".concat(cssTokenValue, ", ").concat(getDefaultFallback(tokenName), ")"));
|
|
49
|
+
} else {
|
|
50
|
+
replacementNode = t.stringLiteral("var(".concat(cssTokenValue, ")"));
|
|
51
|
+
}
|
|
52
|
+
} // Handle fallbacks
|
|
50
53
|
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
var fallback = path.node.arguments[1];
|
|
53
56
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
if (t.isStringLiteral(fallback)) {
|
|
58
|
+
// String literals can be concatenated into css variable call
|
|
59
|
+
// Empty string fallbacks are ignored. For now, as the user did specify a fallback, no default is inserted
|
|
60
|
+
replacementNode = t.stringLiteral(fallback.value ? "var(".concat(cssTokenValue, ", ").concat(fallback.value, ")") : "var(".concat(cssTokenValue, ")"));
|
|
61
|
+
} else if (t.isExpression(fallback)) {
|
|
62
|
+
// Expressions should be placed in a template string/literal
|
|
63
|
+
replacementNode = t.templateLiteral([t.templateElement({
|
|
64
|
+
cooked: "var(".concat(cssTokenValue, ", "),
|
|
65
|
+
// Currently we create a "raw" value by inserting escape characters via regex (https://github.com/babel/babel/issues/9242)
|
|
66
|
+
raw: "var(".concat(cssTokenValue.replace(/\\|`|\${/g, '\\$&'), ", ")
|
|
67
|
+
}, false), t.templateElement({
|
|
68
|
+
raw: ')',
|
|
69
|
+
cooked: ')'
|
|
70
|
+
}, true)], [fallback]);
|
|
71
|
+
} // Replace path and call scope.crawl() to refresh the scope bindings + references
|
|
69
72
|
|
|
70
73
|
|
|
71
|
-
|
|
74
|
+
replacementNode && path.replaceWith(replacementNode); // @ts-ignore crawl is a valid property
|
|
72
75
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
+
tokenImportScope.crawl();
|
|
77
|
+
})
|
|
78
|
+
});
|
|
79
|
+
},
|
|
76
80
|
exit: function exit(path) {
|
|
77
81
|
path.traverse({
|
|
78
82
|
ImportDeclaration: function ImportDeclaration(path) {
|
package/dist/esm/get-token.js
CHANGED
|
@@ -2,7 +2,7 @@ import warnOnce from '@atlaskit/ds-lib/warn-once';
|
|
|
2
2
|
import tokens from './artifacts/token-names';
|
|
3
3
|
import { TOKEN_NOT_FOUND_CSS_VAR } from './constants';
|
|
4
4
|
var name = "@atlaskit/tokens";
|
|
5
|
-
var version = "0.10.
|
|
5
|
+
var version = "0.10.6";
|
|
6
6
|
|
|
7
7
|
function token(path, fallback) {
|
|
8
8
|
var token = tokens[path];
|
package/dist/esm/version.json
CHANGED
|
@@ -2,12 +2,12 @@ import { NodePath } from '@babel/traverse';
|
|
|
2
2
|
import * as t from '@babel/types';
|
|
3
3
|
export default function plugin(): {
|
|
4
4
|
visitor: {
|
|
5
|
-
CallExpression(path: NodePath<t.CallExpression>, state: {
|
|
6
|
-
opts: {
|
|
7
|
-
shouldUseAutoFallback?: boolean;
|
|
8
|
-
};
|
|
9
|
-
}): void;
|
|
10
5
|
Program: {
|
|
6
|
+
enter(path: NodePath<t.Program>, state: {
|
|
7
|
+
opts: {
|
|
8
|
+
shouldUseAutoFallback?: boolean;
|
|
9
|
+
};
|
|
10
|
+
}): void;
|
|
11
11
|
exit(path: NodePath<t.Program>): void;
|
|
12
12
|
};
|
|
13
13
|
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlaskit/tokens",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.6",
|
|
4
4
|
"author": "Atlassian Pty Ltd",
|
|
5
5
|
"description": "Design tokens are the single source of truth to name and store design decisions.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -55,6 +55,7 @@
|
|
|
55
55
|
"@af/codegen": "*",
|
|
56
56
|
"@atlaskit/badge": "^15.0.11",
|
|
57
57
|
"@atlaskit/button": "^16.3.0",
|
|
58
|
+
"@atlaskit/checkbox": "^12.3.9",
|
|
58
59
|
"@atlaskit/code": "^14.3.0",
|
|
59
60
|
"@atlaskit/docs": "^9.0.10",
|
|
60
61
|
"@atlaskit/dropdown-menu": "^11.2.0",
|
|
@@ -77,8 +78,10 @@
|
|
|
77
78
|
"@testing-library/dom": "^7.7.3",
|
|
78
79
|
"@testing-library/react": "^8.0.1",
|
|
79
80
|
"@testing-library/react-hooks": "^1.0.4",
|
|
81
|
+
"@testing-library/user-event": "10.4.0",
|
|
80
82
|
"@types/chrome": "^0.0.171",
|
|
81
83
|
"copy-webpack-plugin": "^6.4.0",
|
|
84
|
+
"fuse.js": "^6.6.2",
|
|
82
85
|
"lodash": "^4.17.21",
|
|
83
86
|
"prettier": "^2.1.1",
|
|
84
87
|
"react": "^16.8.0",
|