UNPKG

@particle-network/connectkit

Version:
4 lines 99 kB
{ "version": 3, "sources": ["../../src/components/divider/styles.ts", "../../src/components/divider/index.tsx", "../../src/components/emailLogin/styles.ts", "../../src/components/emailLogin/index.tsx", "../../src/components/passkeyButtons/index.tsx", "../../src/types/country.ts", "../../src/utils/allCountries.ts", "../../src/utils/assertString.ts", "../../src/utils/isMobilePhone.ts", "../../src/components/dropdown/index.tsx", "../../src/components/phoneLogin/styles.ts", "../../src/components/phoneLogin/index.tsx", "../../src/pages/signup/styles.ts", "../../src/pages/signup/index.tsx"], "sourcesContent": ["import { motion } from 'framer-motion';\nimport { styled } from 'styled-components';\n\nexport const DividerContainer = styled(motion.div)`\n width: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 16px;\n color: var(--pcm-body-color-tertiary);\n font-weight: 400;\n font-size: 12px;\n margin: 20px 0;\n pointer-events: none;\n user-select: none;\n white-space: nowrap;\n\n &:before {\n content: '';\n transition: all 200ms ease;\n height: 1px;\n width: 100%;\n background: var(--pcm-body-background-tertiary);\n }\n\n &:after {\n content: '';\n transition: all 200ms ease;\n height: 1px;\n width: 100%;\n background: var(--pcm-body-background-tertiary);\n }\n`;\n", "import type { CSSProperties, ReactNode } from 'react';\nimport { DividerContainer } from './styles';\n\nconst Divider = ({ children, style }: { children: ReactNode; style?: CSSProperties | undefined }) => {\n return <DividerContainer style={style}>{children}</DividerContainer>;\n};\n\nexport default Divider;\n", "import { styled } from 'styled-components';\n\ninterface EmailStyleEmailInputProps {\n error?: string;\n}\n\ninterface StyleConnectArrowIconProps {\n disabled?: boolean;\n $canClick: boolean;\n $isError?: boolean;\n}\n\nexport const EmailLoginContainer = styled.div`\n width: 100%;\n`;\n\nexport const StyleEmailInputWrapper = styled.div`\n position: relative;\n`;\n\nexport const StyleConnectArrowIcon = styled.div<StyleConnectArrowIconProps>`\n position: absolute;\n top: 50%;\n transform: translateY(-50%);\n right: 12px;\n cursor: pointer;\n border-radius: 100%;\n\n ${({ $canClick, $isError }) => {\n if ($canClick) {\n return `\n .icon-0x7ff{ \n path {\n fill: #fff !important;\n }\n circle {\n fill: ${$isError ? 'var(--pcm-error-color) !important' : 'var(--pcm-accent-color) !important'} ;\n }\n }\n \n `;\n } else {\n return `\n cursor: default;\n .icon-0x7ff{\n path {\n fill: #fff !important;\n }\n circle {\n fill: var(--pcm-body-background-secondary) !important;\n }}\n `;\n }\n }}\n\n ${({ disabled, $canClick }) =>\n disabled &&\n $canClick &&\n `\n cursor: default;\n opacity: 0.5;\n `}\n`;\n\nexport const StyleEmailInput = styled.input<EmailStyleEmailInputProps>`\n border-radius: var(--pcm-rounded-lg);\n height: 47px;\n padding: 0 12px;\n width: 100%;\n font-size: 15px;\n font-weight: normal;\n background-color: ${({ error }) => (error ? 'var(--pcm-error-background)' : 'var(--pcm-body-background-tertiary)')};\n color: ${({ error }) => (error ? 'var(--pcm-error-color)' : 'var(--pcm-body-color)')};\n border: none;\n &::placeholder {\n color: var(--pcm-body-color-tertiary);\n }\n`;\n\nexport const StyleInputError = styled.div`\n color: var(--pcm-error-color);\n font-size: 12px;\n display: flex;\n padding-left: 14px;\n margin-top: 14px;\n align-items: center;\n line-height: 16px;\n div:nth-child(1) {\n min-width: 20px;\n }\n`;\n", "import { useMemo, useRef, useState } from 'react';\nimport ConnectArrowIcon from '../../assets/icons/ConnectArrowIcon';\nimport WarningIcon from '../../assets/icons/WarningIcon';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport useLocales from '../../hooks/useLocales';\nimport { useRouter } from '../../hooks/useRouter';\nimport { useWalletConnector } from '../../hooks/useWalletConnectors';\nimport { RoutePath } from '../../pages';\nimport { ConnectorType, EmailRegExp } from '../../types';\nimport Button from '../button';\nimport CircleSpinner from '../circleSpinner';\nimport {\n EmailLoginContainer,\n StyleConnectArrowIcon,\n StyleEmailInput,\n StyleEmailInputWrapper,\n StyleInputError,\n} from './styles';\n\nconst EmailLogin = () => {\n const { navigate } = useRouter();\n const inputRef = useRef<HTMLInputElement>(null);\n const locales = useLocales();\n const { appearance } = useAppearance();\n\n const [emailError, setEmailError] = useState<string>('');\n const [emailValue, setEmailValue] = useState<string>('');\n const [isFocus, setIsFocus] = useState<boolean>(false);\n\n const [loading, setLoading] = useState<boolean>(false);\n\n const walletConnector = useWalletConnector('particleAuth');\n\n const sendCode = async () => {\n try {\n const emailValue = inputRef.current?.value?.trim();\n if (emailValue) {\n // 1. \u6821\u9A8C\u90AE\u7BB1\u683C\u5F0F\n if (!emailValue) {\n throw new Error(locales.enterEmail);\n } else if (!EmailRegExp.test(emailValue)) {\n throw new Error(locales.emailFormatError);\n }\n setLoading(true);\n // 2. \u53D1\u9001\u9A8C\u8BC1\u7801\n await walletConnector?.auth.getConnectCaptcha({ email: emailValue });\n // 3. \u8DF3\u8F6C\u5230\u9A8C\u8BC1\u7801\u8F93\u5165\u9875\u9762\n navigate(RoutePath.Captcha, {\n value: emailValue,\n type: ConnectorType.Email,\n });\n }\n } catch (error: any) {\n console.log('error', error);\n let message = error?.extra?.[0] || error.message || (typeof error === 'string' ? error : locales.networkError);\n if (message.includes('Network Error')) {\n message = locales.networkError;\n }\n setEmailError(message);\n }\n setLoading(false);\n };\n\n const buttonDisabled = useMemo(() => {\n return !emailValue || !EmailRegExp.test(emailValue) || loading;\n }, [emailValue, loading]);\n\n /**\n * hide continue button\n */\n const hideContinueButton = useMemo(() => {\n return appearance?.hideContinueButton;\n }, [appearance?.hideContinueButton]);\n\n return (\n <EmailLoginContainer>\n <StyleEmailInputWrapper>\n <StyleEmailInput\n placeholder={locales.email}\n ref={inputRef}\n error={emailError}\n onChange={(e) => {\n setEmailError('');\n setEmailValue((e.target.value || '').trim());\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n if (!loading && EmailRegExp.test(emailValue)) {\n sendCode();\n }\n }\n }}\n onFocus={() => {\n setIsFocus(true);\n }}\n onBlur={() => {\n setIsFocus(false);\n }}\n />\n {hideContinueButton && (\n <StyleConnectArrowIcon\n onClick={() => {\n if (!loading && EmailRegExp.test(emailValue)) {\n sendCode();\n }\n }}\n disabled={buttonDisabled}\n $canClick={emailValue?.length >= 1}\n $isError={!!emailError}\n >\n <CircleSpinner\n logo={\n <div className='icon-0x7ff'>\n <ConnectArrowIcon />\n </div>\n }\n connecting={loading}\n inset={0}\n width={30}\n height={30}\n />\n </StyleConnectArrowIcon>\n )}\n </StyleEmailInputWrapper>\n {emailError && (\n <StyleInputError>\n <div>\n <WarningIcon />\n </div>\n <div>{emailError}</div>\n </StyleInputError>\n )}\n\n {!hideContinueButton && (\n <Button style={{ marginTop: 16 }} onClick={sendCode} loading={loading} disabled={buttonDisabled}>\n {locales.continue}\n </Button>\n )}\n </EmailLoginContainer>\n );\n};\n\nexport default EmailLogin;\n", "import { useAppearance } from '../../hooks/useAppearance';\nimport { useConnectWithWallet } from '../../hooks/useConnectWithWallet';\nimport useLocales from '../../hooks/useLocales';\nimport { useRouter } from '../../hooks/useRouter';\nimport { useWalletProps } from '../../hooks/useWalletsProps';\nimport { RoutePath } from '../../pages';\nimport { isFirstRegisterPasskey, setFirstRegisterPasskey } from '../../utils';\nimport Button from '../button';\n\nconst PasskeyButtons = () => {\n const { navigate } = useRouter();\n const locales = useLocales();\n const { appearance } = useAppearance();\n const connectWallet = useConnectWithWallet();\n const wallet = useWalletProps('passkeySmartWallet');\n\n const login = () => {\n navigate(RoutePath.LoginPasskey);\n };\n\n if (appearance.collapsePasskeyButton) {\n return (\n <Button style={{ marginTop: 16 }} onClick={login}>\n {locales.continueWithSmartWalletPasskey}\n </Button>\n );\n }\n\n return (\n <div>\n <Button\n style={{ marginTop: 16 }}\n onClick={() => {\n if (isFirstRegisterPasskey()) {\n navigate(RoutePath.PasskeySetup);\n setFirstRegisterPasskey();\n } else if (wallet) {\n connectWallet(wallet, {\n passkeyParams: {\n isRegistering: true,\n },\n });\n }\n }}\n >\n {locales.createNewPasskey}\n </Button>\n <Button\n style={{\n marginTop: 16,\n }}\n color='secondary'\n onClick={() => {\n connectWallet(wallet!, {\n passkeyParams: {\n isRegistering: false,\n },\n });\n }}\n >\n {locales.loginWithPasskey}\n </Button>\n </div>\n );\n};\n\nexport default PasskeyButtons;\n", "const _countryCodes = [\n 'AC',\n 'AD',\n 'AE',\n 'AF',\n 'AG',\n 'AI',\n 'AL',\n 'AM',\n 'AO',\n 'AR',\n 'AS',\n 'AT',\n 'AU',\n 'AW',\n 'AX',\n 'AZ',\n 'BA',\n 'BB',\n 'BD',\n 'BE',\n 'BF',\n 'BG',\n 'BH',\n 'BI',\n 'BJ',\n 'BL',\n 'BM',\n 'BN',\n 'BO',\n 'BQ',\n 'BR',\n 'BS',\n 'BT',\n 'BW',\n 'BY',\n 'BZ',\n 'CA',\n 'CC',\n 'CD',\n 'CF',\n 'CG',\n 'CH',\n 'CI',\n 'CK',\n 'CL',\n 'CM',\n 'CN',\n 'CO',\n 'CR',\n 'CU',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CZ',\n 'DE',\n 'DJ',\n 'DK',\n 'DM',\n 'DO',\n 'DZ',\n 'EC',\n 'EE',\n 'EG',\n 'EH',\n 'ER',\n 'ES',\n 'ET',\n 'FI',\n 'FJ',\n 'FK',\n 'FM',\n 'FO',\n 'FR',\n 'GA',\n 'GB',\n 'GD',\n 'GE',\n 'GF',\n 'GG',\n 'GH',\n 'GI',\n 'GL',\n 'GM',\n 'GN',\n 'GP',\n 'GQ',\n 'GR',\n 'GT',\n 'GU',\n 'GW',\n 'GY',\n 'HK',\n 'HN',\n 'HR',\n 'HT',\n 'HU',\n 'ID',\n 'IE',\n 'IL',\n 'IM',\n 'IN',\n 'IO',\n 'IQ',\n 'IR',\n 'IS',\n 'IT',\n 'JE',\n 'JM',\n 'JO',\n 'JP',\n 'KE',\n 'KG',\n 'KH',\n 'KI',\n 'KM',\n 'KN',\n 'KP',\n 'KR',\n 'KW',\n 'KY',\n 'KZ',\n 'LA',\n 'LB',\n 'LC',\n 'LI',\n 'LK',\n 'LR',\n 'LS',\n 'LT',\n 'LU',\n 'LV',\n 'LY',\n 'MA',\n 'MC',\n 'MD',\n 'ME',\n 'MF',\n 'MG',\n 'MH',\n 'MK',\n 'ML',\n 'MM',\n 'MN',\n 'MO',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MT',\n 'MU',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NC',\n 'NE',\n 'NF',\n 'NG',\n 'NI',\n 'NL',\n 'NO',\n 'NP',\n 'NR',\n 'NU',\n 'NZ',\n 'OM',\n 'PA',\n 'PE',\n 'PF',\n 'PG',\n 'PH',\n 'PK',\n 'PL',\n 'PM',\n 'PR',\n 'PS',\n 'PT',\n 'PW',\n 'PY',\n 'QA',\n 'RE',\n 'RO',\n 'RS',\n 'RU',\n 'RW',\n 'SA',\n 'SB',\n 'SC',\n 'SD',\n 'SE',\n 'SG',\n 'SH',\n 'SI',\n 'SJ',\n 'SK',\n 'SL',\n 'SM',\n 'SN',\n 'SO',\n 'SR',\n 'SS',\n 'ST',\n 'SV',\n 'SX',\n 'SY',\n 'SZ',\n 'TA',\n 'TC',\n 'TD',\n 'TG',\n 'TH',\n 'TJ',\n 'TK',\n 'TL',\n 'TM',\n 'TN',\n 'TO',\n 'TR',\n 'TT',\n 'TV',\n 'TW',\n 'TZ',\n 'UA',\n 'UG',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VC',\n 'VE',\n 'VG',\n 'VI',\n 'VN',\n 'VU',\n 'WF',\n 'WS',\n 'XK',\n 'YE',\n 'YT',\n 'ZA',\n 'ZM',\n 'ZW',\n] as const;\n\nexport type CountryCode = (typeof _countryCodes)[number];\n\nexport const countryCodes: CountryCode[] = _countryCodes as unknown as CountryCode[];\n", "export const defaultCountriesData = [\n ['Afghanistan (\u202B\u0627\u0641\u063A\u0627\u0646\u0633\u062A\u0627\u0646\u202C\u200E)', 'af', '93'],\n ['Albania (Shqip\u00EBri)', 'al', '355'],\n ['Algeria (\u202B\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u202C\u200E)', 'dz', '213'],\n ['American Samoa', 'as', '1684'],\n ['Andorra', 'ad', '376'],\n ['Angola', 'ao', '244'],\n ['Anguilla', 'ai', '1264'],\n ['Antigua and Barbuda', 'ag', '1268'],\n ['Argentina', 'ar', '54'],\n ['Armenia (\u0540\u0561\u0575\u0561\u057D\u057F\u0561\u0576)', 'am', '374'],\n ['Aruba', 'aw', '297'],\n ['Australia', 'au', '61'],\n ['Austria (\u00D6sterreich)', 'at', '43'],\n ['Azerbaijan (Az\u0259rbaycan)', 'az', '994'],\n ['Bahamas', 'bs', '1242'],\n ['Bahrain (\u202B\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u202C\u200E)', 'bh', '973'],\n ['Bangladesh (\u09AC\u09BE\u0982\u09B2\u09BE\u09A6\u09C7\u09B6)', 'bd', '880'],\n ['Barbados', 'bb', '1246'],\n ['Belarus (\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C)', 'by', '375'],\n ['Belgium (Belgi\u00EB)', 'be', '32'],\n ['Belize', 'bz', '501'],\n ['Benin (B\u00E9nin)', 'bj', '229'],\n ['Bermuda', 'bm', '1441'],\n ['Bhutan (\u0F60\u0F56\u0FB2\u0F74\u0F42)', 'bt', '975'],\n ['Bolivia', 'bo', '591'],\n ['Bosnia and Herzegovina', 'ba', '387'],\n ['Botswana', 'bw', '267'],\n ['Brazil (Brasil)', 'br', '55'],\n ['British Indian Ocean Territory', 'io', '246'],\n ['British Virgin Islands', 'vg', '1284'],\n ['Brunei', 'bn', '673'],\n ['Bulgaria (\u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F)', 'bg', '359'],\n ['Burkina Faso', 'bf', '226'],\n ['Burundi (Uburundi)', 'bi', '257'],\n ['Cambodia (\u1780\u1798\u17D2\u1796\u17BB\u1787\u17B6)', 'kh', '855'],\n ['Cameroon (Cameroun)', 'cm', '237'],\n ['Canada', 'ca', '1'],\n ['Cape Verde (Kabu Verdi)', 'cv', '238'],\n ['Caribbean Netherlands', 'bq', '599'],\n ['Cayman Islands', 'ky', '1345'],\n ['Central African Republic', 'cf', '236'],\n ['Chad (Tchad)', 'td', '235'],\n ['Chile', 'cl', '56'],\n ['China (\u4E2D\u56FD)', 'cn', '86'],\n ['Christmas Island', 'cx', '61'],\n ['Cocos (Keeling) Islands', 'cc', '61'],\n ['Colombia', 'co', '57'],\n ['Comoros (\u202B\u062C\u0632\u0631 \u0627\u0644\u0642\u0645\u0631\u202C\u200E)', 'km', '269'],\n ['Congo (DRC)', 'cd', '243'],\n ['Congo (Republic)', 'cg', '242'],\n ['Cook Islands', 'ck', '682'],\n ['Costa Rica', 'cr', '506'],\n ['C\u00F4te d\u2019Ivoire', 'ci', '225'],\n ['Croatia (Hrvatska)', 'hr', '385'],\n ['Cuba', 'cu', '53'],\n ['Cura\u00E7ao', 'cw', '599'],\n ['Cyprus (\u039A\u03CD\u03C0\u03C1\u03BF\u03C2)', 'cy', '357'],\n ['Czech Republic (\u010Cesk\u00E1 republika)', 'cz', '420'],\n ['Denmark (Danmark)', 'dk', '45'],\n ['Djibouti', 'dj', '253'],\n ['Dominica', 'dm', '1767'],\n ['Dominican Republic', 'do', '1'],\n ['Ecuador', 'ec', '593'],\n ['Egypt (\u202B\u0645\u0635\u0631\u202C\u200E)', 'eg', '20'],\n ['El Salvador', 'sv', '503'],\n ['Equatorial Guinea', 'gq', '240'],\n ['Eritrea', 'er', '291'],\n ['Estonia (Eesti)', 'ee', '372'],\n ['Ethiopia', 'et', '251'],\n ['Falkland Islands (Islas Malvinas)', 'fk', '500'],\n ['Faroe Islands (F\u00F8royar)', 'fo', '298'],\n ['Fiji', 'fj', '679'],\n ['Finland (Suomi)', 'fi', '358'],\n ['France', 'fr', '33'],\n ['French Guiana', 'gf', '594'],\n ['French Polynesia', 'pf', '689'],\n ['Gabon', 'ga', '241'],\n ['Gambia', 'gm', '220'],\n ['Georgia (\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD)', 'ge', '995'],\n ['Germany (Deutschland)', 'de', '49'],\n ['Ghana (Gaana)', 'gh', '233'],\n ['Gibraltar', 'gi', '350'],\n ['Greece (\u0395\u03BB\u03BB\u03AC\u03B4\u03B1)', 'gr', '30'],\n ['Greenland (Kalaallit Nunaat)', 'gl', '299'],\n ['Grenada', 'gd', '1473'],\n ['Guadeloupe', 'gp', '590'],\n ['Guam', 'gu', '1671'],\n ['Guatemala', 'gt', '502'],\n ['Guernsey', 'gg', '44'],\n ['Guinea (Guin\u00E9e)', 'gn', '224'],\n ['Guinea-Bissau (Guin\u00E9 Bissau)', 'gw', '245'],\n ['Guyana', 'gy', '592'],\n ['Haiti', 'ht', '509'],\n ['Honduras', 'hn', '504'],\n ['Hong Kong (\u9999\u6E2F)', 'hk', '852'],\n ['Hungary (Magyarorsz\u00E1g)', 'hu', '36'],\n ['Iceland (\u00CDsland)', 'is', '354'],\n ['India (\u092D\u093E\u0930\u0924)', 'in', '91'],\n ['Indonesia', 'id', '62'],\n ['Iran (\u202B\u0627\u06CC\u0631\u0627\u0646\u202C\u200E)', 'ir', '98'],\n ['Iraq (\u202B\u0627\u0644\u0639\u0631\u0627\u0642\u202C\u200E)', 'iq', '964'],\n ['Ireland', 'ie', '353'],\n ['Isle of Man', 'im', '44'],\n ['Israel (\u202B\u05D9\u05E9\u05E8\u05D0\u05DC\u202C\u200E)', 'il', '972'],\n ['Italy (Italia)', 'it', '39'],\n ['Jamaica', 'jm', '1876'],\n ['Japan (\u65E5\u672C)', 'jp', '81'],\n ['Jersey', 'je', '44'],\n ['Jordan (\u202B\u0627\u0644\u0623\u0631\u062F\u0646\u202C\u200E)', 'jo', '962'],\n ['Kazakhstan (\u041A\u0430\u0437\u0430\u0445\u0441\u0442\u0430\u043D)', 'kz', '7'],\n ['Kenya', 'ke', '254'],\n ['Kiribati', 'ki', '686'],\n ['Kosovo', 'xk', '383'],\n ['Kuwait (\u202B\u0627\u0644\u0643\u0648\u064A\u062A\u202C\u200E)', 'kw', '965'],\n ['Kyrgyzstan (\u041A\u044B\u0440\u0433\u044B\u0437\u0441\u0442\u0430\u043D)', 'kg', '996'],\n ['Laos (\u0EA5\u0EB2\u0EA7)', 'la', '856'],\n ['Latvia (Latvija)', 'lv', '371'],\n ['Lebanon (\u202B\u0644\u0628\u0646\u0627\u0646\u202C\u200E)', 'lb', '961'],\n ['Lesotho', 'ls', '266'],\n ['Liberia', 'lr', '231'],\n ['Libya (\u202B\u0644\u064A\u0628\u064A\u0627\u202C\u200E)', 'ly', '218'],\n ['Liechtenstein', 'li', '423'],\n ['Lithuania (Lietuva)', 'lt', '370'],\n ['Luxembourg', 'lu', '352'],\n ['Macau (\u6FB3\u9580)', 'mo', '853'],\n ['Macedonia (FYROM) (\u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430)', 'mk', '389'],\n ['Madagascar (Madagasikara)', 'mg', '261'],\n ['Malawi', 'mw', '265'],\n ['Malaysia', 'my', '60'],\n ['Maldives', 'mv', '960'],\n ['Mali', 'ml', '223'],\n ['Malta', 'mt', '356'],\n ['Marshall Islands', 'mh', '692'],\n ['Martinique', 'mq', '596'],\n ['Mauritania (\u202B\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627\u202C\u200E)', 'mr', '222'],\n ['Mauritius (Moris)', 'mu', '230'],\n ['Mayotte', 'yt', '262'],\n ['Mexico (M\u00E9xico)', 'mx', '52'],\n ['Micronesia', 'fm', '691'],\n ['Moldova (Republica Moldova)', 'md', '373'],\n ['Monaco', 'mc', '377'],\n ['Mongolia (\u041C\u043E\u043D\u0433\u043E\u043B)', 'mn', '976'],\n ['Montenegro (Crna Gora)', 'me', '382'],\n ['Montserrat', 'ms', '1664'],\n ['Morocco (\u202B\u0627\u0644\u0645\u063A\u0631\u0628\u202C\u200E)', 'ma', '212'],\n ['Mozambique (Mo\u00E7ambique)', 'mz', '258'],\n ['Myanmar (Burma) (\u1019\u103C\u1014\u103A\u1019\u102C)', 'mm', '95'],\n ['Namibia (Namibi\u00EB)', 'na', '264'],\n ['Nauru', 'nr', '674'],\n ['Nepal (\u0928\u0947\u092A\u093E\u0932)', 'np', '977'],\n ['Netherlands (Nederland)', 'nl', '31'],\n ['New Caledonia (Nouvelle-Cal\u00E9donie)', 'nc', '687'],\n ['New Zealand', 'nz', '64'],\n ['Nicaragua', 'ni', '505'],\n ['Niger (Nijar)', 'ne', '227'],\n ['Nigeria', 'ng', '234'],\n ['Niue', 'nu', '683'],\n ['Norfolk Island', 'nf', '672'],\n ['North Korea (\uC870\uC120 \uBBFC\uC8FC\uC8FC\uC758 \uC778\uBBFC \uACF5\uD654\uAD6D)', 'kp', '850'],\n ['Northern Mariana Islands', 'mp', '1670'],\n ['Norway (Norge)', 'no', '47'],\n ['Oman (\u202B\u0639\u064F\u0645\u0627\u0646\u202C\u200E)', 'om', '968'],\n ['Pakistan (\u202B\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u202C\u200E)', 'pk', '92'],\n ['Palau', 'pw', '680'],\n ['Palestine (\u202B\u0641\u0644\u0633\u0637\u064A\u0646\u202C\u200E)', 'ps', '970'],\n ['Panama (Panam\u00E1)', 'pa', '507'],\n ['Papua New Guinea', 'pg', '675'],\n ['Paraguay', 'py', '595'],\n ['Peru (Per\u00FA)', 'pe', '51'],\n ['Philippines', 'ph', '63'],\n ['Poland (Polska)', 'pl', '48'],\n ['Portugal', 'pt', '351'],\n ['Puerto Rico', 'pr', '1'],\n ['Qatar (\u202B\u0642\u0637\u0631\u202C\u200E)', 'qa', '974'],\n ['R\u00E9union (La R\u00E9union)', 're', '262'],\n ['Romania (Rom\u00E2nia)', 'ro', '40'],\n ['Russia (\u0420\u043E\u0441\u0441\u0438\u044F)', 'ru', '7'],\n ['Rwanda', 'rw', '250'],\n ['Saint Barth\u00E9lemy (Saint-Barth\u00E9lemy)', 'bl', '590'],\n ['Saint Helena', 'sh', '290'],\n ['Saint Kitts and Nevis', 'kn', '1869'],\n ['Saint Lucia', 'lc', '1758'],\n ['Saint Martin', 'mf', '590'],\n ['Saint Pierre and Miquelon', 'pm', '508'],\n ['Saint Vincent and the Grenadines', 'vc', '1784'],\n ['Samoa', 'ws', '685'],\n ['San Marino', 'sm', '378'],\n ['S\u00E3o Tom\u00E9 and Pr\u00EDncipe', 'st', '239'],\n ['Saudi Arabia (\u202B\u0627\u0644\u0645\u0645\u0644\u0643\u0629 \u0627\u0644\u0639\u0631\u0628\u064A\u0629 \u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u202C\u200E)', 'sa', '966'],\n ['Senegal (S\u00E9n\u00E9gal)', 'sn', '221'],\n ['Serbia (\u0421\u0440\u0431\u0438\u0458\u0430)', 'rs', '381'],\n ['Seychelles', 'sc', '248'],\n ['Sierra Leone', 'sl', '232'],\n ['Singapore', 'sg', '65'],\n ['Sint Maarten', 'sx', '1721'],\n ['Slovakia (Slovensko)', 'sk', '421'],\n ['Slovenia (Slovenija)', 'si', '386'],\n ['Solomon Islands', 'sb', '677'],\n ['Somalia (Soomaaliya)', 'so', '252'],\n ['South Africa', 'za', '27'],\n ['South Korea (\uB300\uD55C\uBBFC\uAD6D)', 'kr', '82'],\n ['South Sudan (\u202B\u062C\u0646\u0648\u0628 \u0627\u0644\u0633\u0648\u062F\u0627\u0646\u202C\u200E)', 'ss', '211'],\n ['Spain (Espa\u00F1a)', 'es', '34'],\n ['Sri Lanka (\u0DC1\u0DCA\u200D\u0DBB\u0DD3 \u0DBD\u0D82\u0D9A\u0DCF\u0DC0)', 'lk', '94'],\n ['Sudan (\u202B\u0627\u0644\u0633\u0648\u062F\u0627\u0646\u202C\u200E)', 'sd', '249'],\n ['Suriname', 'sr', '597'],\n ['Svalbard and Jan Mayen', 'sj', '47'],\n ['Swaziland', 'sz', '268'],\n ['Sweden (Sverige)', 'se', '46'],\n ['Switzerland (Schweiz)', 'ch', '41'],\n ['Syria (\u202B\u0633\u0648\u0631\u064A\u0627\u202C\u200E)', 'sy', '963'],\n ['Taiwan (\u53F0\u7063)', 'tw', '886'],\n ['Tajikistan', 'tj', '992'],\n ['Tanzania', 'tz', '255'],\n ['Thailand (\u0E44\u0E17\u0E22)', 'th', '66'],\n ['Timor-Leste', 'tl', '670'],\n ['Togo', 'tg', '228'],\n ['Tokelau', 'tk', '690'],\n ['Tonga', 'to', '676'],\n ['Trinidad and Tobago', 'tt', '1868'],\n ['Tunisia (\u202B\u062A\u0648\u0646\u0633\u202C\u200E)', 'tn', '216'],\n ['Turkey (T\u00FCrkiye)', 'tr', '90'],\n ['Turkmenistan', 'tm', '993'],\n ['Turks and Caicos Islands', 'tc', '1649'],\n ['Tuvalu', 'tv', '688'],\n ['U.S. Virgin Islands', 'vi', '1340'],\n ['Uganda', 'ug', '256'],\n ['Ukraine (\u0423\u043A\u0440\u0430\u0457\u043D\u0430)', 'ua', '380'],\n ['United Arab Emirates', 'ae', '971'],\n ['United Kingdom', 'gb', '44'],\n ['United States', 'us', '1'],\n ['Uruguay', 'uy', '598'],\n ['Uzbekistan (O\u02BBzbekiston)', 'uz', '998'],\n ['Vanuatu', 'vu', '678'],\n ['Vatican City (Citt\u00E0 del Vaticano)', 'va', '39'],\n ['Venezuela', 've', '58'],\n ['Vietnam (Vi\u1EC7t Nam)', 'vn', '84'],\n ['Wallis and Futuna', 'wf', '681'],\n ['Western Sahara (\u202B\u0627\u0644\u0635\u062D\u0631\u0627\u0621 \u0627\u0644\u063A\u0631\u0628\u064A\u0629\u202C\u200E)', 'eh', '212'],\n ['Yemen (\u202B\u0627\u0644\u064A\u0645\u0646\u202C\u200E)', 'ye', '967'],\n ['Zambia', 'zm', '260'],\n ['Zimbabwe', 'zw', '263'],\n ['\u00C5land Islands', 'ax', '358'],\n];\n\nexport function getCurrentCountry() {\n const language = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n const locales = language?.split('-') || [];\n const region = locales.length > 1 ? locales[1] : locales[0];\n let currentCountry;\n if (region && region.length > 0) {\n currentCountry = defaultCountriesData.find((item: any) => item[1].toUpperCase() === region);\n }\n return currentCountry;\n}\n", "export default function assertString(input) {\n const isString = typeof input === 'string' || input instanceof String;\n\n if (!isString) {\n let invalidType: any = typeof input;\n if (input === null) invalidType = 'null';\n else if (invalidType === 'object') invalidType = input.constructor.name;\n\n throw new TypeError(`Expected a string but received a ${invalidType}`);\n }\n}\n", "/* eslint-disable */\nimport assertString from './assertString';\n\nconst phones = {\n 'am-AM': /^(\\+?374|0)(33|4[134]|55|77|88|9[13-689])\\d{6}$/,\n 'ar-AE': /^((\\+?971)|0)?5[024568]\\d{7}$/,\n 'ar-BH': /^(\\+?973)?(3|6)\\d{7}$/,\n 'ar-DZ': /^(\\+?213|0)(5|6|7)\\d{8}$/,\n 'ar-LB': /^(\\+?961)?((3|81)\\d{6}|7\\d{7})$/,\n 'ar-EG': /^((\\+?20)|0)?1[0125]\\d{8}$/,\n 'ar-IQ': /^(\\+?964|0)?7[0-9]\\d{8}$/,\n 'ar-JO': /^(\\+?962|0)?7[789]\\d{7}$/,\n 'ar-KW': /^(\\+?965)([569]\\d{7}|41\\d{6})$/,\n 'ar-LY': /^((\\+?218)|0)?(9[1-6]\\d{7}|[1-8]\\d{7,9})$/,\n 'ar-MA': /^(?:(?:\\+|00)212|0)[5-7]\\d{8}$/,\n 'ar-OM': /^((\\+|00)968)?(9[1-9])\\d{6}$/,\n 'ar-PS': /^(\\+?970|0)5[6|9](\\d{7})$/,\n 'ar-SA': /^(!?(\\+?966)|0)?5\\d{8}$/,\n 'ar-SD': /^((\\+?249)|0)?(9[012369]|1[012])\\d{7}$/,\n 'ar-SY': /^(!?(\\+?963)|0)?9\\d{8}$/,\n 'ar-TN': /^(\\+?216)?[2459]\\d{7}$/,\n 'az-AZ': /^(\\+994|0)(10|5[015]|7[07]|99)\\d{7}$/,\n 'bs-BA': /^((((\\+|00)3876)|06))((([0-3]|[5-6])\\d{6})|(4\\d{7}))$/,\n 'be-BY': /^(\\+?375)?(24|25|29|33|44)\\d{7}$/,\n 'bg-BG': /^(\\+?359|0)?8[789]\\d{7}$/,\n 'bn-BD': /^(\\+?880|0)1[13456789][0-9]{8}$/,\n 'ca-AD': /^(\\+376)?[346]\\d{5}$/,\n 'cs-CZ': /^(\\+?420)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n 'da-DK': /^(\\+?45)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n 'de-DE': /^((\\+49|0)1)(5[0-25-9]\\d|6([23]|0\\d?)|7([0-57-9]|6\\d))\\d{7,9}$/,\n 'de-AT': /^(\\+43|0)\\d{1,4}\\d{3,12}$/,\n 'de-CH': /^(\\+41|0)([1-9])\\d{1,9}$/,\n 'de-LU': /^(\\+352)?((6\\d1)\\d{6})$/,\n 'dv-MV': /^(\\+?960)?(7[2-9]|9[1-9])\\d{5}$/,\n 'el-GR': /^(\\+?30|0)?6(8[5-9]|9(?![26])[0-9])\\d{7}$/,\n 'el-CY': /^(\\+?357?)?(9(9|6)\\d{6})$/,\n 'en-AI': /^(\\+?1|0)264(?:2(35|92)|4(?:6[1-2]|76|97)|5(?:3[6-9]|8[1-4])|7(?:2(4|9)|72))\\d{4}$/,\n 'en-AU': /^(\\+?61|0)4\\d{8}$/,\n 'en-AG': /^(?:\\+1|1)268(?:464|7(?:1[3-9]|[28]\\d|3[0246]|64|7[0-689]))\\d{4}$/,\n 'en-BM': /^(\\+?1)?441(((3|7)\\d{6}$)|(5[0-3][0-9]\\d{4}$)|(59\\d{5}$))/,\n 'en-BS': /^(\\+?1[-\\s]?|0)?\\(?242\\)?[-\\s]?\\d{3}[-\\s]?\\d{4}$/,\n 'en-GB': /^(\\+?44|0)7[1-9]\\d{8}$/,\n 'en-GG': /^(\\+?44|0)1481\\d{6}$/,\n 'en-GH': /^(\\+233|0)(20|50|24|54|27|57|26|56|23|28|55|59)\\d{7}$/,\n 'en-GY': /^(\\+592|0)6\\d{6}$/,\n 'en-HK': /^(\\+?852[-\\s]?)?[456789]\\d{3}[-\\s]?\\d{4}$/,\n 'en-MO': /^(\\+?853[-\\s]?)?[6]\\d{3}[-\\s]?\\d{4}$/,\n 'en-IE': /^(\\+?353|0)8[356789]\\d{7}$/,\n 'en-IN': /^(\\+?91|0)?[6789]\\d{9}$/,\n 'en-JM': /^(\\+?876)?\\d{7}$/,\n 'en-KE': /^(\\+?254|0)(7|1)\\d{8}$/,\n 'fr-CF': /^(\\+?236| ?)(70|75|77|72|21|22)\\d{6}$/,\n 'en-SS': /^(\\+?211|0)(9[1257])\\d{7}$/,\n 'en-KI': /^((\\+686|686)?)?( )?((6|7)(2|3|8)[0-9]{6})$/,\n 'en-KN': /^(?:\\+1|1)869(?:46\\d|48[89]|55[6-8]|66\\d|76[02-7])\\d{4}$/,\n 'en-LS': /^(\\+?266)(22|28|57|58|59|27|52)\\d{6}$/,\n 'en-MT': /^(\\+?356|0)?(99|79|77|21|27|22|25)[0-9]{6}$/,\n 'en-MU': /^(\\+?230|0)?\\d{8}$/,\n 'en-MW': /^(\\+?265|0)(((77|88|31|99|98|21)\\d{7})|(((111)|1)\\d{6})|(32000\\d{4}))$/,\n 'en-NA': /^(\\+?264|0)(6|8)\\d{7}$/,\n 'en-NG': /^(\\+?234|0)?[789]\\d{9}$/,\n 'en-NZ': /^(\\+?64|0)[28]\\d{7,9}$/,\n 'en-PG': /^(\\+?675|0)?(7\\d|8[18])\\d{6}$/,\n 'en-PK': /^((00|\\+)?92|0)3[0-6]\\d{8}$/,\n 'en-PH': /^(09|\\+639)\\d{9}$/,\n 'en-RW': /^(\\+?250|0)?[7]\\d{8}$/,\n 'en-SG': /^(\\+65)?[3689]\\d{7}$/,\n 'en-SL': /^(\\+?232|0)\\d{8}$/,\n 'en-TZ': /^(\\+?255|0)?[67]\\d{8}$/,\n 'en-UG': /^(\\+?256|0)?[7]\\d{8}$/,\n 'en-US': /^((\\+1|1)?( |-)?)?(\\([2-9][0-9]{2}\\)|[2-9][0-9]{2})( |-)?([2-9][0-9]{2}( |-)?[0-9]{4})$/,\n 'en-ZA': /^(\\+?27|0)\\d{9}$/,\n 'en-ZM': /^(\\+?26)?09[567]\\d{7}$/,\n 'en-ZW': /^(\\+263)[0-9]{9}$/,\n 'en-BW': /^(\\+?267)?(7[1-8]{1})\\d{6}$/,\n 'es-AR': /^\\+?549(11|[2368]\\d)\\d{8}$/,\n 'es-BO': /^(\\+?591)?(6|7)\\d{7}$/,\n 'es-CO': /^(\\+?57)?3(0(0|1|2|4|5)|1\\d|2[0-4]|5(0|1))\\d{7}$/,\n 'es-CL': /^(\\+?56|0)[2-9]\\d{1}\\d{7}$/,\n 'es-CR': /^(\\+506)?[2-8]\\d{7}$/,\n 'es-CU': /^(\\+53|0053)?5\\d{7}$/,\n 'es-DO': /^(\\+?1)?8[024]9\\d{7}$/,\n 'es-HN': /^(\\+?504)?[9|8|3|2]\\d{7}$/,\n 'es-EC': /^(\\+?593|0)([2-7]|9[2-9])\\d{7}$/,\n 'es-ES': /^(\\+?34)?[6|7]\\d{8}$/,\n 'es-GT': /^(\\+?502)?[2|6|7]\\d{7}$/,\n 'es-PE': /^(\\+?51)?9\\d{8}$/,\n 'es-MX': /^(\\+?52)?(1|01)?\\d{10,11}$/,\n 'es-NI': /^(\\+?505)\\d{7,8}$/,\n 'es-PA': /^(\\+?507)\\d{7,8}$/,\n 'es-PY': /^(\\+?595|0)9[9876]\\d{7}$/,\n 'es-SV': /^(\\+?503)?[67]\\d{7}$/,\n 'es-UY': /^(\\+598|0)9[1-9][\\d]{6}$/,\n 'es-VE': /^(\\+?58)?(2|4)\\d{9}$/,\n 'et-EE': /^(\\+?372)?\\s?(5|8[1-4])\\s?([0-9]\\s?){6,7}$/,\n 'fa-IR': /^(\\+?98[\\-\\s]?|0)9[0-39]\\d[\\-\\s]?\\d{3}[\\-\\s]?\\d{4}$/,\n 'fi-FI': /^(\\+?358|0)\\s?(4[0-6]|50)\\s?(\\d\\s?){4,8}$/,\n 'fj-FJ': /^(\\+?679)?\\s?\\d{3}\\s?\\d{4}$/,\n 'fo-FO': /^(\\+?298)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n 'fr-BF': /^(\\+226|0)[67]\\d{7}$/,\n 'fr-BJ': /^(\\+229)\\d{8}$/,\n 'fr-CD': /^(\\+?243|0)?(8|9)\\d{8}$/,\n 'fr-CM': /^(\\+?237)6[0-9]{8}$/,\n 'fr-FR': /^(\\+?33|0)[67]\\d{8}$/,\n 'fr-GF': /^(\\+?594|0|00594)[67]\\d{8}$/,\n 'fr-GP': /^(\\+?590|0|00590)[67]\\d{8}$/,\n 'fr-MQ': /^(\\+?596|0|00596)[67]\\d{8}$/,\n 'fr-PF': /^(\\+?689)?8[789]\\d{6}$/,\n 'fr-RE': /^(\\+?262|0|00262)[67]\\d{8}$/,\n 'fr-WF': /^(\\+681)?\\d{6}$/,\n 'he-IL': /^(\\+972|0)([23489]|5[012345689]|77)[1-9]\\d{6}$/,\n 'hu-HU': /^(\\+?36|06)(20|30|31|50|70)\\d{7}$/,\n 'id-ID': /^(\\+?62|0)8(1[123456789]|2[1238]|3[1238]|5[12356789]|7[78]|9[56789]|8[123456789])([\\s?|\\d]{5,11})$/,\n 'ir-IR': /^(\\+98|0)?9\\d{9}$/,\n 'it-IT': /^(\\+?39)?\\s?3\\d{2} ?\\d{6,7}$/,\n 'it-SM': /^((\\+378)|(0549)|(\\+390549)|(\\+3780549))?6\\d{5,9}$/,\n 'ja-JP': /^(\\+81[ \\-]?(\\(0\\))?|0)[6789]0[ \\-]?\\d{4}[ \\-]?\\d{4}$/,\n 'ka-GE': /^(\\+?995)?(79\\d{7}|5\\d{8})$/,\n 'kk-KZ': /^(\\+?7|8)?7\\d{9}$/,\n 'kl-GL': /^(\\+?299)?\\s?\\d{2}\\s?\\d{2}\\s?\\d{2}$/,\n 'ko-KR': /^((\\+?82)[ \\-]?)?0?1([0|1|6|7|8|9]{1})[ \\-]?\\d{3,4}[ \\-]?\\d{4}$/,\n 'ky-KG': /^(\\+?7\\s?\\+?7|0)\\s?\\d{2}\\s?\\d{3}\\s?\\d{4}$/,\n 'lt-LT': /^(\\+370|8)\\d{8}$/,\n 'lv-LV': /^(\\+?371)2\\d{7}$/,\n 'mg-MG': /^((\\+?261|0)(2|3)\\d)?\\d{7}$/,\n 'mn-MN': /^(\\+|00|011)?976(77|81|88|91|94|95|96|99)\\d{6}$/,\n 'my-MM': /^(\\+?959|09|9)(2[5-7]|3[1-2]|4[0-5]|6[6-9]|7[5-9]|9[6-9])[0-9]{7}$/,\n 'ms-MY': /^(\\+?60|0)1(([0145](-|\\s)?\\d{7,8})|([236-9](-|\\s)?\\d{7}))$/,\n 'mz-MZ': /^(\\+?258)?8[234567]\\d{7}$/,\n 'nb-NO': /^(\\+?47)?[49]\\d{7}$/,\n 'ne-NP': /^(\\+?977)?9[78]\\d{8}$/,\n 'nl-BE': /^(\\+?32|0)4\\d{8}$/,\n 'nl-NL': /^(((\\+|00)?31\\(0\\))|((\\+|00)?31)|0)6{1}\\d{8}$/,\n 'nl-AW': /^(\\+)?297(56|59|64|73|74|99)\\d{5}$/,\n 'nn-NO': /^(\\+?47)?[49]\\d{7}$/,\n 'pl-PL': /^(\\+?48)? ?([5-8]\\d|45) ?\\d{3} ?\\d{2} ?\\d{2}$/,\n 'pt-BR':\n /^((\\+?55\\ ?[1-9]{2}\\ ?)|(\\+?55\\ ?\\([1-9]{2}\\)\\ ?)|(0[1-9]{2}\\ ?)|(\\([1-9]{2}\\)\\ ?)|([1-9]{2}\\ ?))((\\d{4}\\-?\\d{4})|(9[1-9]{1}\\d{3}\\-?\\d{4}))$/,\n 'pt-PT': /^(\\+?351)?9[1236]\\d{7}$/,\n 'pt-AO': /^(\\+244)\\d{9}$/,\n 'ro-MD': /^(\\+?373|0)((6(0|1|2|6|7|8|9))|(7(6|7|8|9)))\\d{6}$/,\n 'ro-RO': /^(\\+?40|0)\\s?7\\d{2}(\\/|\\s|\\.|-)?\\d{3}(\\s|\\.|-)?\\d{3}$/,\n 'ru-RU': /^(\\+?7|8)?9\\d{9}$/,\n 'si-LK': /^(?:0|94|\\+94)?(7(0|1|2|4|5|6|7|8)( |-)?)\\d{7}$/,\n 'sl-SI': /^(\\+386\\s?|0)(\\d{1}\\s?\\d{3}\\s?\\d{2}\\s?\\d{2}|\\d{2}\\s?\\d{3}\\s?\\d{3})$/,\n 'sk-SK': /^(\\+?421)? ?[1-9][0-9]{2} ?[0-9]{3} ?[0-9]{3}$/,\n 'so-SO': /^(\\+?252|0)((6[0-9])\\d{7}|(7[1-9])\\d{7})$/,\n 'sq-AL': /^(\\+355|0)6[789]\\d{6}$/,\n 'sr-RS': /^(\\+3816|06)[- \\d]{5,9}$/,\n 'sv-SE': /^(\\+?46|0)[\\s\\-]?7[\\s\\-]?[02369]([\\s\\-]?\\d){7}$/,\n 'tg-TJ': /^(\\+?992)?[5][5]\\d{7}$/,\n 'th-TH': /^(\\+66|66|0)\\d{9}$/,\n 'tr-TR': /^(\\+?90|0)?5\\d{9}$/,\n 'tk-TM': /^(\\+993|993|8)\\d{8}$/,\n 'uk-UA': /^(\\+?38)?0(50|6[36-8]|7[357]|9[1-9])\\d{7}$/,\n 'uz-UZ': /^(\\+?998)?(6[125-79]|7[1-69]|88|9\\d)\\d{7}$/,\n 'vi-VN': /^((\\+?84)|0)((3([2-9]))|(5([25689]))|(7([0|6-9]))|(8([1-9]))|(9([0-9])))([0-9]{7})$/,\n 'zh-CN': /^((\\+|00)86)?(1[3-9]|9[28])\\d{9}$/,\n 'zh-TW': /^(\\+?886\\-?|0)?9\\d{8}$/,\n 'dz-BT': /^(\\+?975|0)?(17|16|77|02)\\d{6}$/,\n 'ar-YE': /^(((\\+|00)9677|0?7)[0137]\\d{7}|((\\+|00)967|0)[1-7]\\d{6})$/,\n 'ar-EH': /^(\\+?212|0)[\\s\\-]?(5288|5289)[\\s\\-]?\\d{5}$/,\n 'fa-AF': /^(\\+93|0)?(2{1}[0-8]{1}|[3-5]{1}[0-4]{1})(\\d{7})$/,\n};\n/* eslint-enable max-len */\n\n// aliases\nphones['en-CA'] = phones['en-US'];\nphones['fr-CA'] = phones['en-CA'];\nphones['fr-BE'] = phones['nl-BE'];\nphones['zh-HK'] = phones['en-HK'];\nphones['zh-MO'] = phones['en-MO'];\nphones['ga-IE'] = phones['en-IE'];\nphones['fr-CH'] = phones['de-CH'];\nphones['it-CH'] = phones['fr-CH'];\n\nexport default function isMobilePhone(str, locale, options) {\n assertString(str);\n if (options && options.strictMode && !str.startsWith('+')) {\n return false;\n }\n if (Array.isArray(locale)) {\n return locale.some((key) => {\n // https://github.com/gotwarlost/istanbul/blob/master/ignoring-code-for-coverage.md#ignoring-code-for-coverage-purposes\n // istanbul ignore else\n if (phones.hasOwnProperty(key)) {\n const phone = phones[key];\n if (phone.test(str)) {\n return true;\n }\n }\n return false;\n });\n } else if (locale in phones) {\n return phones[locale].test(str);\n // alias falsey locale as 'any'\n } else if (!locale || locale === 'any') {\n for (const key in phones) {\n // istanbul ignore else\n if (phones.hasOwnProperty(key)) {\n const phone = phones[key];\n if (phone.test(str)) {\n return true;\n }\n }\n }\n return false;\n }\n throw new Error(`Invalid locale '${locale}'`);\n}\n\nexport const phoneLocales = Object.keys(phones);\n\nexport const validPhoneNumber = (locale, countryCode: string, phone: string, t: any) => {\n const locales = phoneLocales.filter((item) => item.split('-')[1]?.toLowerCase() === locale?.toLowerCase());\n\n const result = locales.some((item) => {\n const res = isMobilePhone(`+${countryCode}${phone}`, item, {\n strictMode: true,\n });\n return res;\n });\n if (!result) {\n throw new Error(t?.invalidOrIncorrectNumber || '');\n } else {\n return true;\n }\n};\n", "import type { ReactNode } from 'react';\nimport { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\ninterface DropdownProps {\n trigger: ReactNode;\n content: ReactNode;\n dropdownWidth: number;\n dropdownHeight: number;\n offsetX?: number;\n offsetY?: number;\n onChange?: (isOpen: boolean) => void;\n}\n\nconst Dropdown = forwardRef((props: DropdownProps, ref) => {\n const { trigger, content, dropdownWidth, dropdownHeight, offsetX = 0, offsetY = 0, onChange } = props;\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const triggerRef = useRef<HTMLDivElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const updateDropdownPosition = () => {\n if (triggerRef.current && dropdownRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n\n const viewportHeight = window.innerHeight;\n\n if (viewportHeight - rect.bottom < dropdownHeight) {\n dropdownRef.current.style.top = `${rect.top - dropdownHeight - offsetY}px`;\n } else {\n dropdownRef.current.style.top = `${rect.bottom + offsetY}px`;\n }\n dropdownRef.current.style.left = `${rect.left}px`;\n }\n };\n\n useEffect(() => {\n if (isOpen) {\n updateDropdownPosition();\n window.addEventListener('scroll', updateDropdownPosition, true);\n window.addEventListener('resize', updateDropdownPosition);\n document.addEventListener('mousedown', handleClickOutside);\n }\n\n return () => {\n window.removeEventListener('scroll', updateDropdownPosition, true);\n window.removeEventListener('resize', updateDropdownPosition);\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [isOpen, offsetX]);\n\n const toggleDropdown = () => {\n setIsOpen(!isOpen);\n onChange && onChange(!isOpen);\n };\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n dropdownRef.current &&\n !dropdownRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n toggleDropdown();\n }\n };\n\n useImperativeHandle(ref, () => ({\n toggleDropdown,\n }));\n\n return (\n <>\n <div ref={triggerRef} onClick={toggleDropdown} className='aaaaaaa'>\n {trigger}\n </div>\n {isOpen &&\n createPortal(\n <div\n ref={dropdownRef}\n style={{\n transform: 'translateX(-11px)',\n width: `${dropdownWidth}px`,\n height: `${dropdownHeight}px`,\n position: 'fixed',\n opacity: 1,\n zIndex: 99999999999999000,\n }}\n >\n {content}\n </div>,\n document.body\n )}\n </>\n );\n});\n\nexport default Dropdown;\n", "import { styled } from 'styled-components';\n\nexport const StylePhoneLoginContainer = styled.div`\n width: 100%;\n`;\n\ninterface PhoneStylePhoneInputProps {\n error?: string;\n $inputFocus: boolean;\n}\nexport const StylePhoneInputContainer = styled.div<PhoneStylePhoneInputProps>`\n border-radius: var(--pcm-rounded-lg);\n height: 47px;\n padding: 0;\n background-color: ${({ error }) => (error ? 'var(--pcm-error-background)' : 'var(--pcm-body-background-tertiary)')};\n width: 100%;\n font-size: 15px;\n font-weight: normal;\n display: flex;\n align-items: center;\n &::placeholder {\n color: var(--pcm-body-color-tertiary);\n }\n\n ${({ $inputFocus }) => {\n return $inputFocus ? 'outline: 1px solid var(--pcm-focus-color, var(--pcm-accent-color));' : '';\n }}\n`;\n\nexport const StylePhoneInputItemContainer = styled.div`\n display: flex;\n align-items: center;\n width: 100%;\n height: 100%;\n position: relative;\n padding: 0 12px;\n\n /* .phone-input {\n flex: 1;\n height: 100%;\n padding-left: 14px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n\n input {\n background-color: transparent;\n\n &:focus {\n outline: none;\n }\n }\n } */\n`;\n\ninterface PhoneStylePhoneLabelProps {\n error?: string;\n}\nexport const StylePhoneLabel = styled.label<PhoneStylePhoneLabelProps>`\n flex: 1;\n height: 100%;\n padding-left: 14px;\n display: flex;\n align-items: center;\n justify-content: flex-start;\n color: ${({ error }) => (error ? '#EA4335' : '#000')};\n\n input {\n background-color: transparent;\n width: 100%;\n color: var(--pcm-body-color);\n border: none;\n &:focus,\n &:active,\n &:focus-visible {\n outline: none !important;\n }\n &::placeholder {\n color: var(--pcm-body-color-tertiary);\n }\n }\n`;\n\nexport const StyleCountryBox = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const StylePrefixWrap = styled.div`\n display: flex;\n align-items: center;\n`;\n\nexport const StyleAccountSelectOpt = styled.div`\n display: flex;\n align-items: center;\n cursor: pointer;\n gap: 10px;\n margin-right: 14px;\n * {\n font-family: system-ui !important;\n }\n`;\n\nexport const StyleDownMore = styled.div`\n position: relative;\n top: 1px;\n display: flex;\n align-items: center;\n`;\n\ninterface PhoneStyleCountryCodeProps {\n listposition: 'top' | 'bottom';\n $maxHeight: number;\n}\nexport const StyleAccountSelectCountryList = styled.div<PhoneStyleCountryCodeProps>`\n position: absolute;\n z-index: 2;\n left: -1px;\n width: calc(100% + 2px);\n /* max-height: ${({ $maxHeight }) => $maxHeight || 300}px; */\n border-radius: var(--pcm-rounded-lg) !important;\n overflow: hidden;\n background-color: var(--pcm-body-background-tertiary);\n padding-top: 8px;\n color: var(--pcm-body-color);\n box-shadow: var(--pcm-modal-box-shadow);\n padding-bottom: 8px;\n\n /* ${({ listposition }) => (listposition === 'top' ? 'bottom: 56px;' : 'top: 20px;')} */\n\n &::-webkit-scrollbar {\n display: none;\n width: 0;\n }\n`;\n\nexport const StyleAccountSelectCountryItem = styled.div<{ $hoverBgColor?: string }>`\n position: relative;\n display: flex;\n justify-content: space-between;\n align-items: center;\n box-sizing: border-box;\n padding: 12px 14px;\n font-size: 14px;\n /* position: sticky; */\n padding-top: 0px;\n padding-bottom: 0px;\n height: 46px;\n top: 0;\n\n cursor: pointer;\n\n /* &:hover {\n background-color: ${({ $hoverBgColor }) => $hoverBgColor || 'var(--pcm-body-color-tertiary)'};\n } */\n\n &.search-input-wrap {\n z-index: 99;\n padding: 0;\n &:hover {\n background: none !important;\n }\n .wrap {\n background: var(--pcm-body-background-tertiary);\n width: 100%;\n padding: 0 14px;\n padding-top: 4px;\n padding-bottom: 10px;\n }\n }\n`;\n\nexport const StyleSearchInput = styled.input`\n width: 100%;\n height: 36px;\n padding: 0 16px;\n border-radius: var(--pcm-rounded-lg);\n overflow: hidden;\n color: var(--pcm-body-color);\n background-color: var(--pcm-body-background);\n border: none;\n &::placeholder {\n color: var(--pcm-body-color-tertiary);\n }\n`;\n\nexport const StyleCountryItem = styled.div`\n max-width: 80%;\n display: flex;\n align-items: center;\n`;\n\nexport const StyleCountryFlag = styled.div`\n width: 28px;\n min-width: 28px;\n font-family: system-ui;\n`;\n\nexport const StyleCountryName = styled.span`\n font-weight: 500;\n color: var(--pcm-body-color);\n`;\n\nexport const StyleCountryCode = styled.div`\n color: var(--pcm-body-color-secondary);\n`;\n\nexport const StyleNoData = styled.div`\n display: flex;\n justify-content: center;\n align-items: center;\n height: 47px;\n color: var(--pcm-body-color-secondary);\n font-size: 12px;\n`;\n", "import getUnicodeFlagIcon from 'country-flag-icons/unicode';\nimport { useEffect, useMemo, useRef, useState } from 'react';\nimport ConnectArrowIcon from '../../assets/icons/ConnectArrowIcon';\nimport DownArrowIcon from '../../assets/icons/DownArrowIcon';\nimport WarningIcon from '../../assets/icons/WarningIcon';\nimport { useAppearance } from '../../hooks/useAppearance';\nimport useClickAway from '../../hooks/useClickAway';\nimport useLocales from '../../hooks/useLocales';\nimport { useRouter } from '../../hooks/useRouter';\nimport { useWalletConnector } from '../../hooks/useWalletConnectors';\nimport { RoutePath } from '../../pages';\nimport { ThemeContainer } from '../../styles';\nimport { ConnectorType } from '../../types';\nimport { countryCodes } from '../../types/country';\nimport { getElementDimensionsRelativeToParent, hexToRgbaColor } from '../../utils';\nimport { defaultCountriesData } from '../../utils/allCountries';\nimport { validPhoneNumber } from '../../utils/isMobilePhone';\nimport Button from '../button';\nimport { StyleDropdownWrapper, StyleHoverBg } from '../chainDropdown/styles';\nimport CircleSpinner from '../circleSpinner';\nimport Dropdown from '../dropdown';\nimport { StyleConnectArrowIcon, StyleEmailInputWrapper, StyleInputError } from '../emailLogin/styles';\nimport {\n StyleAccountSelectCountryItem,\n StyleAccountSelectCountryList,\n StyleAccountSelectOpt,\n StyleCountryBox,\n StyleCountryCode,\n StyleCountryFlag,\n StyleCountryItem,\n StyleCountryName,\n StyleDownMore,\n StyleNoData,\n StylePhoneInputContainer,\n StylePhoneInputItemContainer,\n StylePhoneLabel,\n StylePhoneLoginContainer,\n StylePrefixWrap,\n StyleSearchInput,\n} from './styles';\n\nconst PhoneInputItem = () => {\n const { appearance } = useAppearance();\n const { navigate } = useRouter();\n const locales = useLocales();\n\n const [countryData, setCountryData] = useState<string[]>([]);\n const [phoneValue, setPhoneValue] = useState('');\n const [visbSelectCountry, setVisbSelectCountry] = useState(false);\n const [searchValue, setSearchValue] = useState('');\n const [phoneError, setPhoneError] = useState<string>('');\n const [loading, setLoading] = useState<boolean>(false);\n const [listPosition, setListPosition] = useState<'top' | 'bottom'>('bottom');\n const [listMaxHeight, setListMaxHeight] = useState<number>(300);\n const [hoverIndex, setHoverIndex] = useState(-1);\n const [inputFocus, setInputFocus] = useState<boolean>(false);\n\n const clickRef = useRef<HTMLDivElement>(null);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const countryListWrapRef = useRef<HTMLDivElement>(null);\n const footerRef = useRef<HTMLDivElement>(null);\n const phoneContainerRef = useRef<HTMLDivElement>(null);\n const timer = useRef<NodeJS.Timeout>(undefined);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const walletConnector = useWalletConnector('particleAuth');\n\n const sendCode = async () => {\n try {\n if (phoneValue) {\n const phoneLocale = countryData[1];\n const countryCode = countryData[2];\n if (!countryCode) {\n throw new Error('Please select a country code');\n } else if (!phoneValue) {\n throw new Error(locales.enterPhoneNumber);\n } else if (validPhoneNumber(phoneLocale, countryCode, phoneValue, locales)) {\n setLoading(true);\n\n const token = await walletConnector?.auth.getCloudflareTurnstileResponse({\n // @ts-ignore\n theme: appearance.mode || 'lgiht',\n getContainer: footerRef.current as HTMLElement,\n language: appearance.language || 'en',\n });\n\n console.log('token', token);\n\n // 2. \u53D1\u9001\u9A8C\u8BC1\u7801\n await walletConnector?.auth.getConnectCaptcha({\n phone: `+${countryCode}${phoneValue}`,\n // eslint-disable-next-line camelcase\n cf_turnstile_response: token,\n });\n\n // 3. \u8DF3\u8F6C\u5230\u9A8C\u8BC1\u7801\u8F93\u5165\u9875\u9762\n navigate(RoutePath.Captcha, {\n value: `+${countryCode}${phoneValue}`,\n type: ConnectorType.Phone,\n });\n }\n }\n } catch (error: any) {\n console.log('sendCode error', error);\n let message = error?.extra?.[0] || error.message || (typeof error === 'string' ? error : locales.networkError);\n if (message.includes('phone must be a valid')) {\n message = locales.invalidOrIncorrectNumberMistype;\n } else if (message.includes('Network Error')) {\n message = locales.networkError;\n }\n setPhoneError(message);\n }\n setLoading(false);\n };\n\n const countriesList = useMemo(() => {\n let filterCountryCodes = countryCodes;\n\n if (appearance?.filterCountryCallingCode) {\n filterCountryCodes = appearance?.filterCountryCallingCode(countryCodes);\n }\n\n if (!filterCountryCodes?.length) {\n console.log('filterCountryCallingCode is empty');\n }\n\n return filterCountryCodes\n .map((countryCode) => {\n return defaultCountriesData.find((item) => item[1]?.toLowerCase() === countryCode?.toLowerCase());\n })\n .filter((item) => !!item);\n }, []);\n\n const searclCountriesList = useMemo(() => {\n return countriesList.filter((item) => {\n return (item as string[]).join('+').toLowerCase().includes(searchValue.toLowerCase());\n });\n }, [countriesList, searchValue]);\n\n /**\n * hide continue button\n */\n const hideContinueButton = useMemo(() => {\n return appearance?.hideContinueButton;\n }, [appearance]);\n\n /**\n * \u76D1\u542C\u8F93\u5165 \u548C \u9009\u62E9\u7684\u56FD\u5BB6\u7801\uFF0C\u5982\u679C\u6821\u9A8C\u4E0D\u901A\u8FC7\u5C31\u8FD4\u56DEtrue\uFF0C\u5426\u5219\u5C31\u8FD4\u56DEfalse\n */\n const disabled = useMemo(() => {\n try {\n if (!countryData[1] || !countryData[2] || !phoneValue) {\n return true;\n }\n const isValid = validPhoneNumber(countryData[1], countryData[2], phoneValue, locales);\n return !isValid;\n } catch (error) {\n // eslint-disable-next-line no-console\n }\n return true;\n }, [countryData, phoneValue, locales]);\n\n const hoverBgColor = useMemo(() => {\n const color = appearance.theme?.['--pcm-accent-color'] || '#A257FA';\n return hexToRgbaColor(color, 0.1);\n }, [appearance]);\n\n useClickAway(() => {\n setVisbSelectCountry(false);\n }, [clickRef, countryListWrapRef]);\n\n useEffect(() => {\n if (visbSelectCountry) {\n setSearchValue('');\n }\n }, [visbSelectCountry]);\n\n /**\n * set default country\n */\n useEffect(() => {\n const language = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language;\n const locales = language?.split('-');\n const region = (locales || []).length > 1 ? locales?.[1] : locales?.[0];\n if (countriesList.length) {\n if (region && region.length > 0) {\n const currentCountry = defaultCountriesData.find((item) => item?.[1]?.toUpperCase() === region) || [];\n if (\n currentCountry &&\n countriesList.find((item: any) => item[1]?.toLowerCase() === currentCountry?.[1]?.toLowerCase())\n ) {\n