intelicoreact 1.2.80 → 1.2.82

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 (69) hide show
  1. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +7 -6
  2. package/dist/Atomic/FormElements/FileLoader/partial/LoadedContent.js +2 -2
  3. package/dist/Atomic/FormElements/FileLoaderLocalGroup/FileLoaderLocalGroup.js +2 -2
  4. package/dist/Atomic/FormElements/Input/Input.js +2 -2
  5. package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +2 -2
  6. package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +2 -2
  7. package/dist/Atomic/FormElements/InputDateRange/dependencies.js +3 -3
  8. package/dist/Atomic/FormElements/InputMask/InputMask.js +3 -2
  9. package/dist/Atomic/FormElements/InputMask/functions.js +1 -1
  10. package/dist/Atomic/FormElements/InputMask2/InputMask2.js +2 -2
  11. package/dist/Atomic/FormElements/InputMask2/functions.js +1 -1
  12. package/dist/Atomic/FormElements/InputMask3/InputMask3.js +2 -2
  13. package/dist/Atomic/FormElements/InputMask3/functions.js +1 -1
  14. package/dist/Atomic/FormElements/InputsRow/InputsRow.js +2 -2
  15. package/dist/Atomic/FormElements/NumericInput/NumericInput.js +2 -2
  16. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +2 -2
  17. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +2 -2
  18. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +2 -2
  19. package/dist/Atomic/FormElements/RangeList/RangeList.js +2 -2
  20. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +2 -2
  21. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +2 -2
  22. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +2 -2
  23. package/dist/Atomic/FormElements/Text/Text.js +2 -2
  24. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +2 -2
  25. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +2 -2
  26. package/dist/Atomic/UI/AccordionTable/AccordionTable.js +2 -2
  27. package/dist/Atomic/UI/Chart/partial/Chart.constants.js +1 -1
  28. package/dist/Atomic/UI/Chart/partial/datasetSetters.js +3 -3
  29. package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +3 -3
  30. package/dist/Atomic/UI/Chart/partial/optionsSetters.js +2 -2
  31. package/dist/Atomic/UI/Chart/partial/utils.js +3 -3
  32. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +2 -2
  33. package/dist/Atomic/UI/ExampleChartIntegration/partial/utils.js +1 -1
  34. package/dist/Atomic/UI/Modal/Modal.js +1 -1
  35. package/dist/Atomic/UI/Modal/partials/useMobileModal.js +2 -2
  36. package/dist/Atomic/UI/ModalBackup/Modal.js +1 -1
  37. package/dist/Atomic/UI/NavLine/NavLine.js +2 -2
  38. package/dist/Atomic/UI/Table/Partials/TdCell.js +2 -2
  39. package/dist/Atomic/UI/Table/Partials/TdRow.js +2 -2
  40. package/dist/Atomic/UI/TagList/TagList.js +2 -2
  41. package/dist/Classes/AbortableFetch.js +2 -2
  42. package/dist/Classes/AnimatedHandler.js +4 -4
  43. package/dist/Classes/RESTAPI/index.js +2 -2
  44. package/dist/Classes/RESTAPI/partials/AbortableFetch.js +2 -2
  45. package/dist/Classes/RESTAPI/partials/ApiBase.js +3 -1
  46. package/dist/Classes/RESTAPI/partials/ApiRequestCreators.js +17 -11
  47. package/dist/Classes/RESTAPI/partials/ApiUtils.js +29 -15
  48. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +2 -2
  49. package/dist/Classes/RESTAPI/partials/Utils.js +2 -2
  50. package/dist/Classes/RESTAPI/partials/_utils.js +165 -110
  51. package/dist/Constants/index.constants.js +1 -1
  52. package/dist/Functions/fieldValueFormatters.js +2 -1
  53. package/dist/Functions/hooks/useFormFieldsChangesManager.js +2 -2
  54. package/dist/Functions/locale/createTranslator.js +2 -2
  55. package/dist/Functions/presets/mobileKeyboardTypesPresets.js +1 -1
  56. package/dist/Functions/useFieldFocus.js +2 -2
  57. package/dist/Functions/useFormTools/form-drivers/ObjectWithIterableObjects.js +2 -2
  58. package/dist/Functions/useFormTools/form-drivers/ObjectWithNamedKeyObjects.js +2 -2
  59. package/dist/Functions/useFormTools/functions/General.js +2 -2
  60. package/dist/Functions/useFormTools/functions/RenderFields.js +2 -2
  61. package/dist/Functions/useFormTools/index.js +2 -2
  62. package/dist/Functions/useInputHighlightError.js +1 -1
  63. package/dist/Functions/useIsMobile.js +2 -2
  64. package/dist/Functions/useLocationParams.js +2 -2
  65. package/dist/Functions/useMetaInfo.js +1 -1
  66. package/dist/Functions/usePasswordChecker.js +2 -2
  67. package/dist/Functions/utils.js +82 -46
  68. package/package.json +1 -1
  69. package/dist/Functions/presets/inputMaskPreset.js +0 -176
@@ -5,9 +5,11 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getIsOnlyAnObject = getIsOnlyAnObject;
9
8
  exports.addCustomMethods = addCustomMethods;
9
+ exports.clone = void 0;
10
10
  exports.getInstanceOfFetchSystem = getInstanceOfFetchSystem;
11
+ exports.getIsOnlyAnObject = getIsOnlyAnObject;
12
+ exports.getResponseClone = void 0;
11
13
 
12
14
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
15
 
@@ -19,14 +21,67 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
19
21
 
20
22
  var _AbortableFetch = _interopRequireDefault(require("./AbortableFetch"));
21
23
 
22
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
24
+ 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; }
23
25
 
24
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
26
+ 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) { (0, _defineProperty2.default)(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; }
25
27
 
26
28
  function getIsOnlyAnObject(input) {
27
29
  return (0, _typeof2.default)(input) === 'object' && input instanceof Object && !Array.isArray(input);
28
30
  }
29
31
 
32
+ var clone = function clone(input) {
33
+ if (input === null || (0, _typeof2.default)(input) !== 'object') return input;
34
+ var data = input instanceof Array ? [] : {};
35
+
36
+ for (var i in input) {
37
+ data[i] = clone(input[i]);
38
+ }
39
+
40
+ return data;
41
+ };
42
+
43
+ exports.clone = clone;
44
+
45
+ var getResponseClone = /*#__PURE__*/function () {
46
+ var _ref = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(res) {
47
+ return _regenerator.default.wrap(function _callee$(_context) {
48
+ while (1) {
49
+ switch (_context.prev = _context.next) {
50
+ case 0:
51
+ if (!(typeof (res === null || res === void 0 ? void 0 : res.clone) === 'function')) {
52
+ _context.next = 6;
53
+ break;
54
+ }
55
+
56
+ _context.next = 3;
57
+ return res.clone();
58
+
59
+ case 3:
60
+ _context.t0 = _context.sent;
61
+ _context.next = 7;
62
+ break;
63
+
64
+ case 6:
65
+ _context.t0 = clone(res);
66
+
67
+ case 7:
68
+ return _context.abrupt("return", _context.t0);
69
+
70
+ case 8:
71
+ case "end":
72
+ return _context.stop();
73
+ }
74
+ }
75
+ }, _callee);
76
+ }));
77
+
78
+ return function getResponseClone(_x) {
79
+ return _ref.apply(this, arguments);
80
+ };
81
+ }();
82
+
83
+ exports.getResponseClone = getResponseClone;
84
+
30
85
  function addCustomMethods(data, prefix) {
31
86
  var _this = this;
32
87
 
@@ -37,137 +92,137 @@ function addCustomMethods(data, prefix) {
37
92
  });
38
93
  }
39
94
 
40
- function getInstanceOfFetchSystem(_x) {
95
+ function getInstanceOfFetchSystem(_x2) {
41
96
  return _getInstanceOfFetchSystem.apply(this, arguments);
42
97
  }
43
98
 
44
99
  function _getInstanceOfFetchSystem() {
45
- _getInstanceOfFetchSystem = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(isGetBody) {
100
+ _getInstanceOfFetchSystem = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee7(isGetBody) {
46
101
  var _API_CONTEXT$addAsCom;
47
102
 
48
- var API_CONTEXT, CREDENTIALS_CONTEXT, credentials, cred, _ref2, headersToAbortableFetchInstance, queryParamsToAbortableFetchInstance, optionsToAbortableFetchInstance;
103
+ var API_CONTEXT, CREDENTIALS_CONTEXT, credentials, cred, _ref3, headersToAbortableFetchInstance, queryParamsToAbortableFetchInstance, optionsToAbortableFetchInstance;
49
104
 
50
- return _regenerator.default.wrap(function _callee6$(_context6) {
105
+ return _regenerator.default.wrap(function _callee7$(_context7) {
51
106
  while (1) {
52
- switch (_context6.prev = _context6.next) {
107
+ switch (_context7.prev = _context7.next) {
53
108
  case 0:
54
109
  API_CONTEXT = this;
55
110
  CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;
56
111
  credentials = {}; //? Наличие credentialsProcessing включает добавление токена в принципе (если авторизованы в системе)
57
112
 
58
113
  if (!CREDENTIALS_CONTEXT) {
59
- _context6.next = 15;
114
+ _context7.next = 15;
60
115
  break;
61
116
  }
62
117
 
63
- _context6.next = 6;
118
+ _context7.next = 6;
64
119
  return CREDENTIALS_CONTEXT.getCredentials();
65
120
 
66
121
  case 6:
67
- cred = _context6.sent;
122
+ cred = _context7.sent;
68
123
 
69
124
  if (!CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing) {
70
- _context6.next = 13;
125
+ _context7.next = 13;
71
126
  break;
72
127
  }
73
128
 
74
- _context6.next = 10;
75
- return CREDENTIALS_CONTEXT.waitRefresh(cred.isNeedRefresh && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh()).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
76
- return _regenerator.default.wrap(function _callee$(_context) {
129
+ _context7.next = 10;
130
+ return CREDENTIALS_CONTEXT.waitRefresh(cred.isNeedRefresh && !CREDENTIALS_CONTEXT.getIsTokenStartRefresh()).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
131
+ return _regenerator.default.wrap(function _callee2$(_context2) {
77
132
  while (1) {
78
- switch (_context.prev = _context.next) {
133
+ switch (_context2.prev = _context2.next) {
79
134
  case 0:
80
- _context.t0 = CREDENTIALS_CONTEXT;
81
- _context.next = 3;
135
+ _context2.t0 = CREDENTIALS_CONTEXT;
136
+ _context2.next = 3;
82
137
  return CREDENTIALS_CONTEXT.getCredentials();
83
138
 
84
139
  case 3:
85
- _context.t1 = _context.sent;
86
- return _context.abrupt("return", _context.t0.processCredentials.call(_context.t0, _context.t1));
140
+ _context2.t1 = _context2.sent;
141
+ return _context2.abrupt("return", _context2.t0.processCredentials.call(_context2.t0, _context2.t1));
87
142
 
88
143
  case 5:
89
144
  case "end":
90
- return _context.stop();
145
+ return _context2.stop();
91
146
  }
92
147
  }
93
- }, _callee);
148
+ }, _callee2);
94
149
  })));
95
150
 
96
151
  case 10:
97
- _context6.t0 = _context6.sent;
98
- _context6.next = 14;
152
+ _context7.t0 = _context7.sent;
153
+ _context7.next = 14;
99
154
  break;
100
155
 
101
156
  case 13:
102
- _context6.t0 = cred;
157
+ _context7.t0 = cred;
103
158
 
104
159
  case 14:
105
- credentials = _context6.t0;
160
+ credentials = _context7.t0;
106
161
 
107
162
  case 15:
108
163
  if (!(API_CONTEXT.addAsCommon && typeof API_CONTEXT.addAsCommon !== 'function')) {
109
- _context6.next = 17;
164
+ _context7.next = 17;
110
165
  break;
111
166
  }
112
167
 
113
168
  throw new Error('addAsCommon must be function [getInstanceOfFetchSystem]');
114
169
 
115
170
  case 17:
116
- _context6.next = 19;
171
+ _context7.next = 19;
117
172
  return (_API_CONTEXT$addAsCom = API_CONTEXT.addAsCommon) === null || _API_CONTEXT$addAsCom === void 0 ? void 0 : _API_CONTEXT$addAsCom.call(API_CONTEXT);
118
173
 
119
174
  case 19:
120
- _context6.t1 = _context6.sent;
175
+ _context7.t1 = _context7.sent;
121
176
 
122
- if (_context6.t1) {
123
- _context6.next = 22;
177
+ if (_context7.t1) {
178
+ _context7.next = 22;
124
179
  break;
125
180
  }
126
181
 
127
- _context6.t1 = {};
182
+ _context7.t1 = {};
128
183
 
129
184
  case 22:
130
- _ref2 = _context6.t1;
131
- headersToAbortableFetchInstance = _ref2.headers;
132
- queryParamsToAbortableFetchInstance = _ref2.queryParameters;
133
- optionsToAbortableFetchInstance = _ref2.options;
185
+ _ref3 = _context7.t1;
186
+ headersToAbortableFetchInstance = _ref3.headers;
187
+ queryParamsToAbortableFetchInstance = _ref3.queryParameters;
188
+ optionsToAbortableFetchInstance = _ref3.options;
134
189
 
135
190
  if (!(headersToAbortableFetchInstance && !getIsOnlyAnObject(headersToAbortableFetchInstance) || optionsToAbortableFetchInstance && !getIsOnlyAnObject(optionsToAbortableFetchInstance) || queryParamsToAbortableFetchInstance && !(typeof queryParamsToAbortableFetchInstance === 'string' || getIsOnlyAnObject(queryParamsToAbortableFetchInstance) || Array.isArray(queryParamsToAbortableFetchInstance)))) {
136
- _context6.next = 28;
191
+ _context7.next = 28;
137
192
  break;
138
193
  }
139
194
 
140
195
  throw new Error('Bad output format from addAsCommon [getInstanceOfFetchSystem]');
141
196
 
142
197
  case 28:
143
- return _context6.abrupt("return", (CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
198
+ return _context7.abrupt("return", (CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6() {
144
199
  var _CREDENTIALS_CONTEXT$;
145
200
 
146
- return _regenerator.default.wrap(function _callee5$(_context5) {
201
+ return _regenerator.default.wrap(function _callee6$(_context6) {
147
202
  while (1) {
148
- switch (_context5.prev = _context5.next) {
203
+ switch (_context6.prev = _context6.next) {
149
204
  case 0:
150
- _context5.t0 = _AbortableFetch.default;
151
- _context5.t1 = _objectSpread(_objectSpread({}, headersToAbortableFetchInstance), credentials.token ? (CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : (_CREDENTIALS_CONTEXT$ = CREDENTIALS_CONTEXT.getHeadersForAuthorize) === null || _CREDENTIALS_CONTEXT$ === void 0 ? void 0 : _CREDENTIALS_CONTEXT$.call(CREDENTIALS_CONTEXT, credentials.token)) || {} : {});
152
- _context5.next = 4;
205
+ _context6.t0 = _AbortableFetch.default;
206
+ _context6.t1 = _objectSpread(_objectSpread({}, headersToAbortableFetchInstance), credentials.token ? (CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : (_CREDENTIALS_CONTEXT$ = CREDENTIALS_CONTEXT.getHeadersForAuthorize) === null || _CREDENTIALS_CONTEXT$ === void 0 ? void 0 : _CREDENTIALS_CONTEXT$.call(CREDENTIALS_CONTEXT, credentials.token)) || {} : {});
207
+ _context6.next = 4;
153
208
  return API_CONTEXT.processQueryParams(queryParamsToAbortableFetchInstance);
154
209
 
155
210
  case 4:
156
- _context5.t2 = _context5.sent;
157
- _context5.t3 = _objectSpread({
211
+ _context6.t2 = _context6.sent;
212
+ _context6.t3 = _objectSpread({
158
213
  mode: 'cors',
159
214
  redirect: 'follow'
160
215
  }, optionsToAbortableFetchInstance);
161
216
 
162
- _context5.t4 = function () {
163
- var _everyPromiseCallback = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(response) {
217
+ _context6.t4 = function () {
218
+ var _everyPromiseCallback = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(response) {
164
219
  var _CREDENTIALS_CONTEXT$2, _CREDENTIALS_CONTEXT$3;
165
220
 
166
221
  var ABORTABLE_FETCH_INSTANCE, _request$mesageOption, request, isUseErrorToast, _API_CONTEXT$sendMess;
167
222
 
168
- return _regenerator.default.wrap(function _callee2$(_context2) {
223
+ return _regenerator.default.wrap(function _callee3$(_context3) {
169
224
  while (1) {
170
- switch (_context2.prev = _context2.next) {
225
+ switch (_context3.prev = _context3.next) {
171
226
  case 0:
172
227
  //? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch
173
228
  ABORTABLE_FETCH_INSTANCE = this;
@@ -184,182 +239,182 @@ function _getInstanceOfFetchSystem() {
184
239
  }
185
240
 
186
241
  if (!(API_CONTEXT.REJECT_CODES.includes(response.status) || CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing && CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && (_CREDENTIALS_CONTEXT$2 = CREDENTIALS_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT) !== null && _CREDENTIALS_CONTEXT$2 !== void 0 && (_CREDENTIALS_CONTEXT$3 = _CREDENTIALS_CONTEXT$2.includes) !== null && _CREDENTIALS_CONTEXT$3 !== void 0 && _CREDENTIALS_CONTEXT$3.call(_CREDENTIALS_CONTEXT$2, response.status))) {
187
- _context2.next = 6;
242
+ _context3.next = 6;
188
243
  break;
189
244
  }
190
245
 
191
- _context2.t0 = Promise.reject(new Error("status:".concat(response.status)));
192
- _context2.next = 16;
246
+ _context3.t0 = Promise.reject(new Error("status:".concat(response.status)));
247
+ _context3.next = 16;
193
248
  break;
194
249
 
195
250
  case 6:
196
- _context2.t1 = Promise;
251
+ _context3.t1 = Promise;
197
252
 
198
253
  if (isGetBody) {
199
- _context2.next = 11;
254
+ _context3.next = 11;
200
255
  break;
201
256
  }
202
257
 
203
- _context2.t2 = response;
204
- _context2.next = 14;
258
+ _context3.t2 = response;
259
+ _context3.next = 14;
205
260
  break;
206
261
 
207
262
  case 11:
208
- _context2.next = 13;
263
+ _context3.next = 13;
209
264
  return API_CONTEXT.getResponseBody(response);
210
265
 
211
266
  case 13:
212
- _context2.t2 = _context2.sent;
267
+ _context3.t2 = _context3.sent;
213
268
 
214
269
  case 14:
215
- _context2.t3 = _context2.t2;
216
- _context2.t0 = _context2.t1.resolve.call(_context2.t1, _context2.t3);
270
+ _context3.t3 = _context3.t2;
271
+ _context3.t0 = _context3.t1.resolve.call(_context3.t1, _context3.t3);
217
272
 
218
273
  case 16:
219
- return _context2.abrupt("return", _context2.t0);
274
+ return _context3.abrupt("return", _context3.t0);
220
275
 
221
276
  case 17:
222
277
  case "end":
223
- return _context2.stop();
278
+ return _context3.stop();
224
279
  }
225
280
  }
226
- }, _callee2, this);
281
+ }, _callee3, this);
227
282
  }));
228
283
 
229
- function everyPromiseCallback(_x2) {
284
+ function everyPromiseCallback(_x3) {
230
285
  return _everyPromiseCallback.apply(this, arguments);
231
286
  }
232
287
 
233
288
  return everyPromiseCallback;
234
289
  }();
235
290
 
236
- _context5.t5 = function () {
237
- var _catchCallback = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(res) {
291
+ _context6.t5 = function () {
292
+ var _catchCallback = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(res) {
238
293
  var _CREDENTIALS_CONTEXT$4, _CREDENTIALS_CONTEXT$5;
239
294
 
240
295
  var ABORTABLE_FETCH_INSTANCE, code, _CREDENTIALS_CONTEXT$6, isDoRefresh;
241
296
 
242
- return _regenerator.default.wrap(function _callee4$(_context4) {
297
+ return _regenerator.default.wrap(function _callee5$(_context5) {
243
298
  while (1) {
244
- switch (_context4.prev = _context4.next) {
299
+ switch (_context5.prev = _context5.next) {
245
300
  case 0:
246
301
  //? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch
247
302
  ABORTABLE_FETCH_INSTANCE = this;
248
303
  code = +res.message.split(':')[1];
249
304
 
250
305
  if (!(CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && (_CREDENTIALS_CONTEXT$4 = CREDENTIALS_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT) !== null && _CREDENTIALS_CONTEXT$4 !== void 0 && (_CREDENTIALS_CONTEXT$5 = _CREDENTIALS_CONTEXT$4.includes) !== null && _CREDENTIALS_CONTEXT$5 !== void 0 && _CREDENTIALS_CONTEXT$5.call(_CREDENTIALS_CONTEXT$4, code))) {
251
- _context4.next = 5;
306
+ _context5.next = 5;
252
307
  break;
253
308
  }
254
309
 
255
310
  isDoRefresh = !(CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && (_CREDENTIALS_CONTEXT$6 = CREDENTIALS_CONTEXT.getIsTokenStartRefresh) !== null && _CREDENTIALS_CONTEXT$6 !== void 0 && _CREDENTIALS_CONTEXT$6.call(CREDENTIALS_CONTEXT));
256
- return _context4.abrupt("return", CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.waitRefresh(isDoRefresh).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
311
+ return _context5.abrupt("return", CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.waitRefresh(isDoRefresh).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4() {
257
312
  var newCredentials;
258
- return _regenerator.default.wrap(function _callee3$(_context3) {
313
+ return _regenerator.default.wrap(function _callee4$(_context4) {
259
314
  while (1) {
260
- switch (_context3.prev = _context3.next) {
315
+ switch (_context4.prev = _context4.next) {
261
316
  case 0:
262
317
  if (!(CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0)) {
263
- _context3.next = 4;
318
+ _context4.next = 4;
264
319
  break;
265
320
  }
266
321
 
267
- _context3.t0 = void 0;
268
- _context3.next = 16;
322
+ _context4.t0 = void 0;
323
+ _context4.next = 16;
269
324
  break;
270
325
 
271
326
  case 4:
272
- _context3.t1 = CREDENTIALS_CONTEXT;
273
- _context3.t2 = _objectSpread;
274
- _context3.t3 = _objectSpread;
275
- _context3.t4 = {};
276
- _context3.next = 10;
327
+ _context4.t1 = CREDENTIALS_CONTEXT;
328
+ _context4.t2 = _objectSpread;
329
+ _context4.t3 = _objectSpread;
330
+ _context4.t4 = {};
331
+ _context4.next = 10;
277
332
  return CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.getCredentials(true);
278
333
 
279
334
  case 10:
280
- _context3.t5 = _context3.sent;
281
- _context3.t6 = (0, _context3.t3)(_context3.t4, _context3.t5);
282
- _context3.t7 = {};
283
- _context3.t8 = {
335
+ _context4.t5 = _context4.sent;
336
+ _context4.t6 = (0, _context4.t3)(_context4.t4, _context4.t5);
337
+ _context4.t7 = {};
338
+ _context4.t8 = {
284
339
  isCatchCallbackProcess: isDoRefresh
285
340
  };
286
- _context3.t9 = (0, _context3.t2)(_context3.t6, _context3.t7, _context3.t8);
287
- _context3.t0 = _context3.t1.processCredentials.call(_context3.t1, _context3.t9);
341
+ _context4.t9 = (0, _context4.t2)(_context4.t6, _context4.t7, _context4.t8);
342
+ _context4.t0 = _context4.t1.processCredentials.call(_context4.t1, _context4.t9);
288
343
 
289
344
  case 16:
290
- _context3.next = 18;
291
- return _context3.t0;
345
+ _context4.next = 18;
346
+ return _context4.t0;
292
347
 
293
348
  case 18:
294
- _context3.next = 20;
349
+ _context4.next = 20;
295
350
  return CREDENTIALS_CONTEXT.getCredentials();
296
351
 
297
352
  case 20:
298
- newCredentials = _context3.sent;
353
+ newCredentials = _context4.sent;
299
354
  ABORTABLE_FETCH_INSTANCE.setHeaders(_objectSpread(_objectSpread({}, ABORTABLE_FETCH_INSTANCE.getHeaders()), newCredentials !== null && newCredentials !== void 0 && newCredentials.token ? {
300
355
  Authorization: "Bearer ".concat(newCredentials === null || newCredentials === void 0 ? void 0 : newCredentials.token)
301
356
  } : {}));
302
357
 
303
358
  if (!newCredentials.token) {
304
- _context3.next = 24;
359
+ _context4.next = 24;
305
360
  break;
306
361
  }
307
362
 
308
- return _context3.abrupt("return", ABORTABLE_FETCH_INSTANCE.repeatRequest());
363
+ return _context4.abrupt("return", ABORTABLE_FETCH_INSTANCE.repeatRequest());
309
364
 
310
365
  case 24:
311
- return _context3.abrupt("return", Promise.reject(res));
366
+ return _context4.abrupt("return", Promise.reject(res));
312
367
 
313
368
  case 25:
314
369
  case "end":
315
- return _context3.stop();
370
+ return _context4.stop();
316
371
  }
317
372
  }
318
- }, _callee3);
373
+ }, _callee4);
319
374
  }))));
320
375
 
321
376
  case 5:
322
- return _context4.abrupt("return", Promise.reject(res));
377
+ return _context5.abrupt("return", Promise.reject(res));
323
378
 
324
379
  case 6:
325
380
  case "end":
326
- return _context4.stop();
381
+ return _context5.stop();
327
382
  }
328
383
  }
329
- }, _callee4, this);
384
+ }, _callee5, this);
330
385
  }));
331
386
 
332
- function catchCallback(_x3) {
387
+ function catchCallback(_x4) {
333
388
  return _catchCallback.apply(this, arguments);
334
389
  }
335
390
 
336
391
  return catchCallback;
337
392
  }();
338
393
 
339
- _context5.t6 = {
394
+ _context6.t6 = {
340
395
  method: 'GET',
341
- headers: _context5.t1,
342
- queryParameters: _context5.t2,
343
- options: _context5.t3,
344
- everyPromiseCallback: _context5.t4,
345
- catchCallback: _context5.t5
396
+ headers: _context6.t1,
397
+ queryParameters: _context6.t2,
398
+ options: _context6.t3,
399
+ everyPromiseCallback: _context6.t4,
400
+ catchCallback: _context6.t5
346
401
  };
347
- return _context5.abrupt("return", new _context5.t0(_context5.t6));
402
+ return _context6.abrupt("return", new _context6.t0(_context6.t6));
348
403
 
349
404
  case 10:
350
405
  case "end":
351
- return _context5.stop();
406
+ return _context6.stop();
352
407
  }
353
408
  }
354
- }, _callee5);
409
+ }, _callee6);
355
410
  }))));
356
411
 
357
412
  case 29:
358
413
  case "end":
359
- return _context6.stop();
414
+ return _context7.stop();
360
415
  }
361
416
  }
362
- }, _callee6, this);
417
+ }, _callee7, this);
363
418
  }));
364
419
  return _getInstanceOfFetchSystem.apply(this, arguments);
365
420
  }
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.OS = exports.KEYBOARD_KEY_CODES = exports.DEFAULT_COLORS = exports.DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = exports.MAX_NAME_LENGTH = exports.MAX_PHONE_LENGTH = exports.KEYBOARD_SERVICE_KEYS = void 0;
6
+ exports.OS = exports.MAX_PHONE_LENGTH = exports.MAX_NAME_LENGTH = exports.KEYBOARD_SERVICE_KEYS = exports.KEYBOARD_KEY_CODES = exports.DEFAULT_DATE_MASK_NO_VALUE_SYMBOL = exports.DEFAULT_COLORS = void 0;
7
7
  var KEYBOARD_SERVICE_KEYS = ['Escape', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12', 'Tab', 'CapsLock', 'Shift', 'Control', 'Meta', 'Option', 'Alt', 'ContextMenu', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'NumLock', 'Backspace', 'Delete', 'Enter', 'Return', 'Insert', 'Home', 'End', 'PageUp', 'PageDown', 'PrintScreen', 'ScrollLock', 'Pause'];
8
8
  exports.KEYBOARD_SERVICE_KEYS = KEYBOARD_SERVICE_KEYS;
9
9
  var MAX_PHONE_LENGTH = 10;
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.formatToRemoveComa = exports.formatToPriceWithUSD = exports.formatToPriceWithCurrency = exports.formatToOnlyASCIICodeText = exports.formatToLimitLength = exports.formatToHideValuePartially = exports.formatToHex = exports.formatToAddBitDepthPoints = exports.formatOnlyNumbers = exports.formatNumberValueToMask = exports.formatAsPercentage = exports.filterNumeric = exports.filterFloat = void 0;
6
7
  exports.formatToReplaceAllWhiteSpace = formatToReplaceAllWhiteSpace;
7
- exports.formatToHideValuePartially = exports.filterNumeric = exports.filterFloat = exports.formatToHex = exports.formatToLimitLength = exports.formatNumberValueToMask = exports.formatToOnlyASCIICodeText = exports.formatAsPercentage = exports.formatToPriceWithCurrency = exports.formatToPriceWithUSD = exports.formatToAddBitDepthPoints = exports.formatToRemoveComa = exports.formatOnlyNumbers = exports.intlNumbersFormatter = exports.getSafelyValue = void 0;
8
+ exports.intlNumbersFormatter = exports.getSafelyValue = void 0;
8
9
 
9
10
  var _utils = require("./utils");
10
11
 
@@ -23,9 +23,9 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
23
23
 
24
24
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
25
25
 
26
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
26
+ 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; }
27
27
 
28
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
28
+ 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) { (0, _defineProperty2.default)(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; }
29
29
 
30
30
  var timeouts = {
31
31
  timeoutId: null
@@ -13,9 +13,9 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
13
13
 
14
14
  var _fieldValueFormatters = require("./../fieldValueFormatters");
15
15
 
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
+ 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; }
17
17
 
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
+ 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) { (0, _defineProperty2.default)(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; }
19
19
 
20
20
  var DEFAULT_CODE = 'en';
21
21
  /**
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.EMAIL_KEYBOARD = exports.NUMERIC_KEYBOARD = exports.ALL_KEYBOARD_TYPES = void 0;
6
+ exports.NUMERIC_KEYBOARD = exports.EMAIL_KEYBOARD = exports.ALL_KEYBOARD_TYPES = void 0;
7
7
  //? Удобно использовать для расширения объекта атрибутов
8
8
  var ALL_KEYBOARD_TYPES = {
9
9
  numeric: {
@@ -13,9 +13,9 @@ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
13
13
 
14
14
  var _react = require("react");
15
15
 
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
+ 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; }
17
17
 
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
+ 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) { (0, _defineProperty2.default)(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; }
19
19
 
20
20
  /**
21
21
  * It adds refs to each field in the form, and provides a function to set focus to a field by key
@@ -13,9 +13,9 @@ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers
13
13
 
14
14
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
15
15
 
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
+ 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; }
17
17
 
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
+ 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) { (0, _defineProperty2.default)(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; }
19
19
 
20
20
  function ObjectWithIterableObjects(_ref) {
21
21
  var form = _ref.form,
@@ -13,9 +13,9 @@ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/de
13
13
 
14
14
  var _General2 = _interopRequireDefault(require("../functions/General"));
15
15
 
16
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
16
+ 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; }
17
17
 
18
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
18
+ 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) { (0, _defineProperty2.default)(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; }
19
19
 
20
20
  var noop = function noop() {};
21
21