{"version":3,"file":"questionTypeRendererExtension.chunk.96fdd0d564133cca42a7.js","mappings":"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","sources":["webpack://apexchatwidgets/./widgets/core/Utils.js","webpack://apexchatwidgets/./widgets/core/hooks/ChatFlowEnableFlag.js","webpack://apexchatwidgets/./widgets/core/hooks/disableTypingInput.js","webpack://apexchatwidgets/./widgets/core/hooks/enableTypingInput.js","webpack://apexchatwidgets/./widgets/core/hooks/isLastMessage.js","webpack://apexchatwidgets/./widgets/core/hooks/isQTMessageMapped.js","webpack://apexchatwidgets/./widgets/core/hooks/removeValidationTooltip.js","webpack://apexchatwidgets/./widgets/core/hooks/setPlaceholder.js","webpack://apexchatwidgets/./widgets/core/hooks/toTitleCase.js","webpack://apexchatwidgets/./widgets/core/hooks/containsEmoji.js","webpack://apexchatwidgets/./widgets/core/hooks/validateEmailWithEmoji.js","webpack://apexchatwidgets/./widgets/core/hooks/validateName.js","webpack://apexchatwidgets/./widgets/core/hooks/validatePhone.js","webpack://apexchatwidgets/./widgets/core/validators/PhoneContryData.js","webpack://apexchatwidgets/./widgets/core/validators/PhoneValidationHandler.js","webpack://apexchatwidgets/./widgets/core/validators/PhoneValidator.js","webpack://apexchatwidgets/./widgets/core/AutoComplete.js","webpack://apexchatwidgets/./widgets/core/hooks/FullTextValidationMessages.js","webpack://apexchatwidgets/./widgets/questiontypes/QuestionTypeRendererExtension.js","webpack://apexchatwidgets/./widgets/core/hooks/validateZipCode.js","webpack://apexchatwidgets/./widgets/core/hooks/showValidationTooltip.js"],"sourcesContent":["import logIt from '../../logIt';\r\nimport Browser from './hooks/Browser';\r\nimport ChatFlowEnableFlag from './hooks/ChatFlowEnableFlag';\r\nimport setPlaceholder from './hooks/setPlaceholder';\r\n\r\nconst Utils = {\r\n\r\n checkDateValue(date) {\r\n return date && !(new Date(date) == 'Invalid Date') && !isNaN(new Date(date));\r\n },\r\n tryParseJSON(jsonString) {\r\n try {\r\n const o = JSON.parse(jsonString);\r\n // Handle non-exception-throwing cases:\r\n // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,\r\n // but... JSON.parse(null) returns null, and typeof null === \"object\",\r\n // so we must check for that, too. Thankfully, null is falsey, so this suffices:\r\n if (o && typeof o === 'object') {\r\n return o;\r\n }\r\n } catch (e) { }\r\n return false;\r\n },\r\n disableElement(element, options) {\r\n if (!element) return;\r\n const el = element;\r\n\r\n const settings = {\r\n recursively: true,\r\n applyGrayBackground: false,\r\n ...options,\r\n };\r\n // These are the defaults.\r\n\r\n if (settings.applyGrayBackground) {\r\n el.classList.add('apexchat_disabled_element');\r\n }\r\n el.disabled = true;\r\n el.style.pointerEvents = 'none';\r\n if (settings.recursively && el.children) {\r\n for (let item of el.children) {\r\n Utils.disableElement(item, { recursively: true });\r\n }\r\n }\r\n return el;\r\n },\r\n enableElement(element, recursively) {\r\n if (!element) return;\r\n const el = element;\r\n el.disabled = false;\r\n el.style?.pointerEvents = 'auto';\r\n el.classList?.remove('apexchat_disabled_element');\r\n if (recursively && el.children) {\r\n for (let item of el.children) {\r\n Utils.enableElement(item, true);\r\n }\r\n }\r\n return el; // to allow method chaining\r\n },\r\n\r\n // call this method with proper context object; i.e. me\r\n // USAGE: ApexChat.Utils.enableTypingInput.bind2(me)('','');\r\n\r\n preventTyping(element) {\r\n // prevent user to type anything.\r\n // as for mobile browser, only keyup event works for on screen keyboard so we used keyup event to prevent typing\r\n element.eventFunctions = element.eventFunctions || [];\r\n const keyupFunction = (e) => {\r\n element.value = '';\r\n }\r\n element.eventFunctions.push(keyupFunction)\r\n element.addEventListener('keyup', keyupFunction);\r\n return element;\r\n },\r\n removeEvent(element, eventName) {\r\n var events = element.eventFunctions;\r\n if (!events) {\r\n return;\r\n }\r\n element.eventFunctions.forEach(function (listener) {\r\n element.removeEventListener(eventName, listener);\r\n });\r\n },\r\n allowTyping(element) {\r\n // allow user to type anything.\r\n // reverting its functionality to normal keyup\r\n this.removeEvent(element, 'keyup')\r\n\r\n // Manually trigger the keyup event on the cloned element\r\n var event = new Event('keyup');\r\n element.dispatchEvent(event);\r\n logIt('Allow typing called');\r\n return element;\r\n },\r\n // a utility service class which can keep an array (of json type or primitive data types) in the session storage and offer methods to add items\r\n // or check existance based on some property matching (optionally)\r\n\r\n removeHttpProtocols(url) {\r\n return url.replace('http:', '').replace('https:', '');\r\n }\r\n};\r\nexport default Utils","const ChatFlowEnableFlag = {\r\n Disabled: 0,\r\n Auto_Send: 1,\r\n Suggest_Agent: 2\r\n};\r\nexport default ChatFlowEnableFlag;\r\n","import logIt from \"../../../logIt\";\r\nimport Utils from \"../Utils\";\r\nimport Browser from \"./Browser\";\r\nimport ChatFlowEnableFlag from \"./ChatFlowEnableFlag\";\r\nimport removeValidationTooltip from \"./removeValidationTooltip\";\r\nimport setPlaceholder from \"./setPlaceholder\";\r\n\r\nconst disableTypingInput = (me, inputContainerSelector, instruction) => {\r\n // CHAT-7038: disable input\r\n if (!inputContainerSelector) return;\r\n const isScriptBot = (options) =>\r\n options &&\r\n (options.scriptBotEnabled ||\r\n (options.chatModel && options.chatModel.scriptBotEnabled) ||\r\n (options.model && options.model.scriptBotEnabled));\r\n var input = typeof inputContainerSelector === 'string' ? me.context.querySelector(inputContainerSelector) : inputContainerSelector\r\n const textAreaExists = input.getElementsByTagName('textarea')[0]; // check text area exists or not\r\n const autoSendScriptMessage =\r\n me.options.autoSendScriptMessage || me.options.model?.autoSendScriptMessage;\r\n logIt('QTEXT:: input field is disabled now.');\r\n if (Browser.isAndroid() || Browser.isiOS()) {\r\n removeValidationTooltip(input, { toolTipCss: 'livechat_validation_tooltip' })\r\n Utils.disableElement(input, { applyGrayBackground: true });\r\n Utils.preventTyping(input);\r\n if (textAreaExists) {\r\n textAreaExists.classList.add('livechat_disabledcaret');\r\n }\r\n } else if (\r\n me.options &&\r\n (autoSendScriptMessage === ChatFlowEnableFlag.Auto_Send || isScriptBot(me.options))\r\n ) {\r\n removeValidationTooltip(input, { toolTipCss: 'livechat_validation_tooltip' })\r\n Utils.disableElement(input, { applyGrayBackground: true })\r\n if (textAreaExists) {\r\n input = textAreaExists;\r\n }\r\n Utils.disableElement(input).blur();\r\n }\r\n if (instruction) {\r\n setPlaceholder(input, instruction);\r\n }\r\n};\r\nexport default disableTypingInput;","import Utils from \"../Utils\";\r\nimport Browser from \"./Browser\";\r\nimport removeValidationTooltip from \"./removeValidationTooltip\";\r\nimport setPlaceholder from \"./setPlaceholder\";\r\n\r\nconst enableTypingInput = (me, inputContainerSelector, instruction) => {\r\n // CHAT-7038: enable input\r\n if (!inputContainerSelector) return;\r\n const input = typeof inputContainerSelector === 'string' ? me.context.querySelector(inputContainerSelector) : inputContainerSelector;\r\n const textAreaExists = input.getElementsByTagName('textarea')[0]; // check text area exists or not\r\n const autoCompleteExists =\r\n me.options.elements &&\r\n me.options.elements.autoCompleteInput &&\r\n me.context.querySelector(me.options.elements.autoCompleteInput);\r\n if (Browser.isAndroid() || Browser.isiOS()) {\r\n if (textAreaExists) {\r\n input.querySelector('textarea')?.classList.remove('livechat_disabledcaret')\r\n Utils.allowTyping(input);\r\n } else {\r\n input.classList.remove('livechat_disabledcaret')\r\n Utils.allowTyping(input); //allow user to type when input field enabled \r\n }\r\n }\r\n if (Browser.isiOS()) {\r\n // Bug-CHAT-7468 Jquery focus does not open keyboard for IOS devices so its not useful for us.\r\n if (textAreaExists) {\r\n removeValidationTooltip(input, { toolTipCss: 'livechat_validation_tooltip' })\r\n Utils.enableElement(input, { applyGrayBackground: true })\r\n Utils.enableElement(input.getElementsByTagName('textarea')[0]);\r\n } else {\r\n Utils.enableElement(removeValidationTooltip(input, { toolTipCss: 'livechat_validation_tooltip' }))\r\n }\r\n } else if (textAreaExists) {\r\n removeValidationTooltip(input, { toolTipCss: 'livechat_validation_tooltip' })\r\n Utils.enableElement(input, { applyGrayBackground: true })\r\n var area = Utils.enableElement(input.getElementsByTagName('textarea')[0]);\r\n area.focus();\r\n\r\n\r\n } else {\r\n removeValidationTooltip(input, { toolTipCss: 'livechat_validation_tooltip' })\r\n //.first()\r\n Utils.enableElement(input)\r\n input.focus();\r\n }\r\n if (autoCompleteExists) {\r\n me.context.querySelector(me.options.elements.autoCompleteInput).focus();\r\n }\r\n if (instruction) {\r\n setPlaceholder(input, instruction);\r\n }\r\n}\r\nexport default enableTypingInput;","import ParticipantIds from '../enums/ParticipantIds';\r\nimport { SystemMessageType } from '../enums/Enum';\r\n\r\n/**\r\n * Checks the last message from history in only refresh scenario\r\n * @param {any} msgObj message object\r\n */\r\nconst isLastMessage = function (msgObj) {\r\n if (!ApexChat.allHistoryMessages ||\r\n (ApexChat.allHistoryMessages && ApexChat.allHistoryMessages.length == 0)) {\r\n // if no messages in history that means message is from Predefined or message before chat start so set its always true\r\n return true;\r\n }\r\n const allChatMsgs = ApexChat.allHistoryMessages.filter(\r\n (message) => message.userId != ParticipantIds.pokeMessage &&\r\n message.userId != ParticipantIds.nonVisitorSystem\r\n );\r\n const lastMsg = allChatMsgs[allChatMsgs.length - 1];\r\n if (lastMsg) {\r\n const isSmsOptin = lastMsg.systemMessageType\r\n ? lastMsg.systemMessageType == SystemMessageType.SMSOptIn\r\n : false;\r\n if (isSmsOptin) {\r\n return true;\r\n }\r\n }\r\n\r\n const lastMsgId = allChatMsgs.length > 0 && allChatMsgs[allChatMsgs.length - 1].id;\r\n return lastMsgId == msgObj.id;\r\n};\r\nexport default isLastMessage;\r\n","/**\r\n * this gets called in two situations:\r\n * 1- on new QT rendering time: to disable input if no option is mapped and vice versa\r\n * 2- on an option selection: to disable if the selected option is mapped and vice versa\r\n * @param {any} msg\r\n * @param {any} selection\r\n */\r\nconst isQTMessageMapped = (msg, selection) => {\r\n if (!msg) {\r\n return false;\r\n }\r\n // server sends either \"\" or \"[]\" when no options\r\n if (msg.options && msg.options !== '[]') {\r\n // if message has options, we can validate on option selection as well as on rendering time\r\n msg.options = ApexChat.TryParse(msg.options);\r\n if (msg.options.find) {\r\n const foundMapping = msg.options.find((opt) => {\r\n if (selection) {\r\n // on option selection\r\n return (\r\n opt.nextQuestionId > 0 &&\r\n opt.text === selection &&\r\n opt.nextQuestionText != null\r\n );\r\n }\r\n // on rendering time\r\n return opt.nextQuestionId > 0 && opt.nextQuestionText != null;\r\n });\r\n return foundMapping != null;\r\n }\r\n return msg.isNextQuestionMapped;\r\n }\r\n // fallback for those scenarios when options are null;\r\n // on rendering time, we can just use the flag\r\n return msg.isNextQuestionMapped;\r\n};\r\nexport default isQTMessageMapped;\r\n","const removeValidationTooltip = (element, config) => {\r\n // to remove tooltip just pass tooltip css class name\r\n if (!(config && config.toolTipCss) || !element) {\r\n return;\r\n }\r\n element.querySelector(`span.${config.toolTipCss}_text`)?.remove();\r\n element.classList?.remove(config.toolTipCss);\r\n return element;\r\n}\r\nexport default removeValidationTooltip;","const setPlaceholder = (inputElem, tip, textareaIndex) => {\r\n if (!inputElem) {\r\n return;\r\n }\r\n if (inputElem.length === 0) {\r\n return;\r\n }\r\n if (inputElem.children && inputElem.children.length > 0) {\r\n inputElem = inputElem.children[textareaIndex || 0];\r\n } else {\r\n inputElem = Array.isArray(inputElem) ? inputElem[0] : inputElem;\r\n }\r\n inputElem?.setAttribute('placeholder', tip);\r\n};\r\nexport default setPlaceholder;\r\n","const toTitleCase = (str) =>\r\n str.replace(/\\w\\S*/g, (txt) => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase());\r\nexport default toTitleCase;\r\n","const containsEmoji = function (str) {\r\n const regex = /(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\u0023-\\u0039]\\ufe0f?\\u20e3|\\u3299|\\u3297|\\u303d|\\u3030|\\u24c2|\\ud83c[\\udd70-\\udd71]|\\ud83c[\\udd7e-\\udd7f]|\\ud83c\\udd8e|\\ud83c[\\udd91-\\udd9a]|\\ud83c[\\udde6-\\uddff]|\\ud83c[\\ude01-\\ude02]|\\ud83c\\ude1a|\\ud83c\\ude2f|\\ud83c[\\ude32-\\ude3a]|\\ud83c[\\ude50-\\ude51]|\\u203c|\\u2049|[\\u25aa-\\u25ab]|\\u25b6|\\u25c0|[\\u25fb-\\u25fe]|\\u00a9|\\u00ae|\\u2122|\\u2139|\\ud83c\\udc04|[\\u2600\\u26FF]|\\u2b05|\\u2b06|\\u2b07|\\u2b1b|\\u2b1c|\\u2b50|\\u2b55|\\u231a|\\u231b|\\u2328|\\u23cf|[\\u23e9-\\u23f3]|[\\u23f8-\\u23fa]|\\ud83c\\udccf|\\u2934|\\u2935|[\\u2190-\\u21ff])|(xn--)/g;\r\n return regex.test(str);\r\n};\r\nexport default containsEmoji;\r\n","import containsEmoji from \"./containsEmoji\";\r\n\r\nconst validateEmailWithEmoji = function (email) {\r\n const hasEmoji = containsEmoji(email);\r\n const re = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(email) && !hasEmoji;\r\n};\r\nexport default validateEmailWithEmoji;\r\n","const validateName = function (Name) {\r\n const re = /^[a-zA-Z ]{2,}$/;\r\n return re.test(Name);\r\n};\r\nexport default validateName;\r\n","const validatePhone = (phone, re) => {\r\n if (!re || !Array.isArray(re)) {\r\n var re = re || /\\+?\\d{1,4}?[-.\\s]?\\(?\\d{1,3}?\\)?[-.\\s]?\\d{1,4}[-.\\s]?\\d{1,4}[-.\\s]?\\d{1,9}/g; // passes: 111-111-1111\r\n return re.test(phone);\r\n }\r\n if (Array.isArray(re)) {\r\n for (let i = 0; i < re.length; i++) {\r\n if (typeof re[i] === 'object' && re[i].regex) {\r\n const result = re[i].regex.test(phone);\r\n // if minLength is not defined, consider length > 0 as phone no\r\n if (result &&\r\n phone.replace(/[^0-9]/g, '').length >= (re[i].minLimit ? re[i].minLimit : 0)) {\r\n return result;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n};\r\nexport default validatePhone;\r\n","const PhoneCountryData = {\r\n US: {\r\n name: 'United States',\r\n code: 'US',\r\n phonePrefix: '+1',\r\n regex: /^((\\+|)1)*(( )*|-?)(?![0-9]{3}\\))(\\((?=[0-9]{3}\\)))*[0-9]{3}\\)*( |-)?[0-9]{3}( |-)?[0-9]{4}\\b/\r\n // example:\r\n // +1 (222) 123 2345\r\n // +1 234 234 3333 //boolean\r\n // 1 555-555-5555 //true\r\n // 1 (555) 555-5555 //true\r\n // 5555555555 //true\r\n // 555-555-5555 //true\r\n // (555)555-5555 //true\r\n // 1(555)555-5555\r\n // +1-925-237-9209\r\n // +1-(925)-237-9209\r\n // + 1 - (925)237-9209\r\n // + 1 - 925 - 237 - 9209\r\n // + 19252379209\r\n // + 1 - 9252379209\r\n },\r\n GB: {\r\n name: 'United Kingdom',\r\n code: 'UK',\r\n phonePrefix: '+44',\r\n regex: /^(?:0?(?:(\\+|[00])44)?[2-3,7-9]\\d{9})$/\r\n // Example\r\n // 03069990695\r\n // 3069990695\r\n // +443069990695\r\n // 00443069990695\r\n // 09098790941\r\n // +449098790941\r\n // 07700900348\r\n // +447700900348\r\n // 08081570122\r\n },\r\n AU: {\r\n name: 'Australia',\r\n code: 'AU',\r\n phonePrefix: '+61',\r\n regex: /^(?:\\+?(61))? ?(?:\\((?=.*\\)))?(0?[2-57-8])\\)? ?(\\d\\d(?:[- ](?=\\d{3})|(?!\\d\\d[- ]?\\d[- ]))\\d\\d[- ]?\\d[- ]?\\d{3})$/\r\n // example: 0434555444\r\n // 0433 444 444\r\n // 043 3444 444\r\n // +61 0444 444 444\r\n // +61 (0)444 444 444\r\n // +61(0) 401 735 555\r\n // +61 (0) 401 444 444\r\n },\r\n CA: {\r\n name: 'Canada',\r\n code: 'CA',\r\n phonePrefix: '+1',\r\n regex: /^((\\+|)1)*( )*(?![0-9]{3}\\))(\\((?=[0-9]{3}\\)))*[0-9]{3}\\)*( |-)?[0-9]{3}( |-)?[0-9]{4}\\b/\r\n // example:\r\n // +1 (222) 123 2345\r\n // +1 234 234 3333\r\n // 1 555-555-5555\r\n // 1 (555) 555-5555\r\n // 5555555555\r\n // 555-555-5555\r\n // (555)555-5555\r\n // 1(555)555-5555\r\n },\r\n NZ: {\r\n name: 'New Zealand',\r\n code: 'NZ',\r\n phonePrefix: '+64',\r\n regex: /^((\\+|)64)*(( )*|-?)(?![0-9]{2}\\))(\\((?=[0-9]{2}\\)))*[0-9]{2}\\)*( |-)?[0-9]{3}( |-)?\\d{0,4}\\b/\r\n // example:\r\n // +6433863447\r\n // +64278690028\r\n // +64027869002\r\n // +64 21 123 456\r\n // +64-21-123-456\r\n // +64(21) 123 456\r\n // +64(21)-123-456\r\n // +64(21)-121 1456\r\n // +64(21)-121 456\r\n },\r\n OTHER: {\r\n name: 'OTHER',\r\n code: '',\r\n phonePrefix: '',\r\n regex: [\r\n {\r\n regex: /^(1\\s?)?((\\([0-9]{3}\\))|[0-9]{3})[\\s\\-]?[\\0-9]{3}[\\s\\-]?[0-9]{4}$/g,\r\n minLimit: 10\r\n },\r\n {\r\n regex: /^((\\+61\\s?)?(\\((0|02|03|04|07|08)\\))?)?\\s?\\d{1,4}\\s?\\d{1,4}\\s?\\d{0,4}$/g,\r\n minLimit: 8\r\n }\r\n ]\r\n }\r\n};\r\n\r\nexport default PhoneCountryData;\r\n","import { VisitorResponseType } from \"../enums/Enum\";\r\nimport PhoneCountryData from \"./PhoneContryData\";\r\nimport PhoneValidator from \"./PhoneValidator\";\r\n\r\n/**\r\n * A phone validator handler, facilitate phone validation functionality\r\n */\r\nconst PhoneValidationHandler = {\r\n phone: null,\r\n inputField: null,\r\n invalidPhoneNumberMessage: '',\r\n phoneCountryData: null,\r\n shouldEmptyInvalidInputOnTyping: false, // for live input validation in contact info feature\r\n addPhonePrefixNumber() {\r\n const me = this;\r\n if (!me.phoneCountryData) {\r\n // if country not supported by apexchat.\r\n me.phoneCountryData = PhoneCountryData.OTHER;\r\n return;\r\n }\r\n if (me.inputField.value === '') {\r\n me.inputField.value = me.phoneCountryData.phonePrefix;\r\n }\r\n },\r\n removePhonePrefixNumber(cb) {\r\n const me = this;\r\n if (me.lastMessage && me.lastMessage.visitorResponseType === VisitorResponseType.Phone) {\r\n // if we do not apply this condition it will remove the visitor message when agent send another quick message\r\n if (me.inputField.value === me.phoneCountryData.phonePrefix) {\r\n me.inputField.value = '';\r\n }\r\n me.inputField.removeEventListener('focus', cb);\r\n }\r\n },\r\n getInvalidMessageText() {\r\n if (this.phoneCountryData.name !== 'OTHER') {\r\n // if validation is based on country code\r\n return `Please enter a valid ${this.phoneCountryData.name} phone number.`;\r\n }\r\n return 'Please enter a valid phone number (1 555-555-5555)';\r\n },\r\n validate(phone) {\r\n this.phone = phone;\r\n const validator = Object.create(PhoneValidator);\r\n validator.phoneCountryData = this.phoneCountryData;\r\n validator.phone = this.phone;\r\n\r\n const validate = validator.validate();\r\n if (!validate) {\r\n if (!this.shouldEmptyInvalidInputOnTyping) {\r\n // Applying a check so that phone input field won't get erased on every keyup validation (contact info feature live validation - CHAT-9603)\r\n this.inputField.value = '';\r\n }\r\n this.addPhonePrefixNumber();\r\n }\r\n return validate;\r\n }\r\n};\r\nexport default PhoneValidationHandler;\r\n","import validatePhone from \"../hooks/validatePhone\";\r\n\r\n/**\r\n * Phone validator, validate phone with and without company code\r\n */\r\nconst PhoneValidator = {\r\n validate() {\r\n const me = this;\r\n if (me.phoneCountryData.name == 'OTHER') {\r\n return validatePhone(me.phone, me.phoneCountryData.regex);\r\n }\r\n return me.phoneCountryData.regex.test(me.phone);\r\n }\r\n};\r\nexport default PhoneValidator;\r\n","import Browser from \"./hooks/Browser\";\r\n\r\n/**\r\n * This component is developed to render typing area with browser autocomplete feature built-in\r\n */\r\nexport default class AutoComplete {\r\n constructor(options) {\r\n if (options) {\r\n this.name_mapping = {\r\n name: 'name',\r\n fname: 'given-name',\r\n mname: 'additional-name',\r\n lname: 'family-name',\r\n email: 'email',\r\n phone: 'tel',\r\n mobile: 'tel',\r\n region: 'region'\r\n };\r\n this.context = options.context || document;\r\n this.type = options.type || 'name';\r\n this.autocomplete = this.name_mapping[options.type];\r\n this.css = options.className;\r\n this.id = options.id;\r\n this.name = options.name || this.type;\r\n this.placeholder = options.placeholder || 'Please type here';\r\n this.parent =\r\n this.context.querySelector(options.containerSelector) || this.context.body;\r\n this.initialTag = options.autoCompleteInputType || 'INPUT';\r\n this.secTag = options.typingInputType || 'TEXTAREA';\r\n this.triggerEvent = options.eventType || 'keydown';\r\n this.input = options.inputSelector\r\n ? this.context.querySelector(options.inputSelector)\r\n : this.context.createElement(this.initialTag);\r\n this.textarea = options.textareaSelector\r\n ? this.context.querySelector(options.textareaSelector)\r\n : this.context.createElement(this.secTag);\r\n this.frmAutocomplete = this.context.querySelector('#frmAutocomplete');\r\n this.inputLenght = options.inputLenght || 30;\r\n this.enableAutoComplete = options.enableAutoComplete || 'on';\r\n this.makeInputAutoComplete.call(this);\r\n // coloring the inputs for debuging purpose\r\n // if (this.input) {\r\n // this.input.style.backgroundColor = \"blue\";\r\n // }\r\n // if (this.textarea) {\r\n // this.textarea.style.backgroundColor = \"red\";\r\n // }\r\n // register keyup on both elements\r\n if (this.input) {\r\n // null handle check\r\n this.bind.call(this, this.input);\r\n // show/hide on first render\r\n this.toggle.call(this, this.input, true); // show INPUT\r\n }\r\n if (this.textarea) {\r\n // null handle check\r\n this.bind.call(this, this.textarea);\r\n // show/hide on first render\r\n this.toggle.call(this, this.textarea, false); // hide TEXTAREA\r\n }\r\n if (this.enableAutoComplete === 'off') {\r\n this.toggle.call(this, this.input, false);\r\n this.toggle.call(this, this.textarea, true);\r\n }\r\n if (this.frmAutocomplete) {\r\n // null handle check\r\n this.frmAutocomplete.addEventListener('submit', (e) => {\r\n e.preventDefault();\r\n return false;\r\n });\r\n }\r\n }\r\n }\r\n // as per specifications, name attribute vs autocomplete attribute mapping\r\n\r\n /**\r\n * set Auto Complete attributes and classes\r\n */\r\n makeInputAutoComplete() {\r\n // el.id = this.id;\r\n if (!this.input) {\r\n return;\r\n }\r\n this.input.className += ` ${this.css}`;\r\n this.input.name = this.name;\r\n this.input.type = 'text';\r\n this.input.autocomplete = this.enableAutoComplete;\r\n this.input.placeholder = this.placeholder;\r\n }\r\n\r\n /**\r\n *\r\n * @param {el} element\r\n * @param {show} show hide element base on condition\r\n * @param {val} update element value\r\n */\r\n toggle(el, show, val) {\r\n if (!el) {\r\n return;\r\n }\r\n if (show) {\r\n el.style.display = 'block';\r\n if (!Browser.isiOS()) {\r\n el.focus();\r\n }\r\n } else {\r\n el.style.display = 'none';\r\n }\r\n if (el.nodeName == 'TEXTAREA') {\r\n this.frmAutocomplete.style.display = show ? 'none' : 'block';\r\n }\r\n el.value = val || '';\r\n }\r\n\r\n /**\r\n * the dynamic element must check on keyup and toggle when it empties out\r\n */\r\n bind(el) {\r\n const me = this;\r\n el.addEventListener(me.triggerEvent, (e) => {\r\n if (/iPad|iPhone|iPod/.test(navigator.userAgent) || Browser.isAndroid()) {\r\n // do not toggle the inputs in iOs case because it will create flickring effect\r\n return;\r\n }\r\n if (me.input.value.length >= me.inputLenght) {\r\n // if input lenght greater than config length then text area shown\r\n if (me.textarea) {\r\n // null handle check\r\n this.toggle.call(me, me.textarea, true, el.value);\r\n }\r\n if (me.input) {\r\n // null handle check\r\n this.toggle.call(me, me.input, false, el.value); // update input\r\n }\r\n } else {\r\n if (me.textarea) {\r\n // null handle check\r\n this.toggle.call(me, me.textarea, false, el.value);\r\n }\r\n if (me.input) {\r\n // null handle check\r\n this.toggle.call(me, me.input, true, el.value);\r\n }\r\n }\r\n });\r\n }\r\n}\r\n","const FullTextValidationMessages = {\r\n FTPhone: 'Please enter a valid phone number (1 555-555-5555)',\r\n FTMessage: 'Type your message...',\r\n FTName: 'Please enter a valid name',\r\n FTEmail: 'Please enter a valid email address',\r\n FTZipcode: 'Please enter a valid zip code (99501)',\r\n FTAddress: 'Please enter a valid address'\r\n};\r\nexport default FullTextValidationMessages;\r\n","/**\r\n * This is just a wrapper over the previous ApexChat.QuestionTypeRenderer\r\n * with extended functionality of handling FullText and QuickReply a sper CHAT-6960 feature-set\r\n *\r\n * */\r\nimport Utils from '../core/Utils';\r\nimport BaseClass from '../core/BaseClass';\r\nimport WidgetTypes from '../core/enums/WidgetTypes';\r\nimport TempCache from '../core/enums/TempCache';\r\nimport AutoComplete from '../core/AutoComplete';\r\nimport PhoneValidationHandler from '../core/validators/PhoneValidationHandler';\r\nimport PhoneCountryData from '../core/validators/PhoneContryData';\r\nimport ChatFlowEnableFlag from '../core/hooks/ChatFlowEnableFlag';\r\nimport ManageFocusOnKeyEvents from '../core/hooks/ManageFocusOnKeyEvents';\r\nimport PipedMessageHandler from '../core/hooks/PipedMessageHandler';\r\nimport { ScriptsQuestionType, SystemMessageType, VisitorResponseType } from '../core/enums/Enum';\r\nimport checkSpanishLanguage from '../core/hooks/checkSpanishLanguage';\r\nimport toTitleCase from '../core/hooks/toTitleCase';\r\nimport isLastMessage from '../core/hooks/isLastMessage';\r\nimport isQTMessageMapped from '../core/hooks/isQTMessageMapped';\r\nimport setPlaceholder from '../core/hooks/setPlaceholder';\r\nimport TempStorageCache from '../core/hooks/TempStorageCache';\r\nimport Browser from '../core/hooks/Browser';\r\nimport FullTextValidationMessages from '../core/hooks/FullTextValidationMessages';\r\nimport validateEmailWithEmoji from '../core/hooks/validateEmailWithEmoji';\r\nimport ScriptsQuestionTypeToolTips from '../core/hooks/ScriptsQuestionTypeToolTips';\r\nimport isMobile from '../isMobile';\r\nimport validateZipCode from '../core/hooks/validateZipCode';\r\nimport validateName from '../core/hooks/validateName';\r\nimport isAcceptKey from '../core/hooks/isAcceptKey';\r\nimport hideElement from '../core/hooks/hideElement';\r\nimport disableTypingInput from '../core/hooks/disableTypingInput';\r\nimport enableTypingInput from '../core/hooks/enableTypingInput';\r\nimport showValidationTooltip from '../core/hooks/showValidationTooltip';\r\nimport removeValidationTooltip from '../core/hooks/removeValidationTooltip';\r\nimport logIt from '../../logIt';\r\n\r\nexport default class QuestionTypeRendererExtentions extends BaseClass {\r\n constructor() {\r\n super({});\r\n logIt('QTEXT:: QuestionTypeRendererExtentions init');\r\n\r\n // do whatever pre-init work u wanna do here\r\n }\r\n\r\n async initComponent(options) {\r\n // we call this method to explicitly initialize things\r\n const me = this;\r\n if (typeof ApexChat.ApexChatJquery === 'function') {\r\n me.$ = ApexChat.ApexChatJquery;\r\n }\r\n me.options = options;\r\n if (options.widgetType === WidgetTypes.PreChat) {\r\n me.inputTitle = FullTextValidationMessages.FTMessage;\r\n } else {\r\n me.inputTitle = me.getQTPlaceHolder();\r\n }\r\n me.initiator = me.options.widgetType;\r\n me.enableFullTextLogic = options.enableFullTextLogic;\r\n me.lastMessage = null;\r\n me.isLastFullTextValidated = false; // this will be used to track last fulltext message response\r\n me.inputContainer = me.options.inputContainer;\r\n me.isChatStarted = true;\r\n const iframeElm = document.querySelector(`.${me.initiator}_frame`);\r\n me.context =\r\n (iframeElm && (iframeElm.contentWindow || iframeElm.contentDocument).document) ||\r\n me.options.context;\r\n const module = await import(/* webpackChunkName: \"questionTypeRenderer\" */ './QuestionTypeRenderer')\r\n const QuestionTypeRenderer = module.default;\r\n me.questionTypeRenderer = new QuestionTypeRenderer(me.options);\r\n logIt(`QTEXT:: chat initiator info:${me.initiator}`);\r\n\r\n // phone validator work start\r\n me.phoneValidator = Object.create(PhoneValidationHandler);\r\n if (me.inputContainer) {\r\n me.textAreaSelector = me.inputContainer.querySelector('textarea');\r\n me.autoCompleteInput = me.inputContainer.querySelector('input');\r\n }\r\n\r\n me.getCountryCode = function (options) {\r\n if (options.countryCode) {\r\n return options.countryCode;\r\n }\r\n if (options.model && options.model.countryCode) {\r\n return options.model.countryCode;\r\n }\r\n return 'OTHER';\r\n };\r\n const countryCode = me.getCountryCode(me.options);\r\n me.phoneValidator.inputField = me.autoCompleteInput;\r\n // me.phoneValidator.inputField = me.textAreaSelector;\r\n me.phoneValidator.phoneCountryData = PhoneCountryData[countryCode];\r\n me.addPhoneNumberPrefixCallback = me.phoneValidator.addPhonePrefixNumber.bind2(\r\n me.phoneValidator\r\n );\r\n // phone validator work end\r\n }\r\n\r\n validateFullTextMessage(res, options) {\r\n // CHAT-7003, CHAT-7004, CHAT-7005: validate FullText\r\n const me = this;\r\n me.isFromPreChat = options && options.isFromPreChat;\r\n me.isPredefinedResponse = options && options.isPredefinedResponse;\r\n let result = true; // for any other messages\r\n const $txt = typeof me.inputContainer === 'string' ?\r\n me.context.querySelector(me.inputContainer)?.getElementsByTagName('textarea')[0]\r\n : me.inputContainer?.getElementsByTagName('textarea')[0];\r\n let titleCaseName = '';\r\n if (!me.enableFullTextLogic) {\r\n return true;\r\n }\r\n logIt(\"QTEXT:: Validating visitor's response...\");\r\n if (me.messageAskingForContactInfo(me.lastMessage)) {\r\n logIt(`QTEXT::last message's response type expected:${me.lastMessage.type}`);\r\n if (me.lastMessage.visitorResponseType == VisitorResponseType.Name) {\r\n result = me.validateName(res);\r\n if (!result) {\r\n if ($txt) {\r\n $txt?.value = '';\r\n }\r\n me.showError(FullTextValidationMessages.FTName);\r\n } else {\r\n titleCaseName = toTitleCase(res); // FT Name in title case\r\n }\r\n } else if (me.lastMessage.visitorResponseType == VisitorResponseType.Phone) {\r\n result = me.phoneValidator.validate(res);\r\n if (!result) {\r\n me.showError(me.phoneValidator.getInvalidMessageText());\r\n }\r\n else {\r\n me.savePhoneNumber(res);\r\n }\r\n } else if (me.lastMessage.visitorResponseType == VisitorResponseType.Email) {\r\n result = me.validateEmail(res);\r\n if (!result) {\r\n if ($txt) {\r\n $txt.value = '';\r\n }\r\n me.showError(FullTextValidationMessages.FTEmail);\r\n }\r\n } else if (me.lastMessage.visitorResponseType == VisitorResponseType.Region) {\r\n result = me.validateZipCode(res);\r\n if (!result && $txt) {\r\n // CHAT-8754 Invalid answer stays on input field for Full Text Region.\r\n $txt.value = '';\r\n me.showError(FullTextValidationMessages.FTZipcode);\r\n }\r\n }\r\n logIt(`QTEXT:: response validated to be:${result}`);\r\n if (result) {\r\n // valid response? call callback\r\n if (\r\n me.options.elements &&\r\n me.$(me.options.elements.textboxContainerSelector, me.context)\r\n ) {\r\n me.$(me.options.elements.textboxContainerSelector, me.context).removeClass(\r\n 'livechat_tooltip_Error_Enabled'\r\n );\r\n }\r\n if (me.inputContainer) {\r\n removeValidationTooltip($txt, {\r\n toolTipCss: 'livechat_validation_tooltip'\r\n });\r\n }\r\n TempStorageCache.del(TempCache.INPUT_OLD_VALUE); // clear cache as FT has passed validation\r\n hideElement(me.context.querySelector('.apexchat_skip_input')) // hide FT skip input button\r\n me.isLastFullTextValidated = true;\r\n const updatedRes = titleCaseName == '' ? res : titleCaseName;\r\n const answerArray = [];\r\n const response = {\r\n chatId: me.lastMessage.chatId,\r\n isSkipped: false,\r\n isPredefinedResponse: me.isPredefinedResponse,\r\n msgText: res,\r\n agentScriptAnswerId: me.lastMessage.scriptAnswerId,\r\n chatLogId: me.lastMessage.id,\r\n questionType: ScriptsQuestionType.FullText\r\n };\r\n response.questionTypeChatLogIdToBeUpdated = me.lastMessage.id;\r\n answerArray.push({ option: updatedRes });\r\n response.answers = JSON.stringify(answerArray);\r\n logIt('FT::disabling input until FT response is processed:');\r\n logIt(response);\r\n me.disableTypingInput();\r\n if (\r\n me.questionTypeRenderer.options &&\r\n me.questionTypeRenderer.options.responseCallback\r\n ) {\r\n me.questionTypeRenderer.options.responseCallback({\r\n res: response,\r\n cb: () => {\r\n if ($txt) {\r\n $txt.value = ''; // we need to explicitely clear input after a valid FT response\r\n }\r\n }\r\n });\r\n }\r\n } else {\r\n // me.setLastFullText();//on invalid FT input, don't lose it so visitor has a chance to correct it\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n skipFullText() {\r\n const me = this;\r\n me.$('.apexchat_skip_input', me.context).hide(); // hide FT skip input button\r\n const response = {\r\n chatId: me.lastMessage.chatId,\r\n isSkipped: true,\r\n answers: '[{ \"option\": \"' + '' + '\"}]',\r\n msgText: '',\r\n agentScriptAnswerId: me.lastMessage.scriptAnswerId,\r\n chatLogId: me.lastMessage.id,\r\n questionType: ScriptsQuestionType.FullText\r\n };\r\n if (me.questionTypeRenderer.options && me.questionTypeRenderer.options.responseCallback) {\r\n me.questionTypeRenderer.options.responseCallback({\r\n res: response,\r\n cb() {\r\n logIt('FT:: now input should be enabled');\r\n }\r\n });\r\n }\r\n }\r\n\r\n startChat(settings) {\r\n const me = this;\r\n logIt('QTEXT:: Staring Chat...');\r\n if (!settings) {\r\n return; // no settings? no chat\r\n }\r\n // set or reset context\r\n if (settings && settings.initiator) {\r\n me.setInitiatorInfo(settings.initiator);\r\n }\r\n // call back chat window opening function\r\n if (settings.chatInvoker && typeof settings.chatInvoker === 'function') {\r\n settings.chatInvoker();\r\n me.isChatStarted = true;\r\n }\r\n }\r\n\r\n validateName(res) {\r\n // CHAT-7003\r\n return validateName(res);\r\n }\r\n\r\n validatePhone(res) {\r\n // CHAT-7004\r\n // I found validatePhone()'s regex passing even an invalkid number like 12345; hence making it accept a custom regex just in case we have to\r\n // this wone only passes number of the format: 1 555-555-5555\r\n // sending minimum limit as well along with regex to avoid allowing invalid phoneno lengths.\r\n return validatePhone(res, [\r\n {\r\n regex: /^(1\\s?)?((\\([0-9]{3}\\))|[0-9]{3})[\\s\\-]?[\\0-9]{3}[\\s\\-]?[0-9]{4}$/g,\r\n minLimit: 10\r\n },\r\n {\r\n regex: /^((\\+61\\s?)?(\\((0|02|03|04|07|08)\\))?)?\\s?\\d{1,4}\\s?\\d{1,4}\\s?\\d{0,4}$/g,\r\n minLimit: 8\r\n }\r\n ]);\r\n }\r\n\r\n validateEmail(res) {\r\n // CHAT-7005\r\n return validateEmailWithEmoji(res);\r\n }\r\n\r\n validateZipCode(res) {\r\n return validateZipCode(res);\r\n }\r\n\r\n handlePreChatMessages(args) {\r\n const me = this;\r\n me.phoneValidator.lastMessage = me.lastMessage;\r\n // apply custom config as per prechat UI\r\n me.inputContainer = `#apexchat_question_type_text_input_${args.msg.id}`;\r\n const sendButton = me.context.querySelector(`#apexchat-btn-confirm-${args.msg.id}`);\r\n const validateInput = function (e) {\r\n const value = me.context.querySelector(me.inputContainer).value;\r\n if (me.isLastMessageFullText()) {\r\n if (me.validateFullTextMessage(value, { isFromPreChat: args.meta.isFromPreChat })) {\r\n me.questionTypeRenderer.sendResponse(e, args.msg, value);\r\n }\r\n }\r\n };\r\n sendButton?.addEventListener('click', validateInput.bind2(me));\r\n me.phoneValidator.inputField = me.context.querySelector(me.inputContainer);\r\n if (args.msg.visitorResponseType === VisitorResponseType.Phone) {\r\n me.phoneValidator.inputField.addEventListener('focus', me.addPhoneNumberPrefixCallback);\r\n } else {\r\n me.phoneValidator.removePhonePrefixNumber(me.addPhoneNumberPrefixCallback);\r\n }\r\n sendButton?.addEventListener('keyup', (e) => {\r\n if (e.keyCode == 13) {\r\n validateInput(e);\r\n }\r\n });\r\n me.context.querySelector(me.inputContainer)?.addEventListener('keyup', (e) => {\r\n if (e.keyCode == 13) {\r\n validateInput(e);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Check the last phone number response is validated.\r\n */\r\n isLastPhoneTypeValidated() {\r\n const me = this;\r\n return (\r\n me.isLastMessageFullText() &&\r\n !me.isLastFullTextValidated &&\r\n me.lastMessage &&\r\n me.lastMessage.visitorResponseType === VisitorResponseType.Phone\r\n );\r\n }\r\n\r\n enableTypingAreaForNonRD() {\r\n const me = this;\r\n me.$('.livechat_user_input', me.context)\r\n .removeClass('apexchat_disabled_element')\r\n .css('pointer-events', 'auto');\r\n }\r\n\r\n afterRenderMessage(args) {\r\n const me = this;\r\n const isSmsOptin = args.msg.systemMessageType === SystemMessageType.SMSOptIn;\r\n if (isSmsOptin) {\r\n return;\r\n }\r\n me.phoneValidator.lastMessage = this.lastMessage;\r\n const isNextQuestionMapped =\r\n args.msg.isNextQuestionMapped ||\r\n (args.msg.agentScript ? args.msg.agentScript.isNextQuestionMapped : false); // check is next question mapped or not for Non RD case\r\n if (!me.enableFullTextLogic && !isNextQuestionMapped) {\r\n // do nothing after rendering a message\r\n me.enableTypingInput(me.enableTypingAreaForNonRD.bind2(me)); // Classical Standard/Image\r\n return true;\r\n }\r\n if (args.meta.isFromPreChat) {\r\n // this is custom logic plugged in for PreChat\r\n me.handlePreChatMessages(args);\r\n }\r\n\r\n me.currentMsgTypeIsFullText = me.messageAskingForContactInfo(args.msg);\r\n me.lastMsgTypeIsFullText = me.messageAskingForContactInfo(me.lastMessage);\r\n // enable visitor to input name/phone/email/message if required or else disable input field\r\n if (me.isVisitorResponse(args.msg)) {\r\n const isMapped = isQTMessageMapped(this.lastMessage, args.msg.text || ''); // check if the selection of the last message was mapped\r\n logIt('QTEXT:: #isVisitorResponse - Disabling typing Input');\r\n // check last message FT and ismapped then disable typing area\r\n if (\r\n (me.lastMsgTypeIsFullText && isMapped) ||\r\n (me.options.scriptBotEnabled && !me.isTransferredToLiveAgent())\r\n ) {\r\n // during wait for next question textbox should be disabled on scriptbot\r\n args.meta.instruction = me.getQTPlaceHolder(); // asking visitor for wait while textbox is already disabled.\r\n me.disableTypingInput();\r\n } else if (isMapped) {\r\n me.disableTypingInput();\r\n } else {\r\n args.meta.instruction = me.inputTitle; // set default\r\n me.enableTypingInput();\r\n }\r\n // me.textAreaSelector.unbind('focus');\r\n // me.phoneValidator.inputField.val('');\r\n me.phoneValidator.removePhonePrefixNumber(me.addPhoneNumberPrefixCallback);\r\n me.setAutocompletePlaceHolder(args.meta.instruction);\r\n } else {\r\n // is current agent msg FullText? enable with tool tip\r\n if (me.currentMsgTypeIsFullText) {\r\n me.isLastFullTextValidated = false; // reset the flag\r\n args.meta.instruction = args.msg.messagePlaceholder\r\n ? args.msg.messagePlaceholder // is a custom placeholder coming with msg? use it\r\n : me.getInstructionByResponseType(args.msg.visitorResponseType); // fall back on defaults\r\n me.makeAutocomplete(args); // when FT messages render then make input autocomplete\r\n if (args.msg.visitorResponseType === VisitorResponseType.Phone) {\r\n me.phoneValidator.inputField.addEventListener('focus', me.addPhoneNumberPrefixCallback);\r\n // me.textAreaSelector.on('focus', me.addPhoneNumberPrefixCallback);\r\n } else {\r\n me.phoneValidator.removePhonePrefixNumber(me.addPhoneNumberPrefixCallback);\r\n }\r\n if (args.msg.isLastSplitMessage) {\r\n me.enableTypingInput();\r\n } else if (args.msg.isSplitMessage) {\r\n args.meta.instruction = ScriptsQuestionTypeToolTips.Eng.FTEllipses;\r\n me.disableTypingInput();\r\n } else {\r\n me.enableTypingInput();\r\n }\r\n } else {\r\n // normal agent msg? disbale if QT or else enable\r\n me.phoneValidator.removePhonePrefixNumber(me.addPhoneNumberPrefixCallback);\r\n if (me.isMessageQT(args.msg)) {\r\n logIt('QTEXT:: # Handle enable/disable for an Agent QT Message');\r\n // when visitor selected an option switch DOM to windowed to check visitor selected option mapped or not\r\n var isMapped = isQTMessageMapped(\r\n args.msg,\r\n args.msg.visitorSelectedOptions || ''\r\n );\r\n if (!isMapped) {\r\n // if not mapped, enable typing area\r\n if (me.options.scriptBotEnabled && !me.isTransferredToLiveAgent()) {\r\n me.disableTypingInput();\r\n } else {\r\n args.meta.instruction = args.meta.instruction || me.inputTitle;\r\n if (args.msg.isSplitMessage && isMapped) {\r\n // when piped messages are mapped then disable typing area\r\n me.disableTypingInput();\r\n } else {\r\n me.enableTypingInput();\r\n }\r\n }\r\n } else {\r\n // mapped? disable typing area\r\n me.disableTypingInput();\r\n }\r\n // CHAT-7194-Mobile-Keyboard-Sliding-In-Out\r\n // If message is QT we should hide keyboard regardless of map question in mobile device.\r\n if (Browser.isAndroid() || Browser.isiOS()) {\r\n me.$(me.inputContainer, me.context).find('textarea').trigger('blur');\r\n }\r\n } else {\r\n // [Removed \"isSplitMessage\" Condition] - The code is handled above (in Parent IF)\r\n // secondly, it was not correct logically, if the plaintext was splitted or FullText was splitted\r\n // system expects the visitor response and it was disabling the textbox.\r\n // CHAT-8360 once the end chat msg appeared we need to enable the input field.\r\n if (\r\n me.options.scriptBotEnabled &&\r\n args.msg &&\r\n !args.msg.isChatEnded &&\r\n !me.isTransferredToLiveAgent()\r\n ) {\r\n // CHAT-7200 ScriptBot- plain text from preChat should disable input field\r\n args.meta.instruction = ScriptsQuestionTypeToolTips.Eng.FTEllipses;\r\n me.disableTypingInput();\r\n } else {\r\n var isMapped = isQTMessageMapped(args.msg);\r\n args.meta.instruction = me.inputTitle;\r\n logIt('QTEXT:: # Agent Plain Message - Enabling typing Input...');\r\n if ((args.msg.isSplitMessage && isMapped) || args.msg.systemMessageType == SystemMessageType.WebToSMSTransferCompleted) { // when piped messages are mapped then disable typing area\r\n if (args.msg.systemMessageType == SystemMessageType.WebToSMSTransferCompleted) {\r\n //setting scriptBotEnabled true so input can be disabled\r\n me.options.scriptBotEnabled = true;\r\n disableTypingInput.bind2(me)(me, me.inputContainer);\r\n } else {\r\n me.disableTypingInput();\r\n }\r\n } else {\r\n me.enableTypingInput(); // we need input enabled for non-QT, FT and none-QT. Hence commenting out the following lines.\r\n }\r\n // if (args.msg.isSplitMessage) {\r\n // me.disableTypingInput();\r\n // }\r\n // else {\r\n // me.enableTypingInput();///needs to be dbl chkd as to how we will get here\r\n // }\r\n // if (args.msg.questionType == ScriptsQuestionType.FullText) { // split message and FT Predefined enable input field\r\n // me.enableTypingInput();\r\n // }\r\n }\r\n }\r\n me.setAutocompletePlaceHolder(args.meta.instruction);\r\n }\r\n }\r\n if (!isLastMessage(args.msg)) {\r\n // Show instruction of last message only.\r\n // CHAT-8442 After load chat, instruction of last message should be visible only on rest message it should show ellipses\r\n args.meta.instruction = ScriptsQuestionTypeToolTips.Eng.FTEllipses;\r\n }\r\n if (isLastMessage(args.msg)) {\r\n // this condition handle refresh case\r\n me.displaySkipButton(args.msg);\r\n }\r\n me.setInstruction(args.meta.instruction);\r\n me.setAutoCompleteAttributes(args.msg);\r\n const autoSendScriptMessage =\r\n me.options.autoSendScriptMessage || me.options.model?.autoSendScriptMessage;\r\n const isLastQuestionMapped =\r\n me.lastMessage &&\r\n (me.lastMessage.isNextQuestionMapped ||\r\n (me.lastMessage.agentScript\r\n ? me.lastMessage.agentScript.isNextQuestionMapped\r\n : false));\r\n const continueMapping =\r\n (autoSendScriptMessage ||\r\n (me.options.scriptBotEnabled && !me.isTransferredToLiveAgent())) &&\r\n isLastQuestionMapped; //check is next question mapped or not for Non RD case\r\n me.lastMessage = args.msg;\r\n if (\r\n !me.currentMsgTypeIsFullText\r\n && args.msg.questionType != ScriptsQuestionType.WebToSMSNotification\r\n && !(args.msg.questionType == ScriptsQuestionType.None && !args.msg.isSplitMessage && !continueMapping)\r\n ) {\r\n // when current QT is not FullText then enable text area\r\n logIt(`QTEXT:: input toggled msg rendered:${args.msg.text}`);\r\n me.toggleInputTextArea();\r\n }\r\n me.lastMessage.isFullText = args.msg.questionType == ScriptsQuestionType.FullText; // for phone, email, name\r\n // This is the most appropriate place to do actions after a message is possibly completely rendered\r\n if (args.msg.beepAfterRender) {\r\n // playSound functionality now embeded inside a message\r\n args.msg.beepAfterRender();\r\n }\r\n if (args.cb) {\r\n // optional callback: stopPolling\r\n const PipedMessageHandlerSingleton = new PipedMessageHandler();\r\n args.cb.bind2(PipedMessageHandlerSingleton)();\r\n }\r\n logIt(`QTEXT:: last msg: ${me.lastMessage.text} rendered; now do else...`);\r\n }\r\n\r\n toggleInputTextArea() {\r\n const me = this;\r\n const inputSelector =\r\n me.initiator === WidgetTypes.ExitPopup\r\n ? '#apexchat_ep_textarea_input'\r\n : '#apexchat_rd_msg_box';\r\n me.context.querySelector('#txtAutocompleteInput')?.style.display = 'none';\r\n me.context.querySelector('#frmAutocomplete')?.style.display = 'none';\r\n me.context.querySelector(inputSelector)?.style.display = 'block';\r\n }\r\n\r\n setAutoCompleteAttributes(msg) {\r\n // CHAT-6999: set tool tip on input field\r\n const me = this;\r\n let inputElem = ''\r\n if (typeof me.inputContainer === 'string') {\r\n inputElem = me.context.querySelector(me.inputContainer);\r\n } else {\r\n inputElem = me.inputContainer\r\n }\r\n if (me.initiator !== WidgetTypes.PreChat) {\r\n if (typeof me.inputContainer === 'string') {\r\n inputElem = me.context.querySelector(me.autoCompleteInput);\r\n } else {\r\n inputElem = me.autoCompleteInput\r\n }\r\n }\r\n if (!inputElem) return;\r\n switch (msg.visitorResponseType) {\r\n case VisitorResponseType.Phone:\r\n inputElem.setAttribute('name', 'phone');\r\n inputElem.setAttribute('autocomplete', 'phone');\r\n break;\r\n case VisitorResponseType.Email:\r\n inputElem.setAttribute('name', 'email');\r\n inputElem.setAttribute('autocomplete', 'email');\r\n break;\r\n case VisitorResponseType.Region:\r\n inputElem.setAttribute('name', 'region');\r\n inputElem.setAttribute('autocomplete', 'region');\r\n break;\r\n case VisitorResponseType.Name:\r\n inputElem.setAttribute('name', 'name');\r\n inputElem.setAttribute('autocomplete', 'name');\r\n break;\r\n case VisitorResponseType.Address:\r\n inputElem.setAttribute('name', 'address');\r\n inputElem.setAttribute('autocomplete', 'address');\r\n break;\r\n default:\r\n // remove setAttributeibutes\r\n inputElem.setAttribute('autocomplete', 'off');\r\n inputElem.setAttribute('name', 'text');\r\n break;\r\n }\r\n }\r\n\r\n displaySkipButton(msg) {\r\n const me = this;\r\n let skipButtonText = '';\r\n if (msg && msg.isSkippable) {\r\n switch (msg.visitorResponseType) {\r\n case VisitorResponseType.Name:\r\n skipButtonText = 'Skip Name';\r\n break;\r\n case VisitorResponseType.Phone:\r\n skipButtonText = 'Skip Phone Number';\r\n break;\r\n case VisitorResponseType.Email:\r\n skipButtonText = 'Skip Email Address';\r\n break;\r\n case VisitorResponseType.Region:\r\n skipButtonText = 'Skip Region';\r\n break;\r\n case VisitorResponseType.Message:\r\n skipButtonText = 'Skip Message';\r\n break;\r\n case VisitorResponseType.Address:\r\n skipButtonText = 'Skip Address';\r\n break;\r\n }\r\n const skipButton = me.context.querySelector('.apexchat_skip_input');\r\n if (skipButton && skipButton.length > 0) {\r\n // check skip button exists or not\r\n me.skipFTButtonADA(skipButton, skipButtonText); // skip button function for ADA\r\n }\r\n } else {\r\n me.context.querySelector('.apexchat_skip_input')?.style.display = 'none'\r\n }\r\n }\r\n\r\n skipFTButtonADA(element, skipButtonText) {\r\n const me = this;\r\n element.unbind(); // unbind all existing event\r\n element[0].innerText = skipButtonText;\r\n element[0].title = skipButtonText;\r\n ManageFocusOnKeyEvents(element); // on focus border show\r\n element.show();\r\n me.$(element).on('keyup click', (e) => {\r\n // check if button already not selected then do the action\r\n e.stopPropagation();\r\n if (e.type == 'click' || (e.type == 'keyup' && isAcceptKey(e))) {\r\n me.skipFullText.bind2(me)();\r\n }\r\n });\r\n }\r\n\r\n isMessageQT(msg) {\r\n const me = this;\r\n // IF QuestionType is greater than 0 but no 8 (which is FullText)\r\n return (\r\n msg && msg.questionType > 0 && msg.questionType != ScriptsQuestionType.FullText\r\n );\r\n }\r\n\r\n isVisitorResponse(msg) {\r\n const me = this;\r\n const lastMsg = msg || me.lastMessage;\r\n return lastMsg.questionType == 0 && !lastMsg.userId;\r\n }\r\n\r\n isLastPlainMessage() {\r\n const me = this;\r\n return (\r\n me.lastMessage &&\r\n me.lastMessage.questionType == 0 &&\r\n me.lastMessage.visitorResponseType == VisitorResponseType.Message\r\n );\r\n }\r\n\r\n messageAskingForContactInfo(msg) {\r\n // CHAT-6979-detect if it is FullText type of Name/Phone/Email\r\n const me = this;\r\n return (\r\n msg &&\r\n msg.questionType === ScriptsQuestionType.FullText &&\r\n ((msg.visitorResponseType &&\r\n msg.visitorResponseType == VisitorResponseType.Name) ||\r\n msg.visitorResponseType == VisitorResponseType.Phone ||\r\n msg.visitorResponseType == VisitorResponseType.Email ||\r\n msg.visitorResponseType == VisitorResponseType.Region ||\r\n msg.visitorResponseType == VisitorResponseType.Message ||\r\n msg.visitorResponseType == VisitorResponseType.Address)\r\n );\r\n }\r\n\r\n getInstructionByResponseType(type) {\r\n const me = this;\r\n switch (type) {\r\n case VisitorResponseType.Name:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTName\r\n : ScriptsQuestionTypeToolTips.Eng.FTName;\r\n case VisitorResponseType.Email:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTEmail\r\n : ScriptsQuestionTypeToolTips.Eng.FTEmail;\r\n case VisitorResponseType.Phone:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTPhone\r\n : ScriptsQuestionTypeToolTips.Eng.FTPhone;\r\n case VisitorResponseType.Message:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTMessage\r\n : ScriptsQuestionTypeToolTips.Eng.FTMessage;\r\n case VisitorResponseType.Region:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTZipcode\r\n : ScriptsQuestionTypeToolTips.Eng.FTZipcode;\r\n case VisitorResponseType.Address:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTAddress\r\n : ScriptsQuestionTypeToolTips.Eng.FTAddress;\r\n default:\r\n return checkSpanishLanguage(me.options)\r\n ? ScriptsQuestionTypeToolTips.Spa.FTMessage\r\n : ScriptsQuestionTypeToolTips.Eng.FTMessage;\r\n }\r\n }\r\n\r\n isLastMessageFullText() {\r\n const me = this;\r\n return me.lastMessage && me.lastMessage.isFullText;\r\n }\r\n\r\n resizePreChat() {\r\n const me = this;\r\n me.postMessage({\r\n event: 'prechat-auto-resizing',\r\n data: {\r\n isErrorMsgForFT: true,\r\n errorMsgHeight: 160\r\n }\r\n });\r\n }\r\n\r\n showError(error) {\r\n // CHAT-7038:\r\n const me = this;\r\n const inputContainer = typeof me.inputContainer === 'string' ? me.context.querySelector(me.inputContainer) : me.inputContainer;\r\n logIt('QTEXT:: input field is showing error on on invalid input');\r\n const toolTipCss = me.isFromPreChat\r\n ? 'apexchat_prechat_fulltext_error'\r\n : 'livechat_validation_tooltip';\r\n showValidationTooltip(inputContainer, {\r\n toolTipText: error,\r\n toolTipCss,\r\n isPreChatText: me.isFromPreChat\r\n });\r\n if (inputContainer.classList.contains('livechat_validation_tooltip')) {\r\n // check class exists\r\n me.context.querySelector(me.options.elements.textboxContainerSelector,).classList.add(\r\n 'livechat_tooltip_Error_Enabled'\r\n );\r\n }\r\n me.resizePreChat();\r\n }\r\n\r\n disableTypingInput(instruction) {\r\n // CHAT-7038: disable input\r\n const shouldDisableInputContainer = function (msg) {\r\n if (msg) {\r\n return msg.questionType != ScriptsQuestionType.Text;\r\n }\r\n };\r\n const me = this;\r\n if (!me.enableFullTextLogic) {\r\n return;\r\n }\r\n logIt('QTEXT:: input field is disabled now.');\r\n if (\r\n me.options &&\r\n (me.options.autoSendScriptMessage == ChatFlowEnableFlag.Auto_Send ||\r\n me.options.scriptBotEnabled)\r\n ) {\r\n // if scriptBotEnabled true, we need input field to be locked no matter auto send true or false\r\n if (shouldDisableInputContainer(me.options.msg)) {\r\n disableTypingInput.bind2(me)(me, me.inputContainer, instruction);\r\n } else {\r\n me.enableTypingInput();\r\n disableTypingInput.bind2(me)(me, me.textAreaSelector, instruction);\r\n }\r\n }\r\n }\r\n\r\n enableTypingInput(cb) {\r\n // CHAT-7038: enable input\r\n const me = this;\r\n logIt('QTEXT:: input field is enabled now.');\r\n if (typeof me.inputContainer === 'string') {\r\n enableTypingInput.bind2(me)(me, me.context.querySelector(me.inputContainer));\r\n } else {\r\n enableTypingInput.bind2(me)(me, me.inputContainer);\r\n }\r\n\r\n if (cb && typeof cb === 'function') {\r\n // callback function\r\n cb();\r\n }\r\n }\r\n\r\n setInstruction(tip) {\r\n // CHAT-6999: set tool tip on input field\r\n const me = this;\r\n if (!me.isChatStarted) {\r\n return;\r\n }\r\n const textAreaIndex = me.initiator === WidgetTypes.ExitPopup ? 1 : 0; // index of textarea in EP is different from DOM so we need to mention index where textarea lie\r\n let inputElem = ''\r\n if (typeof me.inputContainer === 'string') {\r\n inputElem = me.context.querySelector(me.inputContainer);\r\n } else {\r\n inputElem = me.inputContainer\r\n }\r\n setPlaceholder(inputElem, tip, textAreaIndex);\r\n\r\n logIt(`QTEXT:: has a tip: ${tip}`);\r\n }\r\n\r\n // this either sets a new text value or an old one\r\n setLastFullText(text) {\r\n const me = this;\r\n text = text || TempStorageCache.get(TempCache.INPUT_OLD_VALUE); // if no text specified, set oldVal\r\n try {\r\n const $txt = me.$(me.inputContainer, me.context).first().find('textarea');\r\n if ($txt) {\r\n $txt.val(text);\r\n }\r\n } catch (e) {\r\n // must be breaking due to some null\r\n logIt(`setLastFullText:${e.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * return visitor response type\r\n */\r\n toAutocompleteType(visitorResponseType) {\r\n switch (visitorResponseType) {\r\n case VisitorResponseType.Name:\r\n return 'name';\r\n case VisitorResponseType.Email:\r\n return 'email';\r\n case VisitorResponseType.Phone:\r\n return 'phone';\r\n case VisitorResponseType.Region:\r\n return 'region';\r\n }\r\n }\r\n\r\n /**\r\n *\r\n * @param {args} args initialize auto complete options\r\n */\r\n makeAutocomplete(args) {\r\n const me = this;\r\n if (me.options.widgetType === WidgetTypes.PreChat) {\r\n // do not show autocomplete if inputSelectorhat\r\n // if we put message type in this condition it will create other issues.\r\n return;\r\n }\r\n const autoComplete = new AutoComplete({\r\n enableAutoComplete:\r\n args.msg.visitorResponseType === VisitorResponseType.Message ||\r\n isMobile()\r\n ? 'off'\r\n : 'on',\r\n type: me.toAutocompleteType(args.msg.visitorResponseType),\r\n // id: 'apexchat_rd_msg_box',\r\n className: 'apexchat_ada_compliance',\r\n placeholder: args.meta.instruction,\r\n title: 'Type your response and press Return or Send',\r\n // containerSelector: me.options.elements.inputContainerSelector,\r\n // autocompleteOnOff: 'off',\r\n inputSelector: '#txtAutocompleteInput',\r\n textareaSelector:\r\n me.initiator === WidgetTypes.ExitPopup\r\n ? '#apexchat_ep_textarea_input'\r\n : '#apexchat_rd_msg_box',\r\n context: me.context\r\n });\r\n }\r\n\r\n setAutocompletePlaceHolder(tip) {\r\n const me = this;\r\n me.context.querySelector('#txtAutocompleteInput')?.setAttribute('placeholder', tip);\r\n me.context.querySelector('#txtAutocompleteInput')?.setAttribute('name', '');\r\n me.context.querySelector('#txtAutocompleteInput')?.setAttribute('autocomplete', 'off');\r\n }\r\n}\r\n","/*\r\nValidate standard zip code like 00501\r\n@zipcode : Zip code to test\r\n*/\r\nconst validateZipCode = function (zipcode) {\r\n // examples :re.text(00501)\r\n const re = /(^\\d{5}$)|(^\\d{5}-\\d{4}$)/;\r\n return re.test(zipcode);\r\n};\r\nexport default validateZipCode;\r\n","const showValidationTooltip = (element, config) => {\r\n // to show tooltip just pass tooltip text and css class name\r\n if (!(config && config.toolTipText)) {\r\n return;\r\n }\r\n if (config.isPreChatText) {\r\n var wrapper = document.createElement('div');\r\n wrapper.innerHTML = `
${config.toolTipText}
`\r\n element.parentElement.parentElement.querySelector('#err_msg_id')?.remove()\r\n\r\n element.closest('.apexchat_rd_prechat_input').classList.add(config.toolTipCss);\r\n element.parentElement.parentElement.append(wrapper)\r\n\r\n } else {\r\n element.querySelector(`span.${config.toolTipCss}_text`)?.remove();\r\n element.classList.add(config.toolTipCss);\r\n var wrapper = document.createElement('div');\r\n wrapper.innerHTML = `${config.toolTipText}`\r\n\r\n element.append(wrapper);\r\n }\r\n return element\r\n}\r\nexport default showValidationTooltip;"],"names":["Utils","checkDateValue","date","Date","isNaN","tryParseJSON","jsonString","o","JSON","parse","e","disableElement","element","options","el","settings","recursively","applyGrayBackground","classList","add","disabled","style","pointerEvents","children","item","enableElement","_el$style","remove","preventTyping","eventFunctions","keyupFunction","value","push","addEventListener","removeEvent","eventName","forEach","listener","removeEventListener","allowTyping","this","event","Event","dispatchEvent","logIt","removeHttpProtocols","url","replace","Disabled","Auto_Send","Suggest_Agent","disableTypingInput","me","inputContainerSelector","instruction","input","context","querySelector","textAreaExists","getElementsByTagName","autoSendScriptMessage","model","Browser","isAndroid","isiOS","removeValidationTooltip","toolTipCss","ChatFlowEnableFlag","scriptBotEnabled","chatModel","blur","setPlaceholder","enableTypingInput","autoCompleteExists","elements","autoCompleteInput","focus","msgObj","ApexChat","allHistoryMessages","length","allChatMsgs","filter","message","userId","ParticipantIds","pokeMessage","nonVisitorSystem","lastMsg","systemMessageType","SystemMessageType","SMSOptIn","id","isQTMessageMapped","msg","selection","TryParse","find","opt","nextQuestionId","text","nextQuestionText","isNextQuestionMapped","config","inputElem","tip","textareaIndex","Array","isArray","setAttribute","str","txt","charAt","toUpperCase","substr","toLowerCase","email","hasEmoji","test","Name","validatePhone","phone","re","i","regex","result","minLimit","US","name","code","phonePrefix","GB","AU","CA","NZ","OTHER","PhoneValidationHandler","inputField","invalidPhoneNumberMessage","phoneCountryData","shouldEmptyInvalidInputOnTyping","addPhonePrefixNumber","PhoneCountryData","removePhonePrefixNumber","cb","lastMessage","visitorResponseType","VisitorResponseType","Phone","getInvalidMessageText","validate","validator","Object","create","PhoneValidator","AutoComplete","constructor","name_mapping","fname","mname","lname","mobile","region","document","type","autocomplete","css","className","placeholder","parent","containerSelector","body","initialTag","autoCompleteInputType","secTag","typingInputType","triggerEvent","eventType","inputSelector","createElement","textarea","textareaSelector","frmAutocomplete","inputLenght","enableAutoComplete","makeInputAutoComplete","call","bind","toggle","preventDefault","show","val","display","nodeName","navigator","userAgent","QuestionTypeRendererExtentions","BaseClass","super","initComponent","ApexChatJquery","$","widgetType","WidgetTypes","PreChat","inputTitle","FullTextValidationMessages","getQTPlaceHolder","initiator","enableFullTextLogic","isLastFullTextValidated","inputContainer","isChatStarted","iframeElm","contentWindow","contentDocument","QuestionTypeRenderer","default","questionTypeRenderer","phoneValidator","textAreaSelector","getCountryCode","countryCode","addPhoneNumberPrefixCallback","bind2","validateFullTextMessage","res","isFromPreChat","isPredefinedResponse","$txt","titleCaseName","messageAskingForContactInfo","validateName","toTitleCase","showError","savePhoneNumber","Email","validateEmail","Region","validateZipCode","textboxContainerSelector","removeClass","TempStorageCache","del","TempCache","INPUT_OLD_VALUE","hideElement","updatedRes","answerArray","response","chatId","isSkipped","msgText","agentScriptAnswerId","scriptAnswerId","chatLogId","questionType","ScriptsQuestionType","FullText","questionTypeChatLogIdToBeUpdated","option","answers","stringify","responseCallback","skipFullText","hide","startChat","setInitiatorInfo","chatInvoker","validateEmailWithEmoji","handlePreChatMessages","args","sendButton","validateInput","isLastMessageFullText","meta","sendResponse","keyCode","isLastPhoneTypeValidated","enableTypingAreaForNonRD","afterRenderMessage","agentScript","currentMsgTypeIsFullText","lastMsgTypeIsFullText","isVisitorResponse","isMapped","isTransferredToLiveAgent","setAutocompletePlaceHolder","messagePlaceholder","getInstructionByResponseType","makeAutocomplete","isLastSplitMessage","isSplitMessage","ScriptsQuestionTypeToolTips","Eng","FTEllipses","isMessageQT","visitorSelectedOptions","trigger","isChatEnded","WebToSMSTransferCompleted","isLastMessage","displaySkipButton","setInstruction","setAutoCompleteAttributes","isLastQuestionMapped","continueMapping","WebToSMSNotification","None","toggleInputTextArea","isFullText","beepAfterRender","PipedMessageHandlerSingleton","PipedMessageHandler","_me$context$querySele","_me$context$querySele2","_me$context$querySele3","ExitPopup","Address","skipButtonText","isSkippable","Message","skipButton","skipFTButtonADA","_me$context$querySele4","unbind","innerText","title","ManageFocusOnKeyEvents","on","stopPropagation","isAcceptKey","isLastPlainMessage","checkSpanishLanguage","Spa","FTName","FTEmail","FTPhone","FTMessage","FTZipcode","FTAddress","resizePreChat","postMessage","data","isErrorMsgForFT","errorMsgHeight","error","showValidationTooltip","wrapper","toolTipText","isPreChatText","innerHTML","parentElement","closest","append","contains","Text","shouldDisableInputContainer","textAreaIndex","setLastFullText","get","first","toAutocompleteType","isMobile"],"sourceRoot":""}