powr-sdk-web 5.7.1 → 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.
@@ -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,16 @@ 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
+ var resolvedDefaultCountry = (0, _phone.resolveCountry)(defaultCountry, defaultCountryCode);
47
58
  var _useState = (0, _react.useState)(function () {
48
59
  switch (mode) {
49
60
  case 'login':
@@ -95,13 +106,6 @@ var PowrLogin = function PowrLogin(_ref) {
95
106
  _useState16 = _slicedToArray(_useState15, 2),
96
107
  showTooltip = _useState16[0],
97
108
  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
109
  var _useState17 = (0, _react.useState)(false),
106
110
  _useState18 = _slicedToArray(_useState17, 2),
107
111
  showOtpOption = _useState18[0],
@@ -146,6 +150,18 @@ var PowrLogin = function PowrLogin(_ref) {
146
150
  _useState38 = _slicedToArray(_useState37, 2),
147
151
  termsAccepted = _useState38[0],
148
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];
149
165
  var shouldShowToggle = mode === 'toggle';
150
166
  var handleInputChange = /*#__PURE__*/function () {
151
167
  var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(e) {
@@ -172,8 +188,45 @@ var PowrLogin = function PowrLogin(_ref) {
172
188
  return _ref2.apply(this, arguments);
173
189
  };
174
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
+ };
175
228
  var sendFirebaseOtp = /*#__PURE__*/function () {
176
- var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
229
+ var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(phone) {
177
230
  var appVerifier, confirmationResult, _t, _t2;
178
231
  return _regenerator().w(function (_context2) {
179
232
  while (1) switch (_context2.p = _context2.n) {
@@ -268,11 +321,11 @@ var PowrLogin = function PowrLogin(_ref) {
268
321
  }, _callee2, null, [[2, 4], [1, 7, 8, 9]]);
269
322
  }));
270
323
  return function sendFirebaseOtp(_x2) {
271
- return _ref3.apply(this, arguments);
324
+ return _ref4.apply(this, arguments);
272
325
  };
273
326
  }();
274
327
  var verifyFirebaseOtp = /*#__PURE__*/function () {
275
- var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
328
+ var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
276
329
  var result, _t3, _t4;
277
330
  return _regenerator().w(function (_context3) {
278
331
  while (1) switch (_context3.p = _context3.n) {
@@ -331,7 +384,7 @@ var PowrLogin = function PowrLogin(_ref) {
331
384
  }, _callee3, null, [[4, 6], [1, 8, 9, 10]]);
332
385
  }));
333
386
  return function verifyFirebaseOtp() {
334
- return _ref4.apply(this, arguments);
387
+ return _ref5.apply(this, arguments);
335
388
  };
336
389
  }();
337
390
 
@@ -340,17 +393,14 @@ var PowrLogin = function PowrLogin(_ref) {
340
393
  var emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
341
394
  return emailRegex.test(email);
342
395
  };
343
- var isValidPhone = function isValidPhone(phone) {
344
- var cleanPhone = phone.replace(/\D/g, '');
345
- return cleanPhone.length >= 7 && cleanPhone.length <= 15;
346
- };
347
396
  var handleSubmit = /*#__PURE__*/function () {
348
- var _ref5 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
397
+ var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(e) {
349
398
  var skipPhoneValidation,
350
399
  errors,
351
400
  value,
352
401
  isEmail,
353
402
  endpoint,
403
+ normalizedPhone,
354
404
  payload,
355
405
  _yield$apiCall,
356
406
  data,
@@ -374,16 +424,16 @@ var PowrLogin = function PowrLogin(_ref) {
374
424
  }
375
425
 
376
426
  // Registration: Only allow phone numbers
377
- if (!isLogin && !isValidPhone(value)) {
378
- 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';
379
429
  }
380
430
 
381
431
  // Login: Allow both phone and email
382
432
  if (isLogin) {
383
433
  if (isEmail && !isValidEmail(value)) {
384
434
  errors.phoneOrEmail = 'Please enter a valid email address';
385
- } else if (!isEmail && !isValidPhone(value)) {
386
- 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';
387
437
  }
388
438
  }
389
439
  if (!formData.password.trim()) {
@@ -413,12 +463,13 @@ var PowrLogin = function PowrLogin(_ref) {
413
463
  case 1:
414
464
  _context4.p = 1;
415
465
  endpoint = isLogin ? "/auth/login" : "/auth/register";
466
+ normalizedPhone = isLogin ? isEmail ? value : (0, _phone.normalizePhone)(value, resolvedDefaultCountry) : registerPhoneE164 || (0, _phone.normalizePhone)(value, phoneCountry);
416
467
  payload = isLogin ? {
417
- phoneOrEmail: formData.phoneOrEmail,
468
+ phoneOrEmail: isEmail ? value : normalizedPhone,
418
469
  password: formData.password
419
470
  } : {
420
471
  fullName: formData.fullName,
421
- phoneOrEmail: formData.phoneOrEmail,
472
+ phoneOrEmail: normalizedPhone,
422
473
  password: formData.password
423
474
  };
424
475
  _context4.n = 2;
@@ -504,7 +555,7 @@ var PowrLogin = function PowrLogin(_ref) {
504
555
  }, _callee4, null, [[1, 8, 9, 10]]);
505
556
  }));
506
557
  return function handleSubmit(_x3) {
507
- return _ref5.apply(this, arguments);
558
+ return _ref6.apply(this, arguments);
508
559
  };
509
560
  }();
510
561
  var toggleMode = function toggleMode() {
@@ -522,6 +573,9 @@ var PowrLogin = function PowrLogin(_ref) {
522
573
  setAuthView('form');
523
574
  setPendingAuth(null);
524
575
  setTermsAccepted(false);
576
+ setPhoneCountry(resolvedDefaultCountry);
577
+ setRegisterPhoneValid(false);
578
+ setRegisterPhoneE164('');
525
579
  setFormData({
526
580
  phoneOrEmail: '',
527
581
  password: '',
@@ -549,7 +603,7 @@ var PowrLogin = function PowrLogin(_ref) {
549
603
  setSuccess('');
550
604
  };
551
605
  var handleGetOtp = /*#__PURE__*/function () {
552
- var _ref6 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
606
+ var _ref7 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5() {
553
607
  var _yield$apiCall2, data, ok, _t6;
554
608
  return _regenerator().w(function (_context5) {
555
609
  while (1) switch (_context5.p = _context5.n) {
@@ -601,7 +655,7 @@ var PowrLogin = function PowrLogin(_ref) {
601
655
  }, _callee5, null, [[2, 4, 5, 6]]);
602
656
  }));
603
657
  return function handleGetOtp() {
604
- return _ref6.apply(this, arguments);
658
+ return _ref7.apply(this, arguments);
605
659
  };
606
660
  }();
607
661
  return /*#__PURE__*/_react["default"].createElement("div", {
@@ -639,7 +693,11 @@ var PowrLogin = function PowrLogin(_ref) {
639
693
  appName: appName,
640
694
  onComplete: handleAddPhoneComplete,
641
695
  onBack: handleAddPhoneBack,
642
- requirePhoneVerification: requirePhoneVerification
696
+ requirePhoneVerification: requirePhoneVerification,
697
+ defaultCountry: resolvedDefaultCountry,
698
+ defaultCountryCode: defaultCountryCode,
699
+ international: international,
700
+ allowedCountries: allowedCountries
643
701
  }) : /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement("form", {
644
702
  onSubmit: handleSubmit,
645
703
  style: styles.form
@@ -664,23 +722,31 @@ var PowrLogin = function PowrLogin(_ref) {
664
722
  }, /*#__PURE__*/_react["default"].createElement("label", {
665
723
  htmlFor: "phoneOrEmail",
666
724
  style: styles.label
667
- }, 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", {
668
734
  type: "text",
669
735
  id: "phoneOrEmail",
670
736
  name: "phoneOrEmail",
671
737
  value: formData.phoneOrEmail,
672
- onChange: handleInputChange,
738
+ onChange: handlePhoneOrEmailChange,
673
739
  style: _objectSpread(_objectSpread({}, styles.input), fieldErrors.phoneOrEmail ? styles.inputError : {}),
674
- placeholder: isLogin ? "Enter your phone or email" : "Enter your phone number",
740
+ placeholder: "Phone (+country code) or email",
675
741
  required: true
676
742
  }), fieldErrors.phoneOrEmail && /*#__PURE__*/_react["default"].createElement("div", {
677
743
  style: styles.fieldError
678
744
  }, fieldErrors.phoneOrEmail), !isLogin && requirePhoneVerification && /*#__PURE__*/_react["default"].createElement("div", {
679
745
  style: styles.helpText
680
- }, "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", {
681
747
  type: "button",
682
748
  onClick: function onClick() {
683
- return sendFirebaseOtp(formatPhone(formData.phoneOrEmail));
749
+ return sendFirebaseOtp((0, _phone.formatPhoneForSms)(formData.phoneOrEmail, phoneCountry));
684
750
  },
685
751
  style: _objectSpread(_objectSpread({}, styles.otpButton), {}, {
686
752
  marginTop: '8px'
@@ -964,6 +1030,28 @@ var styles = {
964
1030
  outline: 'none',
965
1031
  height: '48px'
966
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
+ },
967
1055
  inputFocus: {
968
1056
  borderColor: '#667eea',
969
1057
  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() {
@@ -147,6 +171,12 @@ Object.defineProperty(exports, "addPhoneStep", {
147
171
  return _onboarding.addPhoneStep;
148
172
  }
149
173
  });
174
+ Object.defineProperty(exports, "buildPhoneFromParts", {
175
+ enumerable: true,
176
+ get: function get() {
177
+ return _phone.buildPhoneFromParts;
178
+ }
179
+ });
150
180
  Object.defineProperty(exports, "defineAppStep", {
151
181
  enumerable: true,
152
182
  get: function get() {
@@ -165,6 +195,30 @@ Object.defineProperty(exports, "evaluateSteps", {
165
195
  return _onboarding.evaluateSteps;
166
196
  }
167
197
  });
198
+ Object.defineProperty(exports, "formatPhoneForSms", {
199
+ enumerable: true,
200
+ get: function get() {
201
+ return _phone.formatPhoneForSms;
202
+ }
203
+ });
204
+ Object.defineProperty(exports, "getCountryOptions", {
205
+ enumerable: true,
206
+ get: function get() {
207
+ return _phone.getCountryOptions;
208
+ }
209
+ });
210
+ Object.defineProperty(exports, "getLocalPhoneNumber", {
211
+ enumerable: true,
212
+ get: function get() {
213
+ return _phone.getLocalPhoneNumber;
214
+ }
215
+ });
216
+ Object.defineProperty(exports, "getPhoneLookupVariants", {
217
+ enumerable: true,
218
+ get: function get() {
219
+ return _phone.getPhoneLookupVariants;
220
+ }
221
+ });
168
222
  Object.defineProperty(exports, "getUserId", {
169
223
  enumerable: true,
170
224
  get: function get() {
@@ -177,6 +231,12 @@ Object.defineProperty(exports, "hasValidPhone", {
177
231
  return _onboarding.hasValidPhone;
178
232
  }
179
233
  });
234
+ Object.defineProperty(exports, "isValidPhone", {
235
+ enumerable: true,
236
+ get: function get() {
237
+ return _phone.isValidPhone;
238
+ }
239
+ });
180
240
  Object.defineProperty(exports, "mergePowrSteps", {
181
241
  enumerable: true,
182
242
  get: function get() {
@@ -195,12 +255,30 @@ Object.defineProperty(exports, "needsPhone", {
195
255
  return _onboarding.needsPhone;
196
256
  }
197
257
  });
258
+ Object.defineProperty(exports, "normalizePhone", {
259
+ enumerable: true,
260
+ get: function get() {
261
+ return _phone.normalizePhone;
262
+ }
263
+ });
264
+ Object.defineProperty(exports, "parsePhone", {
265
+ enumerable: true,
266
+ get: function get() {
267
+ return _phone.parsePhone;
268
+ }
269
+ });
198
270
  Object.defineProperty(exports, "profileNameStep", {
199
271
  enumerable: true,
200
272
  get: function get() {
201
273
  return _onboarding.profileNameStep;
202
274
  }
203
275
  });
276
+ Object.defineProperty(exports, "resolveCountry", {
277
+ enumerable: true,
278
+ get: function get() {
279
+ return _phone.resolveCountry;
280
+ }
281
+ });
204
282
  var _table = _interopRequireDefault(require("./table"));
205
283
  var _swiper = _interopRequireDefault(require("./swiper"));
206
284
  var _reviews = _interopRequireDefault(require("./reviews"));
@@ -221,5 +299,7 @@ var _admin = _interopRequireDefault(require("./admin"));
221
299
  var _tools = _interopRequireDefault(require("./tools"));
222
300
  var _tasks = _interopRequireDefault(require("./tasks"));
223
301
  var _powrVerify = _interopRequireDefault(require("./powrVerify"));
302
+ var _PhoneInput = _interopRequireDefault(require("./components/PhoneInput"));
224
303
  var _onboarding = require("./onboarding");
304
+ var _phone = require("./utils/phone");
225
305
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }