@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
@@ -0,0 +1,246 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
14
+ }
15
+ function _async_to_generator(fn) {
16
+ return function() {
17
+ var self = this, args = arguments;
18
+ return new Promise(function(resolve, reject) {
19
+ var gen = fn.apply(self, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
29
+ }
30
+ function _instanceof(left, right) {
31
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
32
+ return !!right[Symbol.hasInstance](left);
33
+ } else {
34
+ return left instanceof right;
35
+ }
36
+ }
37
+ function _ts_generator(thisArg, body) {
38
+ var f, y, t, _ = {
39
+ label: 0,
40
+ sent: function() {
41
+ if (t[0] & 1) throw t[1];
42
+ return t[1];
43
+ },
44
+ trys: [],
45
+ ops: []
46
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
47
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
48
+ return this;
49
+ }), g;
50
+ function verb(n) {
51
+ return function(v) {
52
+ return step([
53
+ n,
54
+ v
55
+ ]);
56
+ };
57
+ }
58
+ function step(op) {
59
+ if (f) throw new TypeError("Generator is already executing.");
60
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
61
+ 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;
62
+ if (y = 0, t) op = [
63
+ op[0] & 2,
64
+ t.value
65
+ ];
66
+ switch(op[0]){
67
+ case 0:
68
+ case 1:
69
+ t = op;
70
+ break;
71
+ case 4:
72
+ _.label++;
73
+ return {
74
+ value: op[1],
75
+ done: false
76
+ };
77
+ case 5:
78
+ _.label++;
79
+ y = op[1];
80
+ op = [
81
+ 0
82
+ ];
83
+ continue;
84
+ case 7:
85
+ op = _.ops.pop();
86
+ _.trys.pop();
87
+ continue;
88
+ default:
89
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
90
+ _ = 0;
91
+ continue;
92
+ }
93
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
94
+ _.label = op[1];
95
+ break;
96
+ }
97
+ if (op[0] === 6 && _.label < t[1]) {
98
+ _.label = t[1];
99
+ t = op;
100
+ break;
101
+ }
102
+ if (t && _.label < t[2]) {
103
+ _.label = t[2];
104
+ _.ops.push(op);
105
+ break;
106
+ }
107
+ if (t[2]) _.ops.pop();
108
+ _.trys.pop();
109
+ continue;
110
+ }
111
+ op = body.call(thisArg, _);
112
+ } catch (e) {
113
+ op = [
114
+ 6,
115
+ e
116
+ ];
117
+ y = 0;
118
+ } finally{
119
+ f = t = 0;
120
+ }
121
+ if (op[0] & 5) throw op[1];
122
+ return {
123
+ value: op[0] ? op[1] : void 0,
124
+ done: true
125
+ };
126
+ }
127
+ }
128
+ import { useCallback, useEffect, useRef } from "react";
129
+ import { getCodeValue, isWebOTPSupported } from "../utils";
130
+ // Type guard function to check if credential is OTPCredential
131
+ var isOTPCredential = function(credential) {
132
+ return credential !== null && 'code' in credential;
133
+ };
134
+ export var useWebOTP = function(param) {
135
+ var codeString = param.codeString, enableSMSAutoRead = param.enableSMSAutoRead, disabled = param.disabled, codeLength = param.codeLength, codeSetter = param.codeSetter, onFullCodeEnter = param.onFullCodeEnter, setOtpVal = param.setOtpVal;
136
+ var abortControllerRef = useRef(null);
137
+ var startWebOTPListener = useCallback(function() {
138
+ return _async_to_generator(function() {
139
+ var otp, otpCode, newCode, err;
140
+ return _ts_generator(this, function(_state) {
141
+ switch(_state.label){
142
+ case 0:
143
+ if (!enableSMSAutoRead || disabled || !isWebOTPSupported()) {
144
+ return [
145
+ 2
146
+ ];
147
+ }
148
+ if (abortControllerRef.current) {
149
+ abortControllerRef.current.abort();
150
+ }
151
+ abortControllerRef.current = new AbortController();
152
+ _state.label = 1;
153
+ case 1:
154
+ _state.trys.push([
155
+ 1,
156
+ 3,
157
+ ,
158
+ 4
159
+ ]);
160
+ return [
161
+ 4,
162
+ navigator.credentials.get({
163
+ otp: {
164
+ transport: [
165
+ 'sms'
166
+ ]
167
+ },
168
+ signal: abortControllerRef.current.signal
169
+ })
170
+ ];
171
+ case 2:
172
+ otp = _state.sent();
173
+ console.log('otp received', otp);
174
+ setOtpVal(otp);
175
+ // Type guard to check if it's an OTP credential
176
+ if (otp && isOTPCredential(otp) && otp.code) {
177
+ otpCode = otp.code;
178
+ // Validate the OTP code length matches our expected length
179
+ if (otpCode.length === codeLength) {
180
+ newCode = getCodeValue(codeLength, otpCode);
181
+ codeSetter(newCode);
182
+ // Trigger full code enter callback
183
+ if (onFullCodeEnter) {
184
+ onFullCodeEnter(otpCode);
185
+ }
186
+ }
187
+ }
188
+ return [
189
+ 3,
190
+ 4
191
+ ];
192
+ case 3:
193
+ err = _state.sent();
194
+ if (_instanceof(err, DOMException)) {
195
+ if (err.name !== 'AbortError' && err.name !== 'NotAllowedError') {
196
+ console.warn('Web OTP API error:', err);
197
+ }
198
+ } else if (_instanceof(err, Error)) {
199
+ console.warn('Web OTP API error:', err);
200
+ } else {
201
+ console.warn('Unknown Web OTP API error:', err);
202
+ }
203
+ return [
204
+ 3,
205
+ 4
206
+ ];
207
+ case 4:
208
+ return [
209
+ 2
210
+ ];
211
+ }
212
+ });
213
+ })();
214
+ }, [
215
+ enableSMSAutoRead,
216
+ disabled,
217
+ codeLength,
218
+ onFullCodeEnter
219
+ ]);
220
+ var stopWebOTPListener = useCallback(function() {
221
+ if (abortControllerRef.current) {
222
+ abortControllerRef.current.abort();
223
+ abortControllerRef.current = null;
224
+ }
225
+ }, []);
226
+ useEffect(function() {
227
+ if (isWebOTPSupported() && codeString === '' && enableSMSAutoRead && !disabled) {
228
+ startWebOTPListener();
229
+ } else {
230
+ stopWebOTPListener();
231
+ }
232
+ return function() {
233
+ stopWebOTPListener();
234
+ };
235
+ }, [
236
+ codeString,
237
+ enableSMSAutoRead,
238
+ disabled,
239
+ startWebOTPListener,
240
+ stopWebOTPListener
241
+ ]);
242
+ return {
243
+ startWebOTPListener: startWebOTPListener,
244
+ stopWebOTPListener: stopWebOTPListener
245
+ };
246
+ };
@@ -27,7 +27,7 @@ import { classes } from "../CodeField.tokens";
27
27
  import { ANIMATION_TIMEOUT } from "./constants";
28
28
  import { getCodeValue } from "./initialValuesHelper";
29
29
  export var handleCodeError = function(param) {
30
- 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;
30
+ 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;
31
31
  if (!inputContainerRef.current) {
32
32
  return;
33
33
  }
@@ -41,7 +41,7 @@ export var handleCodeError = function(param) {
41
41
  var newCode = _to_consumable_array(currentCode);
42
42
  newCode.pop();
43
43
  codeSetter(newCode);
44
- setCode(currentCode);
44
+ setInnerValue(currentCode);
45
45
  (_inputContainerRef_current = inputContainerRef.current) === null || _inputContainerRef_current === void 0 ? void 0 : _inputContainerRef_current.classList.remove(classes.codeErrorAnimation);
46
46
  setTimeout(function() {
47
47
  var _inputRefs_current_, _inputRefs_current_1;
@@ -26,14 +26,17 @@ function _unsupported_iterable_to_array(o, minLen) {
26
26
  import { classes } from "../CodeField.tokens";
27
27
  import { ANIMATION_TIMEOUT } from "./constants";
28
28
  export var handleItemError = function(param) {
29
- var currentSymbol = param.currentSymbol, itemErrorBehavior = param.itemErrorBehavior, index = param.index, newCode = param.newCode, inputRefs = param.inputRefs, setCode = param.setCode, codeSetter = param.codeSetter;
29
+ 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;
30
30
  if (!inputRefs.current[index] || currentSymbol === ' ') {
31
31
  return;
32
32
  }
33
33
  switch(itemErrorBehavior){
34
34
  case 'keep':
35
35
  var _inputRefs_current_index;
36
- setCode(newCode);
36
+ setInnerValue(newCode);
37
+ if (onChange) {
38
+ onChange(newCode.join(''));
39
+ }
37
40
  (_inputRefs_current_index = inputRefs.current[index]) === null || _inputRefs_current_index === void 0 ? void 0 : _inputRefs_current_index.classList.add(classes.itemError, classes.itemErrorAnimation);
38
41
  setTimeout(function() {
39
42
  var _inputRefs_current_index;
@@ -47,11 +50,17 @@ export var handleItemError = function(param) {
47
50
  case 'forbid-enter':
48
51
  newCode[index] = '';
49
52
  codeSetter(newCode);
53
+ if (onChange) {
54
+ onChange(newCode.join(''));
55
+ }
50
56
  break;
51
57
  case 'remove-symbol':
52
58
  default:
53
59
  var _inputRefs_current_index1;
54
- setCode(newCode);
60
+ setInnerValue(newCode);
61
+ if (onChange) {
62
+ onChange(newCode.join(''));
63
+ }
55
64
  (_inputRefs_current_index1 = inputRefs.current[index]) === null || _inputRefs_current_index1 === void 0 ? void 0 : _inputRefs_current_index1.classList.add(classes.itemError, classes.itemErrorFade, classes.itemErrorAnimation);
56
65
  setTimeout(function() {
57
66
  var _inputRefs_current_index;
@@ -1,3 +1,4 @@
1
1
  export { getFieldPattern, getPlaceholderValue, getCodeValue } from "./initialValuesHelper";
2
2
  export { handleItemError } from "./handleItemError";
3
3
  export { handleCodeError } from "./handleCodeError";
4
+ export { isWebOTPSupported } from "./isWebOTPSupported";
@@ -0,0 +1,3 @@
1
+ export var isWebOTPSupported = function() {
2
+ return typeof window !== 'undefined' && 'OTPCredential' in window && navigator.credentials && typeof navigator.credentials.get === 'function';
3
+ };
@@ -87,17 +87,6 @@ export var useDrawer = function(param) {
87
87
  isOpen,
88
88
  popupController.items
89
89
  ]);
90
- // При анмаунте компонента нужно обновлять overflow у body.
91
- useEffect(function() {
92
- return function() {
93
- if (!canUseDOM) {
94
- return;
95
- }
96
- if (!hasDrawers(Array.from(popupController.items.values()))) {
97
- document.body.style.overflow = overflow.current;
98
- }
99
- };
100
- }, []);
101
90
  var drawerInfo = _object_spread({
102
91
  id: id,
103
92
  info: {
@@ -1,9 +1,10 @@
1
- .CodeField_styles_ebdpd0_b1xx9skx__3407b383{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:-webkit-min-content;width:-moz-min-content;width:min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.CodeField_styles_ebdpd0_b1xx9skx__3407b383.CodeField_styles_ebdpd0_codefieldCaptionAlignLeft__3407b383{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}
2
- .CodeField_styles_ebdpd0_c1wzspax__3407b383{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}
3
- .CodeField_styles_ebdpd0_c7swj1z__3407b383{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}
4
- .CodeField_styles_ebdpd0_s13uxcg8__3407b383{width:var(--plasma-codefield-separator-width);}
5
- .CodeField_styles_ebdpd0_ig5h1kg__3407b383{box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;padding:0;outline:none;pointer-events:none;text-align:center;}
6
- .CodeField_styles_ebdpd0_c1jpzjak__3407b383{text-align:var(--c1jpzjak-0);-webkit-align-self:var(--c1jpzjak-0);-ms-flex-item-align:var(--c1jpzjak-0);align-self:var(--c1jpzjak-0);width:var(--c1jpzjak-1);white-space:pre-line;}
1
+ .CodeField_styles_14p25hi_b1xx9skx__a0f2e82d{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;width:-webkit-min-content;width:-moz-min-content;width:min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.CodeField_styles_14p25hi_b1xx9skx__a0f2e82d.CodeField_styles_14p25hi_codefieldCaptionAlignLeft__a0f2e82d{-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}
2
+ .CodeField_styles_14p25hi_c1wzspax__a0f2e82d{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}
3
+ .CodeField_styles_14p25hi_c7swj1z__a0f2e82d{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}
4
+ .CodeField_styles_14p25hi_s13uxcg8__a0f2e82d{width:var(--plasma-codefield-separator-width);}
5
+ .CodeField_styles_14p25hi_ig5h1kg__a0f2e82d{box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;padding:0;outline:none;pointer-events:none;text-align:center;}
6
+ .CodeField_styles_14p25hi_c1jpzjak__a0f2e82d{text-align:var(--c1jpzjak-0);-webkit-align-self:var(--c1jpzjak-0);-ms-flex-item-align:var(--c1jpzjak-0);align-self:var(--c1jpzjak-0);width:var(--c1jpzjak-1);white-space:pre-line;}
7
+ .CodeField_styles_14p25hi_h1x845wl__a0f2e82d{display:none;}
7
8
 
8
9
  .base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_c1jpzjak__e66aaab8{color:var(--plasma-codefield-caption-color);}.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_c1jpzjak__e66aaab8.base_9a5yza_codefieldCaptionError__e66aaab8{color:var(--plasma-codefield-caption-color-error);}.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_ig5h1kg__e66aaab8{color:var(--plasma-codefield-code-color);caret-color:var(--plasma-codefield-caret-color);background-color:var(--plasma-codefield-background-color);box-shadow:inset 0 0 0 var(--plasma-codefield-border-width) var(--plasma-codefield-border-color);}.base_9a5yza_b1g41h91__e66aaab8:hover .base_9a5yza_codefieldItemHoverEnabled__e66aaab8{background-color:var(--plasma-codefield-background-color-hover);box-shadow:inset 0 0 0 var(--plasma-codefield-border-width) var(--plasma-codefield-border-color-hover);}.base_9a5yza_b1g41h91__e66aaab8:focus-within .base_9a5yza_ig5h1kg__e66aaab8:focus-within{background-color:var(--plasma-codefield-background-color-focus);box-shadow:inset 0 0 0 var(--plasma-codefield-border-width) var(--plasma-codefield-border-color-focus);}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldCodeErrorAnimation__e66aaab8{-webkit-animation:base_9a5yza_shakingErrorB1g41h91__e66aaab8 0.3s forwards;animation:base_9a5yza_shakingErrorB1g41h91__e66aaab8 0.3s forwards;}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldCodeError__e66aaab8 .base_9a5yza_ig5h1kg__e66aaab8{color:var(--plasma-codefield-code-color-error);background-color:var(--plasma-codefield-background-error-color);box-shadow:inset 0 0 0 var(--plasma-codefield-border-width) var(--plasma-codefield-border-error-color);}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldCodeError__e66aaab8:focus-within .base_9a5yza_ig5h1kg__e66aaab8{background-color:var(--plasma-codefield-background-error-color);box-shadow:inset 0 0 0 var(--plasma-codefield-border-width) var(--plasma-codefield-border-error-color);}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldCodeError__e66aaab8.base_9a5yza_codefieldCodeErrorFade__e66aaab8 .base_9a5yza_ig5h1kg__e66aaab8{-webkit-animation:base_9a5yza_fadeErrorB1g41h91__e66aaab8 0.3s forwards;animation:base_9a5yza_fadeErrorB1g41h91__e66aaab8 0.3s forwards;}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldItemErrorAnimation__e66aaab8{-webkit-animation:base_9a5yza_shakingErrorB1g41h91__e66aaab8 0.3s forwards;animation:base_9a5yza_shakingErrorB1g41h91__e66aaab8 0.3s forwards;}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldItemError__e66aaab8,.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldItemError__e66aaab8:focus-within{color:var(--plasma-codefield-code-color-error);background-color:var(--plasma-codefield-background-error-color);box-shadow:inset 0 0 0 var(--plasma-codefield-border-width) var(--plasma-codefield-border-error-color);}.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldItemError__e66aaab8.base_9a5yza_codefieldCodeErrorFade__e66aaab8,.base_9a5yza_b1g41h91__e66aaab8.base_9a5yza_b1g41h91__e66aaab8 .base_9a5yza_codefieldItemError__e66aaab8:focus-within.base_9a5yza_codefieldCodeErrorFade__e66aaab8{-webkit-animation:base_9a5yza_shakingErrorB1g41h91__e66aaab8 0.3s forwards :local(fadeError-b1g41h91) 0.3s :local(forwards);animation:base_9a5yza_shakingErrorB1g41h91__e66aaab8 0.3s forwards :local(fadeError-b1g41h91) 0.3s :local(forwards);}@-webkit-keyframes base_9a5yza_shakingErrorB1g41h91__e66aaab8{14%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}28%{-webkit-transform:translateX(0.125rem);-ms-transform:translateX(0.125rem);transform:translateX(0.125rem);}42%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}57%{-webkit-transform:translateX(0.125rem);-ms-transform:translateX(0.125rem);transform:translateX(0.125rem);}71%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}85%{-webkit-transform:translateX(0.125rem);-ms-transform:translateX(0.125rem);transform:translateX(0.125rem);}100%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}}@keyframes base_9a5yza_shakingErrorB1g41h91__e66aaab8{14%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}28%{-webkit-transform:translateX(0.125rem);-ms-transform:translateX(0.125rem);transform:translateX(0.125rem);}42%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}57%{-webkit-transform:translateX(0.125rem);-ms-transform:translateX(0.125rem);transform:translateX(0.125rem);}71%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}85%{-webkit-transform:translateX(0.125rem);-ms-transform:translateX(0.125rem);transform:translateX(0.125rem);}100%{-webkit-transform:translateX(-0.125rem);-ms-transform:translateX(-0.125rem);transform:translateX(-0.125rem);}}@-webkit-keyframes base_9a5yza_fadeErrorB1g41h91__e66aaab8{50%{color:var(--plasma-codefield-code-color-error);}100%{color:transparent;}}@keyframes base_9a5yza_fadeErrorB1g41h91__e66aaab8{50%{color:var(--plasma-codefield-code-color-error);}100%{color:transparent;}}
9
10
 
@@ -1,18 +1,20 @@
1
- import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, extends as _extends, defineProperty as _defineProperty, toConsumableArray as _toConsumableArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
1
+ import { objectWithoutProperties as _objectWithoutProperties, slicedToArray as _slicedToArray, extends as _extends, objectSpread2 as _objectSpread2, defineProperty as _defineProperty, toConsumableArray as _toConsumableArray } from '../../_virtual/_rollupPluginBabelHelpers.js';
2
2
  import React, { forwardRef, useState, useRef, useCallback, Fragment } from 'react';
3
3
  import cls from 'classnames';
4
4
  import { FORBIDDEN_KEYS, BACKSPACE_KEY, ONLY_DIGITS_PATTERN } from './utils/constants.js';
5
5
  import { classes } from './CodeField.tokens.js';
6
- import { CodeWrapper, CodeGroup, ItemInput, Separator, CaptionWrapper, base } from './CodeField.styles.js';
6
+ import { CodeWrapper, CodeGroup, ItemInput, Separator, CaptionWrapper, HiddenInput, base } from './CodeField.styles.js';
7
7
  import { base as base$1 } from './variations/_view/base.js';
8
8
  import { base as base$2 } from './variations/_size/base.js';
9
9
  import { base as base$3 } from './variations/_shape/base.js';
10
10
  import { base as base$4 } from './variations/_disabled/base.js';
11
+ import { useWebOTP } from './hooks/useWebOTP.js';
11
12
  import { getCodeValue, getPlaceholderValue, getFieldPattern } from './utils/initialValuesHelper.js';
12
13
  import { useCodeHook } from '../../hooks/useCodeHook.js';
13
14
  import { useDidMountEffect } from '../../hooks/useDidMountEffect.js';
14
15
  import { handleCodeError } from './utils/handleCodeError.js';
15
16
  import { getSizeValueFromProp } from '../../utils/getSizeValueFromProp.js';
17
+ import { isWebOTPSupported } from './utils/isWebOTPSupported.js';
16
18
  import { handleItemError } from './utils/handleItemError.js';
17
19
 
18
20
  var _Separator;
@@ -47,14 +49,19 @@ var codeFieldRoot = function codeFieldRoot(Root) {
47
49
  onChange = _ref.onChange,
48
50
  onFullCodeEnter = _ref.onFullCodeEnter,
49
51
  rest = _objectWithoutProperties(_ref, _excluded);
50
- var _useState = useState(getCodeValue(codeLength, outerValue || '')),
52
+ var _useState = useState(getCodeValue(codeLength, '')),
51
53
  _useState2 = _slicedToArray(_useState, 2),
52
- code = _useState2[0],
53
- setCode = _useState2[1];
54
+ innerValue = _useState2[0],
55
+ setInnerValue = _useState2[1];
56
+ var code = outerValue !== null && outerValue !== void 0 && outerValue.length ? getCodeValue(codeLength, outerValue) : innerValue;
54
57
  var _useState3 = useState(code.join('')),
55
58
  _useState4 = _slicedToArray(_useState3, 2),
56
59
  originalValue = _useState4[0],
57
60
  setOriginalValue = _useState4[1];
61
+ var _useState5 = useState(null),
62
+ _useState6 = _slicedToArray(_useState5, 2),
63
+ otpVal = _useState6[0],
64
+ setOtpVal = _useState6[1];
58
65
  var inputRefs = useRef([]);
59
66
  var inputContainerRef = useRef(null);
60
67
  var captionRef = useRef(null);
@@ -62,6 +69,7 @@ var codeFieldRoot = function codeFieldRoot(Root) {
62
69
  var placeholderValue = getPlaceholderValue(codeLength, placeholder);
63
70
  var parts = codeLength === 6 ? 2 : 1;
64
71
  var widthValue = width ? getSizeValueFromProp(width, 'rem') : undefined;
72
+ var isWebOTPEnabled = autoComplete === 'one-time-code' && !disabled && !isWebOTPSupported();
65
73
  var getLastActiveIndex = function getLastActiveIndex() {
66
74
  if (code.length && code.length < codeLength) {
67
75
  return code.length;
@@ -71,6 +79,28 @@ var codeFieldRoot = function codeFieldRoot(Root) {
71
79
  });
72
80
  return lastEmptyIndex >= 0 ? lastEmptyIndex : codeLength - 1;
73
81
  };
82
+ var codeSetter = function codeSetter(newCode) {
83
+ setInnerValue(newCode);
84
+ var originalCode = newCode.join('');
85
+ setOriginalValue(originalCode);
86
+ if (onChange) {
87
+ onChange(originalCode);
88
+ }
89
+ if (originalCode.length > 0) {
90
+ stopWebOTPListener();
91
+ }
92
+ };
93
+ var _useWebOTP = useWebOTP({
94
+ codeString: originalValue,
95
+ enableSMSAutoRead: autoComplete === 'one-time-code',
96
+ disabled: Boolean(disabled),
97
+ codeLength: codeLength,
98
+ codeSetter: codeSetter,
99
+ onFullCodeEnter: onFullCodeEnter,
100
+ setOtpVal: setOtpVal
101
+ }),
102
+ startWebOTPListener = _useWebOTP.startWebOTPListener,
103
+ stopWebOTPListener = _useWebOTP.stopWebOTPListener;
74
104
  var handleClick = function handleClick() {
75
105
  if (disabled) {
76
106
  return;
@@ -90,28 +120,33 @@ var codeFieldRoot = function codeFieldRoot(Root) {
90
120
  return;
91
121
  }
92
122
  if (key === BACKSPACE_KEY) {
93
- if (index > 0 && code[index] === '') {
94
- var _inputRefs$current;
95
- (_inputRefs$current = inputRefs.current[index - 1]) === null || _inputRefs$current === void 0 || _inputRefs$current.focus();
123
+ if (index > 0) {
124
+ var _inputRefs$current$in;
125
+ var newCode = _toConsumableArray(code);
126
+ newCode[index] = '';
127
+ if (index >= codeLength - 1 && code[index]) {
128
+ codeSetter(newCode);
129
+ return;
130
+ }
131
+ if (!code[index]) {
132
+ var _inputRefs$current;
133
+ newCode[index - 1] = '';
134
+ (_inputRefs$current = inputRefs.current[index - 1]) === null || _inputRefs$current === void 0 || _inputRefs$current.focus();
135
+ }
136
+ (_inputRefs$current$in = inputRefs.current[index]) === null || _inputRefs$current$in === void 0 || _inputRefs$current$in.classList.remove(classes.itemError);
137
+ codeSetter(newCode);
96
138
  }
97
139
  }
98
140
  };
99
- var codeSetter = function codeSetter(newCode) {
100
- setCode(newCode);
101
- setOriginalValue(newCode.join(''));
102
- if (onChange) {
103
- onChange(newCode.join(''));
104
- }
105
- };
106
141
  var handleChange = function handleChange(event, index) {
107
- var _inputRefs$current$in;
142
+ var _inputRefs$current$in2;
108
143
  if (disabled) {
109
144
  return;
110
145
  }
111
146
  var rawSymbol = event.currentTarget.value;
112
147
  var symbol = rawSymbol.charAt(rawSymbol.length - 1);
113
148
  var newCode = _toConsumableArray(code);
114
- (_inputRefs$current$in = inputRefs.current[index]) === null || _inputRefs$current$in === void 0 || _inputRefs$current$in.classList.remove(classes.itemError);
149
+ (_inputRefs$current$in2 = inputRefs.current[index]) === null || _inputRefs$current$in2 === void 0 || _inputRefs$current$in2.classList.remove(classes.itemError);
115
150
  if (isError) {
116
151
  var _captionRef$current;
117
152
  (_captionRef$current = captionRef.current) === null || _captionRef$current === void 0 || _captionRef$current.classList.remove(classes.captionError);
@@ -133,8 +168,6 @@ var codeFieldRoot = function codeFieldRoot(Root) {
133
168
  return;
134
169
  }
135
170
  if (!symbol) {
136
- newCode[index] = '';
137
- codeSetter(newCode);
138
171
  return;
139
172
  }
140
173
  if (fieldPattern.test(symbol)) {
@@ -152,8 +185,9 @@ var codeFieldRoot = function codeFieldRoot(Root) {
152
185
  index: index,
153
186
  newCode: newCode,
154
187
  inputRefs: inputRefs,
155
- setCode: setCode,
156
- codeSetter: codeSetter
188
+ setInnerValue: setInnerValue,
189
+ codeSetter: codeSetter,
190
+ onChange: onChange
157
191
  });
158
192
  }
159
193
  };
@@ -180,6 +214,7 @@ var codeFieldRoot = function codeFieldRoot(Root) {
180
214
  if (onFullCodeEnter) {
181
215
  onFullCodeEnter(fullCode);
182
216
  }
217
+ startWebOTPListener();
183
218
  }, []);
184
219
  useCodeHook({
185
220
  inputRefs: inputRefs,
@@ -199,12 +234,12 @@ var codeFieldRoot = function codeFieldRoot(Root) {
199
234
  inputRefs: inputRefs,
200
235
  inputContainerRef: inputContainerRef,
201
236
  captionRef: captionRef,
202
- setCode: setCode,
237
+ setInnerValue: setInnerValue,
203
238
  codeSetter: codeSetter
204
239
  });
205
240
  }
206
241
  }, [isError]);
207
- return /*#__PURE__*/React.createElement(Root, _extends({
242
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Root, _extends({
208
243
  ref: ref,
209
244
  view: view,
210
245
  size: size,
@@ -212,7 +247,7 @@ var codeFieldRoot = function codeFieldRoot(Root) {
212
247
  disabled: disabled,
213
248
  onClick: handleClick,
214
249
  className: cls(className, _defineProperty({}, classes.captionAlignLeft, captionAlign === 'left'))
215
- }, rest), /*#__PURE__*/React.createElement(CodeWrapper, {
250
+ }, !isWebOTPEnabled && _objectSpread2({}, rest)), /*#__PURE__*/React.createElement(CodeWrapper, {
216
251
  ref: inputContainerRef
217
252
  }, _toConsumableArray(Array(parts)).map(function (_, partIndex) {
218
253
  return /*#__PURE__*/React.createElement(Fragment, {
@@ -228,7 +263,6 @@ var codeFieldRoot = function codeFieldRoot(Root) {
228
263
  },
229
264
  className: cls(_defineProperty(_defineProperty({}, classes.segmented, shape === 'segmented'), classes.hoverEnabled, !disabled && inputCorrectIndex >= originalValue.length)),
230
265
  value: code[inputCorrectIndex] || '',
231
- autoComplete: autoComplete,
232
266
  onChange: function onChange(e) {
233
267
  handleChange(e, inputCorrectIndex);
234
268
  },
@@ -245,7 +279,9 @@ var codeFieldRoot = function codeFieldRoot(Root) {
245
279
  ref: captionRef,
246
280
  captionAlign: captionAlign,
247
281
  widthValue: widthValue
248
- }, caption));
282
+ }, caption), isWebOTPEnabled && /*#__PURE__*/React.createElement(HiddenInput, _extends({
283
+ tabIndex: -1
284
+ }, rest))), /*#__PURE__*/React.createElement("div", null, JSON.stringify(otpVal)));
249
285
  });
250
286
  };
251
287
  var codeFieldConfig = {