@jetbrains/ring-ui 5.0.103 → 5.0.105

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.
@@ -21,10 +21,16 @@ export const EditableHeading = (props) => {
21
21
  const isSaveDisabled = !isSavingPossible || !children || children.trim() === '' || hasError || isSaving;
22
22
  const isCancelDisabled = isSaving;
23
23
  const isShortcutsDisabled = !isInFocus || isSaving;
24
- const shortcutsMap = React.useMemo(() => ({
25
- enter: isSaveDisabled ? noop : onSave,
26
- esc: isCancelDisabled ? noop : onCancel
27
- }), [isSaveDisabled, isCancelDisabled, onSave, onCancel]);
24
+ const shortcutsMap = React.useMemo(() => {
25
+ const map = {};
26
+ if (!isSaveDisabled) {
27
+ map.enter = onSave;
28
+ }
29
+ if (isCancelDisabled) {
30
+ map.esc = onCancel;
31
+ }
32
+ return map;
33
+ }, [isSaveDisabled, isCancelDisabled, onSave, onCancel]);
28
34
  const classes = classNames(styles.editableHeading, className, {
29
35
  [styles.fullSize]: isEditing && size === Size.FULL,
30
36
  [styles.isEditing]: isEditing,
@@ -11,6 +11,7 @@ export declare class HTTPError extends ExtendableError {
11
11
  export declare const CODE: {
12
12
  UNAUTHORIZED: number;
13
13
  };
14
+ type Method<T> = (url: string, params?: RequestParams) => Promise<T>;
14
15
  export interface FetchParams<T = unknown> extends Omit<RequestInit, 'body' | 'headers'> {
15
16
  body?: T;
16
17
  query?: Record<string, unknown> | undefined;
@@ -40,12 +41,21 @@ export default class HTTP implements Partial<HTTPAuth> {
40
41
  private _storeRequestMeta;
41
42
  private _processResponse;
42
43
  private static _isErrorStatus;
43
- fetch: (url: string, params?: FetchParams) => Promise<any>;
44
+ fetch: <T = any>(url: string, params?: FetchParams) => Promise<T>;
44
45
  authorizedFetch(...args: Parameters<HTTP['_performRequest']>): Promise<any>;
45
- request: (url: string, params?: RequestParams) => Promise<any>;
46
+ request: <T = any>(url: string, params?: RequestParams) => Promise<T>;
46
47
  getMetaForResponse: (response: object) => Partial<Response> | undefined;
47
- get: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
48
- post: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
49
- delete: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
50
- put: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
48
+ get: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
49
+ post: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
50
+ delete: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
51
+ put: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
52
+ /**
53
+ * Usage: const {promise, abort} = http.abortify(http.get<{id: string}>)('http://test.com');
54
+ * @param method
55
+ */
56
+ abortify: <T>(method: Method<T>) => (url: string, params?: RequestParams<boolean> | undefined) => {
57
+ promise: Promise<T>;
58
+ abort: () => void;
59
+ };
51
60
  }
61
+ export {};
@@ -123,6 +123,8 @@ export default class HTTP {
123
123
  static _isErrorStatus(status) {
124
124
  return status < STATUS_OK_IF_MORE_THAN || status >= STATUS_BAD_IF_MORE_THAN;
125
125
  }
126
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
127
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
126
128
  fetch = async (url, params = {}) => {
127
129
  const { body, query = {}, ...fetchConfig } = params;
128
130
  const response = await this._fetch(this._makeRequestUrl(url, query), {
@@ -136,6 +138,8 @@ export default class HTTP {
136
138
  const response = await this._performRequest(...args);
137
139
  return this._processResponse(response);
138
140
  }
141
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
142
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
139
143
  request = async (url, params) => {
140
144
  let token = await this.requestToken?.();
141
145
  let response = await this._performRequest(url, token, params);
@@ -159,20 +163,42 @@ export default class HTTP {
159
163
  }
160
164
  };
161
165
  getMetaForResponse = (response) => this._requestsMeta.get(response);
166
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
167
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
162
168
  get = (url, params) => (this.request(url, {
163
169
  ...params,
164
170
  method: 'GET'
165
171
  }));
172
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
173
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
166
174
  post = (url, params) => (this.request(url, {
167
175
  ...params,
168
176
  method: 'POST'
169
177
  }));
178
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
179
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
170
180
  delete = (url, params) => (this.request(url, {
171
181
  ...params,
172
182
  method: 'DELETE'
173
183
  }));
184
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
185
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
174
186
  put = (url, params) => (this.request(url, {
175
187
  ...params,
176
188
  method: 'PUT'
177
189
  }));
190
+ /**
191
+ * Usage: const {promise, abort} = http.abortify(http.get<{id: string}>)('http://test.com');
192
+ * @param method
193
+ */
194
+ abortify = (method) => (...[url, params]) => {
195
+ const ctrl = new AbortController();
196
+ if (params && !('signal' in params)) {
197
+ params.signal = ctrl.signal;
198
+ }
199
+ return {
200
+ promise: method.call(this, url, params),
201
+ abort: () => ctrl.abort()
202
+ };
203
+ };
178
204
  }
@@ -11,6 +11,9 @@ declare enum Size {
11
11
  L = "L",
12
12
  FULL = "FULL"
13
13
  }
14
+ export interface InputTranslations {
15
+ clear: string;
16
+ }
14
17
  export interface InputBaseProps {
15
18
  size: Size;
16
19
  enableShortcuts: boolean | string[];
@@ -25,6 +28,7 @@ export interface InputBaseProps {
25
28
  icon?: string | ComponentType | null | undefined;
26
29
  height?: ControlsHeight | undefined;
27
30
  afterInput?: ReactNode;
31
+ translations: InputTranslations;
28
32
  }
29
33
  type Override<D, S> = Omit<D, keyof S> & S;
30
34
  export type InputSpecificProps = Override<InputHTMLAttributes<HTMLInputElement>, InputBaseProps> & {
@@ -42,6 +46,9 @@ export declare class Input extends PureComponent<InputProps> {
42
46
  onChange: typeof noop;
43
47
  inputRef: typeof noop;
44
48
  enableShortcuts: string[];
49
+ translations: {
50
+ clear: string;
51
+ };
45
52
  };
46
53
  state: {
47
54
  empty: boolean;
@@ -27,7 +27,10 @@ export class Input extends PureComponent {
27
27
  size: Size.M,
28
28
  onChange: noop,
29
29
  inputRef: noop,
30
- enableShortcuts: ['esc']
30
+ enableShortcuts: ['esc'],
31
+ translations: {
32
+ clear: 'Clear input'
33
+ }
31
34
  };
32
35
  state = {
33
36
  empty: true
@@ -92,7 +95,7 @@ export class Input extends PureComponent {
92
95
  // Modifiers
93
96
  size, active, multiline, borderless,
94
97
  // Props
95
- label, error, className, inputClassName, children, value, onClear, disabled, inputRef, onChange, enableShortcuts, id, placeholder, icon, height = this.context, afterInput, ...restProps } = this.props;
98
+ label, error, className, inputClassName, children, value, onClear, disabled, inputRef, onChange, enableShortcuts, id, placeholder, icon, translations, height = this.context, afterInput, ...restProps } = this.props;
96
99
  const { empty } = this.state;
97
100
  const clearable = !!onClear;
98
101
  const classes = classNames(className, styles.outerContainer, [styles[`size${size}`]], [styles[`height${height}`]], {
@@ -124,7 +127,7 @@ export class Input extends PureComponent {
124
127
  {multiline
125
128
  ? (<textarea onChange={this.handleTextareaChange} rows={1} {...commonProps} {...restProps}/>)
126
129
  : (<input onChange={this.handleInputChange} {...commonProps} {...restProps}/>)}
127
- {clearable && !disabled && (<Button title="Clear input" data-test="ring-input-clear" className={styles.clear} icon={closeIcon} onClick={this.clear}/>)}
130
+ {clearable && !disabled && (<Button title={translations.clear} data-test="ring-input-clear" className={styles.clear} icon={closeIcon} onClick={this.clear}/>)}
128
131
  {afterInput}
129
132
  </div>
130
133
  {error && <div className={styles.errorText}>{error}</div>}
@@ -155,6 +158,7 @@ Input.propTypes = {
155
158
  disabled: PropTypes.bool,
156
159
  id: PropTypes.string,
157
160
  placeholder: PropTypes.string,
161
+ translations: PropTypes.object,
158
162
  icon: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType])
159
163
  };
160
164
  export default Input;
@@ -47,9 +47,9 @@ export default class UserCard extends PureComponent<UserCardProps> {
47
47
  banned: PropTypes.Validator<string>;
48
48
  online: PropTypes.Validator<string>;
49
49
  offline: PropTypes.Validator<string>;
50
- copyToClipboard: PropTypes.Validator<string>;
51
- copiedToClipboard: PropTypes.Validator<string>;
52
- copingToClipboardError: PropTypes.Validator<string>;
50
+ copyToClipboard: PropTypes.Requireable<string>;
51
+ copiedToClipboard: PropTypes.Requireable<string>;
52
+ copingToClipboardError: PropTypes.Requireable<string>;
53
53
  unverified: PropTypes.Requireable<string>;
54
54
  }>>;
55
55
  };
@@ -28,9 +28,9 @@ export default class UserCard extends PureComponent {
28
28
  banned: PropTypes.string.isRequired,
29
29
  online: PropTypes.string.isRequired,
30
30
  offline: PropTypes.string.isRequired,
31
- copyToClipboard: PropTypes.string.isRequired,
32
- copiedToClipboard: PropTypes.string.isRequired,
33
- copingToClipboardError: PropTypes.string.isRequired,
31
+ copyToClipboard: PropTypes.string,
32
+ copiedToClipboard: PropTypes.string,
33
+ copingToClipboardError: PropTypes.string,
34
34
  unverified: PropTypes.string
35
35
  })
36
36
  };
@@ -105,9 +105,9 @@ _defineProperty(UserCard, "propTypes", {
105
105
  banned: PropTypes.string.isRequired,
106
106
  online: PropTypes.string.isRequired,
107
107
  offline: PropTypes.string.isRequired,
108
- copyToClipboard: PropTypes.string.isRequired,
109
- copiedToClipboard: PropTypes.string.isRequired,
110
- copingToClipboardError: PropTypes.string.isRequired,
108
+ copyToClipboard: PropTypes.string,
109
+ copiedToClipboard: PropTypes.string,
110
+ copingToClipboardError: PropTypes.string,
111
111
  unverified: PropTypes.string
112
112
  })
113
113
  });
@@ -66,10 +66,16 @@ const EditableHeading = props => {
66
66
  const isSaveDisabled = !isSavingPossible || !children || children.trim() === '' || hasError || isSaving;
67
67
  const isCancelDisabled = isSaving;
68
68
  const isShortcutsDisabled = !isInFocus || isSaving;
69
- const shortcutsMap = React.useMemo(() => ({
70
- enter: isSaveDisabled ? noop : onSave,
71
- esc: isCancelDisabled ? noop : onCancel
72
- }), [isSaveDisabled, isCancelDisabled, onSave, onCancel]);
69
+ const shortcutsMap = React.useMemo(() => {
70
+ const map = {};
71
+ if (!isSaveDisabled) {
72
+ map.enter = onSave;
73
+ }
74
+ if (isCancelDisabled) {
75
+ map.esc = onCancel;
76
+ }
77
+ return map;
78
+ }, [isSaveDisabled, isCancelDisabled, onSave, onCancel]);
73
79
  const classes = classNames(modules_6e69b0fe.editableHeading, className, {
74
80
  [modules_6e69b0fe.fullSize]: isEditing && size === Size.FULL,
75
81
  [modules_6e69b0fe.isEditing]: isEditing,
@@ -11,6 +11,7 @@ export declare class HTTPError extends ExtendableError {
11
11
  export declare const CODE: {
12
12
  UNAUTHORIZED: number;
13
13
  };
14
+ type Method<T> = (url: string, params?: RequestParams) => Promise<T>;
14
15
  export interface FetchParams<T = unknown> extends Omit<RequestInit, 'body' | 'headers'> {
15
16
  body?: T;
16
17
  query?: Record<string, unknown> | undefined;
@@ -40,12 +41,21 @@ export default class HTTP implements Partial<HTTPAuth> {
40
41
  private _storeRequestMeta;
41
42
  private _processResponse;
42
43
  private static _isErrorStatus;
43
- fetch: (url: string, params?: FetchParams) => Promise<any>;
44
+ fetch: <T = any>(url: string, params?: FetchParams) => Promise<T>;
44
45
  authorizedFetch(...args: Parameters<HTTP['_performRequest']>): Promise<any>;
45
- request: (url: string, params?: RequestParams) => Promise<any>;
46
+ request: <T = any>(url: string, params?: RequestParams) => Promise<T>;
46
47
  getMetaForResponse: (response: object) => Partial<Response> | undefined;
47
- get: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
48
- post: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
49
- delete: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
50
- put: (url: string, params?: RequestParamsWithoutMethod) => Promise<any>;
48
+ get: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
49
+ post: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
50
+ delete: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
51
+ put: <T = any>(url: string, params?: RequestParamsWithoutMethod) => Promise<T>;
52
+ /**
53
+ * Usage: const {promise, abort} = http.abortify(http.get<{id: string}>)('http://test.com');
54
+ * @param method
55
+ */
56
+ abortify: <T>(method: Method<T>) => (url: string, params?: RequestParams<boolean> | undefined) => {
57
+ promise: Promise<T>;
58
+ abort: () => void;
59
+ };
51
60
  }
61
+ export {};
package/dist/http/http.js CHANGED
@@ -99,6 +99,20 @@ class HTTP {
99
99
  ...params,
100
100
  method: 'PUT'
101
101
  }));
102
+ _defineProperty(this, "abortify", method => function () {
103
+ for (var _len = arguments.length, _ref = new Array(_len), _key = 0; _key < _len; _key++) {
104
+ _ref[_key] = arguments[_key];
105
+ }
106
+ let [url, params] = _ref;
107
+ const ctrl = new AbortController();
108
+ if (params && !('signal' in params)) {
109
+ params.signal = ctrl.signal;
110
+ }
111
+ return {
112
+ promise: method.call(_this, url, params),
113
+ abort: () => ctrl.abort()
114
+ };
115
+ });
102
116
  if (_auth) {
103
117
  this.setAuth(_auth);
104
118
  }
@@ -139,8 +153,8 @@ class HTTP {
139
153
  } : {}),
140
154
  ...headers
141
155
  };
142
- Object.entries(combinedHeaders).forEach(_ref => {
143
- let [key, header] = _ref;
156
+ Object.entries(combinedHeaders).forEach(_ref2 => {
157
+ let [key, header] = _ref2;
144
158
  if (header === null || header === undefined) {
145
159
  Reflect.deleteProperty(combinedHeaders, key);
146
160
  }
@@ -203,10 +217,15 @@ class HTTP {
203
217
  static _isErrorStatus(status) {
204
218
  return status < STATUS_OK_IF_MORE_THAN || status >= STATUS_BAD_IF_MORE_THAN;
205
219
  }
220
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
221
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
+
206
223
  async authorizedFetch() {
207
224
  const response = await this._performRequest(...arguments);
208
225
  return this._processResponse(response);
209
226
  }
227
+ // TODO: Replace any to never/unknown in next release and remove eslint-disable
228
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
210
229
  }
211
230
 
212
231
  export { CODE, HTTPError, HTTP as default, defaultFetchConfig };
@@ -11,6 +11,9 @@ declare enum Size {
11
11
  L = "L",
12
12
  FULL = "FULL"
13
13
  }
14
+ export interface InputTranslations {
15
+ clear: string;
16
+ }
14
17
  export interface InputBaseProps {
15
18
  size: Size;
16
19
  enableShortcuts: boolean | string[];
@@ -25,6 +28,7 @@ export interface InputBaseProps {
25
28
  icon?: string | ComponentType | null | undefined;
26
29
  height?: ControlsHeight | undefined;
27
30
  afterInput?: ReactNode;
31
+ translations: InputTranslations;
28
32
  }
29
33
  type Override<D, S> = Omit<D, keyof S> & S;
30
34
  export type InputSpecificProps = Override<InputHTMLAttributes<HTMLInputElement>, InputBaseProps> & {
@@ -42,6 +46,9 @@ export declare class Input extends PureComponent<InputProps> {
42
46
  onChange: typeof noop;
43
47
  inputRef: typeof noop;
44
48
  enableShortcuts: string[];
49
+ translations: {
50
+ clear: string;
51
+ };
45
52
  };
46
53
  state: {
47
54
  empty: boolean;
@@ -115,6 +115,7 @@ class Input extends PureComponent {
115
115
  id,
116
116
  placeholder,
117
117
  icon,
118
+ translations,
118
119
  height = this.context,
119
120
  afterInput,
120
121
  ...restProps
@@ -163,7 +164,7 @@ class Input extends PureComponent {
163
164
  }, commonProps, restProps)) : /*#__PURE__*/React.createElement("input", _extends({
164
165
  onChange: this.handleInputChange
165
166
  }, commonProps, restProps)), clearable && !disabled && /*#__PURE__*/React.createElement(Button, {
166
- title: "Clear input",
167
+ title: translations.clear,
167
168
  "data-test": "ring-input-clear",
168
169
  className: modules_88cfaf40.clear,
169
170
  icon: closeIcon,
@@ -177,7 +178,10 @@ _defineProperty(Input, "defaultProps", {
177
178
  size: Size.M,
178
179
  onChange: noop,
179
180
  inputRef: noop,
180
- enableShortcuts: ['esc']
181
+ enableShortcuts: ['esc'],
182
+ translations: {
183
+ clear: 'Clear input'
184
+ }
181
185
  });
182
186
  _defineProperty(Input, "contextType", ControlsHeightContext);
183
187
  Input.propTypes = {
@@ -197,6 +201,7 @@ Input.propTypes = {
197
201
  disabled: PropTypes.bool,
198
202
  id: PropTypes.string,
199
203
  placeholder: PropTypes.string,
204
+ translations: PropTypes.object,
200
205
  icon: PropTypes.oneOfType([PropTypes.string, PropTypes.elementType])
201
206
  };
202
207
 
@@ -47,9 +47,9 @@ export default class UserCard extends PureComponent<UserCardProps> {
47
47
  banned: PropTypes.Validator<string>;
48
48
  online: PropTypes.Validator<string>;
49
49
  offline: PropTypes.Validator<string>;
50
- copyToClipboard: PropTypes.Validator<string>;
51
- copiedToClipboard: PropTypes.Validator<string>;
52
- copingToClipboardError: PropTypes.Validator<string>;
50
+ copyToClipboard: PropTypes.Requireable<string>;
51
+ copiedToClipboard: PropTypes.Requireable<string>;
52
+ copingToClipboardError: PropTypes.Requireable<string>;
53
53
  unverified: PropTypes.Requireable<string>;
54
54
  }>>;
55
55
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jetbrains/ring-ui",
3
- "version": "5.0.103",
3
+ "version": "5.0.105",
4
4
  "description": "JetBrains UI library",
5
5
  "author": "JetBrains",
6
6
  "license": "Apache-2.0",
@@ -84,19 +84,19 @@
84
84
  "@rollup/plugin-replace": "^5.0.2",
85
85
  "@storybook/addon-a11y": "6.5.16",
86
86
  "@storybook/addon-docs": "6.5.16",
87
- "@storybook/addon-essentials": "6.5.15",
87
+ "@storybook/addon-essentials": "6.5.16",
88
88
  "@storybook/addon-storyshots": "6.5.16",
89
89
  "@storybook/addon-storyshots-puppeteer": "6.5.16",
90
90
  "@storybook/addon-storysource": "6.5.16",
91
91
  "@storybook/addons": "6.5.16",
92
92
  "@storybook/builder-webpack5": "6.5.16",
93
- "@storybook/client-api": "6.5.15",
93
+ "@storybook/client-api": "6.5.16",
94
94
  "@storybook/core": "6.5.16",
95
95
  "@storybook/html": "6.5.16",
96
- "@storybook/manager-webpack5": "6.5.15",
96
+ "@storybook/manager-webpack5": "6.5.16",
97
97
  "@storybook/react": "6.5.16",
98
98
  "@storybook/source-loader": "6.5.16",
99
- "@storybook/theming": "6.5.15",
99
+ "@storybook/theming": "6.5.16",
100
100
  "@testing-library/react": "^13.4.0",
101
101
  "@testing-library/user-event": "^14.4.3",
102
102
  "@types/chai": "^4.3.4",
@@ -108,15 +108,15 @@
108
108
  "@types/react-dom": "^18.0.10",
109
109
  "@types/sinon": "^10.0.13",
110
110
  "@types/sinon-chai": "^3.2.9",
111
- "@typescript-eslint/eslint-plugin": "^5.49.0",
112
- "@typescript-eslint/parser": "^5.49.0",
111
+ "@typescript-eslint/eslint-plugin": "^5.50.0",
112
+ "@typescript-eslint/parser": "^5.50.0",
113
113
  "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0",
114
114
  "angular": "^1.8.3",
115
115
  "angular-mocks": "^1.8.3",
116
116
  "angular-route": "^1.8.3",
117
117
  "babel-plugin-react-docgen": "^4.2.1",
118
118
  "babel-plugin-require-context-hook": "^1.0.0",
119
- "caniuse-lite": "^1.0.30001449",
119
+ "caniuse-lite": "^1.0.30001450",
120
120
  "chai": "^4.3.7",
121
121
  "chai-as-promised": "^7.1.1",
122
122
  "chai-dom": "^1.10.0",
@@ -125,7 +125,7 @@
125
125
  "core-js": "^3.27.2",
126
126
  "cpy-cli": "^3.1.1",
127
127
  "enzyme": "^3.11.0",
128
- "eslint": "^8.32.0",
128
+ "eslint": "^8.33.0",
129
129
  "eslint-import-resolver-webpack": "^0.13.2",
130
130
  "eslint-plugin-angular": "^4.1.0",
131
131
  "eslint-plugin-bdd": "^2.1.1",
@@ -158,7 +158,7 @@
158
158
  "react-test-renderer": "^18.2.0",
159
159
  "regenerator-runtime": "^0.13.11",
160
160
  "rimraf": "^4.1.2",
161
- "rollup": "^3.11.0",
161
+ "rollup": "^3.12.1",
162
162
  "rollup-plugin-clear": "^2.0.7",
163
163
  "rollup-plugin-styles": "^4.0.0",
164
164
  "sinon": "^15.0.1",
@@ -169,7 +169,7 @@
169
169
  "svg-inline-loader": "^0.8.2",
170
170
  "teamcity-service-messages": "^0.1.14",
171
171
  "terser-webpack-plugin": "^5.3.6",
172
- "typescript": "~4.9.4",
172
+ "typescript": "~4.9.5",
173
173
  "wallaby-webpack": "^3.9.16",
174
174
  "webpack": "^5.75.0",
175
175
  "webpack-cli": "^5.0.1",
@@ -212,7 +212,7 @@
212
212
  "@ungap/url-search-params": "^0.2.2",
213
213
  "babel-loader": "9.1.2",
214
214
  "babel-plugin-transform-define": "^2.1.0",
215
- "browserslist": "^4.21.4",
215
+ "browserslist": "^4.21.5",
216
216
  "change-case": "^4.1.1",
217
217
  "classnames": "^2.3.2",
218
218
  "combokeys": "^3.0.1",