@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.
- package/cjs/components/CodeField/CodeField.css +7 -6
- package/cjs/components/CodeField/CodeField.js +60 -24
- package/cjs/components/CodeField/CodeField.js.map +1 -1
- package/cjs/components/CodeField/CodeField.styles.js +7 -1
- package/cjs/components/CodeField/CodeField.styles.js.map +1 -1
- package/cjs/components/CodeField/{CodeField.styles_ebdpd0.css → CodeField.styles_14p25hi.css} +1 -0
- package/cjs/components/CodeField/hooks/useWebOTP.js +107 -0
- package/cjs/components/CodeField/hooks/useWebOTP.js.map +1 -0
- package/cjs/components/CodeField/utils/handleCodeError.js +2 -2
- package/cjs/components/CodeField/utils/handleCodeError.js.map +1 -1
- package/cjs/components/CodeField/utils/handleItemError.js +14 -4
- package/cjs/components/CodeField/utils/handleItemError.js.map +1 -1
- package/cjs/components/CodeField/utils/isWebOTPSupported.js +10 -0
- package/cjs/components/CodeField/utils/isWebOTPSupported.js.map +1 -0
- package/cjs/components/Drawer/hooks/useDrawer.js +0 -12
- package/cjs/components/Drawer/hooks/useDrawer.js.map +1 -1
- package/cjs/index.css +7 -6
- package/emotion/cjs/components/CodeField/CodeField.js +50 -20
- package/emotion/cjs/components/CodeField/CodeField.styles.js +18 -11
- package/emotion/cjs/components/CodeField/hooks/useWebOTP.js +256 -0
- package/emotion/cjs/components/CodeField/utils/handleCodeError.js +2 -2
- package/emotion/cjs/components/CodeField/utils/handleItemError.js +12 -3
- package/emotion/cjs/components/CodeField/utils/index.js +4 -0
- package/emotion/cjs/components/CodeField/utils/isWebOTPSupported.js +13 -0
- package/emotion/cjs/components/Drawer/hooks/useDrawer.js +0 -11
- package/emotion/es/components/CodeField/CodeField.js +52 -22
- package/emotion/es/components/CodeField/CodeField.styles.js +15 -11
- package/emotion/es/components/CodeField/hooks/useWebOTP.js +246 -0
- package/emotion/es/components/CodeField/utils/handleCodeError.js +2 -2
- package/emotion/es/components/CodeField/utils/handleItemError.js +12 -3
- package/emotion/es/components/CodeField/utils/index.js +1 -0
- package/emotion/es/components/CodeField/utils/isWebOTPSupported.js +3 -0
- package/emotion/es/components/Drawer/hooks/useDrawer.js +0 -11
- package/es/components/CodeField/CodeField.css +7 -6
- package/es/components/CodeField/CodeField.js +62 -26
- package/es/components/CodeField/CodeField.js.map +1 -1
- package/es/components/CodeField/CodeField.styles.js +7 -2
- package/es/components/CodeField/CodeField.styles.js.map +1 -1
- package/es/components/CodeField/{CodeField.styles_ebdpd0.css → CodeField.styles_14p25hi.css} +1 -0
- package/es/components/CodeField/hooks/useWebOTP.js +103 -0
- package/es/components/CodeField/hooks/useWebOTP.js.map +1 -0
- package/es/components/CodeField/utils/handleCodeError.js +2 -2
- package/es/components/CodeField/utils/handleCodeError.js.map +1 -1
- package/es/components/CodeField/utils/handleItemError.js +14 -4
- package/es/components/CodeField/utils/handleItemError.js.map +1 -1
- package/es/components/CodeField/utils/isWebOTPSupported.js +6 -0
- package/es/components/CodeField/utils/isWebOTPSupported.js.map +1 -0
- package/es/components/Drawer/hooks/useDrawer.js +0 -12
- package/es/components/Drawer/hooks/useDrawer.js.map +1 -1
- package/es/index.css +7 -6
- package/package.json +2 -2
- package/styled-components/cjs/components/CodeField/CodeField.js +50 -20
- package/styled-components/cjs/components/CodeField/CodeField.styles.js +14 -5
- package/styled-components/cjs/components/CodeField/hooks/useWebOTP.js +256 -0
- package/styled-components/cjs/components/CodeField/utils/handleCodeError.js +2 -2
- package/styled-components/cjs/components/CodeField/utils/handleItemError.js +12 -3
- package/styled-components/cjs/components/CodeField/utils/index.js +4 -0
- package/styled-components/cjs/components/CodeField/utils/isWebOTPSupported.js +13 -0
- package/styled-components/cjs/components/Drawer/hooks/useDrawer.js +0 -11
- package/styled-components/es/components/CodeField/CodeField.js +52 -22
- package/styled-components/es/components/CodeField/CodeField.styles.js +11 -5
- package/styled-components/es/components/CodeField/hooks/useWebOTP.js +246 -0
- package/styled-components/es/components/CodeField/utils/handleCodeError.js +2 -2
- package/styled-components/es/components/CodeField/utils/handleItemError.js +12 -3
- package/styled-components/es/components/CodeField/utils/index.js +1 -0
- package/styled-components/es/components/CodeField/utils/isWebOTPSupported.js +3 -0
- package/styled-components/es/components/Drawer/hooks/useDrawer.js +0 -11
- package/types/components/CodeField/CodeField.d.ts.map +1 -1
- package/types/components/CodeField/CodeField.styles.d.ts +1 -0
- package/types/components/CodeField/CodeField.styles.d.ts.map +1 -1
- package/types/components/CodeField/hooks/useWebOTP.d.ts +24 -0
- package/types/components/CodeField/hooks/useWebOTP.d.ts.map +1 -0
- package/types/components/CodeField/utils/handleCodeError.d.ts +2 -2
- package/types/components/CodeField/utils/handleCodeError.d.ts.map +1 -1
- package/types/components/CodeField/utils/handleItemError.d.ts +3 -2
- package/types/components/CodeField/utils/handleItemError.d.ts.map +1 -1
- package/types/components/CodeField/utils/index.d.ts +1 -0
- package/types/components/CodeField/utils/index.d.ts.map +1 -1
- package/types/components/CodeField/utils/isWebOTPSupported.d.ts +2 -0
- package/types/components/CodeField/utils/isWebOTPSupported.d.ts.map +1 -0
- 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,
|
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
|
-
|
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,
|
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
|
-
|
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
|
-
|
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;
|
@@ -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
|
-
.
|
2
|
-
.
|
3
|
-
.
|
4
|
-
.
|
5
|
-
.
|
6
|
-
.
|
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,
|
52
|
+
var _useState = useState(getCodeValue(codeLength, '')),
|
51
53
|
_useState2 = _slicedToArray(_useState, 2),
|
52
|
-
|
53
|
-
|
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
|
94
|
-
var _inputRefs$current;
|
95
|
-
|
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$
|
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$
|
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
|
-
|
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
|
-
|
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 = {
|