powr-sdk-web 5.7.1 → 5.8.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.
@@ -8,7 +8,9 @@ var _react = _interopRequireWildcard(require("react"));
8
8
  var _auth = require("../utils/auth");
9
9
  var _firebase = require("../utils/firebase");
10
10
  var _AddPhonePanel = _interopRequireDefault(require("../onboarding/AddPhonePanel"));
11
+ var _PhoneInput = _interopRequireDefault(require("../components/PhoneInput"));
11
12
  var _utils = require("../onboarding/utils");
13
+ var _phone = require("../utils/phone");
12
14
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
13
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); }
14
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); }
@@ -43,7 +45,17 @@ var PowrLogin = function PowrLogin(_ref) {
43
45
  _ref$completeProfileO = _ref.completeProfileOnLogin,
44
46
  completeProfileOnLogin = _ref$completeProfileO === void 0 ? false : _ref$completeProfileO,
45
47
  _ref$requireTerms = _ref.requireTerms,
46
- requireTerms = _ref$requireTerms === void 0 ? false : _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
+ onSessionExpired = _ref.onSessionExpired;
58
+ var resolvedDefaultCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
47
59
  var _useState = (0, _react.useState)(function () {
48
60
  switch (mode) {
49
61
  case 'login':
@@ -95,13 +107,6 @@ var PowrLogin = function PowrLogin(_ref) {
95
107
  _useState16 = _slicedToArray(_useState15, 2),
96
108
  showTooltip = _useState16[0],
97
109
  setShowTooltip = _useState16[1];
98
- var formatPhone = function formatPhone(phone) {
99
- var clean = phone.replace(/\D/g, '');
100
- if (!clean.startsWith('91')) {
101
- clean = '91' + clean;
102
- }
103
- return '+' + clean;
104
- };
105
110
  var _useState17 = (0, _react.useState)(false),
106
111
  _useState18 = _slicedToArray(_useState17, 2),
107
112
  showOtpOption = _useState18[0],
@@ -146,6 +151,18 @@ var PowrLogin = function PowrLogin(_ref) {
146
151
  _useState38 = _slicedToArray(_useState37, 2),
147
152
  termsAccepted = _useState38[0],
148
153
  setTermsAccepted = _useState38[1];
154
+ var _useState39 = (0, _react.useState)(resolvedDefaultCountry),
155
+ _useState40 = _slicedToArray(_useState39, 2),
156
+ phoneCountry = _useState40[0],
157
+ setPhoneCountry = _useState40[1];
158
+ var _useState41 = (0, _react.useState)(false),
159
+ _useState42 = _slicedToArray(_useState41, 2),
160
+ registerPhoneValid = _useState42[0],
161
+ setRegisterPhoneValid = _useState42[1];
162
+ var _useState43 = (0, _react.useState)(''),
163
+ _useState44 = _slicedToArray(_useState43, 2),
164
+ registerPhoneE164 = _useState44[0],
165
+ setRegisterPhoneE164 = _useState44[1];
149
166
  var shouldShowToggle = mode === 'toggle';
150
167
  var handleInputChange = /*#__PURE__*/function () {
151
168
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
@@ -172,8 +189,45 @@ var PowrLogin = function PowrLogin(_ref) {
172
189
  return _ref2.apply(this, arguments);
173
190
  };
174
191
  }();
192
+ var handlePhoneOrEmailChange = function handlePhoneOrEmailChange(e) {
193
+ setFormData(function (prev) {
194
+ return _objectSpread(_objectSpread({}, prev), {}, {
195
+ phoneOrEmail: e.target.value
196
+ });
197
+ });
198
+ setError('');
199
+ if (fieldErrors.phoneOrEmail) {
200
+ setFieldErrors(function (prev) {
201
+ return _objectSpread(_objectSpread({}, prev), {}, {
202
+ phoneOrEmail: ''
203
+ });
204
+ });
205
+ }
206
+ };
207
+ var handleRegisterPhoneChange = function handleRegisterPhoneChange(_ref3) {
208
+ var country = _ref3.country,
209
+ localNumber = _ref3.localNumber,
210
+ e164 = _ref3.e164,
211
+ isValid = _ref3.isValid;
212
+ setPhoneCountry(country);
213
+ setRegisterPhoneE164(e164);
214
+ setRegisterPhoneValid(isValid);
215
+ setFormData(function (prev) {
216
+ return _objectSpread(_objectSpread({}, prev), {}, {
217
+ phoneOrEmail: localNumber
218
+ });
219
+ });
220
+ setError('');
221
+ if (fieldErrors.phoneOrEmail) {
222
+ setFieldErrors(function (prev) {
223
+ return _objectSpread(_objectSpread({}, prev), {}, {
224
+ phoneOrEmail: ''
225
+ });
226
+ });
227
+ }
228
+ };
175
229
  var sendFirebaseOtp = /*#__PURE__*/function () {
176
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
230
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
177
231
  var appVerifier, confirmationResult, _t, _t2;
178
232
  return _regenerator().w(function (_context2) {
179
233
  while (1) switch (_context2.p = _context2.n) {
@@ -268,11 +322,11 @@ var PowrLogin = function PowrLogin(_ref) {
268
322
  }, _callee2, null, [[2, 4], [1, 7, 8, 9]]);
269
323
  }));
270
324
  return function sendFirebaseOtp(_x2) {
271
- return _ref3.apply(this, arguments);
325
+ return _ref4.apply(this, arguments);
272
326
  };
273
327
  }();
274
328
  var verifyFirebaseOtp = /*#__PURE__*/function () {
275
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
329
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
276
330
  var result, _t3, _t4;
277
331
  return _regenerator().w(function (_context3) {
278
332
  while (1) switch (_context3.p = _context3.n) {
@@ -331,7 +385,7 @@ var PowrLogin = function PowrLogin(_ref) {
331
385
  }, _callee3, null, [[4, 6], [1, 8, 9, 10]]);
332
386
  }));
333
387
  return function verifyFirebaseOtp() {
334
- return _ref4.apply(this, arguments);
388
+ return _ref5.apply(this, arguments);
335
389
  };
336
390
  }();
337
391
 
@@ -340,17 +394,14 @@ var PowrLogin = function PowrLogin(_ref) {
340
394
  var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
341
395
  return emailRegex.test(email);
342
396
  };
343
- var isValidPhone = function isValidPhone(phone) {
344
- var cleanPhone = phone.replace(/\D/g, '');
345
- return cleanPhone.length >= 7 && cleanPhone.length <= 15;
346
- };
347
397
  var handleSubmit = /*#__PURE__*/function () {
348
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
398
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
349
399
  var skipPhoneValidation,
350
400
  errors,
351
401
  value,
352
402
  isEmail,
353
403
  endpoint,
404
+ normalizedPhone,
354
405
  payload,
355
406
  _yield$apiCall,
356
407
  data,
@@ -374,16 +425,16 @@ var PowrLogin = function PowrLogin(_ref) {
374
425
  }
375
426
 
376
427
  // Registration: Only allow phone numbers
377
- if (!isLogin && !isValidPhone(value)) {
378
- errors.phoneOrEmail = 'Please enter a valid phone number for registration';
428
+ if (!isLogin && !registerPhoneValid) {
429
+ errors.phoneOrEmail = international ? 'Please enter a valid phone number' : 'Please enter a valid mobile number';
379
430
  }
380
431
 
381
432
  // Login: Allow both phone and email
382
433
  if (isLogin) {
383
434
  if (isEmail && !isValidEmail(value)) {
384
435
  errors.phoneOrEmail = 'Please enter a valid email address';
385
- } else if (!isEmail && !isValidPhone(value)) {
386
- errors.phoneOrEmail = 'Please enter a valid phone number';
436
+ } else if (!isEmail && !(0, _phone.isValidPhone)(value, resolvedDefaultCountry)) {
437
+ errors.phoneOrEmail = 'Please enter a valid phone number (include country code, e.g. +1…) or email';
387
438
  }
388
439
  }
389
440
  if (!formData.password.trim()) {
@@ -413,12 +464,13 @@ var PowrLogin = function PowrLogin(_ref) {
413
464
  case 1:
414
465
  _context4.p = 1;
415
466
  endpoint = isLogin ? "/auth/login" : "/auth/register";
467
+ normalizedPhone = isLogin ? isEmail ? value : (0, _phone.normalizePhone)(value, resolvedDefaultCountry) : registerPhoneE164 || (0, _phone.normalizePhone)(value, phoneCountry);
416
468
  payload = isLogin ? {
417
- phoneOrEmail: formData.phoneOrEmail,
469
+ phoneOrEmail: isEmail ? value : normalizedPhone,
418
470
  password: formData.password
419
471
  } : {
420
472
  fullName: formData.fullName,
421
- phoneOrEmail: formData.phoneOrEmail,
473
+ phoneOrEmail: normalizedPhone,
422
474
  password: formData.password
423
475
  };
424
476
  _context4.n = 2;
@@ -445,7 +497,15 @@ var PowrLogin = function PowrLogin(_ref) {
445
497
  }
446
498
  setPendingAuth({
447
499
  user: data.user,
448
- token: data.token
500
+ token: data.token,
501
+ refreshToken: data.refreshToken,
502
+ onTokenRefreshed: function onTokenRefreshed(newToken) {
503
+ setPendingAuth(function (prev) {
504
+ return prev ? _objectSpread(_objectSpread({}, prev), {}, {
505
+ token: newToken
506
+ }) : prev;
507
+ });
508
+ }
449
509
  });
450
510
  setAuthView('add-phone');
451
511
  setLoading(false);
@@ -504,7 +564,7 @@ var PowrLogin = function PowrLogin(_ref) {
504
564
  }, _callee4, null, [[1, 8, 9, 10]]);
505
565
  }));
506
566
  return function handleSubmit(_x3) {
507
- return _ref5.apply(this, arguments);
567
+ return _ref6.apply(this, arguments);
508
568
  };
509
569
  }();
510
570
  var toggleMode = function toggleMode() {
@@ -522,6 +582,9 @@ var PowrLogin = function PowrLogin(_ref) {
522
582
  setAuthView('form');
523
583
  setPendingAuth(null);
524
584
  setTermsAccepted(false);
585
+ setPhoneCountry(resolvedDefaultCountry);
586
+ setRegisterPhoneValid(false);
587
+ setRegisterPhoneE164('');
525
588
  setFormData({
526
589
  phoneOrEmail: '',
527
590
  password: '',
@@ -529,12 +592,14 @@ var PowrLogin = function PowrLogin(_ref) {
529
592
  fullName: ''
530
593
  });
531
594
  };
532
- var handleAddPhoneComplete = function handleAddPhoneComplete(updatedUser) {
595
+ var handleAddPhoneComplete = function handleAddPhoneComplete(updatedUser, sessionToken) {
533
596
  if (!pendingAuth) return;
597
+ var token = sessionToken || pendingAuth.token;
534
598
  var payload = {
535
599
  success: true,
536
600
  user: updatedUser,
537
- token: pendingAuth.token
601
+ token: token,
602
+ refreshToken: pendingAuth.refreshToken
538
603
  };
539
604
  setAuthView('form');
540
605
  setPendingAuth(null);
@@ -548,8 +613,19 @@ var PowrLogin = function PowrLogin(_ref) {
548
613
  setError('');
549
614
  setSuccess('');
550
615
  };
616
+ var handleAddPhoneSessionExpired = function handleAddPhoneSessionExpired() {
617
+ setAuthView('form');
618
+ setPendingAuth(null);
619
+ setError('');
620
+ setSuccess('');
621
+ if (typeof onSessionExpired === 'function') {
622
+ onSessionExpired();
623
+ return;
624
+ }
625
+ setError('Your session timed out. Sign in again to add your phone number.');
626
+ };
551
627
  var handleGetOtp = /*#__PURE__*/function () {
552
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
628
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
553
629
  var _yield$apiCall2, data, ok, _t6;
554
630
  return _regenerator().w(function (_context5) {
555
631
  while (1) switch (_context5.p = _context5.n) {
@@ -601,7 +677,7 @@ var PowrLogin = function PowrLogin(_ref) {
601
677
  }, _callee5, null, [[2, 4, 5, 6]]);
602
678
  }));
603
679
  return function handleGetOtp() {
604
- return _ref6.apply(this, arguments);
680
+ return _ref7.apply(this, arguments);
605
681
  };
606
682
  }();
607
683
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -639,7 +715,13 @@ var PowrLogin = function PowrLogin(_ref) {
639
715
  appName: appName,
640
716
  onComplete: handleAddPhoneComplete,
641
717
  onBack: handleAddPhoneBack,
642
- requirePhoneVerification: requirePhoneVerification
718
+ onSessionExpired: handleAddPhoneSessionExpired,
719
+ refreshToken: pendingAuth.refreshToken,
720
+ requirePhoneVerification: requirePhoneVerification,
721
+ defaultCountry: resolvedDefaultCountry,
722
+ defaultCountryCode: defaultCountryCode,
723
+ international: international,
724
+ allowedCountries: allowedCountries
643
725
  }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("form", {
644
726
  onSubmit: handleSubmit,
645
727
  style: styles.form
@@ -664,23 +746,31 @@ var PowrLogin = function PowrLogin(_ref) {
664
746
  }, /*#__PURE__*/_react["default"].createElement("label", {
665
747
  htmlFor: "phoneOrEmail",
666
748
  style: styles.label
667
- }, isLogin ? 'Phone or Email' : 'Phone Number'), /*#__PURE__*/_react["default"].createElement("input", {
749
+ }, isLogin ? 'Phone or Email' : 'Phone Number'), !isLogin ? /*#__PURE__*/_react["default"].createElement(_PhoneInput["default"], {
750
+ value: formData.phoneOrEmail,
751
+ country: phoneCountry,
752
+ onChange: handleRegisterPhoneChange,
753
+ international: international,
754
+ allowedCountries: allowedCountries,
755
+ defaultCountry: resolvedDefaultCountry,
756
+ inputStyle: _objectSpread({}, fieldErrors.phoneOrEmail ? styles.inputError : {})
757
+ }) : /*#__PURE__*/_react["default"].createElement("input", {
668
758
  type: "text",
669
759
  id: "phoneOrEmail",
670
760
  name: "phoneOrEmail",
671
761
  value: formData.phoneOrEmail,
672
- onChange: handleInputChange,
762
+ onChange: handlePhoneOrEmailChange,
673
763
  style: _objectSpread(_objectSpread({}, styles.input), fieldErrors.phoneOrEmail ? styles.inputError : {}),
674
- placeholder: isLogin ? "Enter your phone or email" : "Enter your phone number",
764
+ placeholder: "Phone (+country code) or email",
675
765
  required: true
676
766
  }), fieldErrors.phoneOrEmail && /*#__PURE__*/_react["default"].createElement("div", {
677
767
  style: styles.fieldError
678
768
  }, fieldErrors.phoneOrEmail), !isLogin && requirePhoneVerification && /*#__PURE__*/_react["default"].createElement("div", {
679
769
  style: styles.helpText
680
- }, "Registration requires phone verification for security"), !isLogin && requirePhoneVerification && isValidPhone(formData.phoneOrEmail) && !isPhoneVerified && /*#__PURE__*/_react["default"].createElement("button", {
770
+ }, "Registration requires phone verification for security"), !isLogin && requirePhoneVerification && registerPhoneValid && !isPhoneVerified && /*#__PURE__*/_react["default"].createElement("button", {
681
771
  type: "button",
682
772
  onClick: function onClick() {
683
- return sendFirebaseOtp(formatPhone(formData.phoneOrEmail));
773
+ return sendFirebaseOtp((0, _phone.formatPhoneForSms)(formData.phoneOrEmail, phoneCountry));
684
774
  },
685
775
  style: _objectSpread(_objectSpread({}, styles.otpButton), {}, {
686
776
  marginTop: '8px'
@@ -964,6 +1054,28 @@ var styles = {
964
1054
  outline: 'none',
965
1055
  height: '48px'
966
1056
  },
1057
+ phoneRow: {
1058
+ display: 'flex',
1059
+ gap: '8px',
1060
+ alignItems: 'stretch',
1061
+ width: '100%'
1062
+ },
1063
+ phonePrefix: {
1064
+ display: 'flex',
1065
+ alignItems: 'center',
1066
+ padding: '0 14px',
1067
+ background: '#fff7ed',
1068
+ color: '#7c2d12',
1069
+ border: '2px solid #ffedd5',
1070
+ borderRadius: '8px',
1071
+ fontWeight: '700',
1072
+ fontSize: '16px',
1073
+ whiteSpace: 'nowrap'
1074
+ },
1075
+ phoneInput: {
1076
+ flex: 1,
1077
+ minWidth: 0
1078
+ },
967
1079
  inputFocus: {
968
1080
  borderColor: '#667eea',
969
1081
  boxShadow: '0 0 0 3px rgba(102, 126, 234, 0.1)'
@@ -0,0 +1,159 @@
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 _phone = require("../utils/phone");
10
+ var _libphonenumberJs = require("libphonenumber-js");
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 _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
12
+ 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; }
13
+ 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; }
14
+ 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; }
15
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
16
+ 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); }
17
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
18
+ 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."); }
19
+ 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; } }
20
+ 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; }
21
+ 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; } }
22
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
23
+ var PhoneInput = function PhoneInput(_ref) {
24
+ var _ref$value = _ref.value,
25
+ value = _ref$value === void 0 ? '' : _ref$value,
26
+ countryProp = _ref.country,
27
+ onChange = _ref.onChange,
28
+ onCountryChange = _ref.onCountryChange,
29
+ _ref$international = _ref.international,
30
+ international = _ref$international === void 0 ? false : _ref$international,
31
+ _ref$allowedCountries = _ref.allowedCountries,
32
+ allowedCountries = _ref$allowedCountries === void 0 ? null : _ref$allowedCountries,
33
+ defaultCountry = _ref.defaultCountry,
34
+ defaultCountryCode = _ref.defaultCountryCode,
35
+ _ref$disabled = _ref.disabled,
36
+ disabled = _ref$disabled === void 0 ? false : _ref$disabled,
37
+ _ref$placeholder = _ref.placeholder,
38
+ placeholder = _ref$placeholder === void 0 ? 'Phone number' : _ref$placeholder,
39
+ _ref$inputStyle = _ref.inputStyle,
40
+ inputStyle = _ref$inputStyle === void 0 ? {} : _ref$inputStyle,
41
+ _ref$selectStyle = _ref.selectStyle,
42
+ selectStyle = _ref$selectStyle === void 0 ? {} : _ref$selectStyle,
43
+ _ref$rowStyle = _ref.rowStyle,
44
+ rowStyle = _ref$rowStyle === void 0 ? {} : _ref$rowStyle;
45
+ var initialCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
46
+ var _useState = (0, _react.useState)(countryProp || initialCountry),
47
+ _useState2 = _slicedToArray(_useState, 2),
48
+ country = _useState2[0],
49
+ setCountry = _useState2[1];
50
+ var _useState3 = (0, _react.useState)(value),
51
+ _useState4 = _slicedToArray(_useState3, 2),
52
+ localNumber = _useState4[0],
53
+ setLocalNumber = _useState4[1];
54
+ var countryOptions = (0, _react.useMemo)(function () {
55
+ return (0, _phone.getCountryOptions)(allowedCountries);
56
+ }, [allowedCountries]);
57
+ (0, _react.useEffect)(function () {
58
+ if (countryProp && countryProp !== country) {
59
+ setCountry(countryProp);
60
+ }
61
+ }, [countryProp]);
62
+ (0, _react.useEffect)(function () {
63
+ if (value !== localNumber) {
64
+ setLocalNumber(value);
65
+ }
66
+ }, [value]);
67
+ var callingCode = (0, _libphonenumberJs.getCountryCallingCode)(country);
68
+ var emitChange = function emitChange(nextCountry, nextLocal) {
69
+ var e164 = (0, _phone.buildPhoneFromParts)(nextLocal, nextCountry);
70
+ var valid = (0, _phone.isValidPhone)(nextLocal, nextCountry) || (0, _phone.isValidPhone)(e164, nextCountry);
71
+ if (typeof onChange === 'function') {
72
+ onChange({
73
+ country: nextCountry,
74
+ localNumber: nextLocal,
75
+ e164: e164,
76
+ isValid: valid,
77
+ callingCode: (0, _libphonenumberJs.getCountryCallingCode)(nextCountry)
78
+ });
79
+ }
80
+ };
81
+ var handleCountryChange = function handleCountryChange(e) {
82
+ var nextCountry = e.target.value;
83
+ setCountry(nextCountry);
84
+ if (typeof onCountryChange === 'function') onCountryChange(nextCountry);
85
+ emitChange(nextCountry, localNumber);
86
+ };
87
+ var handleLocalChange = function handleLocalChange(e) {
88
+ var raw = e.target.value || '';
89
+ var nextLocal = international ? raw.replace(/[^\d\s-]/g, '').slice(0, 15) : raw.replace(/\D/g, '').slice(0, 15);
90
+ setLocalNumber(nextLocal);
91
+ emitChange(country, nextLocal);
92
+ };
93
+ return /*#__PURE__*/_react["default"].createElement("div", {
94
+ style: _objectSpread(_objectSpread({}, styles.row), rowStyle)
95
+ }, international ? /*#__PURE__*/_react["default"].createElement("select", {
96
+ value: country,
97
+ onChange: handleCountryChange,
98
+ disabled: disabled,
99
+ style: _objectSpread(_objectSpread({}, styles.select), selectStyle),
100
+ "aria-label": "Country code"
101
+ }, countryOptions.map(function (opt) {
102
+ return /*#__PURE__*/_react["default"].createElement("option", {
103
+ key: opt.code,
104
+ value: opt.code
105
+ }, opt.label);
106
+ })) : /*#__PURE__*/_react["default"].createElement("div", {
107
+ style: styles.prefix
108
+ }, "+", callingCode), /*#__PURE__*/_react["default"].createElement("input", {
109
+ type: "tel",
110
+ value: localNumber,
111
+ onChange: handleLocalChange,
112
+ placeholder: placeholder,
113
+ disabled: disabled,
114
+ style: _objectSpread(_objectSpread({}, styles.input), inputStyle),
115
+ autoComplete: "tel-national"
116
+ }));
117
+ };
118
+ var styles = {
119
+ row: {
120
+ display: 'flex',
121
+ gap: 8,
122
+ alignItems: 'stretch',
123
+ width: '100%'
124
+ },
125
+ prefix: {
126
+ display: 'flex',
127
+ alignItems: 'center',
128
+ padding: '0 14px',
129
+ background: '#fff7ed',
130
+ color: '#7c2d12',
131
+ border: '2px solid #ffedd5',
132
+ borderRadius: 8,
133
+ fontWeight: 700,
134
+ fontSize: 16,
135
+ whiteSpace: 'nowrap'
136
+ },
137
+ select: {
138
+ minWidth: 110,
139
+ maxWidth: 140,
140
+ padding: '10px 8px',
141
+ border: '2px solid #e5e7eb',
142
+ borderRadius: 8,
143
+ fontSize: 14,
144
+ background: '#fff',
145
+ boxSizing: 'border-box'
146
+ },
147
+ input: {
148
+ flex: 1,
149
+ minWidth: 0,
150
+ padding: '12px 14px',
151
+ border: '2px solid #e5e7eb',
152
+ borderRadius: 8,
153
+ fontSize: 16,
154
+ boxSizing: 'border-box',
155
+ outline: 'none',
156
+ height: 48
157
+ }
158
+ };
159
+ var _default = exports["default"] = PhoneInput;
package/dist/index.js CHANGED
@@ -9,12 +9,36 @@ Object.defineProperty(exports, "AddPhonePanel", {
9
9
  return _onboarding.AddPhonePanel;
10
10
  }
11
11
  });
12
+ Object.defineProperty(exports, "DEFAULT_COUNTRY", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _phone.DEFAULT_COUNTRY;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "DEFAULT_COUNTRY_CODE", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _phone.DEFAULT_COUNTRY_CODE;
22
+ }
23
+ });
12
24
  Object.defineProperty(exports, "OnboardingShell", {
13
25
  enumerable: true,
14
26
  get: function get() {
15
27
  return _onboarding.OnboardingShell;
16
28
  }
17
29
  });
30
+ Object.defineProperty(exports, "PRIORITY_COUNTRIES", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _phone.PRIORITY_COUNTRIES;
34
+ }
35
+ });
36
+ Object.defineProperty(exports, "PhoneInput", {
37
+ enumerable: true,
38
+ get: function get() {
39
+ return _PhoneInput["default"];
40
+ }
41
+ });
18
42
  Object.defineProperty(exports, "PowrBaseActivities", {
19
43
  enumerable: true,
20
44
  get: function get() {
@@ -141,12 +165,24 @@ Object.defineProperty(exports, "PowrTable", {
141
165
  return _table["default"];
142
166
  }
143
167
  });
168
+ Object.defineProperty(exports, "SESSION_MESSAGES", {
169
+ enumerable: true,
170
+ get: function get() {
171
+ return _sessionMessages.SESSION_MESSAGES;
172
+ }
173
+ });
144
174
  Object.defineProperty(exports, "addPhoneStep", {
145
175
  enumerable: true,
146
176
  get: function get() {
147
177
  return _onboarding.addPhoneStep;
148
178
  }
149
179
  });
180
+ Object.defineProperty(exports, "buildPhoneFromParts", {
181
+ enumerable: true,
182
+ get: function get() {
183
+ return _phone.buildPhoneFromParts;
184
+ }
185
+ });
150
186
  Object.defineProperty(exports, "defineAppStep", {
151
187
  enumerable: true,
152
188
  get: function get() {
@@ -165,6 +201,36 @@ Object.defineProperty(exports, "evaluateSteps", {
165
201
  return _onboarding.evaluateSteps;
166
202
  }
167
203
  });
204
+ Object.defineProperty(exports, "formatPhoneForSms", {
205
+ enumerable: true,
206
+ get: function get() {
207
+ return _phone.formatPhoneForSms;
208
+ }
209
+ });
210
+ Object.defineProperty(exports, "getCountryOptions", {
211
+ enumerable: true,
212
+ get: function get() {
213
+ return _phone.getCountryOptions;
214
+ }
215
+ });
216
+ Object.defineProperty(exports, "getFriendlyAuthError", {
217
+ enumerable: true,
218
+ get: function get() {
219
+ return _sessionMessages.getFriendlyAuthError;
220
+ }
221
+ });
222
+ Object.defineProperty(exports, "getLocalPhoneNumber", {
223
+ enumerable: true,
224
+ get: function get() {
225
+ return _phone.getLocalPhoneNumber;
226
+ }
227
+ });
228
+ Object.defineProperty(exports, "getPhoneLookupVariants", {
229
+ enumerable: true,
230
+ get: function get() {
231
+ return _phone.getPhoneLookupVariants;
232
+ }
233
+ });
168
234
  Object.defineProperty(exports, "getUserId", {
169
235
  enumerable: true,
170
236
  get: function get() {
@@ -177,6 +243,24 @@ Object.defineProperty(exports, "hasValidPhone", {
177
243
  return _onboarding.hasValidPhone;
178
244
  }
179
245
  });
246
+ Object.defineProperty(exports, "isAuthSessionError", {
247
+ enumerable: true,
248
+ get: function get() {
249
+ return _jwt.isAuthSessionError;
250
+ }
251
+ });
252
+ Object.defineProperty(exports, "isJwtExpired", {
253
+ enumerable: true,
254
+ get: function get() {
255
+ return _jwt.isJwtExpired;
256
+ }
257
+ });
258
+ Object.defineProperty(exports, "isValidPhone", {
259
+ enumerable: true,
260
+ get: function get() {
261
+ return _phone.isValidPhone;
262
+ }
263
+ });
180
264
  Object.defineProperty(exports, "mergePowrSteps", {
181
265
  enumerable: true,
182
266
  get: function get() {
@@ -195,12 +279,30 @@ Object.defineProperty(exports, "needsPhone", {
195
279
  return _onboarding.needsPhone;
196
280
  }
197
281
  });
282
+ Object.defineProperty(exports, "normalizePhone", {
283
+ enumerable: true,
284
+ get: function get() {
285
+ return _phone.normalizePhone;
286
+ }
287
+ });
288
+ Object.defineProperty(exports, "parsePhone", {
289
+ enumerable: true,
290
+ get: function get() {
291
+ return _phone.parsePhone;
292
+ }
293
+ });
198
294
  Object.defineProperty(exports, "profileNameStep", {
199
295
  enumerable: true,
200
296
  get: function get() {
201
297
  return _onboarding.profileNameStep;
202
298
  }
203
299
  });
300
+ Object.defineProperty(exports, "resolveCountry", {
301
+ enumerable: true,
302
+ get: function get() {
303
+ return _phone.resolveCountry;
304
+ }
305
+ });
204
306
  var _table = _interopRequireDefault(require("./table"));
205
307
  var _swiper = _interopRequireDefault(require("./swiper"));
206
308
  var _reviews = _interopRequireDefault(require("./reviews"));
@@ -221,5 +323,9 @@ var _admin = _interopRequireDefault(require("./admin"));
221
323
  var _tools = _interopRequireDefault(require("./tools"));
222
324
  var _tasks = _interopRequireDefault(require("./tasks"));
223
325
  var _powrVerify = _interopRequireDefault(require("./powrVerify"));
326
+ var _PhoneInput = _interopRequireDefault(require("./components/PhoneInput"));
224
327
  var _onboarding = require("./onboarding");
328
+ var _phone = require("./utils/phone");
329
+ var _jwt = require("./utils/jwt");
330
+ var _sessionMessages = require("./utils/sessionMessages");
225
331
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }