powr-sdk-web 5.6.14 → 5.7.1

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.
@@ -0,0 +1,504 @@
1
+ "use strict";
2
+
3
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports["default"] = void 0;
8
+ var _react = _interopRequireWildcard(require("react"));
9
+ var _firebase = require("../utils/firebase");
10
+ var _utils = require("./utils");
11
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t6 in e) "default" !== _t6 && {}.hasOwnProperty.call(e, _t6) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t6)) && (i.get || i.set) ? o(f, _t6, i) : f[_t6] = e[_t6]); return f; })(e, t); }
12
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
13
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
14
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
15
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
16
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
17
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
18
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
19
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
20
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
21
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
22
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
23
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
24
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
25
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
26
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
27
+ var RECAPTCHA_ID = 'recaptcha-container-add-phone';
28
+ var AddPhonePanel = function AddPhonePanel(_ref) {
29
+ var apiUrl = _ref.apiUrl,
30
+ projectId = _ref.projectId,
31
+ pendingAuth = _ref.pendingAuth,
32
+ appName = _ref.appName,
33
+ onComplete = _ref.onComplete,
34
+ onBack = _ref.onBack,
35
+ _ref$requirePhoneVeri = _ref.requirePhoneVerification,
36
+ requirePhoneVerification = _ref$requirePhoneVeri === void 0 ? false : _ref$requirePhoneVeri;
37
+ var _useState = (0, _react.useState)(''),
38
+ _useState2 = _slicedToArray(_useState, 2),
39
+ phone = _useState2[0],
40
+ setPhone = _useState2[1];
41
+ var _useState3 = (0, _react.useState)(''),
42
+ _useState4 = _slicedToArray(_useState3, 2),
43
+ otp = _useState4[0],
44
+ setOtp = _useState4[1];
45
+ var _useState5 = (0, _react.useState)(false),
46
+ _useState6 = _slicedToArray(_useState5, 2),
47
+ loading = _useState6[0],
48
+ setLoading = _useState6[1];
49
+ var _useState7 = (0, _react.useState)(false),
50
+ _useState8 = _slicedToArray(_useState7, 2),
51
+ otpSent = _useState8[0],
52
+ setOtpSent = _useState8[1];
53
+ var _useState9 = (0, _react.useState)(null),
54
+ _useState0 = _slicedToArray(_useState9, 2),
55
+ confirmationResult = _useState0[0],
56
+ setConfirmationResult = _useState0[1];
57
+ var _useState1 = (0, _react.useState)(''),
58
+ _useState10 = _slicedToArray(_useState1, 2),
59
+ error = _useState10[0],
60
+ setError = _useState10[1];
61
+ var _useState11 = (0, _react.useState)(''),
62
+ _useState12 = _slicedToArray(_useState11, 2),
63
+ success = _useState12[0],
64
+ setSuccess = _useState12[1];
65
+ var _useState13 = (0, _react.useState)(0),
66
+ _useState14 = _slicedToArray(_useState13, 2),
67
+ resendTimer = _useState14[0],
68
+ setResendTimer = _useState14[1];
69
+ var formatPhone = function formatPhone(value) {
70
+ var clean = (value || '').replace(/\D/g, '');
71
+ if (!clean.startsWith('91')) clean = '91' + clean;
72
+ return '+' + clean;
73
+ };
74
+ var clearRecaptcha = function clearRecaptcha() {
75
+ if (window.recaptchaVerifierAddPhone) {
76
+ try {
77
+ window.recaptchaVerifierAddPhone.clear();
78
+ } catch (e) {
79
+ // ignore
80
+ }
81
+ window.recaptchaVerifierAddPhone = null;
82
+ }
83
+ };
84
+ (0, _react.useEffect)(function () {
85
+ return function () {
86
+ return clearRecaptcha();
87
+ };
88
+ }, []);
89
+ (0, _react.useEffect)(function () {
90
+ if (resendTimer <= 0) return undefined;
91
+ var id = setInterval(function () {
92
+ setResendTimer(function (t) {
93
+ return t <= 1 ? 0 : t - 1;
94
+ });
95
+ }, 1000);
96
+ return function () {
97
+ return clearInterval(id);
98
+ };
99
+ }, [resendTimer]);
100
+ var savePhone = /*#__PURE__*/function () {
101
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(formattedPhone) {
102
+ var userId, existing, email, _yield$updatePowrUser, ok, data;
103
+ return _regenerator().w(function (_context) {
104
+ while (1) switch (_context.n) {
105
+ case 0:
106
+ userId = (0, _utils.getUserId)(pendingAuth === null || pendingAuth === void 0 ? void 0 : pendingAuth.user);
107
+ if (!(!userId || !(pendingAuth !== null && pendingAuth !== void 0 && pendingAuth.token))) {
108
+ _context.n = 1;
109
+ break;
110
+ }
111
+ throw new Error('Missing user session. Please sign in again.');
112
+ case 1:
113
+ existing = pendingAuth.user || {};
114
+ email = existing.email && existing.email.includes('@') && existing.email || existing.phoneNumber && existing.phoneNumber.includes('@') && existing.phoneNumber || existing.email || '';
115
+ _context.n = 2;
116
+ return (0, _utils.updatePowrUser)({
117
+ apiUrl: apiUrl,
118
+ projectId: projectId,
119
+ userId: userId,
120
+ token: pendingAuth.token,
121
+ body: {
122
+ phoneNumber: formattedPhone,
123
+ email: email,
124
+ fullName: existing.fullName
125
+ }
126
+ });
127
+ case 2:
128
+ _yield$updatePowrUser = _context.v;
129
+ ok = _yield$updatePowrUser.ok;
130
+ data = _yield$updatePowrUser.data;
131
+ if (ok) {
132
+ _context.n = 3;
133
+ break;
134
+ }
135
+ throw new Error((data === null || data === void 0 ? void 0 : data.message) || 'Failed to save phone number');
136
+ case 3:
137
+ return _context.a(2, _objectSpread(_objectSpread({}, existing), {}, {
138
+ phoneNumber: formattedPhone,
139
+ email: email || existing.email,
140
+ powrId: existing.powrId || userId,
141
+ _id: existing._id || userId
142
+ }));
143
+ }
144
+ }, _callee);
145
+ }));
146
+ return function savePhone(_x) {
147
+ return _ref2.apply(this, arguments);
148
+ };
149
+ }();
150
+ var handleSaveWithoutOtp = /*#__PURE__*/function () {
151
+ var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
152
+ var formattedPhone, updatedUser, _t;
153
+ return _regenerator().w(function (_context2) {
154
+ while (1) switch (_context2.p = _context2.n) {
155
+ case 0:
156
+ setLoading(true);
157
+ setError('');
158
+ setSuccess('');
159
+ _context2.p = 1;
160
+ if (!(phone.replace(/\D/g, '').length < 10)) {
161
+ _context2.n = 2;
162
+ break;
163
+ }
164
+ setError('Please enter a valid 10-digit phone number');
165
+ setLoading(false);
166
+ return _context2.a(2);
167
+ case 2:
168
+ formattedPhone = formatPhone(phone);
169
+ _context2.n = 3;
170
+ return savePhone(formattedPhone);
171
+ case 3:
172
+ updatedUser = _context2.v;
173
+ setSuccess('Phone number saved!');
174
+ onComplete(updatedUser);
175
+ _context2.n = 5;
176
+ break;
177
+ case 4:
178
+ _context2.p = 4;
179
+ _t = _context2.v;
180
+ console.error('add-phone save error', _t);
181
+ setError((_t === null || _t === void 0 ? void 0 : _t.message) || 'Failed to save phone number');
182
+ case 5:
183
+ _context2.p = 5;
184
+ setLoading(false);
185
+ return _context2.f(5);
186
+ case 6:
187
+ return _context2.a(2);
188
+ }
189
+ }, _callee2, null, [[1, 4, 5, 6]]);
190
+ }));
191
+ return function handleSaveWithoutOtp() {
192
+ return _ref3.apply(this, arguments);
193
+ };
194
+ }();
195
+ var sendOtp = /*#__PURE__*/function () {
196
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
197
+ var phoneNumber, confirmation, _t2, _t3;
198
+ return _regenerator().w(function (_context3) {
199
+ while (1) switch (_context3.p = _context3.n) {
200
+ case 0:
201
+ setLoading(true);
202
+ setError('');
203
+ setSuccess('');
204
+ _context3.p = 1;
205
+ phoneNumber = formatPhone(phone);
206
+ if (!(phone.replace(/\D/g, '').length < 10)) {
207
+ _context3.n = 2;
208
+ break;
209
+ }
210
+ setError('Please enter a valid 10-digit phone number');
211
+ setLoading(false);
212
+ return _context3.a(2);
213
+ case 2:
214
+ clearRecaptcha();
215
+ window.recaptchaVerifierAddPhone = new _firebase.RecaptchaVerifier(_firebase.auth, RECAPTCHA_ID, {
216
+ size: 'invisible',
217
+ callback: function callback() {}
218
+ });
219
+ _context3.p = 3;
220
+ _context3.n = 4;
221
+ return window.recaptchaVerifierAddPhone.render();
222
+ case 4:
223
+ _context3.n = 6;
224
+ break;
225
+ case 5:
226
+ _context3.p = 5;
227
+ _t2 = _context3.v;
228
+ case 6:
229
+ _context3.n = 7;
230
+ return (0, _firebase.signInWithPhoneNumber)(_firebase.auth, phoneNumber, window.recaptchaVerifierAddPhone);
231
+ case 7:
232
+ confirmation = _context3.v;
233
+ setConfirmationResult(confirmation);
234
+ setOtpSent(true);
235
+ setSuccess("OTP sent to ".concat(phoneNumber));
236
+ setResendTimer(60);
237
+ _context3.n = 9;
238
+ break;
239
+ case 8:
240
+ _context3.p = 8;
241
+ _t3 = _context3.v;
242
+ console.error('add-phone sendOtp error', _t3);
243
+ setError((_t3 === null || _t3 === void 0 ? void 0 : _t3.message) || 'Failed to send OTP.');
244
+ clearRecaptcha();
245
+ case 9:
246
+ _context3.p = 9;
247
+ setLoading(false);
248
+ return _context3.f(9);
249
+ case 10:
250
+ return _context3.a(2);
251
+ }
252
+ }, _callee3, null, [[3, 5], [1, 8, 9, 10]]);
253
+ }));
254
+ return function sendOtp() {
255
+ return _ref4.apply(this, arguments);
256
+ };
257
+ }();
258
+ var verifyOtp = /*#__PURE__*/function () {
259
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4() {
260
+ var formattedPhone, updatedUser, _t4, _t5;
261
+ return _regenerator().w(function (_context4) {
262
+ while (1) switch (_context4.p = _context4.n) {
263
+ case 0:
264
+ setLoading(true);
265
+ setError('');
266
+ setSuccess('');
267
+ _context4.p = 1;
268
+ if (confirmationResult) {
269
+ _context4.n = 2;
270
+ break;
271
+ }
272
+ setError('Please request an OTP first');
273
+ setLoading(false);
274
+ return _context4.a(2);
275
+ case 2:
276
+ _context4.n = 3;
277
+ return confirmationResult.confirm(otp);
278
+ case 3:
279
+ _context4.p = 3;
280
+ _context4.n = 4;
281
+ return (0, _firebase.signOut)(_firebase.auth);
282
+ case 4:
283
+ _context4.n = 6;
284
+ break;
285
+ case 5:
286
+ _context4.p = 5;
287
+ _t4 = _context4.v;
288
+ case 6:
289
+ formattedPhone = formatPhone(phone);
290
+ _context4.n = 7;
291
+ return savePhone(formattedPhone);
292
+ case 7:
293
+ updatedUser = _context4.v;
294
+ clearRecaptcha();
295
+ setSuccess('Phone number saved!');
296
+ onComplete(updatedUser);
297
+ _context4.n = 9;
298
+ break;
299
+ case 8:
300
+ _context4.p = 8;
301
+ _t5 = _context4.v;
302
+ console.error('add-phone verifyOtp error', _t5);
303
+ setError((_t5 === null || _t5 === void 0 ? void 0 : _t5.message) || 'Invalid OTP. Please try again.');
304
+ case 9:
305
+ _context4.p = 9;
306
+ setLoading(false);
307
+ return _context4.f(9);
308
+ case 10:
309
+ return _context4.a(2);
310
+ }
311
+ }, _callee4, null, [[3, 5], [1, 8, 9, 10]]);
312
+ }));
313
+ return function verifyOtp() {
314
+ return _ref5.apply(this, arguments);
315
+ };
316
+ }();
317
+ var subtitle = requirePhoneVerification ? "".concat(appName, " uses your phone for sign-in. Verify your number to continue.") : "".concat(appName, " uses your phone for sign-in. Add your number to continue.");
318
+ return /*#__PURE__*/_react["default"].createElement("div", {
319
+ style: panelStyles.wrapper
320
+ }, /*#__PURE__*/_react["default"].createElement("h2", {
321
+ style: panelStyles.title
322
+ }, "Add your phone number"), /*#__PURE__*/_react["default"].createElement("p", {
323
+ style: panelStyles.subtitle
324
+ }, subtitle), /*#__PURE__*/_react["default"].createElement("label", {
325
+ style: panelStyles.label
326
+ }, "Phone number"), /*#__PURE__*/_react["default"].createElement("div", {
327
+ style: panelStyles.phoneRow
328
+ }, /*#__PURE__*/_react["default"].createElement("div", {
329
+ style: panelStyles.prefix
330
+ }, "+91"), /*#__PURE__*/_react["default"].createElement("input", {
331
+ type: "text",
332
+ value: phone,
333
+ onChange: function onChange(e) {
334
+ return setPhone((e.target.value || '').replace(/\D/g, '').slice(0, 10));
335
+ },
336
+ placeholder: "10-digit mobile number",
337
+ style: panelStyles.input,
338
+ disabled: requirePhoneVerification && otpSent || loading
339
+ })), !requirePhoneVerification ? /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("button", {
340
+ type: "button",
341
+ onClick: handleSaveWithoutOtp,
342
+ disabled: loading || phone.replace(/\D/g, '').length < 10,
343
+ style: panelStyles.primaryButton
344
+ }, loading ? 'Saving...' : 'Continue'), onBack && /*#__PURE__*/_react["default"].createElement("button", {
345
+ type: "button",
346
+ onClick: onBack,
347
+ style: _objectSpread(_objectSpread({}, panelStyles.secondaryButton), {}, {
348
+ marginTop: 12,
349
+ width: '100%'
350
+ }),
351
+ disabled: loading
352
+ }, "Back to sign in")) : !otpSent ? /*#__PURE__*/_react["default"].createElement("button", {
353
+ type: "button",
354
+ onClick: sendOtp,
355
+ disabled: loading || phone.replace(/\D/g, '').length < 10,
356
+ style: panelStyles.primaryButton
357
+ }, loading ? 'Sending...' : 'Send OTP') : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("label", {
358
+ style: _objectSpread(_objectSpread({}, panelStyles.label), {}, {
359
+ marginTop: 16
360
+ })
361
+ }, "Enter OTP"), /*#__PURE__*/_react["default"].createElement("div", {
362
+ style: panelStyles.phoneRow
363
+ }, /*#__PURE__*/_react["default"].createElement("input", {
364
+ type: "text",
365
+ value: otp,
366
+ onChange: function onChange(e) {
367
+ return setOtp((e.target.value || '').replace(/\D/g, '').slice(0, 6));
368
+ },
369
+ placeholder: "6-digit code",
370
+ style: panelStyles.input,
371
+ maxLength: 6,
372
+ autoFocus: true
373
+ }), /*#__PURE__*/_react["default"].createElement("button", {
374
+ type: "button",
375
+ onClick: verifyOtp,
376
+ disabled: loading || otp.length !== 6,
377
+ style: panelStyles.smallPrimaryButton
378
+ }, loading ? 'Saving...' : 'Verify')), /*#__PURE__*/_react["default"].createElement("div", {
379
+ style: panelStyles.secondaryRow
380
+ }, onBack && /*#__PURE__*/_react["default"].createElement("button", {
381
+ type: "button",
382
+ onClick: onBack,
383
+ style: panelStyles.secondaryButton,
384
+ disabled: loading
385
+ }, "Back to sign in"), /*#__PURE__*/_react["default"].createElement("button", {
386
+ type: "button",
387
+ onClick: sendOtp,
388
+ style: panelStyles.linkButton,
389
+ disabled: resendTimer > 0 || loading
390
+ }, resendTimer > 0 ? "Resend in ".concat(resendTimer, "s") : 'Resend OTP'))), error && /*#__PURE__*/_react["default"].createElement("div", {
391
+ style: panelStyles.error
392
+ }, error), success && /*#__PURE__*/_react["default"].createElement("div", {
393
+ style: panelStyles.success
394
+ }, success), requirePhoneVerification && /*#__PURE__*/_react["default"].createElement("div", {
395
+ id: RECAPTCHA_ID
396
+ }));
397
+ };
398
+ var panelStyles = {
399
+ wrapper: {
400
+ width: '100%'
401
+ },
402
+ title: {
403
+ margin: '0 0 8px',
404
+ fontSize: 22,
405
+ fontWeight: 700,
406
+ color: '#111827'
407
+ },
408
+ subtitle: {
409
+ margin: '0 0 20px',
410
+ fontSize: 14,
411
+ color: '#6b7280',
412
+ lineHeight: 1.5
413
+ },
414
+ label: {
415
+ display: 'block',
416
+ fontSize: 13,
417
+ fontWeight: 600,
418
+ marginBottom: 6,
419
+ color: '#374151'
420
+ },
421
+ phoneRow: {
422
+ display: 'flex',
423
+ gap: 8,
424
+ alignItems: 'center',
425
+ marginBottom: 12
426
+ },
427
+ prefix: {
428
+ background: '#fff7ed',
429
+ color: '#7c2d12',
430
+ padding: '10px 12px',
431
+ borderRadius: 8,
432
+ fontWeight: 700,
433
+ border: '1px solid #ffedd5'
434
+ },
435
+ input: {
436
+ flex: 1,
437
+ padding: '12px 14px',
438
+ borderRadius: 8,
439
+ border: '1px solid #e5e7eb',
440
+ fontSize: 15,
441
+ boxSizing: 'border-box'
442
+ },
443
+ primaryButton: {
444
+ width: '100%',
445
+ padding: 12,
446
+ background: '#ff6b35',
447
+ color: 'white',
448
+ border: 'none',
449
+ borderRadius: 8,
450
+ cursor: 'pointer',
451
+ fontWeight: 700,
452
+ fontSize: 15
453
+ },
454
+ smallPrimaryButton: {
455
+ padding: '12px 16px',
456
+ background: '#ff6b35',
457
+ color: 'white',
458
+ border: 'none',
459
+ borderRadius: 8,
460
+ cursor: 'pointer',
461
+ fontWeight: 700,
462
+ whiteSpace: 'nowrap'
463
+ },
464
+ secondaryRow: {
465
+ display: 'flex',
466
+ justifyContent: 'space-between',
467
+ alignItems: 'center',
468
+ marginTop: 12
469
+ },
470
+ secondaryButton: {
471
+ padding: '8px 0',
472
+ background: 'transparent',
473
+ border: 'none',
474
+ color: '#6b7280',
475
+ cursor: 'pointer',
476
+ fontSize: 14
477
+ },
478
+ linkButton: {
479
+ padding: '8px 0',
480
+ background: 'transparent',
481
+ border: 'none',
482
+ color: '#ff6b35',
483
+ cursor: 'pointer',
484
+ fontSize: 14,
485
+ fontWeight: 600
486
+ },
487
+ error: {
488
+ marginTop: 12,
489
+ color: '#dc2626',
490
+ background: '#fff1f2',
491
+ padding: 10,
492
+ borderRadius: 8,
493
+ fontSize: 14
494
+ },
495
+ success: {
496
+ marginTop: 12,
497
+ color: '#166534',
498
+ background: '#f0fdf4',
499
+ padding: 10,
500
+ borderRadius: 8,
501
+ fontSize: 14
502
+ }
503
+ };
504
+ var _default = exports["default"] = AddPhonePanel;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports["default"] = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
9
+ var OnboardingShell = function OnboardingShell(_ref) {
10
+ var appName = _ref.appName,
11
+ appLogo = _ref.appLogo,
12
+ currentStep = _ref.currentStep,
13
+ totalSteps = _ref.totalSteps,
14
+ stepTitle = _ref.stepTitle,
15
+ children = _ref.children;
16
+ return /*#__PURE__*/_react["default"].createElement("div", {
17
+ style: styles.page
18
+ }, /*#__PURE__*/_react["default"].createElement("div", {
19
+ style: styles.card
20
+ }, /*#__PURE__*/_react["default"].createElement("div", {
21
+ style: styles.header
22
+ }, appLogo && /*#__PURE__*/_react["default"].createElement("img", {
23
+ src: appLogo,
24
+ alt: "".concat(appName || 'App', " logo"),
25
+ style: styles.logo
26
+ }), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
27
+ style: styles.appName
28
+ }, appName || 'App'), totalSteps > 1 && /*#__PURE__*/_react["default"].createElement("div", {
29
+ style: styles.progress
30
+ }, "Step ", currentStep, " of ", totalSteps, stepTitle ? " \xB7 ".concat(stepTitle) : ''))), /*#__PURE__*/_react["default"].createElement("div", {
31
+ style: styles.body
32
+ }, children)));
33
+ };
34
+ var styles = {
35
+ page: {
36
+ minHeight: '100vh',
37
+ display: 'flex',
38
+ alignItems: 'center',
39
+ justifyContent: 'center',
40
+ padding: 24,
41
+ background: 'linear-gradient(135deg, #f8fafc 0%, #fff7ed 100%)',
42
+ fontFamily: 'system-ui, -apple-system, "Segoe UI", Roboto, sans-serif'
43
+ },
44
+ card: {
45
+ width: '100%',
46
+ maxWidth: 440,
47
+ background: '#fff',
48
+ borderRadius: 16,
49
+ boxShadow: '0 10px 30px rgba(0,0,0,0.08)',
50
+ padding: 28
51
+ },
52
+ header: {
53
+ display: 'flex',
54
+ gap: 14,
55
+ alignItems: 'center',
56
+ marginBottom: 24
57
+ },
58
+ logo: {
59
+ width: 48,
60
+ height: 48,
61
+ objectFit: 'contain',
62
+ borderRadius: 10
63
+ },
64
+ appName: {
65
+ fontSize: 18,
66
+ fontWeight: 700,
67
+ color: '#111827'
68
+ },
69
+ progress: {
70
+ fontSize: 13,
71
+ color: '#6b7280',
72
+ marginTop: 4
73
+ },
74
+ body: {
75
+ width: '100%'
76
+ }
77
+ };
78
+ var _default = exports["default"] = OnboardingShell;