@via-profit/ui-kit 0.1.0-rc.73 → 0.1.0-rc.74
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/Autocomplete/AutocompleteContainer.d.ts +1 -1
- package/Autocomplete/AutocompleteContainer.js +3 -3
- package/Autocomplete/AutocompleteItem.d.ts +8 -0
- package/Autocomplete/AutocompleteItem.js +44 -0
- package/Autocomplete/index.d.ts +1 -2
- package/Autocomplete/index.js +1 -3
- package/Calendar/CalendarWeekDayLabel.d.ts +1 -1
- package/Highlighted/index.d.ts +5 -0
- package/Highlighted/index.js +5 -3
- package/Menu/MenuItem.d.ts +13 -0
- package/Menu/MenuItem.js +7 -2
- package/PhoneField/templates.js +4 -4
- package/Typography/Base.d.ts +1 -1
- package/Typography/Blockquote.d.ts +1 -1
- package/Typography/List.d.ts +3 -3
- package/Typography/U.d.ts +1 -1
- package/package.json +2 -2
|
@@ -34,7 +34,7 @@ export interface AutocompleteProps<T, Multiple extends boolean | undefined = und
|
|
|
34
34
|
* Should the autocomplete element be cleared when blur and if no element is selected\
|
|
35
35
|
* **Default:** `true`
|
|
36
36
|
*/
|
|
37
|
-
readonly
|
|
37
|
+
readonly clearOnBlur?: boolean;
|
|
38
38
|
/**
|
|
39
39
|
* Show clear button if clearable is true\
|
|
40
40
|
* **Default:** `true`
|
|
@@ -46,7 +46,7 @@ const context_1 = __importStar(require("./context"));
|
|
|
46
46
|
const IconClear_1 = __importDefault(require("./IconClear"));
|
|
47
47
|
const ClickOutside_1 = require("../ClickOutside");
|
|
48
48
|
const Autocomplete = react_1.default.forwardRef((props, ref) => {
|
|
49
|
-
const { items, value, multiple, isOpen = false, isLoading = false,
|
|
49
|
+
const { items, value, multiple, isOpen = false, isLoading = false, clearOnBlur = true, anchorPos = 'auto-start-end', openOnFocus = true, requiredAsterisk, startIcon, fullWidth, placeholder, label, error, errorText, inputRef, filterItems, children, onChange, selectedItemToString, clearable = true, onInputChange, getOptionSelected, onRequestOpen = () => undefined, onRequestClose = () => undefined, overrides } = props, nativeInputProps = __rest(props, ["items", "value", "multiple", "isOpen", "isLoading", "clearOnBlur", "anchorPos", "openOnFocus", "requiredAsterisk", "startIcon", "fullWidth", "placeholder", "label", "error", "errorText", "inputRef", "filterItems", "children", "onChange", "selectedItemToString", "clearable", "onInputChange", "getOptionSelected", "onRequestOpen", "onRequestClose", "overrides"]);
|
|
50
50
|
const menuRef = react_1.default.useRef(null);
|
|
51
51
|
const fieldInputRef = react_1.default.useRef(null);
|
|
52
52
|
const isFocusedRef = react_1.default.useRef(false);
|
|
@@ -191,7 +191,7 @@ const Autocomplete = react_1.default.forwardRef((props, ref) => {
|
|
|
191
191
|
}
|
|
192
192
|
// Click outside
|
|
193
193
|
if (needToClose) {
|
|
194
|
-
if (
|
|
194
|
+
if (clearOnBlur) {
|
|
195
195
|
dispatch((0, context_1.actionSetPartial)({
|
|
196
196
|
inputValue: currentValue === null
|
|
197
197
|
? ''
|
|
@@ -211,7 +211,7 @@ const Autocomplete = react_1.default.forwardRef((props, ref) => {
|
|
|
211
211
|
onRequestClose,
|
|
212
212
|
anchorElement,
|
|
213
213
|
isOpen,
|
|
214
|
-
|
|
214
|
+
clearOnBlur,
|
|
215
215
|
dispatch,
|
|
216
216
|
value,
|
|
217
217
|
selectedItemToString,
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MenuItemProps } from '../Menu/MenuItem';
|
|
3
|
+
export interface AutocompleteItemProps extends MenuItemProps {
|
|
4
|
+
readonly variant?: 'standard' | 'virtual';
|
|
5
|
+
readonly startIcon?: JSX.Element;
|
|
6
|
+
}
|
|
7
|
+
export declare const AutocompleteItem: React.ForwardRefExoticComponent<AutocompleteItemProps & React.RefAttributes<HTMLDivElement>>;
|
|
8
|
+
export default AutocompleteItem;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
14
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.AutocompleteItem = void 0;
|
|
18
|
+
const react_1 = __importDefault(require("react"));
|
|
19
|
+
const styled_1 = __importDefault(require("@emotion/styled"));
|
|
20
|
+
const react_2 = require("@emotion/react");
|
|
21
|
+
const MenuItem_1 = __importDefault(require("../Menu/MenuItem"));
|
|
22
|
+
const StyeldMenuItem = (0, styled_1.default)(MenuItem_1.default, {
|
|
23
|
+
shouldForwardProp: p => !['$vatiant'].includes(p),
|
|
24
|
+
}) `
|
|
25
|
+
${({ $variant, theme }) => $variant === 'virtual' &&
|
|
26
|
+
(0, react_2.css) `
|
|
27
|
+
background-color: ${theme.color.accentPrimary.alpha(0.1).toString()};
|
|
28
|
+
border-color: ${theme.color.accentPrimary.toString()};
|
|
29
|
+
color: ${theme.color.textPrimary.toString()};
|
|
30
|
+
border-style: dashed;
|
|
31
|
+
border-width: 0.02em;
|
|
32
|
+
|
|
33
|
+
:hover {
|
|
34
|
+
background-color: ${theme.color.accentPrimary.toString()};
|
|
35
|
+
color: ${theme.color.accentPrimaryContrast.toString()};
|
|
36
|
+
}
|
|
37
|
+
`}
|
|
38
|
+
`;
|
|
39
|
+
const AutocompleteItemWithRef = (props, ref) => {
|
|
40
|
+
const { variant = 'standard', children } = props, restMenuItemProps = __rest(props, ["variant", "children"]);
|
|
41
|
+
return (react_1.default.createElement(StyeldMenuItem, Object.assign({}, restMenuItemProps, { "$variant": variant, ref: ref }), children));
|
|
42
|
+
};
|
|
43
|
+
exports.AutocompleteItem = react_1.default.forwardRef(AutocompleteItemWithRef);
|
|
44
|
+
exports.default = exports.AutocompleteItem;
|
package/Autocomplete/index.d.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import AutocompleteItem from '../Menu/MenuItem';
|
|
3
2
|
import { AutocompleteProps, AutocompleteRef } from './AutocompleteContainer';
|
|
4
3
|
export * from './AutocompleteContainer';
|
|
5
|
-
export
|
|
4
|
+
export * from './AutocompleteItem';
|
|
6
5
|
declare const _default: <T, Multiple extends boolean | undefined = undefined>(props: AutocompleteProps<T, Multiple> & {
|
|
7
6
|
ref?: React.Ref<AutocompleteRef> | undefined;
|
|
8
7
|
}) => JSX.Element;
|
package/Autocomplete/index.js
CHANGED
|
@@ -28,13 +28,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
28
28
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
29
29
|
};
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.AutocompleteItem = void 0;
|
|
32
31
|
const react_1 = __importDefault(require("react"));
|
|
33
|
-
const MenuItem_1 = __importDefault(require("../Menu/MenuItem"));
|
|
34
|
-
exports.AutocompleteItem = MenuItem_1.default;
|
|
35
32
|
const AutocompleteContainer_1 = __importDefault(require("./AutocompleteContainer"));
|
|
36
33
|
const context_1 = require("./context");
|
|
37
34
|
__exportStar(require("./AutocompleteContainer"), exports);
|
|
35
|
+
__exportStar(require("./AutocompleteItem"), exports);
|
|
38
36
|
const Autocomplete = react_1.default.forwardRef((props, ref) => {
|
|
39
37
|
const { children, items, isOpen, multiple, selectedItemToString, value } = props, restProps = __rest(props, ["children", "items", "isOpen", "multiple", "selectedItemToString", "value"]);
|
|
40
38
|
return (react_1.default.createElement(context_1.ContextProvider, { initialState: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
declare const _default: React.NamedExoticComponent<{
|
|
3
3
|
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
-
as?: React.ElementType<any> | undefined;
|
|
4
|
+
as?: React.ElementType<any, keyof React.JSX.IntrinsicElements> | undefined;
|
|
5
5
|
} & React.ClassAttributes<HTMLDivElement> & React.HTMLAttributes<HTMLDivElement>>;
|
|
6
6
|
export default _default;
|
package/Highlighted/index.d.ts
CHANGED
|
@@ -28,6 +28,11 @@ export interface HighlightedProps extends React.HTMLAttributes<HTMLSpanElement>
|
|
|
28
28
|
*
|
|
29
29
|
*/
|
|
30
30
|
readonly caseSensitive?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Disable highlighting and show the plain text\
|
|
33
|
+
* **Default:** `false`
|
|
34
|
+
*/
|
|
35
|
+
readonly disabledHighlighting?: boolean;
|
|
31
36
|
/**
|
|
32
37
|
* Overridable components map
|
|
33
38
|
*/
|
package/Highlighted/index.js
CHANGED
|
@@ -26,7 +26,7 @@ exports.escapeRegex = escapeRegex;
|
|
|
26
26
|
* The component allows you to highlight text matches in a string
|
|
27
27
|
*/
|
|
28
28
|
const Highlighted = (props, ref) => {
|
|
29
|
-
const { text, highlight, overrides, caseSensitive = false } = props, nativeProps = __rest(props, ["text", "highlight", "overrides", "caseSensitive"]);
|
|
29
|
+
const { text, highlight, overrides, disabledHighlighting = false, caseSensitive = false } = props, nativeProps = __rest(props, ["text", "highlight", "overrides", "disabledHighlighting", "caseSensitive"]);
|
|
30
30
|
const patterns = react_1.default.useMemo(() => (typeof highlight === 'string' ? [highlight] : highlight)
|
|
31
31
|
.filter(h => h.trim() !== '')
|
|
32
32
|
.map(exports.escapeRegex), [highlight]);
|
|
@@ -37,8 +37,10 @@ const Highlighted = (props, ref) => {
|
|
|
37
37
|
Text: (overrides === null || overrides === void 0 ? void 0 : overrides.Text) || HighlightedText_1.default,
|
|
38
38
|
}), [overrides]);
|
|
39
39
|
return (react_1.default.createElement(overridesMap.Container, Object.assign({}, nativeProps, { ref: ref }),
|
|
40
|
-
|
|
41
|
-
patterns.length
|
|
40
|
+
disabledHighlighting && react_1.default.createElement(overridesMap.Text, null, text),
|
|
41
|
+
!disabledHighlighting && patterns.length === 0 && (react_1.default.createElement(overridesMap.Text, null, text)),
|
|
42
|
+
!disabledHighlighting &&
|
|
43
|
+
patterns.length > 0 &&
|
|
42
44
|
text
|
|
43
45
|
.split(regex)
|
|
44
46
|
.map((part, i) => regex.test(part) ? (react_1.default.createElement(overridesMap.Mark, { key: i }, part)) : (react_1.default.createElement(overridesMap.Text, { key: i }, part)))));
|
package/Menu/MenuItem.d.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export type MenuItemProps = React.HTMLAttributes<HTMLDivElement> & MenuItemCommonProps;
|
|
3
3
|
export type MenuItemCommonProps = {
|
|
4
|
+
/**
|
|
5
|
+
* Selected flag
|
|
6
|
+
*/
|
|
4
7
|
readonly selected: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* Hovered flag
|
|
10
|
+
*/
|
|
5
11
|
readonly hovered: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* React key
|
|
14
|
+
*/
|
|
6
15
|
readonly key: React.Key;
|
|
7
16
|
readonly onMouseEnter: React.MouseEventHandler<HTMLDivElement>;
|
|
8
17
|
readonly onMouseLeave: React.MouseEventHandler<HTMLDivElement>;
|
|
9
18
|
readonly onClick: React.MouseEventHandler<HTMLDivElement>;
|
|
19
|
+
/**
|
|
20
|
+
* Icon or another JSX element placed before button label
|
|
21
|
+
*/
|
|
22
|
+
readonly startIcon?: JSX.Element;
|
|
10
23
|
};
|
|
11
24
|
declare const MenuItem: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & MenuItemCommonProps & React.RefAttributes<HTMLDivElement>>;
|
|
12
25
|
export default MenuItem;
|
package/Menu/MenuItem.js
CHANGED
|
@@ -50,9 +50,14 @@ const InnerContainer = styled_1.default.div `
|
|
|
50
50
|
}
|
|
51
51
|
`}
|
|
52
52
|
`;
|
|
53
|
+
const ItemIconWrapper = styled_1.default.span `
|
|
54
|
+
margin-right: 0.5em;
|
|
55
|
+
`;
|
|
53
56
|
const MenuItem = react_1.default.forwardRef((props, ref) => {
|
|
54
|
-
const { children, selected, hovered, onMouseEnter, onMouseLeave, onClick } = props, nativeProps = __rest(props, ["children", "selected", "hovered", "onMouseEnter", "onMouseLeave", "onClick"]);
|
|
55
|
-
return (react_1.default.createElement(InnerContainer, Object.assign({}, nativeProps, { ref: ref, onMouseLeave: onMouseLeave, onMouseEnter: onMouseEnter, onClick: onClick, selected: selected, hovered: hovered }),
|
|
57
|
+
const { children, selected, hovered, onMouseEnter, onMouseLeave, onClick, startIcon } = props, nativeProps = __rest(props, ["children", "selected", "hovered", "onMouseEnter", "onMouseLeave", "onClick", "startIcon"]);
|
|
58
|
+
return (react_1.default.createElement(InnerContainer, Object.assign({}, nativeProps, { ref: ref, onMouseLeave: onMouseLeave, onMouseEnter: onMouseEnter, onClick: onClick, selected: selected, hovered: hovered }),
|
|
59
|
+
typeof startIcon !== 'undefined' && startIcon !== null && (react_1.default.createElement(ItemIconWrapper, null, startIcon)),
|
|
60
|
+
children));
|
|
56
61
|
});
|
|
57
62
|
MenuItem.displayName = 'MenuItem';
|
|
58
63
|
exports.default = MenuItem;
|
package/PhoneField/templates.js
CHANGED
|
@@ -15,8 +15,8 @@ const US_1 = __importDefault(require("../CountryFlags/US"));
|
|
|
15
15
|
const IL_1 = __importDefault(require("../CountryFlags/IL"));
|
|
16
16
|
exports.templates = [
|
|
17
17
|
// Russian template
|
|
18
|
-
['RU', react_1.default.createElement(RU_1.default, { key: "ru-1" }), '7', '+x (xxx) xxx-xx-xx', '+7 (987) 654-32-10', /^\+$/],
|
|
19
|
-
['RU', react_1.default.createElement(RU_1.default, { key: "ru-2" }), '7', '8 (xxx) xxx-xx-xx', '8 (987) 654-32-10', /^8[^1]{0,}/],
|
|
18
|
+
['RU', react_1.default.createElement(RU_1.default, { key: "ru-1" }), '7', '+x (xxx) xxx-xx-xx', '+7 (987) 654-32-10', /^\+$/], // must be at first (Default RU)
|
|
19
|
+
['RU', react_1.default.createElement(RU_1.default, { key: "ru-2" }), '7', '8 (xxx) xxx-xx-xx', '8 (987) 654-32-10', /^8[^1]{0,}/], // 8912...
|
|
20
20
|
[
|
|
21
21
|
'RU',
|
|
22
22
|
react_1.default.createElement(RU_1.default, { key: "ru-3" }),
|
|
@@ -24,7 +24,7 @@ exports.templates = [
|
|
|
24
24
|
'+7 (xxx) xxx-xx-xx',
|
|
25
25
|
'+7 (987) 654-32-10',
|
|
26
26
|
/^\+{0,1}7([0-5]|[8-9])[0-9][0-9]/,
|
|
27
|
-
],
|
|
27
|
+
], // +79...
|
|
28
28
|
// Other fucking countries
|
|
29
29
|
['BY', react_1.default.createElement(BY_1.default, { key: "by" }), '375', '+375 (xx) xxx-xx-xx', '+375 (98) 765-43-21', /^\+{0,1}375/],
|
|
30
30
|
['KZ', react_1.default.createElement(KZ_1.default, { key: "kz-1" }), '7', '+997 (xx) xxx-xx-xx', '+997 (98) 765-43-21', /^\+{0,1}997/],
|
|
@@ -35,7 +35,7 @@ exports.templates = [
|
|
|
35
35
|
'+7 (xxx) xxx-xx-xx',
|
|
36
36
|
'+7 (600) 765-43-21',
|
|
37
37
|
/^\+{0,1}7[6-7][0-9][0-9]/,
|
|
38
|
-
],
|
|
38
|
+
], // +7600 - +7700
|
|
39
39
|
['UA', react_1.default.createElement(UA_1.default, { key: "ua" }), '380', '+380 (xx) xxx-xxxx', '+380 (98) 765-4321', /^\+{0,1}380/],
|
|
40
40
|
['JP', react_1.default.createElement(JP_1.default, { key: "jp" }), '81', '+81 (xx) xxx-xxxx', '+81 (98) 765-4321', /^\+{0,1}81/],
|
|
41
41
|
['US', react_1.default.createElement(US_1.default, { key: "us" }), '1', '+1 xxx xxx-xx-xx', '+1 987 654-32-10', /^\+{0,1}1/],
|
package/Typography/Base.d.ts
CHANGED
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
declare const Base: import("@emotion/styled").StyledComponent<{
|
|
7
7
|
theme?: import("@emotion/react").Theme | undefined;
|
|
8
|
-
as?: import("react").ElementType<any> | undefined;
|
|
8
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
9
9
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
|
|
10
10
|
export default Base;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
declare const Blockquote: import("@emotion/styled").StyledComponent<{
|
|
3
3
|
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
-
as?: import("react").ElementType<any> | undefined;
|
|
4
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
5
5
|
}, import("react").DetailedHTMLProps<import("react").BlockquoteHTMLAttributes<HTMLQuoteElement>, HTMLQuoteElement>, {}>;
|
|
6
6
|
export default Blockquote;
|
package/Typography/List.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
export declare const Ul: import("@emotion/styled").StyledComponent<{
|
|
3
3
|
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
-
as?: import("react").ElementType<any> | undefined;
|
|
4
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
5
5
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, {}>;
|
|
6
6
|
export declare const Ol: import("@emotion/styled").StyledComponent<{
|
|
7
7
|
theme?: import("@emotion/react").Theme | undefined;
|
|
8
|
-
as?: import("react").ElementType<any> | undefined;
|
|
8
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
9
9
|
}, import("react").DetailedHTMLProps<import("react").OlHTMLAttributes<HTMLOListElement>, HTMLOListElement>, {}>;
|
|
10
10
|
export declare const Li: import("@emotion/styled").StyledComponent<{
|
|
11
11
|
theme?: import("@emotion/react").Theme | undefined;
|
|
12
|
-
as?: import("react").ElementType<any> | undefined;
|
|
12
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
13
13
|
}, import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, {}>;
|
|
14
14
|
export default Ul;
|
package/Typography/U.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
declare const U: import("@emotion/styled").StyledComponent<{
|
|
3
3
|
theme?: import("@emotion/react").Theme | undefined;
|
|
4
|
-
as?: import("react").ElementType<any> | undefined;
|
|
4
|
+
as?: import("react").ElementType<any, keyof import("react").JSX.IntrinsicElements> | undefined;
|
|
5
5
|
}, import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLElement>, HTMLElement>, {}>;
|
|
6
6
|
export default U;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@via-profit/ui-kit",
|
|
3
|
-
"version": "0.1.0-rc.
|
|
3
|
+
"version": "0.1.0-rc.74",
|
|
4
4
|
"description": "UI Kit",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"shebang-loader": "^0.0.1",
|
|
89
89
|
"terser-webpack-plugin": "^5.3.9",
|
|
90
90
|
"ts-node": "^10.9.2",
|
|
91
|
-
"type-fest": "^4.
|
|
91
|
+
"type-fest": "^4.9.0",
|
|
92
92
|
"typescript": "^5.3.3",
|
|
93
93
|
"url-loader": "^4.1.1",
|
|
94
94
|
"webpack": "^5.89.0",
|