{"version":3,"sources":["../source/PhoneInput.js"],"names":["createInput","defaultMetadata","PhoneInput","ref","country","defaultCountry","useNationalFormatForDefaultCountryValue","value","onChange","metadata","smartCaret","international","rest","getInitialParsedInput","getParsedInputForValue","prevCountry","setPrevCountry","prevDefaultCountry","setPrevDefaultCountry","parsedInput","setParsedInput","valueForParsedInput","setValueForParsedInput","onParsedInputChange","slice","asYouType","AsYouType","input","phoneNumber","getNumber","number","InputComponent","InputSmart","InputBasic","React","forwardRef","propTypes","type","PropTypes","string","autoComplete","func","isRequired","bool","inputComponent","elementType","object","defaultProps","undefined","console","error","nationalNumber","formatNational"],"mappings":"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","sourcesContent":["import React, { useState, useCallback, useEffect } from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { AsYouType, getCountryCallingCode, parseDigits } from 'libphonenumber-js/core'\r\n\r\nimport InputSmart from './InputSmart'\r\nimport InputBasic from './InputBasic'\r\n\r\nexport function createInput(defaultMetadata) {\r\n\tfunction PhoneInput({\r\n\t\tcountry,\r\n\t\tdefaultCountry,\r\n\t\tuseNationalFormatForDefaultCountryValue,\r\n\t\tvalue,\r\n\t\tonChange,\r\n\t\tmetadata,\r\n\t\tsmartCaret,\r\n\t\tinternational,\r\n\t\t...rest\r\n\t}, ref) {\r\n\t\tconst getInitialParsedInput = () => getParsedInputForValue(\r\n\t\t\tvalue,\r\n\t\t\tcountry,\r\n\t\t\tinternational,\r\n\t\t\tdefaultCountry,\r\n\t\t\tuseNationalFormatForDefaultCountryValue,\r\n\t\t\tmetadata\r\n\t\t)\r\n\t\t// This is only used to detect `country` property change.\r\n\t\tconst [prevCountry, setPrevCountry] = useState(country)\r\n\t\t// This is only used to detect `defaultCountry` property change.\r\n\t\tconst [prevDefaultCountry, setPrevDefaultCountry] = useState(defaultCountry)\r\n\t\t// `parsedInput` is the `value` passed to the ``.\r\n\t\tconst [parsedInput, setParsedInput] = useState(getInitialParsedInput())\r\n\t\t// This is only used to detect `value` property changes.\r\n\t\tconst [valueForParsedInput, setValueForParsedInput] = useState(value)\r\n\t\t// If `value` property has been changed externally\r\n\t\t// then re-initialize the component.\r\n\t\tuseEffect(() => {\r\n\t\t\tif (value !== valueForParsedInput) {\r\n\t\t\t\tsetValueForParsedInput(value)\r\n\t\t\t\tsetParsedInput(getInitialParsedInput())\r\n\t\t\t}\r\n\t\t}, [value])\r\n\t\t// If the `country` has been changed then re-initialize the component.\r\n\t\tuseEffect(() => {\r\n\t\t\tif (country !== prevCountry) {\r\n\t\t\t\tsetPrevCountry(country)\r\n\t\t\t\tsetParsedInput(getInitialParsedInput())\r\n\t\t\t}\r\n\t\t}, [country])\r\n\t\t// If the `defaultCountry` has been changed then re-initialize the component.\r\n\t\tuseEffect(() => {\r\n\t\t\tif (defaultCountry !== prevDefaultCountry) {\r\n\t\t\t\tsetPrevDefaultCountry(defaultCountry)\r\n\t\t\t\tsetParsedInput(getInitialParsedInput())\r\n\t\t\t}\r\n\t\t}, [defaultCountry])\r\n\t\t// Update the `value` after `valueForParsedInput` has been updated.\r\n\t\tuseEffect(() => {\r\n\t\t\tif (valueForParsedInput !== value) {\r\n\t\t\t\tonChange(valueForParsedInput)\r\n\t\t\t}\r\n\t\t}, [valueForParsedInput])\r\n\t\tconst onParsedInputChange = useCallback((parsedInput) => {\r\n\t\t\tlet value\r\n\t\t\tif (country) {\r\n\t\t\t\t// Won't allow `+` in the beginning\r\n\t\t\t\t// when a `country` has been specified.\r\n\t\t\t\tif (parsedInput && parsedInput[0] === '+') {\r\n\t\t\t\t\tparsedInput = parsedInput.slice(1)\r\n\t\t\t\t}\r\n\t\t\t} else if (!defaultCountry) {\r\n\t\t\t\t// Force a `+` in the beginning of a `value`\r\n\t\t\t\t// when no `country` and `defaultCountry` have been specified.\r\n\t\t\t\tif (parsedInput && parsedInput[0] !== '+') {\r\n\t\t\t\t\tparsedInput = '+' + parsedInput\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t// Convert `parsedInput` to `value`.\r\n\t\t\tif (parsedInput) {\r\n\t\t\t\tconst asYouType = new AsYouType(country || defaultCountry, metadata)\r\n\t\t\t\tasYouType.input(\r\n\t\t\t\t\tcountry && international ?\r\n\t\t\t\t\t`+${getCountryCallingCode(country, metadata)}${parsedInput}` :\r\n\t\t\t\t\tparsedInput\r\n\t\t\t\t)\r\n\t\t\t\tconst phoneNumber = asYouType.getNumber()\r\n\t\t\t\t// If it's a \"possible\" incomplete phone number.\r\n\t\t\t\tif (phoneNumber) {\r\n\t\t\t\t\tvalue = phoneNumber.number\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tsetParsedInput(parsedInput)\r\n\t\t\tsetValueForParsedInput(value)\r\n\t\t}, [\r\n\t\t\tcountry,\r\n\t\t\tinternational,\r\n\t\t\tdefaultCountry,\r\n\t\t\tmetadata,\r\n\t\t\tsetParsedInput,\r\n\t\t\tsetValueForParsedInput\r\n\t\t])\r\n\t\tconst InputComponent = smartCaret ? InputSmart : InputBasic\r\n\t\treturn (\r\n\t\t\t\r\n\t\t)\r\n\t}\r\n\r\n\tPhoneInput = React.forwardRef(PhoneInput)\r\n\r\n\tPhoneInput.propTypes = {\r\n\t\t/**\r\n\t\t * HTML `` `type` attribute.\r\n\t\t */\r\n\t\ttype: PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * HTML `` `autocomplete` attribute.\r\n\t\t */\r\n\t\tautoComplete: PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * The phone number (in E.164 format).\r\n\t\t * Examples: `undefined`, `\"+12\"`, `\"+12133734253\"`.\r\n\t\t */\r\n\t\tvalue: PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * Updates the `value`.\r\n\t\t */\r\n\t\tonChange: PropTypes.func.isRequired,\r\n\r\n\t\t/**\r\n\t\t * A two-letter country code for formatting `value`\r\n\t\t * as a national phone number (example: `(213) 373-4253`),\r\n\t\t * or as an international phone number without \"country calling code\"\r\n\t\t * if `international` property is passed (example: `213 373 4253`).\r\n\t\t * Example: \"US\".\r\n\t\t * If no `country` is passed then `value`\r\n\t\t * is formatted as an international phone number.\r\n\t\t * (example: `+1 213 373 4253`)\r\n\t\t */\r\n\t\tcountry: PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * A two-letter country code for formatting `value`\r\n\t\t * when a user inputs a national phone number (example: `(213) 373-4253`).\r\n\t\t * The user can still input a phone number in international format.\r\n\t\t * Example: \"US\".\r\n\t\t * `country` and `defaultCountry` properties are mutually exclusive.\r\n\t\t */\r\n\t\tdefaultCountry: PropTypes.string,\r\n\r\n\t\t/**\r\n\t\t * If `country` property is passed along with `international={true}` property\r\n\t\t * then the phone number will be input in \"international\" format for that `country`\r\n\t\t * (without \"country calling code\").\r\n\t\t * For example, if `country=\"US\"` property is passed to \"without country select\" input\r\n\t\t * then the phone number will be input in the \"national\" format for `US` (`(213) 373-4253`).\r\n\t\t * But if both `country=\"US\"` and `international={true}` properties are passed then\r\n\t\t * the phone number will be input in the \"international\" format for `US` (`213 373 4253`)\r\n\t\t * (without \"country calling code\" `+1`).\r\n\t\t */\r\n\t\tinternational: PropTypes.bool,\r\n\r\n\t\t/**\r\n\t\t * The `` component.\r\n\t\t */\r\n\t\tinputComponent: PropTypes.elementType,\r\n\r\n\t\t/**\r\n\t\t * By default, the caret position is being \"intelligently\" managed\r\n\t\t * while a user inputs a phone number.\r\n\t\t * This \"smart\" caret behavior can be turned off\r\n\t\t * by passing `smartCaret={false}` property.\r\n\t\t * This is just an \"escape hatch\" for any possible caret position issues.\r\n\t\t */\r\n\t\t// Is `true` by default.\r\n\t\tsmartCaret: PropTypes.bool.isRequired,\r\n\r\n\t\t/**\r\n\t\t * When `defaultCountry` is defined and the initial `value` corresponds to `defaultCountry`,\r\n\t\t * then the `value` will be formatted as a national phone number by default.\r\n\t\t * To format the initial `value` of `defaultCountry` as an international number instead\r\n\t\t * set `useNationalFormatForDefaultCountryValue` property to `true`.\r\n\t\t */\r\n\t\tuseNationalFormatForDefaultCountryValue: PropTypes.bool.isRequired,\r\n\r\n\t\t/**\r\n\t\t * `libphonenumber-js` metadata.\r\n\t\t */\r\n\t\tmetadata: PropTypes.object.isRequired\r\n\t}\r\n\r\n\tPhoneInput.defaultProps = {\r\n\t\t/**\r\n\t\t * HTML `` `type=\"tel\"`.\r\n\t\t */\r\n\t\ttype: 'tel',\r\n\r\n\t\t/**\r\n\t\t * Remember (and autofill) the value as a phone number.\r\n\t\t */\r\n\t\tautoComplete: 'tel',\r\n\r\n\t\t/**\r\n\t\t * Set to `false` to use \"basic\" caret instead of the \"smart\" one.\r\n\t\t */\r\n\t\tsmartCaret: true,\r\n\r\n\t\t/**\r\n\t\t * Set to `true` to force international phone number format\r\n\t\t * (without \"country calling code\") when `country` is specified.\r\n\t\t */\r\n\t\t// international: false,\r\n\r\n\t\t/**\r\n\t\t * Prefer national format when formatting E.164 phone number `value`\r\n\t\t * corresponding to `defaultCountry`.\r\n\t\t */\r\n\t\tuseNationalFormatForDefaultCountryValue: true,\r\n\r\n\t\t/**\r\n\t\t * `libphonenumber-js` metadata.\r\n\t\t */\r\n\t\tmetadata: defaultMetadata\r\n\t}\r\n\r\n\treturn PhoneInput\r\n}\r\n\r\nexport default createInput()\r\n\r\n/**\r\n * Returns phone number input field value for a E.164 phone number `value`.\r\n * @param {string} [value]\r\n * @param {string} [country]\r\n * @param {boolean} [international]\r\n * @param {string} [defaultCountry]\r\n * @param {boolean} [useNationalFormatForDefaultCountryValue]\r\n * @param {object} metadata\r\n * @return {string}\r\n */\r\nfunction getParsedInputForValue(\r\n\tvalue,\r\n\tcountry,\r\n\tinternational,\r\n\tdefaultCountry,\r\n\tuseNationalFormatForDefaultCountryValue,\r\n\tmetadata\r\n) {\r\n\tif (!value) {\r\n\t\treturn ''\r\n\t}\r\n\tif (!country && !defaultCountry) {\r\n\t\treturn value\r\n\t}\r\n\tconst asYouType = new AsYouType(undefined, metadata)\r\n\tasYouType.input(value)\r\n\tconst phoneNumber = asYouType.getNumber()\r\n\tif (phoneNumber) {\r\n\t\tif (country) {\r\n\t\t\tif (phoneNumber.country && phoneNumber.country !== country) {\r\n\t\t\t\tconsole.error(`[react-phone-number-input] Phone number ${value} corresponds to country ${phoneNumber.country} but ${country} was specified instead.`)\r\n\t\t\t}\r\n\t\t\tif (international) {\r\n\t\t\t\treturn phoneNumber.nationalNumber\r\n\t\t\t}\r\n\t\t\treturn parseDigits(phoneNumber.formatNational())\r\n\t\t} else {\r\n\t\t\tif (phoneNumber.country && phoneNumber.country === defaultCountry && useNationalFormatForDefaultCountryValue) {\r\n\t\t\t\treturn parseDigits(phoneNumber.formatNational())\r\n\t\t\t}\r\n\t\t\treturn value\r\n\t\t}\r\n\t} else {\r\n\t\treturn ''\r\n\t}\r\n}"],"file":"PhoneInput.js"}