iguazio.dashboard-react-controls 0.0.6 → 0.0.9

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.
Files changed (33) hide show
  1. package/dist/components/FormCheckBox/FormCheckBox.js +57 -0
  2. package/dist/components/FormCheckBox/formCheckBox.scss +33 -0
  3. package/dist/components/FormInput/FormInput.js +447 -0
  4. package/dist/components/FormInput/formInput.scss +93 -0
  5. package/dist/components/FormKeyValueTable/FormKeyValueTable.js +353 -0
  6. package/dist/components/FormKeyValueTable/formKeyValueTable.scss +117 -0
  7. package/dist/components/FormSelect/FormSelect.js +342 -0
  8. package/dist/components/FormSelect/FormSelect.test.js +158 -0
  9. package/dist/components/FormSelect/formSelect.scss +93 -0
  10. package/dist/components/Modal/Modal.js +9 -12
  11. package/dist/components/Tip/Tip.js +132 -0
  12. package/dist/components/Tip/Tip.test.js +96 -0
  13. package/dist/components/Tip/tip.scss +89 -0
  14. package/dist/components/Wizard/Wizard.js +50 -81
  15. package/dist/components/Wizard/Wizard.scss +11 -13
  16. package/dist/components/index.js +40 -0
  17. package/dist/constants.js +20 -2
  18. package/dist/elements/OptionsMenu/OptionsMenu.js +63 -0
  19. package/dist/elements/OptionsMenu/optionsMenu.scss +49 -0
  20. package/dist/elements/SelectOption/SelectOption.js +95 -0
  21. package/dist/elements/SelectOption/SelectOption.test.js +99 -0
  22. package/dist/elements/SelectOption/selectOption.scss +61 -0
  23. package/dist/elements/ValidationTemplate/ValidationTemplate.js +48 -0
  24. package/dist/elements/ValidationTemplate/ValidationTemplate.scss +36 -0
  25. package/dist/elements/index.js +31 -0
  26. package/dist/hooks/index.js +13 -0
  27. package/dist/hooks/useDetectOutsideClick.js +34 -0
  28. package/dist/index.js +13 -5
  29. package/dist/scss/mixins.scss +98 -23
  30. package/dist/types.js +34 -2
  31. package/dist/utils/form.util.js +22 -0
  32. package/dist/utils/validation.util.js +269 -0
  33. package/package.json +11 -7
@@ -181,9 +181,7 @@
181
181
  &_grey {
182
182
  @include chipButtonAddBackground($mulledWineThree, $topaz);
183
183
  }
184
- }
185
-
186
- @else {
184
+ } @else {
187
185
  &_none {
188
186
  background-color: transparent;
189
187
  }
@@ -261,9 +259,7 @@
261
259
  &_medium {
262
260
  @include chipButtonAddSize(34px);
263
261
  }
264
- }
265
-
266
- @else {
262
+ } @else {
267
263
  &_dense {
268
264
  height: 26px;
269
265
  }
@@ -308,9 +304,7 @@
308
304
  &_purple {
309
305
  @include editableChipFont($amethyst);
310
306
  }
311
- }
312
-
313
- @else if $component == Chip {
307
+ } @else if $component == Chip {
314
308
  &_white {
315
309
  @include chipFont($white);
316
310
  }
@@ -330,9 +324,7 @@
330
324
  &_orange {
331
325
  @include chipFont($sorbus);
332
326
  }
333
- }
334
-
335
- @else if $component == ButtonAddChip {
327
+ } @else if $component == ButtonAddChip {
336
328
  &_primary {
337
329
  @include chipButtonAddColor($topaz);
338
330
  }
@@ -985,25 +977,108 @@
985
977
  @mixin gradient($type) {
986
978
  @if $type == 'card' {
987
979
  background: linear-gradient(180deg, $brightTurquoise 4px, $white 4px);
988
- }
989
-
990
- @else {
991
- background:
992
- linear-gradient(
993
- 88.84deg,
994
- #d873e1 5.49%,
995
- #fc658f 57.67%,
996
- #ffb971 107.73%
997
- );
980
+ } @else {
981
+ background: linear-gradient(88.84deg, #d873e1 5.49%, #fc658f 57.67%, #ffb971 107.73%);
998
982
  }
999
983
  }
1000
984
 
1001
985
  @mixin fieldWrapper {
986
+ display: flex;
987
+ flex: 1;
988
+ flex-flow: row nowrap;
989
+ align-items: center;
1002
990
  position: relative;
1003
991
  width: 100%;
1004
- padding: 18px 16px;
1005
992
  color: $primary;
1006
993
  background-color: transparent;
1007
994
  border: $primaryBorder;
1008
995
  border-radius: 4px;
1009
996
  }
997
+
998
+ @mixin formField {
999
+ position: relative;
1000
+ display: flex;
1001
+ flex-flow: column nowrap;
1002
+ height: 100%;
1003
+ width: 100%;
1004
+
1005
+ &__label {
1006
+ margin-bottom: 5px;
1007
+ color: $topaz;
1008
+ font-size: 12px;
1009
+ text-align: left;
1010
+ text-transform: capitalize;
1011
+ background-color: transparent;
1012
+
1013
+ &-mandatory {
1014
+ color: $amaranth;
1015
+ }
1016
+
1017
+ &-disabled {
1018
+ color: $spunPearl;
1019
+
1020
+ .form-field__label-mandatory {
1021
+ color: $spunPearl;
1022
+ }
1023
+ }
1024
+ }
1025
+
1026
+ &__wrapper {
1027
+ @include fieldWrapper;
1028
+
1029
+ &-disabled {
1030
+ color: $spunPearl;
1031
+ cursor: not-allowed;
1032
+ }
1033
+
1034
+ &-invalid {
1035
+ border: $errorBorder;
1036
+ }
1037
+
1038
+ &.without-border {
1039
+ border-color: transparent;
1040
+ }
1041
+
1042
+ &-dense {
1043
+ padding-top: 12px;
1044
+ padding-bottom: 12px;
1045
+ }
1046
+
1047
+ &-normal {
1048
+ padding-top: 14px;
1049
+ padding-bottom: 14px;
1050
+ }
1051
+
1052
+ &-medium {
1053
+ padding-top: 16px;
1054
+ padding-bottom: 16px;
1055
+ }
1056
+
1057
+ &-chunky {
1058
+ padding-top: 18px;
1059
+ padding-bottom: 18px;
1060
+ }
1061
+ }
1062
+
1063
+ &__control {
1064
+ position: relative;
1065
+ display: flex;
1066
+ flex: 1;
1067
+ overflow: hidden;
1068
+ padding: 0 8px 0 16px;
1069
+ }
1070
+
1071
+ &__icons {
1072
+ display: flex;
1073
+ flex-shrink: 0;
1074
+ align-items: center;
1075
+ margin-right: 4px;
1076
+ min-height: 25px;
1077
+
1078
+ & > * {
1079
+ display: flex;
1080
+ align-items: center;
1081
+ padding: 0 4px;
1082
+ }
1083
+ }
1084
+ }
package/dist/types.js CHANGED
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.WIZARD_STEPS_CONFIG = exports.POP_UP_CUSTOM_POSITION = exports.MODAL_SIZES = exports.CONFIRM_DIALOG_SUBMIT_BUTTON = exports.CONFIRM_DIALOG_CANCEL_BUTTON = exports.BUTTON_VARIANTS = void 0;
6
+ exports.WIZARD_STEPS_CONFIG = exports.SELECT_OPTIONS = exports.SELECT_OPTION = exports.POP_UP_CUSTOM_POSITION = exports.MODAL_SIZES = exports.INPUT_VALIDATION_RULES = exports.INPUT_LINK = exports.CONFIRM_DIALOG_SUBMIT_BUTTON = exports.CONFIRM_DIALOG_CANCEL_BUTTON = exports.BUTTON_VARIANTS = void 0;
7
7
 
8
8
  var _propTypes = _interopRequireDefault(require("prop-types"));
9
9
 
@@ -48,4 +48,36 @@ var WIZARD_STEPS_CONFIG = _propTypes.default.arrayOf(_propTypes.default.shape({
48
48
  getActions: _propTypes.default.func
49
49
  }));
50
50
 
51
- exports.WIZARD_STEPS_CONFIG = WIZARD_STEPS_CONFIG;
51
+ exports.WIZARD_STEPS_CONFIG = WIZARD_STEPS_CONFIG;
52
+
53
+ var INPUT_LINK = _propTypes.default.shape({
54
+ show: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),
55
+ url: _propTypes.default.string
56
+ });
57
+
58
+ exports.INPUT_LINK = INPUT_LINK;
59
+
60
+ var SELECT_OPTION = _propTypes.default.shape({
61
+ disabled: _propTypes.default.bool,
62
+ hidden: _propTypes.default.bool,
63
+ icon: _propTypes.default.element,
64
+ id: _propTypes.default.string.isRequired,
65
+ label: _propTypes.default.string.isRequired,
66
+ status: _propTypes.default.string,
67
+ subLabel: _propTypes.default.string
68
+ });
69
+
70
+ exports.SELECT_OPTION = SELECT_OPTION;
71
+
72
+ var SELECT_OPTIONS = _propTypes.default.arrayOf(SELECT_OPTION);
73
+
74
+ exports.SELECT_OPTIONS = SELECT_OPTIONS;
75
+
76
+ var INPUT_VALIDATION_RULES = _propTypes.default.arrayOf(_propTypes.default.shape({
77
+ name: _propTypes.default.string.isRequired,
78
+ label: _propTypes.default.string.isRequired,
79
+ pattern: _propTypes.default.oneOfType([_propTypes.default.instanceOf(RegExp), _propTypes.default.func]).isRequired,
80
+ isValid: _propTypes.default.bool
81
+ }));
82
+
83
+ exports.INPUT_VALIDATION_RULES = INPUT_VALIDATION_RULES;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.setFieldState = void 0;
7
+
8
+ var _lodash = require("lodash");
9
+
10
+ var setFieldState = function setFieldState(args, state) {
11
+ var fieldName = args[0];
12
+ var states = args[1];
13
+ var field = state.fields[fieldName];
14
+
15
+ if (field) {
16
+ for (var stateName in states) {
17
+ (0, _lodash.set)(field, stateName, states[stateName]);
18
+ }
19
+ }
20
+ };
21
+
22
+ exports.setFieldState = setFieldState;
@@ -0,0 +1,269 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.required = exports.getValidationRules = exports.checkPatternsValidity = void 0;
7
+
8
+ var _lodash = _interopRequireDefault(require("lodash"));
9
+
10
+ var _constants = require("../constants");
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
+
16
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
17
+
18
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
19
+
20
+ ////// PRIVATE METHODS ///////
21
+
22
+ /**
23
+ * Converts characters string to readable format
24
+ * Note: converts Hyphens to En Dashes, replaces one space with comma and space,
25
+ * replaces letter `s` with `spaces` word
26
+ * @param {string} chars - characters to convert
27
+ * @returns {string} - converted string
28
+ * @example
29
+ * convertToLabel('a-z A-Z - _ *');
30
+ * // => 'a–z, A–Z, –, _, *'
31
+ */
32
+ var convertToLabel = function convertToLabel(chars) {
33
+ return chars.replace(/-/g, '–').replace(/\s/g, ', ').replace(/\bs\b/);
34
+ };
35
+ /**
36
+ * Converts characters string to valid RegExp string that will be placed into RegExp pattern
37
+ * @param {string} chars - characters to convert
38
+ * @returns {string} - converted string
39
+ * @example
40
+ * convertToPattern('a-z A-Z - _ *');
41
+ * // => 'a-zA-Z\-\_\*'
42
+ */
43
+
44
+
45
+ var convertToPattern = function convertToPattern(chars) {
46
+ return chars.split(' ').map(function (patternItem) {
47
+ return patternItem.length === 1 ? '\\' + patternItem : patternItem;
48
+ }).join('');
49
+ };
50
+ /**
51
+ * Checks whether there is at least one failed validation rule.
52
+ * @returns {boolean} `true` in case there is at least one failed validation rule, or `false` otherwise.
53
+ */
54
+
55
+
56
+ var hasInvalidRule = function hasInvalidRule(newRules) {
57
+ return _lodash.default.some(newRules, ['isValid', false]);
58
+ }; ////// PUBLIC METHODS ///////
59
+
60
+ /**
61
+ * validate required field value
62
+ * @param {string} validationMsg Custom validationMsg. Defualt to "Required"
63
+ * @returns {function} Function that accepts a value and return an array [isFieldValid, validationMsg]
64
+ */
65
+
66
+
67
+ var required = function required() {
68
+ var validationMsg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Required';
69
+ return function (value) {
70
+ var isValid = value.trim() !== '' && typeof value === 'string';
71
+ return [isValid, validationMsg];
72
+ };
73
+ };
74
+ /**
75
+ * Checks whether there is at least one failed validation rule.
76
+ * @function checkPatternsValidity
77
+ * @param {Array} validationRules Array of Validation Rule Objects {name: "", lable: "", pattren: [Function || Regex]}
78
+ * @param {string} value Field value to check validity
79
+ * @returns {Array} [validationRules, isFieldValid] New validationRules With `isValid` property, `true` in case there is at least one failed validation rule, or `false` otherwise.
80
+ */
81
+
82
+
83
+ exports.required = required;
84
+
85
+ var checkPatternsValidity = function checkPatternsValidity(validationRules, value) {
86
+ var newRules = validationRules.map(function (rule) {
87
+ return _objectSpread(_objectSpread({}, rule), {}, {
88
+ isValid: _lodash.default.isFunction(rule.pattern) ? rule.pattern(value) :
89
+ /* else, it is a RegExp */
90
+ rule.pattern.test(value)
91
+ });
92
+ });
93
+ return [newRules, !hasInvalidRule(newRules)];
94
+ };
95
+
96
+ exports.checkPatternsValidity = checkPatternsValidity;
97
+ var generateRule = {
98
+ beginWith: function beginWith(chars) {
99
+ return {
100
+ name: 'begin',
101
+ label: _constants.validation.BEGIN_WITH + ': ' + convertToLabel(chars),
102
+ pattern: new RegExp('^[' + convertToPattern(chars) + ']')
103
+ };
104
+ },
105
+ beginNotWith: function beginNotWith(chars) {
106
+ return {
107
+ name: 'beginNot',
108
+ label: _constants.validation.BEGIN_NOT_WITH + ': ' + convertToLabel(chars),
109
+ pattern: new RegExp('^[^' + convertToPattern(chars) + ']')
110
+ };
111
+ },
112
+ endWith: function endWith(chars) {
113
+ return {
114
+ name: 'end',
115
+ label: _constants.validation.END_WITH + ': ' + convertToLabel(chars),
116
+ pattern: new RegExp('[' + convertToPattern(chars) + ']$')
117
+ };
118
+ },
119
+ endNotWith: function endNotWith(chars) {
120
+ return {
121
+ name: 'endNot',
122
+ label: _constants.validation.END_NOT_WITH + ': ' + convertToLabel(chars),
123
+ pattern: new RegExp('[^' + convertToPattern(chars) + ']$')
124
+ };
125
+ },
126
+ beginEndWith: function beginEndWith(chars) {
127
+ var convertedPattern = convertToPattern(chars);
128
+ return {
129
+ name: 'beginEnd',
130
+ label: _constants.validation.BEGIN_END_WITH + ': ' + convertToLabel(chars),
131
+ pattern: new RegExp('^([' + convertedPattern + '].*)?[' + convertedPattern + ']$')
132
+ };
133
+ },
134
+ beginEndNotWith: function beginEndNotWith(chars) {
135
+ var convertedPattern = convertToPattern(chars);
136
+ return {
137
+ name: 'beginEndNot',
138
+ label: _constants.validation.BEGIN_END_NOT_WITH + ': ' + convertToLabel(chars),
139
+ pattern: new RegExp('^([^' + convertedPattern + '].*)?[^' + convertedPattern + ']$')
140
+ };
141
+ },
142
+ onlyAtTheBeginning: function onlyAtTheBeginning(chars) {
143
+ var convertedPattern = convertToPattern(chars);
144
+ return {
145
+ name: 'onlyAtTheBeginning',
146
+ label: _constants.validation.ONLY_AT_THE_BEGINNING + ': ' + convertToLabel(chars),
147
+ pattern: new RegExp('^([' + convertedPattern + '])?[^' + convertedPattern + ']+$')
148
+ };
149
+ },
150
+ validCharacters: function validCharacters(chars) {
151
+ return {
152
+ name: 'validCharacters',
153
+ label: _constants.validation.VALID_CHARACTERS + ': ' + convertToLabel(chars),
154
+ pattern: new RegExp('^[' + convertToPattern(chars) + ']+$')
155
+ };
156
+ },
157
+ noConsecutiveCharacters: function noConsecutiveCharacters(chars) {
158
+ var convertedPattern = chars.split(' ').map(function (charPair) {
159
+ var charsPairArray = charPair.split('');
160
+ return "(?!.*\\".concat(charsPairArray[0], "\\").concat(charsPairArray[1], ")");
161
+ }).join('');
162
+ return {
163
+ name: 'noConsecutiveCharacters',
164
+ label: _constants.validation.NO_CONSECUTIVE_CHARACTER + ': ' + convertToLabel(chars),
165
+ pattern: new RegExp('^' + convertedPattern)
166
+ };
167
+ },
168
+ maxLengthBetweenDelimiters: function maxLengthBetweenDelimiters(delimiter, maxLength, delimiterDescription) {
169
+ return {
170
+ name: 'labelsLength',
171
+ label: "Max length between two ".concat(_lodash.default.defaultTo(delimiterDescription, delimiter), ": ").concat(maxLength),
172
+ pattern: function pattern(value) {
173
+ return value.split(delimiter).every(function (item) {
174
+ return item.length >= 1 && item.length <= maxLength;
175
+ });
176
+ }
177
+ };
178
+ },
179
+ mustNotBe: function mustNotBe(words) {
180
+ var wordsArray = words.split(' ');
181
+ return {
182
+ name: 'mustNotBe',
183
+ label: _constants.validation.MUST_NOT_BE + ': ' + convertToLabel(words),
184
+ pattern: function pattern(value) {
185
+ return !_lodash.default.includes(wordsArray, value);
186
+ }
187
+ };
188
+ },
189
+ length: function length(options) {
190
+ var min = Number.isSafeInteger(options.min) ? options.min : 0;
191
+ var max = Number.isSafeInteger(options.max) ? options.max : '';
192
+
193
+ if (min || max) {
194
+ var label = 'Length – ' + (min ? 'min: ' + options.min + '\xa0\xa0' : '') + (max ? 'max: ' + options.max : '');
195
+ return {
196
+ name: 'length',
197
+ label: label,
198
+ pattern: new RegExp('^[\\S\\s]{' + min + ',' + max + '}$')
199
+ };
200
+ }
201
+ },
202
+ required: function required() {
203
+ return {
204
+ name: 'required',
205
+ label: _constants.validation.REQUIRED,
206
+ pattern: new RegExp('\\S')
207
+ };
208
+ }
209
+ }; //const commonRules = {
210
+ // email: [
211
+ // generateRule.beginEndNotWith('@ .'),
212
+ // {
213
+ // name: 'exactlyOne',
214
+ // label: ValidationConstants.MUST_CONTAIN_EXACTLY_ONE + ': @',
215
+ // pattern: /^[^@]+@[^@]+$/
216
+ // },
217
+ // {
218
+ // name: 'dotAfterAt',
219
+ // label: ValidationConstants.MUST_HAVE_DOT_AFTER_AT,
220
+ // pattern: /@.+\..+$/
221
+ // }
222
+ // ]
223
+ //}
224
+
225
+ var validationRules = {
226
+ artifact: {
227
+ name: [generateRule.validCharacters('a-z A-Z 0-9 - _ .'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.length({
228
+ max: 253
229
+ }), generateRule.required()]
230
+ },
231
+ feature: {
232
+ sets: {
233
+ tag: [generateRule.validCharacters('a-z A-Z 0-9 - _'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.length({
234
+ max: 56
235
+ })]
236
+ },
237
+ vector: {
238
+ name: [generateRule.validCharacters('a-z A-Z 0-9 - _ .'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.length({
239
+ max: 56
240
+ }), generateRule.required()]
241
+ }
242
+ },
243
+ common: {
244
+ name: [generateRule.validCharacters('a-z A-Z 0-9 - _ .'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.length({
245
+ max: 63
246
+ }), generateRule.required()],
247
+ tag: [generateRule.validCharacters('a-z A-Z 0-9 - _ .'), generateRule.beginEndWith('a-z A-Z 0-9'), generateRule.length({
248
+ max: 56
249
+ })]
250
+ },
251
+ project: {
252
+ name: [generateRule.validCharacters('a-z 0-9 -'), generateRule.beginWith('a-z'), generateRule.endWith('a-z 0-9'), generateRule.length({
253
+ max: 63
254
+ }), generateRule.required()]
255
+ }
256
+ };
257
+ /**
258
+ * Returns the list of validation rules for `type`, optionally appending provided additional rules.
259
+ * @function getValidationRules
260
+ * @param {string} type - The property path to the list of validation rules.
261
+ * @param {Array.<Object>} [additionalRules] - Additional rules to append.
262
+ * @returns {Array.<Object>} the rule list of type `type` with `additionalRules` appended to it if provided.
263
+ */
264
+
265
+ var getValidationRules = function getValidationRules(type, additionalRules) {
266
+ return _lodash.default.chain(validationRules).get(type).defaultTo([]).cloneDeep().concat(_lodash.default.defaultTo(additionalRules, [])).value();
267
+ };
268
+
269
+ exports.getValidationRules = getValidationRules;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "iguazio.dashboard-react-controls",
3
- "version": "0.0.6",
3
+ "version": "0.0.9",
4
4
  "description": "Collection of resources (such as CSS styles, fonts and images) and ReactJS 17.x components to share among different Iguazio React repos.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -25,7 +25,11 @@
25
25
  "react": "*",
26
26
  "react-dom": "*",
27
27
  "react-modal-promise": "*",
28
- "react-transition-group": "*"
28
+ "react-transition-group": "*",
29
+ "final-form": "*",
30
+ "final-form-arrays": "*",
31
+ "react-final-form": "*",
32
+ "react-final-form-arrays": "*"
29
33
  },
30
34
  "devDependencies": {
31
35
  "@babel/cli": "^7.17.6",
@@ -57,11 +61,15 @@
57
61
  "eslint-plugin-storybook": "^0.5.10",
58
62
  "eslint-webpack-plugin": "^3.1.1",
59
63
  "lodash": "^4.17.21",
60
- "node": "14.18.1",
64
+ "node": "14.19.0",
61
65
  "prettier": "^2.5.1",
62
66
  "prop-types": "^15.8.1",
63
67
  "react": "^17.0.2",
64
68
  "react-dom": "^17.0.2",
69
+ "final-form": "^4.20.7",
70
+ "final-form-arrays": "^3.0.2",
71
+ "react-final-form": "^6.5.9",
72
+ "react-final-form-arrays": "^3.1.3",
65
73
  "react-modal-promise": "^1.0.2",
66
74
  "react-scripts": "5.0.0",
67
75
  "react-transition-group": "^4.4.2",
@@ -95,9 +103,5 @@
95
103
  "last 1 firefox version",
96
104
  "last 1 safari version"
97
105
  ]
98
- },
99
- "dependencies": {
100
- "final-form": "^4.20.7",
101
- "react-final-form": "^6.5.9"
102
106
  }
103
107
  }