powr-sdk-web 5.6.14 → 5.8.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.
@@ -7,6 +7,11 @@ exports["default"] = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _auth = require("../utils/auth");
9
9
  var _firebase = require("../utils/firebase");
10
+ var _AddPhonePanel = _interopRequireDefault(require("../onboarding/AddPhonePanel"));
11
+ var _PhoneInput = _interopRequireDefault(require("../components/PhoneInput"));
12
+ var _utils = require("../onboarding/utils");
13
+ var _phone = require("../utils/phone");
14
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
10
15
  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 _t7 in e) "default" !== _t7 && {}.hasOwnProperty.call(e, _t7) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t7)) && (i.get || i.set) ? o(f, _t7, i) : f[_t7] = e[_t7]); return f; })(e, t); }
11
16
  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); }
12
17
  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 }; })(); }
@@ -36,7 +41,20 @@ var PowrLogin = function PowrLogin(_ref) {
36
41
  _ref$requirePhoneVeri = _ref.requirePhoneVerification,
37
42
  requirePhoneVerification = _ref$requirePhoneVeri === void 0 ? true : _ref$requirePhoneVeri,
38
43
  _ref$showForgotPasswo = _ref.showForgotPassword,
39
- showForgotPassword = _ref$showForgotPasswo === void 0 ? true : _ref$showForgotPasswo;
44
+ showForgotPassword = _ref$showForgotPasswo === void 0 ? true : _ref$showForgotPasswo,
45
+ _ref$completeProfileO = _ref.completeProfileOnLogin,
46
+ completeProfileOnLogin = _ref$completeProfileO === void 0 ? false : _ref$completeProfileO,
47
+ _ref$requireTerms = _ref.requireTerms,
48
+ requireTerms = _ref$requireTerms === void 0 ? false : _ref$requireTerms,
49
+ _ref$defaultCountry = _ref.defaultCountry,
50
+ defaultCountry = _ref$defaultCountry === void 0 ? _phone.DEFAULT_COUNTRY : _ref$defaultCountry,
51
+ _ref$defaultCountryCo = _ref.defaultCountryCode,
52
+ defaultCountryCode = _ref$defaultCountryCo === void 0 ? _phone.DEFAULT_COUNTRY_CODE : _ref$defaultCountryCo,
53
+ _ref$international = _ref.international,
54
+ international = _ref$international === void 0 ? false : _ref$international,
55
+ _ref$allowedCountries = _ref.allowedCountries,
56
+ allowedCountries = _ref$allowedCountries === void 0 ? null : _ref$allowedCountries;
57
+ var resolvedDefaultCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
40
58
  var _useState = (0, _react.useState)(function () {
41
59
  switch (mode) {
42
60
  case 'login':
@@ -88,13 +106,6 @@ var PowrLogin = function PowrLogin(_ref) {
88
106
  _useState16 = _slicedToArray(_useState15, 2),
89
107
  showTooltip = _useState16[0],
90
108
  setShowTooltip = _useState16[1];
91
- var formatPhone = function formatPhone(phone) {
92
- var clean = phone.replace(/\D/g, '');
93
- if (!clean.startsWith('91')) {
94
- clean = '91' + clean;
95
- }
96
- return '+' + clean;
97
- };
98
109
  var _useState17 = (0, _react.useState)(false),
99
110
  _useState18 = _slicedToArray(_useState17, 2),
100
111
  showOtpOption = _useState18[0],
@@ -127,6 +138,30 @@ var PowrLogin = function PowrLogin(_ref) {
127
138
  _useState32 = _slicedToArray(_useState31, 2),
128
139
  isPhoneVerified = _useState32[0],
129
140
  setIsPhoneVerified = _useState32[1];
141
+ var _useState33 = (0, _react.useState)('form'),
142
+ _useState34 = _slicedToArray(_useState33, 2),
143
+ authView = _useState34[0],
144
+ setAuthView = _useState34[1];
145
+ var _useState35 = (0, _react.useState)(null),
146
+ _useState36 = _slicedToArray(_useState35, 2),
147
+ pendingAuth = _useState36[0],
148
+ setPendingAuth = _useState36[1];
149
+ var _useState37 = (0, _react.useState)(false),
150
+ _useState38 = _slicedToArray(_useState37, 2),
151
+ termsAccepted = _useState38[0],
152
+ setTermsAccepted = _useState38[1];
153
+ var _useState39 = (0, _react.useState)(resolvedDefaultCountry),
154
+ _useState40 = _slicedToArray(_useState39, 2),
155
+ phoneCountry = _useState40[0],
156
+ setPhoneCountry = _useState40[1];
157
+ var _useState41 = (0, _react.useState)(false),
158
+ _useState42 = _slicedToArray(_useState41, 2),
159
+ registerPhoneValid = _useState42[0],
160
+ setRegisterPhoneValid = _useState42[1];
161
+ var _useState43 = (0, _react.useState)(''),
162
+ _useState44 = _slicedToArray(_useState43, 2),
163
+ registerPhoneE164 = _useState44[0],
164
+ setRegisterPhoneE164 = _useState44[1];
130
165
  var shouldShowToggle = mode === 'toggle';
131
166
  var handleInputChange = /*#__PURE__*/function () {
132
167
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
@@ -153,8 +188,45 @@ var PowrLogin = function PowrLogin(_ref) {
153
188
  return _ref2.apply(this, arguments);
154
189
  };
155
190
  }();
191
+ var handlePhoneOrEmailChange = function handlePhoneOrEmailChange(e) {
192
+ setFormData(function (prev) {
193
+ return _objectSpread(_objectSpread({}, prev), {}, {
194
+ phoneOrEmail: e.target.value
195
+ });
196
+ });
197
+ setError('');
198
+ if (fieldErrors.phoneOrEmail) {
199
+ setFieldErrors(function (prev) {
200
+ return _objectSpread(_objectSpread({}, prev), {}, {
201
+ phoneOrEmail: ''
202
+ });
203
+ });
204
+ }
205
+ };
206
+ var handleRegisterPhoneChange = function handleRegisterPhoneChange(_ref3) {
207
+ var country = _ref3.country,
208
+ localNumber = _ref3.localNumber,
209
+ e164 = _ref3.e164,
210
+ isValid = _ref3.isValid;
211
+ setPhoneCountry(country);
212
+ setRegisterPhoneE164(e164);
213
+ setRegisterPhoneValid(isValid);
214
+ setFormData(function (prev) {
215
+ return _objectSpread(_objectSpread({}, prev), {}, {
216
+ phoneOrEmail: localNumber
217
+ });
218
+ });
219
+ setError('');
220
+ if (fieldErrors.phoneOrEmail) {
221
+ setFieldErrors(function (prev) {
222
+ return _objectSpread(_objectSpread({}, prev), {}, {
223
+ phoneOrEmail: ''
224
+ });
225
+ });
226
+ }
227
+ };
156
228
  var sendFirebaseOtp = /*#__PURE__*/function () {
157
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
229
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
158
230
  var appVerifier, confirmationResult, _t, _t2;
159
231
  return _regenerator().w(function (_context2) {
160
232
  while (1) switch (_context2.p = _context2.n) {
@@ -249,11 +321,11 @@ var PowrLogin = function PowrLogin(_ref) {
249
321
  }, _callee2, null, [[2, 4], [1, 7, 8, 9]]);
250
322
  }));
251
323
  return function sendFirebaseOtp(_x2) {
252
- return _ref3.apply(this, arguments);
324
+ return _ref4.apply(this, arguments);
253
325
  };
254
326
  }();
255
327
  var verifyFirebaseOtp = /*#__PURE__*/function () {
256
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
328
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
257
329
  var result, _t3, _t4;
258
330
  return _regenerator().w(function (_context3) {
259
331
  while (1) switch (_context3.p = _context3.n) {
@@ -312,7 +384,7 @@ var PowrLogin = function PowrLogin(_ref) {
312
384
  }, _callee3, null, [[4, 6], [1, 8, 9, 10]]);
313
385
  }));
314
386
  return function verifyFirebaseOtp() {
315
- return _ref4.apply(this, arguments);
387
+ return _ref5.apply(this, arguments);
316
388
  };
317
389
  }();
318
390
 
@@ -321,17 +393,14 @@ var PowrLogin = function PowrLogin(_ref) {
321
393
  var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
322
394
  return emailRegex.test(email);
323
395
  };
324
- var isValidPhone = function isValidPhone(phone) {
325
- var cleanPhone = phone.replace(/\D/g, '');
326
- return cleanPhone.length >= 7 && cleanPhone.length <= 15;
327
- };
328
396
  var handleSubmit = /*#__PURE__*/function () {
329
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
397
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
330
398
  var skipPhoneValidation,
331
399
  errors,
332
400
  value,
333
401
  isEmail,
334
402
  endpoint,
403
+ normalizedPhone,
335
404
  payload,
336
405
  _yield$apiCall,
337
406
  data,
@@ -355,16 +424,16 @@ var PowrLogin = function PowrLogin(_ref) {
355
424
  }
356
425
 
357
426
  // Registration: Only allow phone numbers
358
- if (!isLogin && !isValidPhone(value)) {
359
- errors.phoneOrEmail = 'Please enter a valid phone number for registration';
427
+ if (!isLogin && !registerPhoneValid) {
428
+ errors.phoneOrEmail = international ? 'Please enter a valid phone number' : 'Please enter a valid mobile number';
360
429
  }
361
430
 
362
431
  // Login: Allow both phone and email
363
432
  if (isLogin) {
364
433
  if (isEmail && !isValidEmail(value)) {
365
434
  errors.phoneOrEmail = 'Please enter a valid email address';
366
- } else if (!isEmail && !isValidPhone(value)) {
367
- errors.phoneOrEmail = 'Please enter a valid phone number';
435
+ } else if (!isEmail && !(0, _phone.isValidPhone)(value, resolvedDefaultCountry)) {
436
+ errors.phoneOrEmail = 'Please enter a valid phone number (include country code, e.g. +1…) or email';
368
437
  }
369
438
  }
370
439
  if (!formData.password.trim()) {
@@ -381,6 +450,9 @@ var PowrLogin = function PowrLogin(_ref) {
381
450
  if (!isLogin && requirePhoneVerification && !isPhoneVerified) {
382
451
  errors.phoneOrEmail = 'Please verify your phone number first';
383
452
  }
453
+ if (!isLogin && requireTerms && !termsAccepted) {
454
+ errors.terms = 'Please accept the terms to continue';
455
+ }
384
456
  if (!(Object.keys(errors).length > 0)) {
385
457
  _context4.n = 1;
386
458
  break;
@@ -391,12 +463,13 @@ var PowrLogin = function PowrLogin(_ref) {
391
463
  case 1:
392
464
  _context4.p = 1;
393
465
  endpoint = isLogin ? "/auth/login" : "/auth/register";
466
+ normalizedPhone = isLogin ? isEmail ? value : (0, _phone.normalizePhone)(value, resolvedDefaultCountry) : registerPhoneE164 || (0, _phone.normalizePhone)(value, phoneCountry);
394
467
  payload = isLogin ? {
395
- phoneOrEmail: formData.phoneOrEmail,
468
+ phoneOrEmail: isEmail ? value : normalizedPhone,
396
469
  password: formData.password
397
470
  } : {
398
471
  fullName: formData.fullName,
399
- phoneOrEmail: formData.phoneOrEmail,
472
+ phoneOrEmail: normalizedPhone,
400
473
  password: formData.password
401
474
  };
402
475
  _context4.n = 2;
@@ -408,55 +481,81 @@ var PowrLogin = function PowrLogin(_ref) {
408
481
  _yield$apiCall = _context4.v;
409
482
  data = _yield$apiCall.data;
410
483
  ok = _yield$apiCall.ok;
411
- if (ok) {
412
- setSuccess(isLogin ? 'Login successful!' : 'Registration successful!');
413
- if (isLogin && onLogin) {
414
- onLogin(data);
415
- } else if (!isLogin && onRegister) {
416
- onRegister(data);
417
- }
418
- setFormData({
419
- phoneOrEmail: '',
420
- password: '',
421
- confirmPassword: '',
422
- fullName: ''
423
- });
424
- // Reset OTP related states
425
- setOtp('');
426
- setFirebaseOtpSent(false);
427
- setFirebaseConfirm(null);
428
- } else {
429
- if (data.message) {
430
- setError(data.message);
431
- } else if (data.error) {
432
- setError(data.error);
433
- } else if (data.errors) {
434
- if (_typeof(data.errors) === 'object') {
435
- setFieldErrors(data.errors);
436
- } else {
437
- setError(data.errors);
438
- }
484
+ if (!ok) {
485
+ _context4.n = 6;
486
+ break;
487
+ }
488
+ setSuccess(isLogin ? 'Login successful!' : 'Registration successful!');
489
+ if (!isLogin) {
490
+ _context4.n = 4;
491
+ break;
492
+ }
493
+ if (!(completeProfileOnLogin && (0, _utils.needsPhone)(data.user))) {
494
+ _context4.n = 3;
495
+ break;
496
+ }
497
+ setPendingAuth({
498
+ user: data.user,
499
+ token: data.token
500
+ });
501
+ setAuthView('add-phone');
502
+ setLoading(false);
503
+ return _context4.a(2);
504
+ case 3:
505
+ if (onLogin) {
506
+ onLogin(data);
507
+ }
508
+ _context4.n = 5;
509
+ break;
510
+ case 4:
511
+ if (!isLogin && onRegister) {
512
+ onRegister(data);
513
+ }
514
+ case 5:
515
+ setFormData({
516
+ phoneOrEmail: '',
517
+ password: '',
518
+ confirmPassword: '',
519
+ fullName: ''
520
+ });
521
+ // Reset OTP related states
522
+ setOtp('');
523
+ setFirebaseOtpSent(false);
524
+ setFirebaseConfirm(null);
525
+ _context4.n = 7;
526
+ break;
527
+ case 6:
528
+ if (data.message) {
529
+ setError(data.message);
530
+ } else if (data.error) {
531
+ setError(data.error);
532
+ } else if (data.errors) {
533
+ if (_typeof(data.errors) === 'object') {
534
+ setFieldErrors(data.errors);
439
535
  } else {
440
- setError("".concat(isLogin ? 'Login' : 'Registration', " failed. Please try again."));
536
+ setError(data.errors);
441
537
  }
538
+ } else {
539
+ setError("".concat(isLogin ? 'Login' : 'Registration', " failed. Please try again."));
442
540
  }
443
- _context4.n = 4;
541
+ case 7:
542
+ _context4.n = 9;
444
543
  break;
445
- case 3:
446
- _context4.p = 3;
544
+ case 8:
545
+ _context4.p = 8;
447
546
  _t5 = _context4.v;
448
547
  setError('Network error. Please try again.');
449
- case 4:
450
- _context4.p = 4;
548
+ case 9:
549
+ _context4.p = 9;
451
550
  setLoading(false);
452
- return _context4.f(4);
453
- case 5:
551
+ return _context4.f(9);
552
+ case 10:
454
553
  return _context4.a(2);
455
554
  }
456
- }, _callee4, null, [[1, 3, 4, 5]]);
555
+ }, _callee4, null, [[1, 8, 9, 10]]);
457
556
  }));
458
557
  return function handleSubmit(_x3) {
459
- return _ref5.apply(this, arguments);
558
+ return _ref6.apply(this, arguments);
460
559
  };
461
560
  }();
462
561
  var toggleMode = function toggleMode() {
@@ -471,6 +570,12 @@ var PowrLogin = function PowrLogin(_ref) {
471
570
  setFirebaseConfirm(null);
472
571
  setShowOtpModal(false);
473
572
  setIsPhoneVerified(false);
573
+ setAuthView('form');
574
+ setPendingAuth(null);
575
+ setTermsAccepted(false);
576
+ setPhoneCountry(resolvedDefaultCountry);
577
+ setRegisterPhoneValid(false);
578
+ setRegisterPhoneE164('');
474
579
  setFormData({
475
580
  phoneOrEmail: '',
476
581
  password: '',
@@ -478,8 +583,27 @@ var PowrLogin = function PowrLogin(_ref) {
478
583
  fullName: ''
479
584
  });
480
585
  };
586
+ var handleAddPhoneComplete = function handleAddPhoneComplete(updatedUser) {
587
+ if (!pendingAuth) return;
588
+ var payload = {
589
+ success: true,
590
+ user: updatedUser,
591
+ token: pendingAuth.token
592
+ };
593
+ setAuthView('form');
594
+ setPendingAuth(null);
595
+ if (onLogin) {
596
+ onLogin(payload);
597
+ }
598
+ };
599
+ var handleAddPhoneBack = function handleAddPhoneBack() {
600
+ setAuthView('form');
601
+ setPendingAuth(null);
602
+ setError('');
603
+ setSuccess('');
604
+ };
481
605
  var handleGetOtp = /*#__PURE__*/function () {
482
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
606
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
483
607
  var _yield$apiCall2, data, ok, _t6;
484
608
  return _regenerator().w(function (_context5) {
485
609
  while (1) switch (_context5.p = _context5.n) {
@@ -531,7 +655,7 @@ var PowrLogin = function PowrLogin(_ref) {
531
655
  }, _callee5, null, [[2, 4, 5, 6]]);
532
656
  }));
533
657
  return function handleGetOtp() {
534
- return _ref6.apply(this, arguments);
658
+ return _ref7.apply(this, arguments);
535
659
  };
536
660
  }();
537
661
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -562,7 +686,19 @@ var PowrLogin = function PowrLogin(_ref) {
562
686
  }
563
687
  }, "PowrAccount")), showTooltip && /*#__PURE__*/_react["default"].createElement("div", {
564
688
  style: styles.tooltip
565
- }, "Secure authentication powered by Lawazia Tech"))), /*#__PURE__*/_react["default"].createElement("form", {
689
+ }, "Secure authentication powered by Lawazia Tech"))), authView === 'add-phone' && pendingAuth ? /*#__PURE__*/_react["default"].createElement(_AddPhonePanel["default"], {
690
+ apiUrl: apiUrl,
691
+ projectId: projectId,
692
+ pendingAuth: pendingAuth,
693
+ appName: appName,
694
+ onComplete: handleAddPhoneComplete,
695
+ onBack: handleAddPhoneBack,
696
+ requirePhoneVerification: requirePhoneVerification,
697
+ defaultCountry: resolvedDefaultCountry,
698
+ defaultCountryCode: defaultCountryCode,
699
+ international: international,
700
+ allowedCountries: allowedCountries
701
+ }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("form", {
566
702
  onSubmit: handleSubmit,
567
703
  style: styles.form
568
704
  }, !isLogin && /*#__PURE__*/_react["default"].createElement("div", {
@@ -586,23 +722,31 @@ var PowrLogin = function PowrLogin(_ref) {
586
722
  }, /*#__PURE__*/_react["default"].createElement("label", {
587
723
  htmlFor: "phoneOrEmail",
588
724
  style: styles.label
589
- }, isLogin ? 'Phone or Email' : 'Phone Number'), /*#__PURE__*/_react["default"].createElement("input", {
725
+ }, isLogin ? 'Phone or Email' : 'Phone Number'), !isLogin ? /*#__PURE__*/_react["default"].createElement(_PhoneInput["default"], {
726
+ value: formData.phoneOrEmail,
727
+ country: phoneCountry,
728
+ onChange: handleRegisterPhoneChange,
729
+ international: international,
730
+ allowedCountries: allowedCountries,
731
+ defaultCountry: resolvedDefaultCountry,
732
+ inputStyle: _objectSpread({}, fieldErrors.phoneOrEmail ? styles.inputError : {})
733
+ }) : /*#__PURE__*/_react["default"].createElement("input", {
590
734
  type: "text",
591
735
  id: "phoneOrEmail",
592
736
  name: "phoneOrEmail",
593
737
  value: formData.phoneOrEmail,
594
- onChange: handleInputChange,
738
+ onChange: handlePhoneOrEmailChange,
595
739
  style: _objectSpread(_objectSpread({}, styles.input), fieldErrors.phoneOrEmail ? styles.inputError : {}),
596
- placeholder: isLogin ? "Enter your phone or email" : "Enter your phone number",
740
+ placeholder: "Phone (+country code) or email",
597
741
  required: true
598
742
  }), fieldErrors.phoneOrEmail && /*#__PURE__*/_react["default"].createElement("div", {
599
743
  style: styles.fieldError
600
744
  }, fieldErrors.phoneOrEmail), !isLogin && requirePhoneVerification && /*#__PURE__*/_react["default"].createElement("div", {
601
745
  style: styles.helpText
602
- }, "Registration requires phone verification for security"), !isLogin && requirePhoneVerification && isValidPhone(formData.phoneOrEmail) && !isPhoneVerified && /*#__PURE__*/_react["default"].createElement("button", {
746
+ }, "Registration requires phone verification for security"), !isLogin && requirePhoneVerification && registerPhoneValid && !isPhoneVerified && /*#__PURE__*/_react["default"].createElement("button", {
603
747
  type: "button",
604
748
  onClick: function onClick() {
605
- return sendFirebaseOtp(formatPhone(formData.phoneOrEmail));
749
+ return sendFirebaseOtp((0, _phone.formatPhoneForSms)(formData.phoneOrEmail, phoneCountry));
606
750
  },
607
751
  style: _objectSpread(_objectSpread({}, styles.otpButton), {}, {
608
752
  marginTop: '8px'
@@ -670,7 +814,29 @@ var PowrLogin = function PowrLogin(_ref) {
670
814
  style: styles.eyeIcon
671
815
  }, "\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8\uFE0F"))), fieldErrors.confirmPassword && /*#__PURE__*/_react["default"].createElement("div", {
672
816
  style: styles.fieldError
673
- }, fieldErrors.confirmPassword)), isLogin && /*#__PURE__*/_react["default"].createElement("div", {
817
+ }, fieldErrors.confirmPassword)), !isLogin && requireTerms && /*#__PURE__*/_react["default"].createElement("div", {
818
+ style: styles.formGroup
819
+ }, /*#__PURE__*/_react["default"].createElement("label", {
820
+ style: styles.checkboxLabel
821
+ }, /*#__PURE__*/_react["default"].createElement("input", {
822
+ type: "checkbox",
823
+ checked: termsAccepted,
824
+ onChange: function onChange(e) {
825
+ setTermsAccepted(e.target.checked);
826
+ if (fieldErrors.terms) {
827
+ setFieldErrors(function (prev) {
828
+ return _objectSpread(_objectSpread({}, prev), {}, {
829
+ terms: ''
830
+ });
831
+ });
832
+ }
833
+ },
834
+ style: styles.checkbox
835
+ }), /*#__PURE__*/_react["default"].createElement("span", {
836
+ style: styles.checkboxText
837
+ }, "I agree to the Terms of Service and Privacy Policy")), fieldErrors.terms && /*#__PURE__*/_react["default"].createElement("div", {
838
+ style: styles.fieldError
839
+ }, fieldErrors.terms)), isLogin && /*#__PURE__*/_react["default"].createElement("div", {
674
840
  style: styles.rememberSection
675
841
  }, /*#__PURE__*/_react["default"].createElement("label", {
676
842
  style: styles.checkboxLabel
@@ -726,7 +892,7 @@ var PowrLogin = function PowrLogin(_ref) {
726
892
  }, "Sign in here") : /*#__PURE__*/_react["default"].createElement("a", {
727
893
  href: "/login",
728
894
  style: styles.navigationLink
729
- }, "Sign in here"))))), showOtpModal && /*#__PURE__*/_react["default"].createElement("div", {
895
+ }, "Sign in here")))))), showOtpModal && /*#__PURE__*/_react["default"].createElement("div", {
730
896
  style: styles.modalOverlay
731
897
  }, /*#__PURE__*/_react["default"].createElement("div", {
732
898
  style: styles.modalContent
@@ -864,6 +1030,28 @@ var styles = {
864
1030
  outline: 'none',
865
1031
  height: '48px'
866
1032
  },
1033
+ phoneRow: {
1034
+ display: 'flex',
1035
+ gap: '8px',
1036
+ alignItems: 'stretch',
1037
+ width: '100%'
1038
+ },
1039
+ phonePrefix: {
1040
+ display: 'flex',
1041
+ alignItems: 'center',
1042
+ padding: '0 14px',
1043
+ background: '#fff7ed',
1044
+ color: '#7c2d12',
1045
+ border: '2px solid #ffedd5',
1046
+ borderRadius: '8px',
1047
+ fontWeight: '700',
1048
+ fontSize: '16px',
1049
+ whiteSpace: 'nowrap'
1050
+ },
1051
+ phoneInput: {
1052
+ flex: 1,
1053
+ minWidth: 0
1054
+ },
867
1055
  inputFocus: {
868
1056
  borderColor: '#667eea',
869
1057
  boxShadow: '0 0 0 3px rgba(102, 126, 234, 0.1)'