@gravityforms/components
Version:
UI components for use in Gravity Forms development. Both React and vanilla js flavors.
18 lines (16 loc) • 99.7 kB
JavaScript
"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
(self["webpackChunkgravityforms"] = self["webpackChunkgravityforms"] || []).push([["components_react_admin_modules_Phone_PhoneComponent_js"],{
/***/ "../components/react/admin/modules/Phone/PhoneComponent.js":
/*!*****************************************************************************!*\
!*** ../components/react/admin/modules/Phone/PhoneComponent.js + 2 modules ***!
\*****************************************************************************/
/***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) {
eval("{// ESM COMPAT FLAG\n__webpack_require__.r(__webpack_exports__);\n\n// EXPORTS\n__webpack_require__.d(__webpack_exports__, {\n \"default\": function() { return /* binding */ Phone_PhoneComponent; }\n});\n\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/extends.js\nvar esm_extends = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/extends.js\");\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\nvar defineProperty = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\");\n// EXTERNAL MODULE: ../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js + 3 modules\nvar slicedToArray = __webpack_require__(\"../../../node_modules/@babel/runtime/helpers/esm/slicedToArray.js\");\n// EXTERNAL MODULE: external [\"gform\",\"libraries\"]\nvar external_gform_libraries_ = __webpack_require__(\"@gravityforms/libraries\");\n// EXTERNAL MODULE: external [\"gform\",\"utils\",\"react\"]\nvar external_gform_utils_react_ = __webpack_require__(\"@gravityforms/react-utils\");\n// EXTERNAL MODULE: external [\"gform\",\"utils\"]\nvar external_gform_utils_ = __webpack_require__(\"@gravityforms/utils\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/examples.mobile.json.js\nvar examples_mobile_json = __webpack_require__(\"../../../node_modules/libphonenumber-js/examples.mobile.json.js\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/min/exports/getExampleNumber.js + 1 modules\nvar getExampleNumber = __webpack_require__(\"../../../node_modules/libphonenumber-js/min/exports/getExampleNumber.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/utils.js\nvar utils = __webpack_require__(\"../components/react/admin/modules/Dropdown/utils.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/CountryDropdown/index.js\nvar CountryDropdown = __webpack_require__(\"../components/react/admin/modules/Dropdown/CountryDropdown/index.js\");\n// EXTERNAL MODULE: ../components/react/admin/modules/Dropdown/CountryDropdown/utils.js + 1 modules\nvar CountryDropdown_utils = __webpack_require__(\"../components/react/admin/modules/Dropdown/CountryDropdown/utils.js\");\n// EXTERNAL MODULE: ../components/react/admin/elements/HelpText/index.js\nvar HelpText = __webpack_require__(\"../components/react/admin/elements/HelpText/index.js\");\n// EXTERNAL MODULE: ../components/react/admin/elements/Input/index.js\nvar Input = __webpack_require__(\"../components/react/admin/elements/Input/index.js\");\n;// ../components/react/admin/modules/Phone/utils.js\n\n\n/**\n * @function getId\n * @description Get the id from the prefix and key provided.\n *\n * @since 5.5.0\n *\n * @param {string} prefix The id prefix.\n * @param {string} key The id key.\n *\n * @return {string} The id.\n */\nvar getId = function getId(prefix, key) {\n return (0,external_gform_utils_.slugify)(\"\".concat(prefix, \"-\").concat(key));\n};\n\n/**\n * @function e164ToNumber\n * @description Convert an E.164 formatted phone number to a number.\n *\n * @since 5.5.0\n *\n * @throws {TypeError} If the input is not a string.\n *\n * @param {string} e164 The E.164 formatted phone number.\n *\n * @return {string} The phone number.\n */\nvar e164ToNumber = function e164ToNumber(e164) {\n if (typeof e164 !== 'string') {\n throw new TypeError('Input must be a string');\n }\n return e164.replace(/^\\+/, '');\n};\n\n/**\n * @function numberToE164\n * @description Convert a phone number to E.164 format.\n *\n * @since 5.5.0\n *\n * @throws {TypeError} If the input is not a string.\n *\n * @param {string} number The phone number.\n *\n * @return {string} The E.164 formatted phone number.\n */\nvar numberToE164 = function numberToE164(number) {\n if (typeof number !== 'string') {\n throw new TypeError('Input must be a string');\n }\n return number.startsWith('+') ? number : \"+\".concat(number);\n};\n// EXTERNAL MODULE: ../../../node_modules/input-format/modules/parseDigit.js\nvar parseDigit = __webpack_require__(\"../../../node_modules/input-format/modules/parseDigit.js\");\n// EXTERNAL MODULE: ../../../node_modules/input-format/modules/templateParser.js\nvar templateParser = __webpack_require__(\"../../../node_modules/input-format/modules/templateParser.js\");\n// EXTERNAL MODULE: ../../../node_modules/input-format/modules/parse.js\nvar parse = __webpack_require__(\"../../../node_modules/input-format/modules/parse.js\");\n// EXTERNAL MODULE: ../../../node_modules/input-format/modules/templateFormatter.js + 1 modules\nvar templateFormatter = __webpack_require__(\"../../../node_modules/input-format/modules/templateFormatter.js\");\n// EXTERNAL MODULE: ../../../node_modules/input-format/modules/format.js\nvar format = __webpack_require__(\"../../../node_modules/input-format/modules/format.js\");\n// EXTERNAL MODULE: ../../../node_modules/libphonenumber-js/min/exports/AsYouType.js + 16 modules\nvar AsYouType = __webpack_require__(\"../../../node_modules/libphonenumber-js/min/exports/AsYouType.js\");\n;// ../components/react/admin/modules/Phone/input-format-utils.js\n\n\nvar ANDROID_USER_AGENT_REG_EXP = /Android/i;\n\n/**\n * @function isAndroid\n * @description Checks if the user agent is Android.\n * Copied from the original function `isAndroid` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @return {boolean} Whether the user agent is Android.\n */\nvar isAndroid = function isAndroid() {\n // `navigator` is not defined when running mocha tests.\n if (typeof navigator !== 'undefined') {\n return ANDROID_USER_AGENT_REG_EXP.test(navigator.userAgent);\n }\n};\n\n/**\n * @function getCaretPosition\n * @description Gets the caret position.\n * Copied from the original function `getCaretPosition` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} element The element to get the caret position from.\n *\n * @return {number} The caret position.\n */\nvar getCaretPosition = function getCaretPosition(element) {\n return element.selectionStart;\n};\n\n/**\n * @function setCaretPosition\n * @description Sets the caret position.\n * Copied from the original function `setCaretPosition` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} element The element to set the caret position on.\n * @param {number} caretPosition The caret position to set.\n */\nvar setCaretPosition = function setCaretPosition(element, caretPosition) {\n // Sanity check\n if (caretPosition === undefined) {\n return;\n }\n\n // Set caret position.\n // There has been an issue with caret positioning on Android devices.\n // https://github.com/catamphetamine/input-format/issues/2\n // I was revisiting this issue and looked for similar issues in other libraries.\n // For example, there's [`text-mask`](https://github.com/text-mask/text-mask) library.\n // They've had exactly the same issue when the caret seemingly refused to be repositioned programmatically.\n // The symptoms were the same: whenever the caret passed through a non-digit character of a mask (a whitespace, a bracket, a dash, etc), it looked as if it placed itself one character before its correct position.\n // https://github.com/text-mask/text-mask/issues/300\n // They seem to have found a basic fix for it: calling `input.setSelectionRange()` in a timeout rather than instantly for Android devices.\n // https://github.com/text-mask/text-mask/pull/400/files\n // I've implemented the same workaround here.\n if (isAndroid()) {\n setTimeout(function () {\n return element.setSelectionRange(caretPosition, caretPosition);\n }, 0);\n } else {\n element.setSelectionRange(caretPosition, caretPosition);\n }\n};\n\n/**\n * @function edit\n * @description Edits text based on the operation.\n * Copied from the original function `edit` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @param {string} value The value to edit.\n * @param {number} caret The caret position.\n * @param {string} operation The operation to perform, one of `Backspace` or `Delete`.\n *\n * @return {object} The edited value and the caret position.\n */\nvar edit = function edit(value, caret, operation) {\n // Edits text `value` (if `operation` is passed) and repositions the `caret` if needed.\n //\n // Example:\n //\n // value - '88005553535'\n // caret - 2 // starting from 0; is positioned before the first zero\n // operation - 'Backspace'\n //\n // Returns\n // {\n // \tvalue: '8005553535'\n // \tcaret: 1\n // }\n //\n // Currently supports just 'Delete' and 'Backspace' operations\n //\n switch (operation) {\n case 'Backspace':\n // If there exists the previous character,\n // then erase it and reposition the caret.\n if (caret > 0) {\n // Remove the previous character\n value = value.slice(0, caret - 1) + value.slice(caret);\n // Position the caret where the previous (erased) character was\n caret--;\n }\n break;\n case 'Delete':\n // Remove current digit (if any)\n value = value.slice(0, caret) + value.slice(caret + 1);\n break;\n }\n return {\n value: value,\n caret: caret\n };\n};\n\n/**\n * @function parseDigitWithPlus\n * @description Parses a digit with a plus sign.\n *\n * @since 5.5.0\n *\n * @param {boolean} international Whether the phone number is in international format.\n *\n * @return {Function} The function to parse a digit with a plus sign.\n */\nvar parseDigitWithPlus = function parseDigitWithPlus(international) {\n return function (character, value) {\n // Leading plus is allowed\n if (international && character === '+' && !value) {\n return character;\n }\n // Digits are allowed\n return (0,parseDigit[\"default\"])(character);\n };\n};\n\n/**\n * @function getFormattedInputText\n * @description Gets the formatted input text.\n * Modified from the original function `formatInputText` from `input-format` package.\n *\n * @since 5.5.0\n *\n * @param {string} inputValue The input value.\n * @param {number} caretPosition The caret position.\n * @param {string} country The country code.\n * @param {boolean} international Whether the phone number is in international format.\n * @param {string|undefined} operation The operation to perform, one of `Backspace` or `Delete`.\n *\n * @return {object} The formatted input text, caret position, and the AsYouType instance.\n */\nvar getFormattedInputText = function getFormattedInputText(inputValue, caretPosition, country, international, operation) {\n var asYouType = new AsYouType.AsYouType(country);\n asYouType.input(inputValue);\n var parser = (0,templateParser[\"default\"])(asYouType.getTemplate(), parseDigitWithPlus(international));\n\n // Parse input value.\n // Get the `value` and `caret` position.\n var _parse = (0,parse[\"default\"])(inputValue, caretPosition, parser),\n value = _parse.value,\n caret = _parse.caret;\n\n // If a user performed an operation (\"Backspace\", \"Delete\")\n // then apply that operation and get the new `value` and `caret` position.\n if (operation) {\n var newValueAndCaret = edit(value, caret, operation);\n value = newValueAndCaret.value;\n caret = newValueAndCaret.caret;\n }\n asYouType.reset();\n asYouType.input(value);\n var formatter = (0,templateFormatter[\"default\"])(asYouType.getTemplate(), 'x', true);\n\n // Format the `value` and reposition the caret accordingly.\n return {\n asYouType: asYouType,\n formatted: (0,format[\"default\"])(value, caret, formatter)\n };\n};\n\n/**\n * @function getTextAfterEraseSelection\n * @description Gets the text after erasing the selection.\n * Modified from the original function `eraseSelection` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {string} text The text to erase the selection from.\n * @param {object} selection The selection to erase. The selection is an object with `start` and `end` properties.\n *\n * @return {string} The text after erasing the selection.\n */\nvar getTextAfterEraseSelection = function getTextAfterEraseSelection(text, selection) {\n var start = Math.min(selection.start, selection.end);\n var end = Math.max(selection.start, selection.end);\n return text.slice(0, start) + text.slice(end);\n};\n\n/**\n * @function getSelection\n * @description Gets the selection.\n * Copied from the original function `getSelection` from `input-format` package.\n * The original function is not exported, so it was copied here.\n *\n * @since 5.5.0\n *\n * @param {HTMLElement} input The input element.\n *\n * @return {object|undefined} The selection object with `start` and `end` properties.\n */\nvar getSelection = function getSelection(input) {\n // If no selection, return nothing\n if (input.selectionStart === input.selectionEnd) {\n return;\n }\n var start = Math.min(input.selectionStart, input.selectionEnd);\n var end = Math.max(input.selectionStart, input.selectionEnd);\n return {\n start: start,\n end: end\n };\n};\n;// ../components/react/admin/modules/Phone/PhoneComponent.js\n\n\n\nfunction 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; }\nfunction _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) { (0,defineProperty[\"default\"])(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; }\n\n\n\n\n\n\n\n\n\n\n\n\nvar useEffect = external_gform_libraries_.React.useEffect,\n useRef = external_gform_libraries_.React.useRef,\n useState = external_gform_libraries_.React.useState,\n forwardRef = external_gform_libraries_.React.forwardRef;\nvar INPUT_SELECTOR = '.gform-input';\nvar DROPDOWN_TRIGGER_SELECTOR = '.gform-dropdown__trigger';\nvar BORDER_STYLE_DEFAULT = 'default';\nvar BORDER_STYLE_ERROR = 'error';\nvar BORDER_STYLE_CORRECT = 'correct';\nvar PhoneComponent = forwardRef(function (props, ref) {\n var countries = props.countries,\n customAttributes = props.customAttributes,\n customClasses = props.customClasses,\n disabled = props.disabled,\n dropdownAttributes = props.dropdownAttributes,\n dropdownClasses = props.dropdownClasses,\n helpTextAttributes = props.helpTextAttributes,\n helpTextClasses = props.helpTextClasses,\n i18n = props.i18n,\n inputAttributes = props.inputAttributes,\n inputClasses = props.inputClasses,\n international = props.international,\n label = props.label,\n labelAttributes = props.labelAttributes,\n labelClasses = props.labelClasses,\n language = props.language,\n onChange = props.onChange,\n preferredCountries = props.preferredCountries,\n required = props.required,\n requiredLabelAttributes = props.requiredLabelAttributes,\n requiredLabelClasses = props.requiredLabelClasses,\n size = props.size,\n spacing = props.spacing,\n usePlaceholder = props.usePlaceholder,\n useValidation = props.useValidation,\n width = props.width;\n\n // Refs\n var internalRef = useRef(null);\n var wrapperRef = ref || internalRef;\n var dropdownRef = useRef(null);\n var inputRef = useRef(null);\n var phoneInputRef = useRef(null);\n var id = (0,external_gform_utils_react_.useIdContext)();\n var _useState = useState(function () {\n var countriesListItems = (0,CountryDropdown_utils.getCountriesListItemsFromIsos)(countries, language, i18n, {\n showFlag: (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.showFlag) || true,\n showCallingCode: (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.showCallingCode) || true\n });\n if (dropdownAttributes !== null && dropdownAttributes !== void 0 && dropdownAttributes.initialValue) {\n return (0,utils.getSelectedItemFromValue)(dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.initialValue, countriesListItems, false);\n }\n if (preferredCountries.length) {\n var _preferred$;\n var preferred = (0,CountryDropdown_utils.sortPreferredCountries)(countriesListItems, preferredCountries, i18n);\n if ((preferred === null || preferred === void 0 || (_preferred$ = preferred[0]) === null || _preferred$ === void 0 ? void 0 : _preferred$.type) === 'group') {\n var _preferred$2;\n return (preferred === null || preferred === void 0 || (_preferred$2 = preferred[0]) === null || _preferred$2 === void 0 || (_preferred$2 = _preferred$2.items) === null || _preferred$2 === void 0 ? void 0 : _preferred$2[0]) || {};\n }\n return preferred === null || preferred === void 0 ? void 0 : preferred[0];\n }\n if (countriesListItems !== null && countriesListItems !== void 0 && countriesListItems[0]) {\n return countriesListItems === null || countriesListItems === void 0 ? void 0 : countriesListItems[0];\n }\n return {};\n }),\n _useState2 = (0,slicedToArray[\"default\"])(_useState, 2),\n country = _useState2[0],\n setCountry = _useState2[1];\n var _useState3 = useState(function () {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.value) {\n var _getFormattedInputTex = getFormattedInputText(inputAttributes === null || inputAttributes === void 0 ? void 0 : inputAttributes.value, 0, country === null || country === void 0 ? void 0 : country.value, international),\n asYouType = _getFormattedInputTex.asYouType,\n formatted = _getFormattedInputTex.formatted;\n return {\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || ''\n };\n }\n return {\n asYouType: null,\n chars: '',\n value: '',\n numberValue: ''\n };\n }),\n _useState4 = (0,slicedToArray[\"default\"])(_useState3, 2),\n phoneNumber = _useState4[0],\n setPhoneNumber = _useState4[1];\n var _useState5 = useState(BORDER_STYLE_DEFAULT),\n _useState6 = (0,slicedToArray[\"default\"])(_useState5, 2),\n borderStyle = _useState6[0],\n setBorderStyle = _useState6[1];\n\n // Set phoneInputRef.\n useEffect(function () {\n if (!inputRef.current) {\n return;\n }\n if (phoneInputRef.current === inputRef.current.querySelector(INPUT_SELECTOR)) {\n return;\n }\n phoneInputRef.current = inputRef.current.querySelector(INPUT_SELECTOR);\n }, [inputRef, phoneInputRef]);\n\n /**\n * @function getPlaceholder\n * @description Get the placeholder text for the input.\n *\n * @since 5.5.0\n *\n * @return {string|undefined} Placeholder text.\n */\n var getPlaceholder = function getPlaceholder() {\n if (!usePlaceholder) {\n return undefined;\n }\n var exampleNumber = (0,getExampleNumber.getExampleNumber)(country === null || country === void 0 ? void 0 : country.value, examples_mobile_json[\"default\"]);\n if (!exampleNumber) {\n return undefined;\n }\n return international ? exampleNumber.formatInternational() : exampleNumber.formatNational();\n };\n\n /**\n * @function validatePhoneNumber\n * @description Validate the phone number.\n *\n * @since 5.5.0\n *\n */\n var validatePhoneNumber = function validatePhoneNumber() {\n // If validation is disabled, return early.\n if (!useValidation) {\n if (borderStyle !== BORDER_STYLE_DEFAULT) {\n setBorderStyle(BORDER_STYLE_DEFAULT);\n }\n return;\n }\n var asYouType = phoneNumber.asYouType,\n numberValue = phoneNumber.numberValue;\n var isPossible = asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible();\n if (numberValue) {\n setBorderStyle(isPossible ? BORDER_STYLE_CORRECT : BORDER_STYLE_ERROR);\n } else {\n setBorderStyle(BORDER_STYLE_DEFAULT);\n }\n };\n\n /**\n * @function onCountryChange\n * @description Handle country change.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n * @param {object} value The selected country object.\n */\n var onCountryChange = function onCountryChange(event, value) {\n setCountry(value);\n var _getFormattedInputTex2 = getFormattedInputText(phoneNumber.chars, 0, value === null || value === void 0 ? void 0 : value.value, international),\n asYouType = _getFormattedInputTex2.asYouType,\n formatted = _getFormattedInputTex2.formatted;\n var numberValue = (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || '';\n setPhoneNumber({\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: numberValue\n });\n var changeValue = {\n country: value === null || value === void 0 ? void 0 : value.value,\n number: numberValue,\n isValid: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible()) || false\n };\n onChange(changeValue, event);\n\n // Validate phone number after state updates.\n requestAnimationFrame(validatePhoneNumber);\n };\n\n /**\n * @function handleInputChange\n * @description Input change handler.\n *\n * @since 5.5.0\n *\n * @param {string} value The input value.\n * @param {string|undefined} operation The operation to perform.\n * @param {Event} event The event object.\n */\n var handleInputChange = function handleInputChange(value, operation, event) {\n var phoneInput = phoneInputRef.current;\n var caretPosition = getCaretPosition(phoneInput);\n var _getFormattedInputTex3 = getFormattedInputText(value, caretPosition, country === null || country === void 0 ? void 0 : country.value, international, operation),\n asYouType = _getFormattedInputTex3.asYouType,\n formatted = _getFormattedInputTex3.formatted;\n var numberValue = (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getNumberValue()) || '';\n setPhoneNumber({\n asYouType: asYouType,\n chars: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.getChars()) || '',\n value: formatted.text,\n numberValue: numberValue\n });\n var changeValue = {\n country: country === null || country === void 0 ? void 0 : country.value,\n number: numberValue,\n isValid: (asYouType === null || asYouType === void 0 ? void 0 : asYouType.isPossible()) || false\n };\n\n // requestAnimationFrame to set caret after rerender.\n requestAnimationFrame(function () {\n setCaretPosition(phoneInput, formatted.caret);\n });\n onChange(changeValue, event);\n };\n\n /**\n * @function onInputChange\n * @description Handle input change.\n *\n * @since 5.5.0\n *\n * @param {string} value The input value.\n * @param {Event} event The event object.\n */\n var onInputChange = function onInputChange(value, event) {\n handleInputChange(value, undefined, event);\n };\n\n /**\n * @function onInputKeyDown\n * @description Handle input key down.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n */\n var onInputKeyDown = function onInputKeyDown(event) {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.onKeyDown) {\n var _inputAttributes$onKe;\n inputAttributes === null || inputAttributes === void 0 || (_inputAttributes$onKe = inputAttributes.onKeyDown) === null || _inputAttributes$onKe === void 0 || _inputAttributes$onKe.call(inputAttributes, event);\n }\n\n // If `onKeyDown()` handler above has called `event.preventDefault()` then ignore this `keydown` event.\n if (event.defaultPrevented) {\n return;\n }\n var phoneInput = phoneInputRef.current;\n if (phoneInput.hasAttribute('readonly')) {\n return;\n }\n var operation = event.key;\n if (!['Backspace', 'Delete'].includes(operation)) {\n return;\n }\n\n // Intercept this operation and perform it manually.\n event.preventDefault();\n var value = phoneInput.value;\n var selection = getSelection(phoneInput);\n\n // If a selection is made, get the text after erasing selection.\n // Else, perform the (character erasing) operation manually.\n var newValue = selection ? getTextAfterEraseSelection(value, selection) : value;\n var newOp = selection ? undefined : operation;\n handleInputChange(newValue, newOp, event);\n };\n\n /**\n * @function onInputBlur\n * @description Handle input blur.\n *\n * @since 5.5.0\n *\n * @param {Event} event The event object.\n */\n var onInputBlur = function onInputBlur(event) {\n if (inputAttributes !== null && inputAttributes !== void 0 && inputAttributes.onBlur) {\n var _inputAttributes$onBl;\n inputAttributes === null || inputAttributes === void 0 || (_inputAttributes$onBl = inputAttributes.onBlur) === null || _inputAttributes$onBl === void 0 || _inputAttributes$onBl.call(inputAttributes, event);\n }\n\n // If `onBlur()` handler above has called `event.preventDefault()` then ignore this `blur` event.\n if (event.defaultPrevented) {\n return;\n }\n validatePhoneNumber();\n };\n\n /**\n * @function onLabelClick\n * @description Handle label click.\n *\n * @since 5.5.0\n *\n */\n var onLabelClick = function onLabelClick() {\n var _dropdownRef$current;\n var dropdownTrigger = dropdownRef === null || dropdownRef === void 0 || (_dropdownRef$current = dropdownRef.current) === null || _dropdownRef$current === void 0 ? void 0 : _dropdownRef$current.querySelector(DROPDOWN_TRIGGER_SELECTOR);\n if (dropdownTrigger) {\n dropdownTrigger.focus();\n }\n };\n var helpTextId = getId(id, 'help-text');\n var labelId = getId(id, 'label');\n var componentProps = _objectSpread({\n className: (0,external_gform_libraries_.classnames)(_objectSpread((0,defineProperty[\"default\"])((0,defineProperty[\"default\"])({\n 'gform-phone': true,\n 'wp-exclude-emoji': true\n }, \"gform-phone--size-\".concat(size), true), 'gform-phone--disabled', disabled), (0,external_gform_utils_.spacerClasses)(spacing)), customClasses),\n id: id,\n style: {\n width: width ? \"\".concat(width, \"px\") : undefined\n }\n }, customAttributes);\n var labelProps = _objectSpread(_objectSpread({\n className: (0,external_gform_libraries_.classnames)(['gform-phone__label', 'gform-text', 'gform-text--color-port', 'gform-typography--size-text-sm', 'gform-typography--weight-medium'], labelClasses)\n }, labelAttributes), {}, {\n id: labelId,\n onClick: onLabelClick\n });\n var requiredLabelProps = _objectSpread(_objectSpread({\n size: 'text-sm',\n weight: 'medium'\n }, requiredLabelAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__required'], requiredLabelClasses)\n });\n var dropdownProps = _objectSpread(_objectSpread({\n countries: countries,\n hasSearch: true,\n popoverMaxHeight: 300\n }, dropdownAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__dropdown'], dropdownClasses),\n disabled: disabled,\n i18n: i18n,\n id: getId(id, 'dropdown'),\n language: language,\n onChange: onCountryChange,\n preferredCountries: preferredCountries,\n searchAttributes: _objectSpread({\n wrapperClasses: ['gform-phone__dropdown-search-wrapper']\n }, (dropdownAttributes === null || dropdownAttributes === void 0 ? void 0 : dropdownAttributes.searchAttributes) || {}),\n searchClasses: ['gform-phone__dropdown-search'],\n size: size,\n triggerAttributes: {\n 'aria-labelledby': label ? labelId : undefined\n },\n triggerClasses: ['gform-phone__dropdown-trigger']\n });\n var inputProps = _objectSpread(_objectSpread({}, inputAttributes), {}, {\n borderStyle: borderStyle,\n customAttributes: {\n 'aria-describedby': helpTextAttributes.content && borderStyle === BORDER_STYLE_ERROR ? helpTextId : undefined,\n 'aria-labelledby': label ? labelId : undefined\n },\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__input'], inputClasses),\n directControlled: true,\n disabled: disabled,\n id: getId(id, 'input'),\n onBlur: onInputBlur,\n onChange: onInputChange,\n onKeyDown: onInputKeyDown,\n placeholder: getPlaceholder(),\n required: required,\n size: \"size-\".concat(size),\n type: 'tel',\n value: phoneNumber.value,\n wrapperClasses: (0,external_gform_libraries_.classnames)({\n 'gform-phone__input-wrapper': true\n }, (inputAttributes === null || inputAttributes === void 0 ? void 0 : inputAttributes.wrapperClasses) || [])\n });\n var helpTextProps = _objectSpread(_objectSpread({\n size: 'text-xs',\n weight: 'regular'\n }, helpTextAttributes), {}, {\n customClasses: (0,external_gform_libraries_.classnames)(['gform-phone__help-text'], helpTextClasses),\n id: helpTextId\n });\n return /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", (0,esm_extends[\"default\"])({}, componentProps, {\n ref: wrapperRef\n }), label && /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", labelProps, label, required && /*#__PURE__*/external_gform_libraries_.React.createElement(HelpText[\"default\"], requiredLabelProps)), /*#__PURE__*/external_gform_libraries_.React.createElement(\"div\", {\n className: \"gform-phone__wrapper\"\n }, /*#__PURE__*/external_gform_libraries_.React.createElement(CountryDropdown[\"default\"], (0,esm_extends[\"default\"])({}, dropdownProps, {\n ref: dropdownRef\n })), /*#__PURE__*/external_gform_libraries_.React.createElement(Input[\"default\"], (0,esm_extends[\"default\"])({}, inputProps, {\n ref: inputRef\n }))), borderStyle === BORDER_STYLE_ERROR && /*#__PURE__*/external_gform_libraries_.React.createElement(HelpText[\"default\"], helpTextProps));\n});\nPhoneComponent.propTypes = {\n countries: external_gform_libraries_.PropTypes.array,\n customAttributes: external_gform_libraries_.PropTypes.object,\n customClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n disabled: external_gform_libraries_.PropTypes.bool,\n dropdownAttributes: external_gform_libraries_.PropTypes.object,\n dropdownClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n helpTextAttributes: external_gform_libraries_.PropTypes.object,\n helpTextClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n i18n: external_gform_libraries_.PropTypes.object,\n id: external_gform_libraries_.PropTypes.string,\n inputAttributes: external_gform_libraries_.PropTypes.object,\n inputClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n international: external_gform_libraries_.PropTypes.bool,\n label: external_gform_libraries_.PropTypes.string,\n labelAttributes: external_gform_libraries_.PropTypes.object,\n labelClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n language: external_gform_libraries_.PropTypes.string,\n onChange: external_gform_libraries_.PropTypes.func,\n preferredCountries: external_gform_libraries_.PropTypes.array,\n required: external_gform_libraries_.PropTypes.bool,\n requiredLabelAttributes: external_gform_libraries_.PropTypes.object,\n requiredLabelClasses: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n size: external_gform_libraries_.PropTypes.oneOf(['r', 'l', 'xl']),\n spacing: external_gform_libraries_.PropTypes.oneOfType([external_gform_libraries_.PropTypes.string, external_gform_libraries_.PropTypes.number, external_gform_libraries_.PropTypes.array, external_gform_libraries_.PropTypes.object]),\n usePlaceholder: external_gform_libraries_.PropTypes.bool,\n useValidation: external_gform_libraries_.PropTypes.bool,\n width: external_gform_libraries_.PropTypes.number\n};\nvar PhoneComponentWithId = forwardRef(function (props, ref) {\n var defaultProps = {\n countries: [],\n customAttributes: {},\n customClasses: [],\n disabled: false,\n dropdownAttributes: {},\n dropdownClasses: [],\n helpTextAttributes: {},\n helpTextClasses: [],\n i18n: {},\n id: '',\n inputAttributes: {},\n inputClasses: [],\n international: true,\n label: '',\n labelAttributes: {},\n labelClasses: [],\n language: 'en',\n onChange: function onChange() {},\n preferredCountries: [],\n required: false,\n requiredLabelAttributes: {},\n requiredLabelClasses: [],\n size: 'r',\n spacing: '',\n usePlaceholder: true,\n useValidation: false,\n width: 0\n };\n var combinedProps = _objectSpread(_objectSpread({}, defaultProps), props);\n var idProp = combinedProps.id;\n var idProviderProps = {\n id: idProp\n };\n return /*#__PURE__*/external_gform_libraries_.React.createElement(external_gform_utils_react_.IdProvider, idProviderProps, /*#__PURE__*/external_gform_libraries_.React.createElement(PhoneComponent, (0,esm_extends[\"default\"])({}, combinedProps, {\n ref: ref\n })));\n});\n/* harmony default export */ var Phone_PhoneComponent = (PhoneComponentWithId);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vY29tcG9uZW50cy9yZWFjdC9hZG1pbi9tb2R1bGVzL1Bob25lL1Bob25lQ29tcG9uZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sSUFBTUMsS0FBSyxHQUFHLFNBQVJBLEtBQUtBLENBQUtDLE1BQU0sRUFBRUMsR0FBRztFQUFBLE9BQU1ILGlDQUFPLElBQUFJLE1BQUEsQ0FBTUYsTUFBTSxPQUFBRSxNQUFBLENBQU1ELEdBQUcsQ0FBSSxDQUFDO0FBQUE7O0FBRXpFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1FLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFLQyxJQUFJLEVBQU07RUFDdkMsSUFBSyxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFHO0lBQy9CLE1BQU0sSUFBSUMsU0FBUyxDQUFFLHdCQUF5QixDQUFDO0VBQ2hEO0VBQ0EsT0FBT0QsSUFBSSxDQUFDRSxPQUFPLENBQUUsS0FBSyxFQUFFLEVBQUcsQ0FBQztBQUNqQyxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLElBQU1DLFlBQVksR0FBRyxTQUFmQSxZQUFZQSxDQUFLQyxNQUFNLEVBQU07RUFDekMsSUFBSyxPQUFPQSxNQUFNLEtBQUssUUFBUSxFQUFHO0lBQ2pDLE1BQU0sSUFBSUgsU0FBUyxDQUFFLHdCQUF5QixDQUFDO0VBQ2hEO0VBQ0EsT0FBT0csTUFBTSxDQUFDQyxVQUFVLENBQUUsR0FBSSxDQUFDLEdBQzVCRCxNQUFNLE9BQUFOLE1BQUEsQ0FDRE0sTUFBTSxDQUFHO0FBQ2xCLENBQUMsQzs7Ozs7Ozs7Ozs7Ozs7QUNyRDJGO0FBQzlDO0FBRTlDLElBQU1R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