@itcase/forms 1.0.54 → 1.0.56

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.
@@ -3,12 +3,12 @@
3
3
  }
4
4
  .form-radio {
5
5
  &_state_success {
6
- & .radio-button__state {
6
+ & .radio__state {
7
7
  border: solid 1px var(--radio-success-border);
8
8
  }
9
9
  }
10
10
  &_state_error {
11
- & .radio-button__state {
11
+ & .radio__state {
12
12
  border: solid 1px var(--radio-error-border);
13
13
  }
14
14
  }
@@ -23,7 +23,7 @@ var Loader = require('@itcase/ui/components/Loader');
23
23
  var Title = require('@itcase/ui/components/Title');
24
24
  var Input = require('@itcase/ui/components/Input');
25
25
  var Icon = require('@itcase/ui/components/Icon');
26
- var RadioButton = require('@itcase/ui/components/RadioButton');
26
+ var Radio = require('@itcase/ui/components/Radio');
27
27
  var Segmented = require('@itcase/ui/components/Segmented');
28
28
  var Select = require('@itcase/ui/components/Select');
29
29
  var Switch = require('@itcase/ui/components/Switch');
@@ -149,6 +149,10 @@ function FieldWrapperBase(props) {
149
149
  labelTextColor,
150
150
  labelTextSize,
151
151
  labelTextWidth,
152
+ helpText,
153
+ helpTextSize,
154
+ helpTextWeight,
155
+ helpTextColor,
152
156
  message,
153
157
  messageTextColor,
154
158
  messageTextSize,
@@ -216,16 +220,19 @@ function FieldWrapperBase(props) {
216
220
  return /*#__PURE__*/React__default.default.createElement(Tag, {
217
221
  className: clsx__default.default(formFieldClass, 'form__item', 'form-field', type && `form-field_type_${type}`, set && `form-field_set_${set}`, sizeClass, fillClass, shapeClass, isDisabled && `form-field_state_disabled`, isHidden && `form-field_state_hidden`, directionClass, widthClass),
218
222
  "data-tour": dataTour,
223
+ "data-testid": `${inputName}Field`,
219
224
  style: formFieldStyles
220
225
  }, before, (label || labelHidden) && /*#__PURE__*/React__default.default.createElement("div", {
221
226
  htmlFor: id,
222
- className: clsx__default.default('form-field__label')
227
+ className: clsx__default.default('form-field__label'),
228
+ "data-testid": `${inputName}FieldLabel`
223
229
  }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
224
230
  size: labelTextSize,
225
231
  textWeight: labelTextWidth,
226
232
  textColor: labelTextColor
227
233
  }, label, labelHidden && '\u00A0')), desc && /*#__PURE__*/React__default.default.createElement("div", {
228
- className: "form-field__desc"
234
+ className: "form-field__desc",
235
+ "data-testid": `${inputName}FieldDesc`
229
236
  }, /*#__PURE__*/React__default.default.createElement(Text.Text, {
230
237
  size: descTextSize,
231
238
  textWeight: descTextWidth,
@@ -241,21 +248,25 @@ function FieldWrapperBase(props) {
241
248
  size: dividerSize,
242
249
  fill: dividerFill
243
250
  })), showMessage && /*#__PURE__*/React__default.default.createElement("div", {
244
- className: "form-field__message"
251
+ className: "form-field__message",
252
+ "data-testid": `${inputName}FieldMessage`
245
253
  }, Boolean(showError) && error && typeof error === 'string' && /*#__PURE__*/React__default.default.createElement(Text.Text, {
246
254
  className: "form-field__message-item form-field__message-item_type-error",
247
255
  size: errorMessageTextSize,
248
256
  textWeight: errorMessageTextWeight,
249
257
  textColor: errorMessageTextColor,
250
- id: `${inputName}-error`
251
- }, error), Boolean(message) && (!error || typeof error !== 'string') && /*#__PURE__*/React__default.default.createElement(Text.Text, {
258
+ id: `${inputName}-error`,
259
+ dataTestId: `${inputName}FieldMessageError`
260
+ }, error), Boolean(helpText) && (!error || typeof error !== 'string') && /*#__PURE__*/React__default.default.createElement(Text.Text, {
261
+ className: "form-field__message-item form-field__message-item_type_help-text",
262
+ size: helpTextSize,
263
+ textWeight: helpTextWeight,
264
+ textColor: helpTextColor,
265
+ dataTestId: `${inputName}FieldMessageHelpText`
266
+ }, helpText), (!showError && !helpText || showError && !helpText && (!error || typeof error !== 'string')) && /*#__PURE__*/React__default.default.createElement(Text.Text, {
252
267
  className: "form-field__message-item form-field__message-item_type_message",
253
268
  size: messageTextSize,
254
- textWeight: messageTextWeight,
255
- textColor: messageTextColor
256
- }, message), (!showError && !message || showError && !message && (!error || typeof error !== 'string')) && /*#__PURE__*/React__default.default.createElement(Text.Text, {
257
- className: "form-field__message-item form-field__message-item_type_message",
258
- size: messageTextSize
269
+ dataTestId: `${inputName}FieldMessagePlaceholder`
259
270
  }, '\u00A0')), after);
260
271
  }
261
272
  FieldWrapperBase.defaultProps = {
@@ -1308,6 +1319,7 @@ const InputField = /*#__PURE__*/React__default.default.memo(function InputField(
1308
1319
  isRevealable,
1309
1320
  name,
1310
1321
  parse,
1322
+ dataTestId,
1311
1323
  iconSize,
1312
1324
  isDisabled,
1313
1325
  iconBorder,
@@ -1372,7 +1384,8 @@ const InputField = /*#__PURE__*/React__default.default.memo(function InputField(
1372
1384
  onBlur: input.onBlur,
1373
1385
  onChange: onChangeField,
1374
1386
  onFocus: input.onFocus,
1375
- isDisabled: isDisabled
1387
+ isDisabled: isDisabled,
1388
+ dataTestId: `${input.name}FieldInput`
1376
1389
  }, inputProps)), isRevealable && /*#__PURE__*/React__default.default.createElement(Icon.Icon, {
1377
1390
  className: "form-field__icon",
1378
1391
  iconFill: iconFill,
@@ -1412,7 +1425,7 @@ function RadioGroupItem(props) {
1412
1425
  onChange(option.value);
1413
1426
  }
1414
1427
  }, [onChange]);
1415
- return /*#__PURE__*/React__default.default.createElement(RadioButton.RadioButton, Object.assign({
1428
+ return /*#__PURE__*/React__default.default.createElement(Radio.Radio, Object.assign({
1416
1429
  className: "form-radio__item",
1417
1430
  checked: option.value === input.value,
1418
1431
  name: input.name,
@@ -2121,7 +2134,12 @@ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalF
2121
2134
  className,
2122
2135
  config,
2123
2136
  dataTour,
2137
+ dataTestId,
2124
2138
  dataTourButtons,
2139
+ dataTestIdButtons,
2140
+ dataTestIdPrimaryButton,
2141
+ dataTestIdSecondaryButton,
2142
+ dataTestIdTertiaryButton,
2125
2143
  dataTourPrimaryButton,
2126
2144
  dataTourSecondaryButton,
2127
2145
  dataTourTertiaryButton,
@@ -2222,6 +2240,7 @@ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalF
2222
2240
  className: clsx__default.default(className, 'form', set && `form_set_${set}`, type && `form_type_${type}`, directionClass, fillClass, shapeClass, elevationClass),
2223
2241
  name: formName,
2224
2242
  "data-tour": dataTour,
2243
+ "data-testId": dataTestId,
2225
2244
  ref: () => onRefFormInstance(form),
2226
2245
  onSubmit: handleSubmit,
2227
2246
  autoComplete: disableFieldsAutoComplete ? 'off' : undefined,
@@ -2271,7 +2290,8 @@ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalF
2271
2290
  padding: buttonPadding,
2272
2291
  gap: buttonGap,
2273
2292
  className: "form__button",
2274
- dataTour: dataTourButtons
2293
+ dataTour: dataTourButtons,
2294
+ dataTestId: dataTestIdButtons
2275
2295
  }, primaryButtonLabel ? /*#__PURE__*/React__default.default.createElement(Button.Button, {
2276
2296
  width: "fill",
2277
2297
  className: "form__button-item",
@@ -2282,7 +2302,8 @@ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalF
2282
2302
  labelSize: primaryButtonLabelSize,
2283
2303
  labelTextWeight: primaryButtonLabelTextWeight,
2284
2304
  label: primaryButtonLabel,
2285
- dataTour: dataTourPrimaryButton
2305
+ dataTour: dataTourPrimaryButton,
2306
+ dataTestId: dataTestIdPrimaryButton
2286
2307
  }) : primaryButton, secondaryButtonLabel ? /*#__PURE__*/React__default.default.createElement(Button.Button, {
2287
2308
  width: "fill",
2288
2309
  className: "form__button-item",
@@ -2294,7 +2315,8 @@ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalF
2294
2315
  labelTextWeight: secondaryButtonLabelTextWeight,
2295
2316
  label: secondaryButtonLabel,
2296
2317
  onClick: onClickSecondaryButton,
2297
- dataTour: dataTourSecondaryButton
2318
+ dataTour: dataTourSecondaryButton,
2319
+ dataTestId: dataTestIdSecondaryButton
2298
2320
  }) : secondaryButton, tertiaryButtonLabel ? /*#__PURE__*/React__default.default.createElement(Button.Button, {
2299
2321
  width: "fill",
2300
2322
  className: "form__button-item",
@@ -2306,7 +2328,8 @@ const FinalForm = /*#__PURE__*/React__default.default.forwardRef(function FinalF
2306
2328
  labelTextWeight: tertiaryButtonLabelTextWeight,
2307
2329
  label: tertiaryButtonLabel,
2308
2330
  onClick: onClickTertiaryButton,
2309
- dataTour: dataTourTertiaryButton
2331
+ dataTour: dataTourTertiaryButton,
2332
+ dataTestId: dataTestIdTertiaryButton
2310
2333
  }) : tertiaryButton), after);
2311
2334
  },
2312
2335
  subscription: {
@@ -22,7 +22,7 @@ import { Loader } from '@itcase/ui/components/Loader';
22
22
  import { Title } from '@itcase/ui/components/Title';
23
23
  import { Input } from '@itcase/ui/components/Input';
24
24
  import { Icon } from '@itcase/ui/components/Icon';
25
- import { RadioButton } from '@itcase/ui/components/RadioButton';
25
+ import { Radio } from '@itcase/ui/components/Radio';
26
26
  import { Segmented } from '@itcase/ui/components/Segmented';
27
27
  import { Select } from '@itcase/ui/components/Select';
28
28
  import { Switch } from '@itcase/ui/components/Switch';
@@ -139,6 +139,10 @@ function FieldWrapperBase(props) {
139
139
  labelTextColor,
140
140
  labelTextSize,
141
141
  labelTextWidth,
142
+ helpText,
143
+ helpTextSize,
144
+ helpTextWeight,
145
+ helpTextColor,
142
146
  message,
143
147
  messageTextColor,
144
148
  messageTextSize,
@@ -206,16 +210,19 @@ function FieldWrapperBase(props) {
206
210
  return /*#__PURE__*/React.createElement(Tag, {
207
211
  className: clsx(formFieldClass, 'form__item', 'form-field', type && `form-field_type_${type}`, set && `form-field_set_${set}`, sizeClass, fillClass, shapeClass, isDisabled && `form-field_state_disabled`, isHidden && `form-field_state_hidden`, directionClass, widthClass),
208
212
  "data-tour": dataTour,
213
+ "data-testid": `${inputName}Field`,
209
214
  style: formFieldStyles
210
215
  }, before, (label || labelHidden) && /*#__PURE__*/React.createElement("div", {
211
216
  htmlFor: id,
212
- className: clsx('form-field__label')
217
+ className: clsx('form-field__label'),
218
+ "data-testid": `${inputName}FieldLabel`
213
219
  }, /*#__PURE__*/React.createElement(Text, {
214
220
  size: labelTextSize,
215
221
  textWeight: labelTextWidth,
216
222
  textColor: labelTextColor
217
223
  }, label, labelHidden && '\u00A0')), desc && /*#__PURE__*/React.createElement("div", {
218
- className: "form-field__desc"
224
+ className: "form-field__desc",
225
+ "data-testid": `${inputName}FieldDesc`
219
226
  }, /*#__PURE__*/React.createElement(Text, {
220
227
  size: descTextSize,
221
228
  textWeight: descTextWidth,
@@ -231,21 +238,25 @@ function FieldWrapperBase(props) {
231
238
  size: dividerSize,
232
239
  fill: dividerFill
233
240
  })), showMessage && /*#__PURE__*/React.createElement("div", {
234
- className: "form-field__message"
241
+ className: "form-field__message",
242
+ "data-testid": `${inputName}FieldMessage`
235
243
  }, Boolean(showError) && error && typeof error === 'string' && /*#__PURE__*/React.createElement(Text, {
236
244
  className: "form-field__message-item form-field__message-item_type-error",
237
245
  size: errorMessageTextSize,
238
246
  textWeight: errorMessageTextWeight,
239
247
  textColor: errorMessageTextColor,
240
- id: `${inputName}-error`
241
- }, error), Boolean(message) && (!error || typeof error !== 'string') && /*#__PURE__*/React.createElement(Text, {
248
+ id: `${inputName}-error`,
249
+ dataTestId: `${inputName}FieldMessageError`
250
+ }, error), Boolean(helpText) && (!error || typeof error !== 'string') && /*#__PURE__*/React.createElement(Text, {
251
+ className: "form-field__message-item form-field__message-item_type_help-text",
252
+ size: helpTextSize,
253
+ textWeight: helpTextWeight,
254
+ textColor: helpTextColor,
255
+ dataTestId: `${inputName}FieldMessageHelpText`
256
+ }, helpText), (!showError && !helpText || showError && !helpText && (!error || typeof error !== 'string')) && /*#__PURE__*/React.createElement(Text, {
242
257
  className: "form-field__message-item form-field__message-item_type_message",
243
258
  size: messageTextSize,
244
- textWeight: messageTextWeight,
245
- textColor: messageTextColor
246
- }, message), (!showError && !message || showError && !message && (!error || typeof error !== 'string')) && /*#__PURE__*/React.createElement(Text, {
247
- className: "form-field__message-item form-field__message-item_type_message",
248
- size: messageTextSize
259
+ dataTestId: `${inputName}FieldMessagePlaceholder`
249
260
  }, '\u00A0')), after);
250
261
  }
251
262
  FieldWrapperBase.defaultProps = {
@@ -1298,6 +1309,7 @@ const InputField = /*#__PURE__*/React.memo(function InputField(props) {
1298
1309
  isRevealable,
1299
1310
  name,
1300
1311
  parse,
1312
+ dataTestId,
1301
1313
  iconSize,
1302
1314
  isDisabled,
1303
1315
  iconBorder,
@@ -1362,7 +1374,8 @@ const InputField = /*#__PURE__*/React.memo(function InputField(props) {
1362
1374
  onBlur: input.onBlur,
1363
1375
  onChange: onChangeField,
1364
1376
  onFocus: input.onFocus,
1365
- isDisabled: isDisabled
1377
+ isDisabled: isDisabled,
1378
+ dataTestId: `${input.name}FieldInput`
1366
1379
  }, inputProps)), isRevealable && /*#__PURE__*/React.createElement(Icon, {
1367
1380
  className: "form-field__icon",
1368
1381
  iconFill: iconFill,
@@ -1402,7 +1415,7 @@ function RadioGroupItem(props) {
1402
1415
  onChange(option.value);
1403
1416
  }
1404
1417
  }, [onChange]);
1405
- return /*#__PURE__*/React.createElement(RadioButton, Object.assign({
1418
+ return /*#__PURE__*/React.createElement(Radio, Object.assign({
1406
1419
  className: "form-radio__item",
1407
1420
  checked: option.value === input.value,
1408
1421
  name: input.name,
@@ -2111,7 +2124,12 @@ const FinalForm = /*#__PURE__*/React.forwardRef(function FinalForm(props, ref) {
2111
2124
  className,
2112
2125
  config,
2113
2126
  dataTour,
2127
+ dataTestId,
2114
2128
  dataTourButtons,
2129
+ dataTestIdButtons,
2130
+ dataTestIdPrimaryButton,
2131
+ dataTestIdSecondaryButton,
2132
+ dataTestIdTertiaryButton,
2115
2133
  dataTourPrimaryButton,
2116
2134
  dataTourSecondaryButton,
2117
2135
  dataTourTertiaryButton,
@@ -2212,6 +2230,7 @@ const FinalForm = /*#__PURE__*/React.forwardRef(function FinalForm(props, ref) {
2212
2230
  className: clsx(className, 'form', set && `form_set_${set}`, type && `form_type_${type}`, directionClass, fillClass, shapeClass, elevationClass),
2213
2231
  name: formName,
2214
2232
  "data-tour": dataTour,
2233
+ "data-testId": dataTestId,
2215
2234
  ref: () => onRefFormInstance(form),
2216
2235
  onSubmit: handleSubmit,
2217
2236
  autoComplete: disableFieldsAutoComplete ? 'off' : undefined,
@@ -2261,7 +2280,8 @@ const FinalForm = /*#__PURE__*/React.forwardRef(function FinalForm(props, ref) {
2261
2280
  padding: buttonPadding,
2262
2281
  gap: buttonGap,
2263
2282
  className: "form__button",
2264
- dataTour: dataTourButtons
2283
+ dataTour: dataTourButtons,
2284
+ dataTestId: dataTestIdButtons
2265
2285
  }, primaryButtonLabel ? /*#__PURE__*/React.createElement(Button, {
2266
2286
  width: "fill",
2267
2287
  className: "form__button-item",
@@ -2272,7 +2292,8 @@ const FinalForm = /*#__PURE__*/React.forwardRef(function FinalForm(props, ref) {
2272
2292
  labelSize: primaryButtonLabelSize,
2273
2293
  labelTextWeight: primaryButtonLabelTextWeight,
2274
2294
  label: primaryButtonLabel,
2275
- dataTour: dataTourPrimaryButton
2295
+ dataTour: dataTourPrimaryButton,
2296
+ dataTestId: dataTestIdPrimaryButton
2276
2297
  }) : primaryButton, secondaryButtonLabel ? /*#__PURE__*/React.createElement(Button, {
2277
2298
  width: "fill",
2278
2299
  className: "form__button-item",
@@ -2284,7 +2305,8 @@ const FinalForm = /*#__PURE__*/React.forwardRef(function FinalForm(props, ref) {
2284
2305
  labelTextWeight: secondaryButtonLabelTextWeight,
2285
2306
  label: secondaryButtonLabel,
2286
2307
  onClick: onClickSecondaryButton,
2287
- dataTour: dataTourSecondaryButton
2308
+ dataTour: dataTourSecondaryButton,
2309
+ dataTestId: dataTestIdSecondaryButton
2288
2310
  }) : secondaryButton, tertiaryButtonLabel ? /*#__PURE__*/React.createElement(Button, {
2289
2311
  width: "fill",
2290
2312
  className: "form__button-item",
@@ -2296,7 +2318,8 @@ const FinalForm = /*#__PURE__*/React.forwardRef(function FinalForm(props, ref) {
2296
2318
  labelTextWeight: tertiaryButtonLabelTextWeight,
2297
2319
  label: tertiaryButtonLabel,
2298
2320
  onClick: onClickTertiaryButton,
2299
- dataTour: dataTourTertiaryButton
2321
+ dataTour: dataTourTertiaryButton,
2322
+ dataTestId: dataTestIdTertiaryButton
2300
2323
  }) : tertiaryButton), after);
2301
2324
  },
2302
2325
  subscription: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itcase/forms",
3
- "version": "1.0.54",
3
+ "version": "1.0.56",
4
4
  "description": "Forms fields, inputs, etc.",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -30,14 +30,14 @@
30
30
  "registry": "https://registry.npmjs.org/"
31
31
  },
32
32
  "dependencies": {
33
- "@itcase/common": "^1.1.12",
34
- "@itcase/ui": "^1.0.97",
33
+ "@itcase/common": "^1.1.13",
34
+ "@itcase/ui": "^1.1.0",
35
35
  "axios": "^1.6.7",
36
36
  "clsx": "^2.1.0",
37
37
  "date-fns": "2.0.0-alpha.7",
38
38
  "final-form": "^4.20.10",
39
39
  "final-form-focus": "^1.1.2",
40
- "libphonenumber-js": "^1.10.55",
40
+ "libphonenumber-js": "^1.10.57",
41
41
  "lodash": "^4.17.21",
42
42
  "luxon": "^3.4.4",
43
43
  "postcss": "^8.4.35",
@@ -50,12 +50,12 @@
50
50
  "react-select": "^5.8.0"
51
51
  },
52
52
  "devDependencies": {
53
- "@babel/core": "^7.23.9",
53
+ "@babel/core": "^7.24.0",
54
54
  "@babel/eslint-parser": "^7.23.10",
55
- "@babel/preset-env": "^7.23.9",
55
+ "@babel/preset-env": "^7.24.0",
56
56
  "@babel/preset-react": "^7.23.3",
57
- "@commitlint/cli": "^18.6.1",
58
- "@commitlint/config-conventional": "^18.6.2",
57
+ "@commitlint/cli": "^19.0.3",
58
+ "@commitlint/config-conventional": "^19.0.3",
59
59
  "@rollup/plugin-babel": "^6.0.4",
60
60
  "@rollup/plugin-commonjs": "^25.0.7",
61
61
  "@rollup/plugin-json": "^6.1.0",
@@ -64,7 +64,7 @@
64
64
  "@semantic-release/git": "^10.0.1",
65
65
  "babel-plugin-inline-react-svg": "^2.0.2",
66
66
  "babel-plugin-transform-react-remove-prop-types": "^0.4.24",
67
- "eslint": "8.56.0",
67
+ "eslint": "8.57.0",
68
68
  "eslint-config-prettier": "^9.1.0",
69
69
  "eslint-config-standard": "^17.1.0",
70
70
  "eslint-plugin-import": "^2.29.1",
@@ -75,31 +75,31 @@
75
75
  "eslint-plugin-standard": "^5.0.0",
76
76
  "husky": "^9.0.11",
77
77
  "lint-staged": "^15.2.2",
78
- "npm": "^10.4.0",
78
+ "npm": "^10.5.0",
79
79
  "postcss-aspect-ratio-polyfill": "^2.0.0",
80
80
  "postcss-cli": "^11.0.0",
81
81
  "postcss-combine-duplicated-selectors": "^10.0.3",
82
- "postcss-dark-theme-class": "^1.2.0",
83
- "postcss-discard-duplicates": "^6.0.1",
82
+ "postcss-dark-theme-class": "^1.2.1",
83
+ "postcss-discard-duplicates": "^6.0.2",
84
84
  "postcss-each": "^1.1.0",
85
85
  "postcss-easings": "^4.0.0",
86
86
  "postcss-extend-rule": "^4.0.0",
87
87
  "postcss-flexbugs-fixes": "^5.0.2",
88
88
  "postcss-hexrgba": "^2.1.0",
89
- "postcss-import": "^16.0.0",
89
+ "postcss-import": "^16.0.1",
90
90
  "postcss-import-ext-glob": "^2.1.1",
91
91
  "postcss-mixins": "^9.0.4",
92
92
  "postcss-nested": "^6.0.1",
93
93
  "postcss-nested-ancestors": "^3.0.0",
94
94
  "postcss-normalize": "^10.0.1",
95
95
  "postcss-prepend-imports": "^1.0.1",
96
- "postcss-preset-env": "^9.3.0",
96
+ "postcss-preset-env": "^9.4.0",
97
97
  "postcss-pxtorem": "^6.1.0",
98
98
  "postcss-responsive-type": "github:ITCase/postcss-responsive-type",
99
99
  "postcss-sort-media-queries": "^5.2.0",
100
100
  "prettier": "^3.2.5",
101
- "react-datepicker": "^6.1.0",
102
- "rollup": "^4.10.0",
101
+ "react-datepicker": "^6.2.0",
102
+ "rollup": "^4.12.0",
103
103
  "rollup-plugin-peer-deps-external": "^2.2.4",
104
104
  "semantic-release": "^23.0.2",
105
105
  "stylelint": "^16.2.1",