@salutejs/plasma-new-hope 0.336.0-canary.2208.17465207747.0 → 0.336.0-canary.2210.17488241312.0

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 (81) hide show
  1. package/cjs/components/CodeField/CodeField.css +7 -6
  2. package/cjs/components/CodeField/CodeField.js +60 -24
  3. package/cjs/components/CodeField/CodeField.js.map +1 -1
  4. package/cjs/components/CodeField/CodeField.styles.js +7 -1
  5. package/cjs/components/CodeField/CodeField.styles.js.map +1 -1
  6. package/cjs/components/CodeField/{CodeField.styles_ebdpd0.css → CodeField.styles_14p25hi.css} +1 -0
  7. package/cjs/components/CodeField/hooks/useWebOTP.js +107 -0
  8. package/cjs/components/CodeField/hooks/useWebOTP.js.map +1 -0
  9. package/cjs/components/CodeField/utils/handleCodeError.js +2 -2
  10. package/cjs/components/CodeField/utils/handleCodeError.js.map +1 -1
  11. package/cjs/components/CodeField/utils/handleItemError.js +14 -4
  12. package/cjs/components/CodeField/utils/handleItemError.js.map +1 -1
  13. package/cjs/components/CodeField/utils/isWebOTPSupported.js +10 -0
  14. package/cjs/components/CodeField/utils/isWebOTPSupported.js.map +1 -0
  15. package/cjs/components/Drawer/hooks/useDrawer.js +0 -12
  16. package/cjs/components/Drawer/hooks/useDrawer.js.map +1 -1
  17. package/cjs/index.css +7 -6
  18. package/emotion/cjs/components/CodeField/CodeField.js +50 -20
  19. package/emotion/cjs/components/CodeField/CodeField.styles.js +18 -11
  20. package/emotion/cjs/components/CodeField/hooks/useWebOTP.js +256 -0
  21. package/emotion/cjs/components/CodeField/utils/handleCodeError.js +2 -2
  22. package/emotion/cjs/components/CodeField/utils/handleItemError.js +12 -3
  23. package/emotion/cjs/components/CodeField/utils/index.js +4 -0
  24. package/emotion/cjs/components/CodeField/utils/isWebOTPSupported.js +13 -0
  25. package/emotion/cjs/components/Drawer/hooks/useDrawer.js +0 -11
  26. package/emotion/es/components/CodeField/CodeField.js +52 -22
  27. package/emotion/es/components/CodeField/CodeField.styles.js +15 -11
  28. package/emotion/es/components/CodeField/hooks/useWebOTP.js +246 -0
  29. package/emotion/es/components/CodeField/utils/handleCodeError.js +2 -2
  30. package/emotion/es/components/CodeField/utils/handleItemError.js +12 -3
  31. package/emotion/es/components/CodeField/utils/index.js +1 -0
  32. package/emotion/es/components/CodeField/utils/isWebOTPSupported.js +3 -0
  33. package/emotion/es/components/Drawer/hooks/useDrawer.js +0 -11
  34. package/es/components/CodeField/CodeField.css +7 -6
  35. package/es/components/CodeField/CodeField.js +62 -26
  36. package/es/components/CodeField/CodeField.js.map +1 -1
  37. package/es/components/CodeField/CodeField.styles.js +7 -2
  38. package/es/components/CodeField/CodeField.styles.js.map +1 -1
  39. package/es/components/CodeField/{CodeField.styles_ebdpd0.css → CodeField.styles_14p25hi.css} +1 -0
  40. package/es/components/CodeField/hooks/useWebOTP.js +103 -0
  41. package/es/components/CodeField/hooks/useWebOTP.js.map +1 -0
  42. package/es/components/CodeField/utils/handleCodeError.js +2 -2
  43. package/es/components/CodeField/utils/handleCodeError.js.map +1 -1
  44. package/es/components/CodeField/utils/handleItemError.js +14 -4
  45. package/es/components/CodeField/utils/handleItemError.js.map +1 -1
  46. package/es/components/CodeField/utils/isWebOTPSupported.js +6 -0
  47. package/es/components/CodeField/utils/isWebOTPSupported.js.map +1 -0
  48. package/es/components/Drawer/hooks/useDrawer.js +0 -12
  49. package/es/components/Drawer/hooks/useDrawer.js.map +1 -1
  50. package/es/index.css +7 -6
  51. package/package.json +2 -2
  52. package/styled-components/cjs/components/CodeField/CodeField.js +50 -20
  53. package/styled-components/cjs/components/CodeField/CodeField.styles.js +14 -5
  54. package/styled-components/cjs/components/CodeField/hooks/useWebOTP.js +256 -0
  55. package/styled-components/cjs/components/CodeField/utils/handleCodeError.js +2 -2
  56. package/styled-components/cjs/components/CodeField/utils/handleItemError.js +12 -3
  57. package/styled-components/cjs/components/CodeField/utils/index.js +4 -0
  58. package/styled-components/cjs/components/CodeField/utils/isWebOTPSupported.js +13 -0
  59. package/styled-components/cjs/components/Drawer/hooks/useDrawer.js +0 -11
  60. package/styled-components/es/components/CodeField/CodeField.js +52 -22
  61. package/styled-components/es/components/CodeField/CodeField.styles.js +11 -5
  62. package/styled-components/es/components/CodeField/hooks/useWebOTP.js +246 -0
  63. package/styled-components/es/components/CodeField/utils/handleCodeError.js +2 -2
  64. package/styled-components/es/components/CodeField/utils/handleItemError.js +12 -3
  65. package/styled-components/es/components/CodeField/utils/index.js +1 -0
  66. package/styled-components/es/components/CodeField/utils/isWebOTPSupported.js +3 -0
  67. package/styled-components/es/components/Drawer/hooks/useDrawer.js +0 -11
  68. package/types/components/CodeField/CodeField.d.ts.map +1 -1
  69. package/types/components/CodeField/CodeField.styles.d.ts +1 -0
  70. package/types/components/CodeField/CodeField.styles.d.ts.map +1 -1
  71. package/types/components/CodeField/hooks/useWebOTP.d.ts +24 -0
  72. package/types/components/CodeField/hooks/useWebOTP.d.ts.map +1 -0
  73. package/types/components/CodeField/utils/handleCodeError.d.ts +2 -2
  74. package/types/components/CodeField/utils/handleCodeError.d.ts.map +1 -1
  75. package/types/components/CodeField/utils/handleItemError.d.ts +3 -2
  76. package/types/components/CodeField/utils/handleItemError.d.ts.map +1 -1
  77. package/types/components/CodeField/utils/index.d.ts +1 -0
  78. package/types/components/CodeField/utils/index.d.ts.map +1 -1
  79. package/types/components/CodeField/utils/isWebOTPSupported.d.ts +2 -0
  80. package/types/components/CodeField/utils/isWebOTPSupported.d.ts.map +1 -0
  81. package/types/components/Drawer/hooks/useDrawer.d.ts.map +1 -1
@@ -29,6 +29,7 @@ var _base = require("./variations/_view/base");
29
29
  var _base1 = require("./variations/_size/base");
30
30
  var _base2 = require("./variations/_shape/base");
31
31
  var _base3 = require("./variations/_disabled/base");
32
+ var _useWebOTP = require("./hooks/useWebOTP");
32
33
  function _array_like_to_array(arr, len) {
33
34
  if (len == null || len > arr.length) len = arr.length;
34
35
  for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
@@ -212,8 +213,10 @@ var codeFieldRoot = function(Root) {
212
213
  "onChange",
213
214
  "onFullCodeEnter"
214
215
  ]);
215
- var _useState = _sliced_to_array((0, _react.useState)((0, _utils1.getCodeValue)(codeLength, outerValue || '')), 2), code = _useState[0], setCode = _useState[1];
216
+ var _useState = _sliced_to_array((0, _react.useState)((0, _utils1.getCodeValue)(codeLength, '')), 2), innerValue = _useState[0], setInnerValue = _useState[1];
217
+ var code = (outerValue === null || outerValue === void 0 ? void 0 : outerValue.length) ? (0, _utils1.getCodeValue)(codeLength, outerValue) : innerValue;
216
218
  var _useState1 = _sliced_to_array((0, _react.useState)(code.join('')), 2), originalValue = _useState1[0], setOriginalValue = _useState1[1];
219
+ var _useState2 = _sliced_to_array((0, _react.useState)(null), 2), otpVal = _useState2[0], setOtpVal = _useState2[1];
217
220
  var inputRefs = (0, _react.useRef)([]);
218
221
  var inputContainerRef = (0, _react.useRef)(null);
219
222
  var captionRef = (0, _react.useRef)(null);
@@ -221,6 +224,7 @@ var codeFieldRoot = function(Root) {
221
224
  var placeholderValue = (0, _utils1.getPlaceholderValue)(codeLength, placeholder);
222
225
  var parts = codeLength === 6 ? 2 : 1;
223
226
  var widthValue = width ? (0, _utils.getSizeValueFromProp)(width, 'rem') : undefined;
227
+ var isWebOTPEnabled = autoComplete === 'one-time-code' && !disabled && !(0, _utils1.isWebOTPSupported)();
224
228
  var getLastActiveIndex = function() {
225
229
  if (code.length && code.length < codeLength) {
226
230
  return code.length;
@@ -230,6 +234,26 @@ var codeFieldRoot = function(Root) {
230
234
  });
231
235
  return lastEmptyIndex >= 0 ? lastEmptyIndex : codeLength - 1;
232
236
  };
237
+ var codeSetter = function(newCode) {
238
+ setInnerValue(newCode);
239
+ var originalCode = newCode.join('');
240
+ setOriginalValue(originalCode);
241
+ if (onChange) {
242
+ onChange(originalCode);
243
+ }
244
+ if (originalCode.length > 0) {
245
+ stopWebOTPListener();
246
+ }
247
+ };
248
+ var _useWebOTP1 = (0, _useWebOTP.useWebOTP)({
249
+ codeString: originalValue,
250
+ enableSMSAutoRead: autoComplete === 'one-time-code',
251
+ disabled: Boolean(disabled),
252
+ codeLength: codeLength,
253
+ codeSetter: codeSetter,
254
+ onFullCodeEnter: onFullCodeEnter,
255
+ setOtpVal: setOtpVal
256
+ }), startWebOTPListener = _useWebOTP1.startWebOTPListener, stopWebOTPListener = _useWebOTP1.stopWebOTPListener;
233
257
  var handleClick = function() {
234
258
  if (disabled) {
235
259
  return;
@@ -249,19 +273,24 @@ var codeFieldRoot = function(Root) {
249
273
  return;
250
274
  }
251
275
  if (key === _constants.BACKSPACE_KEY) {
252
- if (index > 0 && code[index] === '') {
253
- var _inputRefs_current_;
254
- (_inputRefs_current_ = inputRefs.current[index - 1]) === null || _inputRefs_current_ === void 0 ? void 0 : _inputRefs_current_.focus();
276
+ if (index > 0) {
277
+ var _inputRefs_current_index;
278
+ var newCode = _to_consumable_array(code);
279
+ newCode[index] = '';
280
+ if (index >= codeLength - 1 && code[index]) {
281
+ codeSetter(newCode);
282
+ return;
283
+ }
284
+ if (!code[index]) {
285
+ var _inputRefs_current_;
286
+ newCode[index - 1] = '';
287
+ (_inputRefs_current_ = inputRefs.current[index - 1]) === null || _inputRefs_current_ === void 0 ? void 0 : _inputRefs_current_.focus();
288
+ }
289
+ (_inputRefs_current_index = inputRefs.current[index]) === null || _inputRefs_current_index === void 0 ? void 0 : _inputRefs_current_index.classList.remove(_CodeFieldtokens.classes.itemError);
290
+ codeSetter(newCode);
255
291
  }
256
292
  }
257
293
  };
258
- var codeSetter = function(newCode) {
259
- setCode(newCode);
260
- setOriginalValue(newCode.join(''));
261
- if (onChange) {
262
- onChange(newCode.join(''));
263
- }
264
- };
265
294
  var handleChange = function(event, index) {
266
295
  var _inputRefs_current_index;
267
296
  if (disabled) {
@@ -292,8 +321,6 @@ var codeFieldRoot = function(Root) {
292
321
  return;
293
322
  }
294
323
  if (!symbol) {
295
- newCode[index] = '';
296
- codeSetter(newCode);
297
324
  return;
298
325
  }
299
326
  if (fieldPattern.test(symbol)) {
@@ -311,8 +338,9 @@ var codeFieldRoot = function(Root) {
311
338
  index: index,
312
339
  newCode: newCode,
313
340
  inputRefs: inputRefs,
314
- setCode: setCode,
315
- codeSetter: codeSetter
341
+ setInnerValue: setInnerValue,
342
+ codeSetter: codeSetter,
343
+ onChange: onChange
316
344
  });
317
345
  }
318
346
  };
@@ -339,6 +367,7 @@ var codeFieldRoot = function(Root) {
339
367
  if (onFullCodeEnter) {
340
368
  onFullCodeEnter(fullCode);
341
369
  }
370
+ startWebOTPListener();
342
371
  }, []);
343
372
  (0, _hooks1.useCodeHook)({
344
373
  inputRefs: inputRefs,
@@ -358,14 +387,14 @@ var codeFieldRoot = function(Root) {
358
387
  inputRefs: inputRefs,
359
388
  inputContainerRef: inputContainerRef,
360
389
  captionRef: captionRef,
361
- setCode: setCode,
390
+ setInnerValue: setInnerValue,
362
391
  codeSetter: codeSetter
363
392
  });
364
393
  }
365
394
  }, [
366
395
  isError
367
396
  ]);
368
- return /*#__PURE__*/ _react.default.createElement(Root, _object_spread({
397
+ return /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement(Root, _object_spread({
369
398
  ref: ref,
370
399
  view: view,
371
400
  size: size,
@@ -373,7 +402,7 @@ var codeFieldRoot = function(Root) {
373
402
  disabled: disabled,
374
403
  onClick: handleClick,
375
404
  className: (0, _classnames.default)(className, _define_property({}, _CodeFieldtokens.classes.captionAlignLeft, captionAlign === 'left'))
376
- }, rest), /*#__PURE__*/ _react.default.createElement(_CodeFieldstyles.CodeWrapper, {
405
+ }, !isWebOTPEnabled && _object_spread({}, rest)), /*#__PURE__*/ _react.default.createElement(_CodeFieldstyles.CodeWrapper, {
377
406
  ref: inputContainerRef
378
407
  }, _to_consumable_array(Array(parts)).map(function(_, partIndex) {
379
408
  return /*#__PURE__*/ _react.default.createElement(_react.Fragment, {
@@ -390,7 +419,6 @@ var codeFieldRoot = function(Root) {
390
419
  },
391
420
  className: (0, _classnames.default)((_obj = {}, _define_property(_obj, _CodeFieldtokens.classes.segmented, shape === 'segmented'), _define_property(_obj, _CodeFieldtokens.classes.hoverEnabled, !disabled && inputCorrectIndex >= originalValue.length), _obj)),
392
421
  value: code[inputCorrectIndex] || '',
393
- autoComplete: autoComplete,
394
422
  onChange: function(e) {
395
423
  handleChange(e, inputCorrectIndex);
396
424
  },
@@ -407,7 +435,9 @@ var codeFieldRoot = function(Root) {
407
435
  ref: captionRef,
408
436
  captionAlign: captionAlign,
409
437
  widthValue: widthValue
410
- }, caption));
438
+ }, caption), isWebOTPEnabled && /*#__PURE__*/ _react.default.createElement(_CodeFieldstyles.HiddenInput, _object_spread({
439
+ tabIndex: -1
440
+ }, rest))), /*#__PURE__*/ _react.default.createElement("div", null, JSON.stringify(otpVal)));
411
441
  });
412
442
  };
413
443
  var codeFieldConfig = {
@@ -18,6 +18,9 @@ _export(exports, {
18
18
  get CodeWrapper () {
19
19
  return CodeWrapper;
20
20
  },
21
+ get HiddenInput () {
22
+ return HiddenInput;
23
+ },
21
24
  get ItemInput () {
22
25
  return ItemInput;
23
26
  },
@@ -77,32 +80,32 @@ var base = (0, _styledcomponents.css)([
77
80
  ], _CodeFieldtokens.classes.captionAlignLeft);
78
81
  var CodeWrapper = _styledcomponents.default.div.withConfig({
79
82
  displayName: "CodeField.styles__CodeWrapper",
80
- componentId: "sc-88b863b6-0"
83
+ componentId: "sc-ff3d9c22-0"
81
84
  })([
82
85
  "display:flex;align-items:center;"
83
86
  ]);
84
87
  var CodeGroup = _styledcomponents.default.div.withConfig({
85
88
  displayName: "CodeField.styles__CodeGroup",
86
- componentId: "sc-88b863b6-1"
89
+ componentId: "sc-ff3d9c22-1"
87
90
  })([
88
91
  "display:flex;align-items:center;"
89
92
  ]);
90
93
  var Separator = _styledcomponents.default.div.withConfig({
91
94
  displayName: "CodeField.styles__Separator",
92
- componentId: "sc-88b863b6-2"
95
+ componentId: "sc-ff3d9c22-2"
93
96
  })([
94
97
  "width:var(",
95
98
  ");"
96
99
  ], _CodeFieldtokens.tokens.separatorWidth);
97
100
  var ItemInput = _styledcomponents.default.input.withConfig({
98
101
  displayName: "CodeField.styles__ItemInput",
99
- componentId: "sc-88b863b6-3"
102
+ componentId: "sc-ff3d9c22-3"
100
103
  })([
101
104
  "box-sizing:border-box;appearance:none;border:0;padding:0;outline:none;pointer-events:none;text-align:center;"
102
105
  ]);
103
106
  var CaptionWrapper = _styledcomponents.default.div.withConfig({
104
107
  displayName: "CodeField.styles__CaptionWrapper",
105
- componentId: "sc-88b863b6-4"
108
+ componentId: "sc-ff3d9c22-4"
106
109
  })([
107
110
  "text-align:",
108
111
  ";align-self:",
@@ -118,3 +121,9 @@ var CaptionWrapper = _styledcomponents.default.div.withConfig({
118
121
  var widthValue = param.widthValue;
119
122
  return widthValue || 'auto';
120
123
  });
124
+ var HiddenInput = _styledcomponents.default.input.withConfig({
125
+ displayName: "CodeField.styles__HiddenInput",
126
+ componentId: "sc-ff3d9c22-5"
127
+ })([
128
+ "display:none;"
129
+ ]);
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "useWebOTP", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return useWebOTP;
9
+ }
10
+ });
11
+ var _react = require("react");
12
+ var _utils = require("../utils");
13
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
14
+ try {
15
+ var info = gen[key](arg);
16
+ var value = info.value;
17
+ } catch (error) {
18
+ reject(error);
19
+ return;
20
+ }
21
+ if (info.done) {
22
+ resolve(value);
23
+ } else {
24
+ Promise.resolve(value).then(_next, _throw);
25
+ }
26
+ }
27
+ function _async_to_generator(fn) {
28
+ return function() {
29
+ var self = this, args = arguments;
30
+ return new Promise(function(resolve, reject) {
31
+ var gen = fn.apply(self, args);
32
+ function _next(value) {
33
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
34
+ }
35
+ function _throw(err) {
36
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
37
+ }
38
+ _next(undefined);
39
+ });
40
+ };
41
+ }
42
+ function _instanceof(left, right) {
43
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
44
+ return !!right[Symbol.hasInstance](left);
45
+ } else {
46
+ return left instanceof right;
47
+ }
48
+ }
49
+ function _ts_generator(thisArg, body) {
50
+ var f, y, t, _ = {
51
+ label: 0,
52
+ sent: function() {
53
+ if (t[0] & 1) throw t[1];
54
+ return t[1];
55
+ },
56
+ trys: [],
57
+ ops: []
58
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
59
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
60
+ return this;
61
+ }), g;
62
+ function verb(n) {
63
+ return function(v) {
64
+ return step([
65
+ n,
66
+ v
67
+ ]);
68
+ };
69
+ }
70
+ function step(op) {
71
+ if (f) throw new TypeError("Generator is already executing.");
72
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
73
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
74
+ if (y = 0, t) op = [
75
+ op[0] & 2,
76
+ t.value
77
+ ];
78
+ switch(op[0]){
79
+ case 0:
80
+ case 1:
81
+ t = op;
82
+ break;
83
+ case 4:
84
+ _.label++;
85
+ return {
86
+ value: op[1],
87
+ done: false
88
+ };
89
+ case 5:
90
+ _.label++;
91
+ y = op[1];
92
+ op = [
93
+ 0
94
+ ];
95
+ continue;
96
+ case 7:
97
+ op = _.ops.pop();
98
+ _.trys.pop();
99
+ continue;
100
+ default:
101
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
102
+ _ = 0;
103
+ continue;
104
+ }
105
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
106
+ _.label = op[1];
107
+ break;
108
+ }
109
+ if (op[0] === 6 && _.label < t[1]) {
110
+ _.label = t[1];
111
+ t = op;
112
+ break;
113
+ }
114
+ if (t && _.label < t[2]) {
115
+ _.label = t[2];
116
+ _.ops.push(op);
117
+ break;
118
+ }
119
+ if (t[2]) _.ops.pop();
120
+ _.trys.pop();
121
+ continue;
122
+ }
123
+ op = body.call(thisArg, _);
124
+ } catch (e) {
125
+ op = [
126
+ 6,
127
+ e
128
+ ];
129
+ y = 0;
130
+ } finally{
131
+ f = t = 0;
132
+ }
133
+ if (op[0] & 5) throw op[1];
134
+ return {
135
+ value: op[0] ? op[1] : void 0,
136
+ done: true
137
+ };
138
+ }
139
+ }
140
+ // Type guard function to check if credential is OTPCredential
141
+ var isOTPCredential = function(credential) {
142
+ return credential !== null && 'code' in credential;
143
+ };
144
+ var useWebOTP = function(param) {
145
+ var codeString = param.codeString, enableSMSAutoRead = param.enableSMSAutoRead, disabled = param.disabled, codeLength = param.codeLength, codeSetter = param.codeSetter, onFullCodeEnter = param.onFullCodeEnter, setOtpVal = param.setOtpVal;
146
+ var abortControllerRef = (0, _react.useRef)(null);
147
+ var startWebOTPListener = (0, _react.useCallback)(function() {
148
+ return _async_to_generator(function() {
149
+ var otp, otpCode, newCode, err;
150
+ return _ts_generator(this, function(_state) {
151
+ switch(_state.label){
152
+ case 0:
153
+ if (!enableSMSAutoRead || disabled || !(0, _utils.isWebOTPSupported)()) {
154
+ return [
155
+ 2
156
+ ];
157
+ }
158
+ if (abortControllerRef.current) {
159
+ abortControllerRef.current.abort();
160
+ }
161
+ abortControllerRef.current = new AbortController();
162
+ _state.label = 1;
163
+ case 1:
164
+ _state.trys.push([
165
+ 1,
166
+ 3,
167
+ ,
168
+ 4
169
+ ]);
170
+ return [
171
+ 4,
172
+ navigator.credentials.get({
173
+ otp: {
174
+ transport: [
175
+ 'sms'
176
+ ]
177
+ },
178
+ signal: abortControllerRef.current.signal
179
+ })
180
+ ];
181
+ case 2:
182
+ otp = _state.sent();
183
+ console.log('otp received', otp);
184
+ setOtpVal(otp);
185
+ // Type guard to check if it's an OTP credential
186
+ if (otp && isOTPCredential(otp) && otp.code) {
187
+ otpCode = otp.code;
188
+ // Validate the OTP code length matches our expected length
189
+ if (otpCode.length === codeLength) {
190
+ newCode = (0, _utils.getCodeValue)(codeLength, otpCode);
191
+ codeSetter(newCode);
192
+ // Trigger full code enter callback
193
+ if (onFullCodeEnter) {
194
+ onFullCodeEnter(otpCode);
195
+ }
196
+ }
197
+ }
198
+ return [
199
+ 3,
200
+ 4
201
+ ];
202
+ case 3:
203
+ err = _state.sent();
204
+ if (_instanceof(err, DOMException)) {
205
+ if (err.name !== 'AbortError' && err.name !== 'NotAllowedError') {
206
+ console.warn('Web OTP API error:', err);
207
+ }
208
+ } else if (_instanceof(err, Error)) {
209
+ console.warn('Web OTP API error:', err);
210
+ } else {
211
+ console.warn('Unknown Web OTP API error:', err);
212
+ }
213
+ return [
214
+ 3,
215
+ 4
216
+ ];
217
+ case 4:
218
+ return [
219
+ 2
220
+ ];
221
+ }
222
+ });
223
+ })();
224
+ }, [
225
+ enableSMSAutoRead,
226
+ disabled,
227
+ codeLength,
228
+ onFullCodeEnter
229
+ ]);
230
+ var stopWebOTPListener = (0, _react.useCallback)(function() {
231
+ if (abortControllerRef.current) {
232
+ abortControllerRef.current.abort();
233
+ abortControllerRef.current = null;
234
+ }
235
+ }, []);
236
+ (0, _react.useEffect)(function() {
237
+ if ((0, _utils.isWebOTPSupported)() && codeString === '' && enableSMSAutoRead && !disabled) {
238
+ startWebOTPListener();
239
+ } else {
240
+ stopWebOTPListener();
241
+ }
242
+ return function() {
243
+ stopWebOTPListener();
244
+ };
245
+ }, [
246
+ codeString,
247
+ enableSMSAutoRead,
248
+ disabled,
249
+ startWebOTPListener,
250
+ stopWebOTPListener
251
+ ]);
252
+ return {
253
+ startWebOTPListener: startWebOTPListener,
254
+ stopWebOTPListener: stopWebOTPListener
255
+ };
256
+ };
@@ -37,7 +37,7 @@ function _unsupported_iterable_to_array(o, minLen) {
37
37
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
38
38
  }
39
39
  var handleCodeError = function(param) {
40
- var codeLength = param.codeLength, codeErrorBehavior = param.codeErrorBehavior, currentCode = param.currentCode, inputRefs = param.inputRefs, inputContainerRef = param.inputContainerRef, captionRef = param.captionRef, setCode = param.setCode, codeSetter = param.codeSetter;
40
+ var codeLength = param.codeLength, codeErrorBehavior = param.codeErrorBehavior, currentCode = param.currentCode, inputRefs = param.inputRefs, inputContainerRef = param.inputContainerRef, captionRef = param.captionRef, setInnerValue = param.setInnerValue, codeSetter = param.codeSetter;
41
41
  if (!inputContainerRef.current) {
42
42
  return;
43
43
  }
@@ -51,7 +51,7 @@ var handleCodeError = function(param) {
51
51
  var newCode = _to_consumable_array(currentCode);
52
52
  newCode.pop();
53
53
  codeSetter(newCode);
54
- setCode(currentCode);
54
+ setInnerValue(currentCode);
55
55
  (_inputContainerRef_current = inputContainerRef.current) === null || _inputContainerRef_current === void 0 ? void 0 : _inputContainerRef_current.classList.remove(_CodeFieldtokens.classes.codeErrorAnimation);
56
56
  setTimeout(function() {
57
57
  var _inputRefs_current_, _inputRefs_current_1;
@@ -36,14 +36,17 @@ function _unsupported_iterable_to_array(o, minLen) {
36
36
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
37
37
  }
38
38
  var handleItemError = function(param) {
39
- var currentSymbol = param.currentSymbol, itemErrorBehavior = param.itemErrorBehavior, index = param.index, newCode = param.newCode, inputRefs = param.inputRefs, setCode = param.setCode, codeSetter = param.codeSetter;
39
+ var currentSymbol = param.currentSymbol, itemErrorBehavior = param.itemErrorBehavior, index = param.index, newCode = param.newCode, inputRefs = param.inputRefs, setInnerValue = param.setInnerValue, codeSetter = param.codeSetter, onChange = param.onChange;
40
40
  if (!inputRefs.current[index] || currentSymbol === ' ') {
41
41
  return;
42
42
  }
43
43
  switch(itemErrorBehavior){
44
44
  case 'keep':
45
45
  var _inputRefs_current_index;
46
- setCode(newCode);
46
+ setInnerValue(newCode);
47
+ if (onChange) {
48
+ onChange(newCode.join(''));
49
+ }
47
50
  (_inputRefs_current_index = inputRefs.current[index]) === null || _inputRefs_current_index === void 0 ? void 0 : _inputRefs_current_index.classList.add(_CodeFieldtokens.classes.itemError, _CodeFieldtokens.classes.itemErrorAnimation);
48
51
  setTimeout(function() {
49
52
  var _inputRefs_current_index;
@@ -57,11 +60,17 @@ var handleItemError = function(param) {
57
60
  case 'forbid-enter':
58
61
  newCode[index] = '';
59
62
  codeSetter(newCode);
63
+ if (onChange) {
64
+ onChange(newCode.join(''));
65
+ }
60
66
  break;
61
67
  case 'remove-symbol':
62
68
  default:
63
69
  var _inputRefs_current_index1;
64
- setCode(newCode);
70
+ setInnerValue(newCode);
71
+ if (onChange) {
72
+ onChange(newCode.join(''));
73
+ }
65
74
  (_inputRefs_current_index1 = inputRefs.current[index]) === null || _inputRefs_current_index1 === void 0 ? void 0 : _inputRefs_current_index1.classList.add(_CodeFieldtokens.classes.itemError, _CodeFieldtokens.classes.itemErrorFade, _CodeFieldtokens.classes.itemErrorAnimation);
66
75
  setTimeout(function() {
67
76
  var _inputRefs_current_index;
@@ -23,8 +23,12 @@ _export(exports, {
23
23
  },
24
24
  get handleItemError () {
25
25
  return _handleItemError.handleItemError;
26
+ },
27
+ get isWebOTPSupported () {
28
+ return _isWebOTPSupported.isWebOTPSupported;
26
29
  }
27
30
  });
28
31
  var _initialValuesHelper = require("./initialValuesHelper");
29
32
  var _handleItemError = require("./handleItemError");
30
33
  var _handleCodeError = require("./handleCodeError");
34
+ var _isWebOTPSupported = require("./isWebOTPSupported");
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "isWebOTPSupported", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return isWebOTPSupported;
9
+ }
10
+ });
11
+ var isWebOTPSupported = function() {
12
+ return typeof window !== 'undefined' && 'OTPCredential' in window && navigator.credentials && typeof navigator.credentials.get === 'function';
13
+ };
@@ -97,17 +97,6 @@ var useDrawer = function(param) {
97
97
  isOpen,
98
98
  popupController.items
99
99
  ]);
100
- // При анмаунте компонента нужно обновлять overflow у body.
101
- (0, _react.useEffect)(function() {
102
- return function() {
103
- if (!_utils.canUseDOM) {
104
- return;
105
- }
106
- if (!(0, _DrawerContext.hasDrawers)(Array.from(popupController.items.values()))) {
107
- document.body.style.overflow = overflow.current;
108
- }
109
- };
110
- }, []);
111
100
  var drawerInfo = _object_spread({
112
101
  id: id,
113
102
  info: {