{"version":3,"file":"component---src-pages-contact-js-15dc7f963ab748a3986f.js","mappings":"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","sources":["webpack://ace-industrial-academy/./src/components/page-title.js","webpack://ace-industrial-academy/./src/components/titleBanner/TitleBannerEnquiry.js","webpack://ace-industrial-academy/./node_modules/react-number-format/dist/react-number-format.es.js","webpack://ace-industrial-academy/./src/components/hr.js","webpack://ace-industrial-academy/./src/components/contact/form/ContactForm.js","webpack://ace-industrial-academy/./src/components/contact/ContactUs.js","webpack://ace-industrial-academy/./src/pages/contact.js"],"sourcesContent":["import React from \"react\"\nimport styled from \"styled-components\"\n\nconst Background = styled.div`\n background: #007bff;\n color: white;\n padding: 8rem 0;\n clip-path: polygon(0 0, 100% 0, 100% 85%, 0% 100%);\n text-align: center;\n`\n\nlet PageTitle = ({ title }) => (\n \n

{title}

\n
\n)\n\nexport default PageTitle\n","import React from \"react\"\nimport { useState } from \"react\"\nimport FilterButton from \"../common/filter/FilterButton\"\nimport SearchBox from \"../common/searchbox/SearchBox\"\nimport \"./banner.scss\"\nimport { useMediaQuery } from \"react-responsive\"\nimport { navigate } from \"gatsby\"\nimport BackgroundImage from \"gatsby-background-image\"\nimport { graphql, useStaticQuery } from \"gatsby\"\nimport { isBrowser } from \"../../context/utils\"\nimport Logo from \"../../assets/aia-logo\"\nimport { Link as GatsbyLink } from \"gatsby\"\nimport { Modal, ModalHeader, ModalBody } from \"reactstrap\"\nimport CourseRegistrationForm from \"../product-detail/CourseRegistration/courseRegistrationForm\"\n\nconst TitleBannerEnquiry = (props) => {\n const {\n id,\n title,\n description,\n handleFilterClick,\n isFilterOpen,\n withoutFilter,\n selfCheckout,\n withOnlyDescription,\n hasPlainBanner,\n netFee,\n coverPhoto,\n scroll,\n courseRuns,\n } = props\n\n const isMobile = useMediaQuery({\n query: \"(max-width: 565px)\",\n })\n\n const [isSuccess, setIsSuccess] = useState(false)\n const [modal, setModal] = useState(false)\n\n const toggle = () => setModal(!modal)\n\n const handleRegisterClick = () => {\n let url =\n \"mailto:training@aia.edu.sg?subject=Request for Course Quotation&body=Hello Ace, D%0A Course Title: test %0D%0A Name: D%0A Email: D%0A Contact Number:\"\n if (!isBrowser()) return\n window.open(url, \"_blank\")\n }\n\n const bannerImage = useStaticQuery(\n graphql`\n query {\n background1: file(\n relativePath: { eq: \"innerpage-bg.png\" }\n ) {\n childImageSharp {\n fluid(quality: 100, maxWidth: 1920) {\n ...GatsbyImageSharpFluid\n }\n }\n }\n background2: file(\n relativePath: { eq: \"contact-bg.png\" }\n ) {\n childImageSharp {\n fluid(quality: 100, maxWidth: 1920) {\n ...GatsbyImageSharpFluid\n }\n }\n }\n }\n `\n )\n\n const BannerBGImage1 =\n bannerImage.background1.childImageSharp.fluid\n const BannerBGImage2 =\n bannerImage.background2.childImageSharp.fluid\n\n return (\n <>\n \n
\n
\n

{title}

\n

\n {description}\n

\n
\n
\n handleRegisterClick()}\n >\n Enquire Now\n \n
\n
\n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n
\n \n )\n}\n\nexport default TitleBannerEnquiry\n","/**\n * react-number-format - 4.8.0\n * Author : Sudhanshu Yadav\n * Copyright (c) 2016, 2021 to Sudhanshu Yadav, released under the MIT license.\n * https://github.com/s-yadav/react-number-format\n */\nimport React from 'react'; // \n// basic noop function\n\nfunction noop() {}\n\nfunction returnTrue() {\n return true;\n}\n\nfunction charIsNumber(char) {\n return !!(char || '').match(/\\d/);\n}\n\nfunction isNil(val) {\n return val === null || val === undefined;\n}\n\nfunction escapeRegExp(str) {\n return str.replace(/[-[\\]/{}()*+?.\\\\^$|]/g, '\\\\$&');\n}\n\nfunction getThousandsGroupRegex(thousandsGroupStyle) {\n switch (thousandsGroupStyle) {\n case 'lakh':\n return /(\\d+?)(?=(\\d\\d)+(\\d)(?!\\d))(\\.\\d+)?/g;\n\n case 'wan':\n return /(\\d)(?=(\\d{4})+(?!\\d))/g;\n\n case 'thousand':\n default:\n return /(\\d)(?=(\\d{3})+(?!\\d))/g;\n }\n}\n\nfunction applyThousandSeparator(str, thousandSeparator, thousandsGroupStyle) {\n var thousandsGroupRegex = getThousandsGroupRegex(thousandsGroupStyle);\n var index = str.search(/[1-9]/);\n index = index === -1 ? str.length : index;\n return str.substring(0, index) + str.substring(index, str.length).replace(thousandsGroupRegex, '$1' + thousandSeparator);\n} //spilt a float number into different parts beforeDecimal, afterDecimal, and negation\n\n\nfunction splitDecimal(numStr, allowNegative) {\n if (allowNegative === void 0) allowNegative = true;\n var hasNagation = numStr[0] === '-';\n var addNegation = hasNagation && allowNegative;\n numStr = numStr.replace('-', '');\n var parts = numStr.split('.');\n var beforeDecimal = parts[0];\n var afterDecimal = parts[1] || '';\n return {\n beforeDecimal: beforeDecimal,\n afterDecimal: afterDecimal,\n hasNagation: hasNagation,\n addNegation: addNegation\n };\n}\n\nfunction fixLeadingZero(numStr) {\n if (!numStr) {\n return numStr;\n }\n\n var isNegative = numStr[0] === '-';\n\n if (isNegative) {\n numStr = numStr.substring(1, numStr.length);\n }\n\n var parts = numStr.split('.');\n var beforeDecimal = parts[0].replace(/^0+/, '') || '0';\n var afterDecimal = parts[1] || '';\n return \"\" + (isNegative ? '-' : '') + beforeDecimal + (afterDecimal ? \".\" + afterDecimal : '');\n}\n/**\n * limit decimal numbers to given scale\n * Not used .fixedTo because that will break with big numbers\n */\n\n\nfunction limitToScale(numStr, scale, fixedDecimalScale) {\n var str = '';\n var filler = fixedDecimalScale ? '0' : '';\n\n for (var i = 0; i <= scale - 1; i++) {\n str += numStr[i] || filler;\n }\n\n return str;\n}\n\nfunction repeat(str, count) {\n return Array(count + 1).join(str);\n}\n\nfunction toNumericString(num) {\n num += ''; // typecast number to string\n // store the sign and remove it from the number.\n\n var sign = num[0] === '-' ? '-' : '';\n\n if (sign) {\n num = num.substring(1);\n } // split the number into cofficient and exponent\n\n\n var ref = num.split(/[eE]/g);\n var coefficient = ref[0];\n var exponent = ref[1]; // covert exponent to number;\n\n exponent = Number(exponent); // if there is no exponent part or its 0, return the coffiecient with sign\n\n if (!exponent) {\n return sign + coefficient;\n }\n\n coefficient = coefficient.replace('.', '');\n /**\n * for scientific notation the current decimal index will be after first number (index 0)\n * So effective decimal index will always be 1 + exponent value\n */\n\n var decimalIndex = 1 + exponent;\n var coffiecientLn = coefficient.length;\n\n if (decimalIndex < 0) {\n // if decimal index is less then 0 add preceding 0s\n // add 1 as join will have\n coefficient = '0.' + repeat('0', Math.abs(decimalIndex)) + coefficient;\n } else if (decimalIndex >= coffiecientLn) {\n // if decimal index is less then 0 add leading 0s\n coefficient = coefficient + repeat('0', decimalIndex - coffiecientLn);\n } else {\n // else add decimal point at proper index\n coefficient = (coefficient.substring(0, decimalIndex) || '0') + '.' + coefficient.substring(decimalIndex);\n }\n\n return sign + coefficient;\n}\n/**\n * This method is required to round prop value to given scale.\n * Not used .round or .fixedTo because that will break with big numbers\n */\n\n\nfunction roundToPrecision(numStr, scale, fixedDecimalScale) {\n //if number is empty don't do anything return empty string\n if (['', '-'].indexOf(numStr) !== -1) {\n return numStr;\n }\n\n var shoudHaveDecimalSeparator = numStr.indexOf('.') !== -1 && scale;\n var ref = splitDecimal(numStr);\n var beforeDecimal = ref.beforeDecimal;\n var afterDecimal = ref.afterDecimal;\n var hasNagation = ref.hasNagation;\n var floatValue = parseFloat(\"0.\" + (afterDecimal || '0'));\n var floatValueStr = afterDecimal.length <= scale ? \"0.\" + afterDecimal : floatValue.toFixed(scale);\n var roundedDecimalParts = floatValueStr.split('.');\n var intPart = beforeDecimal.split('').reverse().reduce(function (roundedStr, current, idx) {\n if (roundedStr.length > idx) {\n return (Number(roundedStr[0]) + Number(current)).toString() + roundedStr.substring(1, roundedStr.length);\n }\n\n return current + roundedStr;\n }, roundedDecimalParts[0]);\n var decimalPart = limitToScale(roundedDecimalParts[1] || '', Math.min(scale, afterDecimal.length), fixedDecimalScale);\n var negation = hasNagation ? '-' : '';\n var decimalSeparator = shoudHaveDecimalSeparator ? '.' : '';\n return \"\" + negation + intPart + decimalSeparator + decimalPart;\n}\n/** set the caret positon in an input field **/\n\n\nfunction setCaretPosition(el, caretPos) {\n el.value = el.value; // ^ this is used to not only get 'focus', but\n // to make sure we don't have it everything -selected-\n // (it causes an issue in chrome, and having it doesn't hurt any other browser)\n\n if (el !== null) {\n if (el.createTextRange) {\n var range = el.createTextRange();\n range.move('character', caretPos);\n range.select();\n return true;\n } // (el.selectionStart === 0 added for Firefox bug)\n\n\n if (el.selectionStart || el.selectionStart === 0) {\n el.focus();\n el.setSelectionRange(caretPos, caretPos);\n return true;\n } // fail city, fortunately this never happens (as far as I've tested) :)\n\n\n el.focus();\n return false;\n }\n}\n/**\n Given previous value and newValue it returns the index\n start - end to which values have changed.\n This function makes assumption about only consecutive\n characters are changed which is correct assumption for caret input.\n*/\n\n\nfunction findChangedIndex(prevValue, newValue) {\n var i = 0,\n j = 0;\n var prevLength = prevValue.length;\n var newLength = newValue.length;\n\n while (prevValue[i] === newValue[i] && i < prevLength) {\n i++;\n } //check what has been changed from last\n\n\n while (prevValue[prevLength - 1 - j] === newValue[newLength - 1 - j] && newLength - j > i && prevLength - j > i) {\n j++;\n }\n\n return {\n start: i,\n end: prevLength - j\n };\n}\n/*\n Returns a number whose value is limited to the given range\n*/\n\n\nfunction clamp(num, min, max) {\n return Math.min(Math.max(num, min), max);\n}\n\nfunction getCurrentCaretPosition(el) {\n /*Max of selectionStart and selectionEnd is taken for the patch of pixel and other mobile device caret bug*/\n return Math.max(el.selectionStart, el.selectionEnd);\n}\n\nfunction addInputMode(format) {\n return format || typeof navigator !== 'undefined' && !(navigator.platform && /iPhone|iPod/.test(navigator.platform));\n} // \n\n\nfunction objectWithoutProperties(obj, exclude) {\n var target = {};\n\n for (var k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k];\n }\n\n return target;\n}\n\nvar defaultProps = {\n displayType: 'input',\n decimalSeparator: '.',\n thousandsGroupStyle: 'thousand',\n fixedDecimalScale: false,\n prefix: '',\n suffix: '',\n allowNegative: true,\n allowEmptyFormatting: false,\n allowLeadingZeros: false,\n isNumericString: false,\n type: 'text',\n onValueChange: noop,\n onChange: noop,\n onKeyDown: noop,\n onMouseUp: noop,\n onFocus: noop,\n onBlur: noop,\n isAllowed: returnTrue\n};\n\nvar NumberFormat = /*@__PURE__*/function (superclass) {\n function NumberFormat(props) {\n superclass.call(this, props);\n var defaultValue = props.defaultValue; //validate props\n\n this.validateProps();\n var formattedValue = this.formatValueProp(defaultValue);\n this.state = {\n value: formattedValue,\n numAsString: this.removeFormatting(formattedValue),\n mounted: false\n };\n this.selectionBeforeInput = {\n selectionStart: 0,\n selectionEnd: 0\n };\n this.onChange = this.onChange.bind(this);\n this.onKeyDown = this.onKeyDown.bind(this);\n this.onMouseUp = this.onMouseUp.bind(this);\n this.onFocus = this.onFocus.bind(this);\n this.onBlur = this.onBlur.bind(this);\n }\n\n if (superclass) NumberFormat.__proto__ = superclass;\n NumberFormat.prototype = Object.create(superclass && superclass.prototype);\n NumberFormat.prototype.constructor = NumberFormat;\n\n NumberFormat.prototype.componentDidMount = function componentDidMount() {\n // set mounted state\n // eslint-disable-next-line react/no-did-mount-set-state\n this.setState({\n mounted: true\n });\n };\n\n NumberFormat.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n this.updateValueIfRequired(prevProps);\n };\n\n NumberFormat.prototype.componentWillUnmount = function componentWillUnmount() {\n clearTimeout(this.focusTimeout);\n clearTimeout(this.caretPositionTimeout);\n };\n\n NumberFormat.prototype.updateValueIfRequired = function updateValueIfRequired(prevProps) {\n var ref = this;\n var props = ref.props;\n var state = ref.state;\n var focusedElm = ref.focusedElm;\n var stateValue = state.value;\n var lastNumStr = state.numAsString;\n if (lastNumStr === void 0) lastNumStr = ''; // If only state changed no need to do any thing\n\n if (prevProps !== props) {\n //validate props\n this.validateProps();\n var lastValueWithNewFormat = this.formatNumString(lastNumStr);\n var formattedValue = isNil(props.value) ? lastValueWithNewFormat : this.formatValueProp();\n var numAsString = this.removeFormatting(formattedValue);\n var floatValue = parseFloat(numAsString);\n var lastFloatValue = parseFloat(lastNumStr);\n\n if ( //while typing set state only when float value changes\n (!isNaN(floatValue) || !isNaN(lastFloatValue)) && floatValue !== lastFloatValue || //can also set state when float value is same and the format props changes\n lastValueWithNewFormat !== stateValue || //set state always when not in focus and formatted value is changed\n focusedElm === null && formattedValue !== stateValue) {\n this.updateValue({\n formattedValue: formattedValue,\n numAsString: numAsString,\n input: focusedElm,\n source: 'prop',\n event: null\n });\n }\n }\n };\n /** Misc methods **/\n\n\n NumberFormat.prototype.getFloatString = function getFloatString(num) {\n if (num === void 0) num = '';\n var ref = this.props;\n var decimalScale = ref.decimalScale;\n var ref$1 = this.getSeparators();\n var decimalSeparator = ref$1.decimalSeparator;\n var numRegex = this.getNumberRegex(true); //remove negation for regex check\n\n var hasNegation = num[0] === '-';\n\n if (hasNegation) {\n num = num.replace('-', '');\n } //if decimal scale is zero remove decimal and number after decimalSeparator\n\n\n if (decimalSeparator && decimalScale === 0) {\n num = num.split(decimalSeparator)[0];\n }\n\n num = (num.match(numRegex) || []).join('').replace(decimalSeparator, '.'); //remove extra decimals\n\n var firstDecimalIndex = num.indexOf('.');\n\n if (firstDecimalIndex !== -1) {\n num = num.substring(0, firstDecimalIndex) + \".\" + num.substring(firstDecimalIndex + 1, num.length).replace(new RegExp(escapeRegExp(decimalSeparator), 'g'), '');\n } //add negation back\n\n\n if (hasNegation) {\n num = '-' + num;\n }\n\n return num;\n }; //returned regex assumes decimalSeparator is as per prop\n\n\n NumberFormat.prototype.getNumberRegex = function getNumberRegex(g, ignoreDecimalSeparator) {\n var ref = this.props;\n var format = ref.format;\n var decimalScale = ref.decimalScale;\n var customNumerals = ref.customNumerals;\n var ref$1 = this.getSeparators();\n var decimalSeparator = ref$1.decimalSeparator;\n return new RegExp('[0-9' + (customNumerals ? customNumerals.join('') : '') + ']' + (decimalSeparator && decimalScale !== 0 && !ignoreDecimalSeparator && !format ? '|' + escapeRegExp(decimalSeparator) : ''), g ? 'g' : undefined);\n };\n\n NumberFormat.prototype.getSeparators = function getSeparators() {\n var ref = this.props;\n var decimalSeparator = ref.decimalSeparator;\n var ref$1 = this.props;\n var thousandSeparator = ref$1.thousandSeparator;\n var allowedDecimalSeparators = ref$1.allowedDecimalSeparators;\n\n if (thousandSeparator === true) {\n thousandSeparator = ',';\n }\n\n if (!allowedDecimalSeparators) {\n allowedDecimalSeparators = [decimalSeparator, '.'];\n }\n\n return {\n decimalSeparator: decimalSeparator,\n thousandSeparator: thousandSeparator,\n allowedDecimalSeparators: allowedDecimalSeparators\n };\n };\n\n NumberFormat.prototype.getMaskAtIndex = function getMaskAtIndex(index) {\n var ref = this.props;\n var mask = ref.mask;\n if (mask === void 0) mask = ' ';\n\n if (typeof mask === 'string') {\n return mask;\n }\n\n return mask[index] || ' ';\n };\n\n NumberFormat.prototype.getValueObject = function getValueObject(formattedValue, numAsString) {\n var floatValue = parseFloat(numAsString);\n return {\n formattedValue: formattedValue,\n value: numAsString,\n floatValue: isNaN(floatValue) ? undefined : floatValue\n };\n };\n\n NumberFormat.prototype.validateProps = function validateProps() {\n var ref = this.props;\n var mask = ref.mask; //validate decimalSeparator and thousandSeparator\n\n var ref$1 = this.getSeparators();\n var decimalSeparator = ref$1.decimalSeparator;\n var thousandSeparator = ref$1.thousandSeparator;\n\n if (decimalSeparator === thousandSeparator) {\n throw new Error(\"\\n Decimal separator can't be same as thousand separator.\\n thousandSeparator: \" + thousandSeparator + \" (thousandSeparator = {true} is same as thousandSeparator = \\\",\\\")\\n decimalSeparator: \" + decimalSeparator + \" (default value for decimalSeparator is .)\\n \");\n } //validate mask\n\n\n if (mask) {\n var maskAsStr = mask === 'string' ? mask : mask.toString();\n\n if (maskAsStr.match(/\\d/g)) {\n throw new Error(\"\\n Mask \" + mask + \" should not contain numeric character;\\n \");\n }\n }\n };\n /** Misc methods end **/\n\n /** caret specific methods **/\n\n\n NumberFormat.prototype.setPatchedCaretPosition = function setPatchedCaretPosition(el, caretPos, currentValue) {\n /* setting caret position within timeout of 0ms is required for mobile chrome,\n otherwise browser resets the caret position after we set it\n We are also setting it without timeout so that in normal browser we don't see the flickering */\n setCaretPosition(el, caretPos);\n this.caretPositionTimeout = setTimeout(function () {\n if (el.value === currentValue) {\n setCaretPosition(el, caretPos);\n }\n }, 0);\n };\n /* This keeps the caret within typing area so people can't type in between prefix or suffix */\n\n\n NumberFormat.prototype.correctCaretPosition = function correctCaretPosition(value, caretPos, direction) {\n var ref = this.props;\n var prefix = ref.prefix;\n var suffix = ref.suffix;\n var format = ref.format; //if value is empty return 0\n\n if (value === '') {\n return 0;\n } //caret position should be between 0 and value length\n\n\n caretPos = clamp(caretPos, 0, value.length); //in case of format as number limit between prefix and suffix\n\n if (!format) {\n var hasNegation = value[0] === '-';\n return clamp(caretPos, prefix.length + (hasNegation ? 1 : 0), value.length - suffix.length);\n } //in case if custom format method don't do anything\n\n\n if (typeof format === 'function') {\n return caretPos;\n }\n /* in case format is string find the closest # position from the caret position */\n //in case the caretPos have input value on it don't do anything\n\n\n if (format[caretPos] === '#' && charIsNumber(value[caretPos])) {\n return caretPos;\n } //if caretPos is just after input value don't do anything\n\n\n if (format[caretPos - 1] === '#' && charIsNumber(value[caretPos - 1])) {\n return caretPos;\n } //find the nearest caret position\n\n\n var firstHashPosition = format.indexOf('#');\n var lastHashPosition = format.lastIndexOf('#'); //limit the cursor between the first # position and the last # position\n\n caretPos = clamp(caretPos, firstHashPosition, lastHashPosition + 1);\n var nextPos = format.substring(caretPos, format.length).indexOf('#');\n var caretLeftBound = caretPos;\n var caretRightBound = caretPos + (nextPos === -1 ? 0 : nextPos); //get the position where the last number is present\n\n while (caretLeftBound > firstHashPosition && (format[caretLeftBound] !== '#' || !charIsNumber(value[caretLeftBound]))) {\n caretLeftBound -= 1;\n }\n\n var goToLeft = !charIsNumber(value[caretRightBound]) || direction === 'left' && caretPos !== firstHashPosition || caretPos - caretLeftBound < caretRightBound - caretPos;\n\n if (goToLeft) {\n //check if number should be taken after the bound or after it\n //if number preceding a valid number keep it after\n return charIsNumber(value[caretLeftBound]) ? caretLeftBound + 1 : caretLeftBound;\n }\n\n return caretRightBound;\n };\n\n NumberFormat.prototype.getCaretPosition = function getCaretPosition(inputValue, formattedValue, caretPos) {\n var ref = this.props;\n var format = ref.format;\n var stateValue = this.state.value;\n var numRegex = this.getNumberRegex(true);\n var inputNumber = (inputValue.match(numRegex) || []).join('');\n var formattedNumber = (formattedValue.match(numRegex) || []).join('');\n var j, i;\n j = 0;\n\n for (i = 0; i < caretPos; i++) {\n var currentInputChar = inputValue[i] || '';\n var currentFormatChar = formattedValue[j] || ''; //no need to increase new cursor position if formatted value does not have those characters\n //case inputValue = 1a23 and formattedValue = 123\n\n if (!currentInputChar.match(numRegex) && currentInputChar !== currentFormatChar) {\n continue;\n } //When we are striping out leading zeros maintain the new cursor position\n //Case inputValue = 00023 and formattedValue = 23;\n\n\n if (currentInputChar === '0' && currentFormatChar.match(numRegex) && currentFormatChar !== '0' && inputNumber.length !== formattedNumber.length) {\n continue;\n } //we are not using currentFormatChar because j can change here\n\n\n while (currentInputChar !== formattedValue[j] && j < formattedValue.length) {\n j++;\n }\n\n j++;\n }\n\n if (typeof format === 'string' && !stateValue) {\n //set it to the maximum value so it goes after the last number\n j = formattedValue.length;\n } //correct caret position if its outside of editable area\n\n\n j = this.correctCaretPosition(formattedValue, j);\n return j;\n };\n /** caret specific methods ends **/\n\n /** methods to remove formattting **/\n\n\n NumberFormat.prototype.removePrefixAndSuffix = function removePrefixAndSuffix(val) {\n var ref = this.props;\n var format = ref.format;\n var prefix = ref.prefix;\n var suffix = ref.suffix; //remove prefix and suffix\n\n if (!format && val) {\n var isNegative = val[0] === '-'; //remove negation sign\n\n if (isNegative) {\n val = val.substring(1, val.length);\n } //remove prefix\n\n\n val = prefix && val.indexOf(prefix) === 0 ? val.substring(prefix.length, val.length) : val; //remove suffix\n\n var suffixLastIndex = val.lastIndexOf(suffix);\n val = suffix && suffixLastIndex !== -1 && suffixLastIndex === val.length - suffix.length ? val.substring(0, suffixLastIndex) : val; //add negation sign back\n\n if (isNegative) {\n val = '-' + val;\n }\n }\n\n return val;\n };\n\n NumberFormat.prototype.removePatternFormatting = function removePatternFormatting(val) {\n var ref = this.props;\n var format = ref.format;\n var formatArray = format.split('#').filter(function (str) {\n return str !== '';\n });\n var start = 0;\n var numStr = '';\n\n for (var i = 0, ln = formatArray.length; i <= ln; i++) {\n var part = formatArray[i] || ''; //if i is the last fragment take the index of end of the value\n //For case like +1 (911) 911 91 91 having pattern +1 (###) ### ## ##\n\n var index = i === ln ? val.length : val.indexOf(part, start);\n /* in any case if we don't find the pattern part in the value assume the val as numeric string\n This will be also in case if user has started typing, in any other case it will not be -1\n unless wrong prop value is provided */\n\n if (index === -1) {\n numStr = val;\n break;\n } else {\n numStr += val.substring(start, index);\n start = index + part.length;\n }\n }\n\n return (numStr.match(/\\d/g) || []).join('');\n };\n\n NumberFormat.prototype.removeFormatting = function removeFormatting(val) {\n var ref = this.props;\n var format = ref.format;\n var removeFormatting = ref.removeFormatting;\n\n if (!val) {\n return val;\n }\n\n if (!format) {\n val = this.removePrefixAndSuffix(val);\n val = this.getFloatString(val);\n } else if (typeof format === 'string') {\n val = this.removePatternFormatting(val);\n } else if (typeof removeFormatting === 'function') {\n //condition need to be handled if format method is provide,\n val = removeFormatting(val);\n } else {\n val = (val.match(/\\d/g) || []).join('');\n }\n\n return val;\n };\n /** methods to remove formattting end **/\n\n /*** format specific methods start ***/\n\n /**\n * Format when # based string is provided\n * @param {string} numStr Numeric String\n * @return {string} formatted Value\n */\n\n\n NumberFormat.prototype.formatWithPattern = function formatWithPattern(numStr) {\n var ref = this.props;\n var format = ref.format;\n var hashCount = 0;\n var formattedNumberAry = format.split('');\n\n for (var i = 0, ln = format.length; i < ln; i++) {\n if (format[i] === '#') {\n formattedNumberAry[i] = numStr[hashCount] || this.getMaskAtIndex(hashCount);\n hashCount += 1;\n }\n }\n\n return formattedNumberAry.join('');\n };\n /**\n * @param {string} numStr Numeric string/floatString] It always have decimalSeparator as .\n * @return {string} formatted Value\n */\n\n\n NumberFormat.prototype.formatAsNumber = function formatAsNumber(numStr) {\n var ref = this.props;\n var decimalScale = ref.decimalScale;\n var fixedDecimalScale = ref.fixedDecimalScale;\n var prefix = ref.prefix;\n var suffix = ref.suffix;\n var allowNegative = ref.allowNegative;\n var thousandsGroupStyle = ref.thousandsGroupStyle;\n var ref$1 = this.getSeparators();\n var thousandSeparator = ref$1.thousandSeparator;\n var decimalSeparator = ref$1.decimalSeparator;\n var hasDecimalSeparator = numStr.indexOf('.') !== -1 || decimalScale && fixedDecimalScale;\n var ref$2 = splitDecimal(numStr, allowNegative);\n var beforeDecimal = ref$2.beforeDecimal;\n var afterDecimal = ref$2.afterDecimal;\n var addNegation = ref$2.addNegation; // eslint-disable-line prefer-const\n //apply decimal precision if its defined\n\n if (decimalScale !== undefined) {\n afterDecimal = limitToScale(afterDecimal, decimalScale, fixedDecimalScale);\n }\n\n if (thousandSeparator) {\n beforeDecimal = applyThousandSeparator(beforeDecimal, thousandSeparator, thousandsGroupStyle);\n } //add prefix and suffix\n\n\n if (prefix) {\n beforeDecimal = prefix + beforeDecimal;\n }\n\n if (suffix) {\n afterDecimal = afterDecimal + suffix;\n } //restore negation sign\n\n\n if (addNegation) {\n beforeDecimal = '-' + beforeDecimal;\n }\n\n numStr = beforeDecimal + (hasDecimalSeparator && decimalSeparator || '') + afterDecimal;\n return numStr;\n };\n\n NumberFormat.prototype.formatNumString = function formatNumString(numStr) {\n if (numStr === void 0) numStr = '';\n var ref = this.props;\n var format = ref.format;\n var allowEmptyFormatting = ref.allowEmptyFormatting;\n var customNumerals = ref.customNumerals;\n var formattedValue = numStr;\n\n if (customNumerals && customNumerals.length === 10) {\n var customNumeralRegex = new RegExp('[' + customNumerals.join('') + ']', 'g');\n formattedValue = numStr.replace(customNumeralRegex, function (digit) {\n return customNumerals.indexOf(digit).toString();\n });\n }\n\n if (numStr === '' && !allowEmptyFormatting) {\n formattedValue = '';\n } else if (numStr === '-' && !format) {\n formattedValue = '-';\n } else if (typeof format === 'string') {\n formattedValue = this.formatWithPattern(formattedValue);\n } else if (typeof format === 'function') {\n formattedValue = format(formattedValue);\n } else {\n formattedValue = this.formatAsNumber(formattedValue);\n }\n\n return formattedValue;\n };\n\n NumberFormat.prototype.formatValueProp = function formatValueProp(defaultValue) {\n var ref = this.props;\n var format = ref.format;\n var decimalScale = ref.decimalScale;\n var fixedDecimalScale = ref.fixedDecimalScale;\n var allowEmptyFormatting = ref.allowEmptyFormatting;\n var ref$1 = this.props;\n var value = ref$1.value;\n var isNumericString = ref$1.isNumericString; // if value is undefined or null, use defaultValue instead\n\n value = isNil(value) ? defaultValue : value;\n var isNonNumericFalsy = !value && value !== 0;\n\n if (isNonNumericFalsy && allowEmptyFormatting) {\n value = '';\n } // if value is not defined return empty string\n\n\n if (isNonNumericFalsy && !allowEmptyFormatting) {\n return '';\n }\n\n if (typeof value === 'number') {\n value = toNumericString(value);\n isNumericString = true;\n } //change infinity value to empty string\n\n\n if (value === 'Infinity' && isNumericString) {\n value = '';\n } //round the number based on decimalScale\n //format only if non formatted value is provided\n\n\n if (isNumericString && !format && typeof decimalScale === 'number') {\n value = roundToPrecision(value, decimalScale, fixedDecimalScale);\n }\n\n var formattedValue = isNumericString ? this.formatNumString(value) : this.formatInput(value);\n return formattedValue;\n };\n\n NumberFormat.prototype.formatNegation = function formatNegation(value) {\n if (value === void 0) value = '';\n var ref = this.props;\n var allowNegative = ref.allowNegative;\n var negationRegex = new RegExp('(-)');\n var doubleNegationRegex = new RegExp('(-)(.)*(-)'); // Check number has '-' value\n\n var hasNegation = negationRegex.test(value); // Check number has 2 or more '-' values\n\n var removeNegation = doubleNegationRegex.test(value); //remove negation\n\n value = value.replace(/-/g, '');\n\n if (hasNegation && !removeNegation && allowNegative) {\n value = '-' + value;\n }\n\n return value;\n };\n\n NumberFormat.prototype.formatInput = function formatInput(value) {\n if (value === void 0) value = '';\n var ref = this.props;\n var format = ref.format; //format negation only if we are formatting as number\n\n if (!format) {\n value = this.removePrefixAndSuffix(value);\n value = this.formatNegation(value);\n } //remove formatting from number\n\n\n value = this.removeFormatting(value);\n return this.formatNumString(value);\n };\n /*** format specific methods end ***/\n\n\n NumberFormat.prototype.isCharacterAFormat = function isCharacterAFormat(caretPos, value) {\n var ref = this.props;\n var format = ref.format;\n var prefix = ref.prefix;\n var suffix = ref.suffix;\n var decimalScale = ref.decimalScale;\n var fixedDecimalScale = ref.fixedDecimalScale;\n var ref$1 = this.getSeparators();\n var decimalSeparator = ref$1.decimalSeparator; //check within format pattern\n\n if (typeof format === 'string' && format[caretPos] !== '#') {\n return true;\n } //check in number format\n\n\n if (!format && (caretPos < prefix.length || caretPos >= value.length - suffix.length || decimalScale && fixedDecimalScale && value[caretPos] === decimalSeparator)) {\n return true;\n }\n\n return false;\n };\n /**\n * This will check if any formatting got removed by the delete or backspace and reset the value\n * It will also work as fallback if android chome keyDown handler does not work\n **/\n\n\n NumberFormat.prototype.correctInputValue = function correctInputValue(caretPos, lastValue, value) {\n var this$1 = this;\n var ref = this.props;\n var format = ref.format;\n var allowNegative = ref.allowNegative;\n var prefix = ref.prefix;\n var suffix = ref.suffix;\n var decimalScale = ref.decimalScale;\n var ref$1 = this.getSeparators();\n var allowedDecimalSeparators = ref$1.allowedDecimalSeparators;\n var decimalSeparator = ref$1.decimalSeparator;\n var lastNumStr = this.state.numAsString || '';\n var ref$2 = this.selectionBeforeInput;\n var selectionStart = ref$2.selectionStart;\n var selectionEnd = ref$2.selectionEnd;\n var ref$3 = findChangedIndex(lastValue, value);\n var start = ref$3.start;\n var end = ref$3.end;\n /** Check for any allowed decimal separator is added in the numeric format and replace it with decimal separator */\n\n if (!format && start === end && allowedDecimalSeparators.indexOf(value[selectionStart]) !== -1) {\n var separator = decimalScale === 0 ? '' : decimalSeparator;\n return value.substr(0, selectionStart) + separator + value.substr(selectionStart + 1, value.length);\n }\n\n var leftBound = !!format ? 0 : prefix.length;\n var rightBound = lastValue.length - (!!format ? 0 : suffix.length);\n\n if ( // don't do anything if something got added\n value.length > lastValue.length || // or if the new value is an empty string\n !value.length || // or if nothing has changed, in which case start will be same as end\n start === end || // or in case if whole input is selected and new value is typed\n selectionStart === 0 && selectionEnd === lastValue.length || // or in case if the whole content is replaced by browser, example (autocomplete)\n start === 0 && end === lastValue.length || // or if charcters between prefix and suffix is selected.\n // For numeric inputs we apply the format so, prefix and suffix can be ignored\n selectionStart === leftBound && selectionEnd === rightBound) {\n return value;\n } // check whether the deleted portion has a character that is part of a format\n\n\n var deletedValues = lastValue.substr(start, end - start);\n var formatGotDeleted = !![].concat(deletedValues).find(function (deletedVal, idx) {\n return this$1.isCharacterAFormat(idx + start, lastValue);\n }); // if it has, only remove characters that are not part of the format\n\n if (formatGotDeleted) {\n var deletedValuePortion = lastValue.substr(start);\n var recordIndexOfFormatCharacters = {};\n var resolvedPortion = [];\n [].concat(deletedValuePortion).forEach(function (currentPortion, idx) {\n if (this$1.isCharacterAFormat(idx + start, lastValue)) {\n recordIndexOfFormatCharacters[idx] = currentPortion;\n } else if (idx > deletedValues.length - 1) {\n resolvedPortion.push(currentPortion);\n }\n });\n Object.keys(recordIndexOfFormatCharacters).forEach(function (idx) {\n if (resolvedPortion.length > idx) {\n resolvedPortion.splice(idx, 0, recordIndexOfFormatCharacters[idx]);\n } else {\n resolvedPortion.push(recordIndexOfFormatCharacters[idx]);\n }\n });\n value = lastValue.substr(0, start) + resolvedPortion.join('');\n } //for numbers check if beforeDecimal got deleted and there is nothing after decimal,\n //clear all numbers in such case while keeping the - sign\n\n\n if (!format) {\n var numericString = this.removeFormatting(value);\n var ref$4 = splitDecimal(numericString, allowNegative);\n var beforeDecimal = ref$4.beforeDecimal;\n var afterDecimal = ref$4.afterDecimal;\n var addNegation = ref$4.addNegation; // eslint-disable-line prefer-const\n //clear only if something got deleted\n\n var isBeforeDecimalPoint = caretPos < value.indexOf(decimalSeparator) + 1;\n\n if (numericString.length < lastNumStr.length && isBeforeDecimalPoint && beforeDecimal === '' && !parseFloat(afterDecimal)) {\n return addNegation ? '-' : '';\n }\n }\n\n return value;\n };\n /** Update value and caret position */\n\n\n NumberFormat.prototype.updateValue = function updateValue(params) {\n var formattedValue = params.formattedValue;\n var input = params.input;\n var setCaretPosition = params.setCaretPosition;\n if (setCaretPosition === void 0) setCaretPosition = true;\n var source = params.source;\n var event = params.event;\n var numAsString = params.numAsString;\n var caretPos = params.caretPos;\n var ref = this.props;\n var onValueChange = ref.onValueChange;\n var ref$1 = this.state;\n var lastValue = ref$1.value;\n\n if (input) {\n //set caret position, and value imperatively when element is provided\n if (setCaretPosition) {\n //calculate caret position if not defined\n if (!caretPos) {\n var inputValue = params.inputValue || input.value;\n var currentCaretPosition = getCurrentCaretPosition(input);\n /**\n * set the value imperatively, this is required for IE fix\n * This is also required as if new caret position is beyond the previous value.\n * Caret position will not be set correctly\n */\n\n input.value = formattedValue; //get the caret position\n\n caretPos = this.getCaretPosition(inputValue, formattedValue, currentCaretPosition);\n } //set caret position\n\n\n this.setPatchedCaretPosition(input, caretPos, formattedValue);\n } else {\n /**\n * if we are not setting caret position set the value imperatively.\n * This is required on onBlur method\n */\n input.value = formattedValue;\n }\n } //calculate numeric string if not passed\n\n\n if (numAsString === undefined) {\n numAsString = this.removeFormatting(formattedValue);\n } //update state if value is changed\n\n\n if (formattedValue !== lastValue) {\n this.setState({\n value: formattedValue,\n numAsString: numAsString\n }); // trigger onValueChange synchronously, so parent is updated along with the number format. Fix for #277, #287\n\n onValueChange(this.getValueObject(formattedValue, numAsString), {\n event: event,\n source: source\n });\n }\n };\n\n NumberFormat.prototype.onChange = function onChange(e) {\n var el = e.target;\n var inputValue = el.value;\n var ref = this;\n var state = ref.state;\n var props = ref.props;\n var isAllowed = props.isAllowed;\n var lastValue = state.value || '';\n var currentCaretPosition = getCurrentCaretPosition(el);\n inputValue = this.correctInputValue(currentCaretPosition, lastValue, inputValue);\n var formattedValue = this.formatInput(inputValue) || '';\n var numAsString = this.removeFormatting(formattedValue);\n var valueObj = this.getValueObject(formattedValue, numAsString);\n var isChangeAllowed = isAllowed(valueObj);\n\n if (!isChangeAllowed) {\n formattedValue = lastValue;\n }\n\n this.updateValue({\n formattedValue: formattedValue,\n numAsString: numAsString,\n inputValue: inputValue,\n input: el,\n event: e,\n source: 'event'\n });\n\n if (isChangeAllowed) {\n props.onChange(e);\n }\n };\n\n NumberFormat.prototype.onBlur = function onBlur(e) {\n var ref = this;\n var props = ref.props;\n var state = ref.state;\n var format = props.format;\n var onBlur = props.onBlur;\n var allowLeadingZeros = props.allowLeadingZeros;\n var numAsString = state.numAsString;\n var lastValue = state.value;\n this.focusedElm = null;\n clearTimeout(this.focusTimeout);\n clearTimeout(this.caretPositionTimeout);\n\n if (!format) {\n // if the numAsString is not a valid number reset it to empty\n if (isNaN(parseFloat(numAsString))) {\n numAsString = '';\n }\n\n if (!allowLeadingZeros) {\n numAsString = fixLeadingZero(numAsString);\n }\n\n var formattedValue = this.formatNumString(numAsString); //change the state\n\n if (formattedValue !== lastValue) {\n // the event needs to be persisted because its properties can be accessed in an asynchronous way\n this.updateValue({\n formattedValue: formattedValue,\n numAsString: numAsString,\n input: e.target,\n setCaretPosition: false,\n event: e,\n source: 'event'\n });\n onBlur(e);\n return;\n }\n }\n\n onBlur(e);\n };\n\n NumberFormat.prototype.onKeyDown = function onKeyDown(e) {\n var el = e.target;\n var key = e.key;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value;\n if (value === void 0) value = '';\n var expectedCaretPosition;\n var ref = this.props;\n var decimalScale = ref.decimalScale;\n var fixedDecimalScale = ref.fixedDecimalScale;\n var prefix = ref.prefix;\n var suffix = ref.suffix;\n var format = ref.format;\n var onKeyDown = ref.onKeyDown;\n var ignoreDecimalSeparator = decimalScale !== undefined && fixedDecimalScale;\n var numRegex = this.getNumberRegex(false, ignoreDecimalSeparator);\n var negativeRegex = new RegExp('-');\n var isPatternFormat = typeof format === 'string';\n this.selectionBeforeInput = {\n selectionStart: selectionStart,\n selectionEnd: selectionEnd\n }; //Handle backspace and delete against non numerical/decimal characters or arrow keys\n\n if (key === 'ArrowLeft' || key === 'Backspace') {\n expectedCaretPosition = selectionStart - 1;\n } else if (key === 'ArrowRight') {\n expectedCaretPosition = selectionStart + 1;\n } else if (key === 'Delete') {\n expectedCaretPosition = selectionStart;\n } //if expectedCaretPosition is not set it means we don't want to Handle keyDown\n //also if multiple characters are selected don't handle\n\n\n if (expectedCaretPosition === undefined || selectionStart !== selectionEnd) {\n onKeyDown(e);\n return;\n }\n\n var newCaretPosition = expectedCaretPosition;\n var leftBound = isPatternFormat ? format.indexOf('#') : prefix.length;\n var rightBound = isPatternFormat ? format.lastIndexOf('#') + 1 : value.length - suffix.length;\n\n if (key === 'ArrowLeft' || key === 'ArrowRight') {\n var direction = key === 'ArrowLeft' ? 'left' : 'right';\n newCaretPosition = this.correctCaretPosition(value, expectedCaretPosition, direction);\n } else if (key === 'Delete' && !numRegex.test(value[expectedCaretPosition]) && !negativeRegex.test(value[expectedCaretPosition])) {\n while (!numRegex.test(value[newCaretPosition]) && newCaretPosition < rightBound) {\n newCaretPosition++;\n }\n } else if (key === 'Backspace' && !numRegex.test(value[expectedCaretPosition])) {\n /* NOTE: This is special case when backspace is pressed on a\n negative value while the cursor position is after prefix. We can't handle it on onChange because\n we will not have any information of keyPress\n */\n if (selectionStart <= leftBound + 1 && value[0] === '-' && typeof format === 'undefined') {\n var newValue = value.substring(1);\n this.updateValue({\n formattedValue: newValue,\n caretPos: newCaretPosition,\n input: el,\n event: e,\n source: 'event'\n });\n } else if (!negativeRegex.test(value[expectedCaretPosition])) {\n while (!numRegex.test(value[newCaretPosition - 1]) && newCaretPosition > leftBound) {\n newCaretPosition--;\n }\n\n newCaretPosition = this.correctCaretPosition(value, newCaretPosition, 'left');\n }\n }\n\n if (newCaretPosition !== expectedCaretPosition || expectedCaretPosition < leftBound || expectedCaretPosition > rightBound) {\n e.preventDefault();\n this.setPatchedCaretPosition(el, newCaretPosition, value);\n }\n /* NOTE: this is just required for unit test as we need to get the newCaretPosition,\n Remove this when you find different solution */\n\n\n if (e.isUnitTestRun) {\n this.setPatchedCaretPosition(el, newCaretPosition, value);\n }\n\n onKeyDown(e);\n };\n /** required to handle the caret position when click anywhere within the input **/\n\n\n NumberFormat.prototype.onMouseUp = function onMouseUp(e) {\n var el = e.target;\n /**\n * NOTE: we have to give default value for value as in case when custom input is provided\n * value can come as undefined when nothing is provided on value prop.\n */\n\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value;\n if (value === void 0) value = '';\n\n if (selectionStart === selectionEnd) {\n var caretPosition = this.correctCaretPosition(value, selectionStart);\n\n if (caretPosition !== selectionStart) {\n this.setPatchedCaretPosition(el, caretPosition, value);\n }\n }\n\n this.props.onMouseUp(e);\n };\n\n NumberFormat.prototype.onFocus = function onFocus(e) {\n var this$1 = this; // Workaround Chrome and Safari bug https://bugs.chromium.org/p/chromium/issues/detail?id=779328\n // (onFocus event target selectionStart is always 0 before setTimeout)\n\n e.persist();\n this.focusedElm = e.target;\n this.focusTimeout = setTimeout(function () {\n var el = e.target;\n var selectionStart = el.selectionStart;\n var selectionEnd = el.selectionEnd;\n var value = el.value;\n if (value === void 0) value = '';\n var caretPosition = this$1.correctCaretPosition(value, selectionStart); //setPatchedCaretPosition only when everything is not selected on focus (while tabbing into the field)\n\n if (caretPosition !== selectionStart && !(selectionStart === 0 && selectionEnd === value.length)) {\n this$1.setPatchedCaretPosition(el, caretPosition, value);\n }\n\n this$1.props.onFocus(e);\n }, 0);\n };\n\n NumberFormat.prototype.render = function render() {\n var ref = this.props;\n var type = ref.type;\n var displayType = ref.displayType;\n var customInput = ref.customInput;\n var renderText = ref.renderText;\n var getInputRef = ref.getInputRef;\n var format = ref.format;\n var thousandSeparator = ref.thousandSeparator;\n var decimalSeparator = ref.decimalSeparator;\n var allowedDecimalSeparators = ref.allowedDecimalSeparators;\n var thousandsGroupStyle = ref.thousandsGroupStyle;\n var decimalScale = ref.decimalScale;\n var fixedDecimalScale = ref.fixedDecimalScale;\n var prefix = ref.prefix;\n var suffix = ref.suffix;\n var removeFormatting = ref.removeFormatting;\n var mask = ref.mask;\n var defaultValue = ref.defaultValue;\n var isNumericString = ref.isNumericString;\n var allowNegative = ref.allowNegative;\n var allowEmptyFormatting = ref.allowEmptyFormatting;\n var allowLeadingZeros = ref.allowLeadingZeros;\n var onValueChange = ref.onValueChange;\n var isAllowed = ref.isAllowed;\n var customNumerals = ref.customNumerals;\n var onChange = ref.onChange;\n var onKeyDown = ref.onKeyDown;\n var onMouseUp = ref.onMouseUp;\n var onFocus = ref.onFocus;\n var onBlur = ref.onBlur;\n var propValue = ref.value;\n var rest = objectWithoutProperties(ref, [\"type\", \"displayType\", \"customInput\", \"renderText\", \"getInputRef\", \"format\", \"thousandSeparator\", \"decimalSeparator\", \"allowedDecimalSeparators\", \"thousandsGroupStyle\", \"decimalScale\", \"fixedDecimalScale\", \"prefix\", \"suffix\", \"removeFormatting\", \"mask\", \"defaultValue\", \"isNumericString\", \"allowNegative\", \"allowEmptyFormatting\", \"allowLeadingZeros\", \"onValueChange\", \"isAllowed\", \"customNumerals\", \"onChange\", \"onKeyDown\", \"onMouseUp\", \"onFocus\", \"onBlur\", \"value\"]);\n var otherProps = rest;\n var ref$1 = this.state;\n var value = ref$1.value;\n var mounted = ref$1.mounted; // add input mode on element based on format prop and device once the component is mounted\n\n var inputMode = mounted && addInputMode(format) ? 'numeric' : undefined;\n var inputProps = Object.assign({\n inputMode: inputMode\n }, otherProps, {\n type: type,\n value: value,\n onChange: this.onChange,\n onKeyDown: this.onKeyDown,\n onMouseUp: this.onMouseUp,\n onFocus: this.onFocus,\n onBlur: this.onBlur\n });\n\n if (displayType === 'text') {\n return renderText ? renderText(value, otherProps) || null : React.createElement('span', Object.assign({}, otherProps, {\n ref: getInputRef\n }), value);\n } else if (customInput) {\n var CustomInput = customInput;\n return React.createElement(CustomInput, Object.assign({}, inputProps, {\n ref: getInputRef\n }));\n }\n\n return React.createElement('input', Object.assign({}, inputProps, {\n ref: getInputRef\n }));\n };\n\n return NumberFormat;\n}(React.Component);\n\nNumberFormat.defaultProps = defaultProps;\nexport default NumberFormat;","import React from \"react\"\nimport Styled from \"styled-components\"\n\nlet StyledHr = Styled.hr`\n width: 7rem;\n border-radius: 0.5rem;\n border-width: 0.4rem;\n background: ${(props) => props.theme.primary};\n`\n\nlet Hr = () => \n\nexport default Hr\n","import React from \"react\"\nimport { API } from \"aws-amplify\"\nimport {\n FormContainer,\n FormTitle,\n FormDescription,\n FormField,\n} from \"./styles\"\nimport { useForm } from \"react-hook-form\"\nimport { sesCall } from \"../../../graphql/queries\"\nimport MailTo from \"../../../context/mailto\"\nimport { StaticImage } from \"gatsby-plugin-image\"\n\nconst ContactForm = (props) => {\n const { setisMessageSent } = props\n const {\n register,\n watch,\n handleSubmit,\n formState: { errors },\n } = useForm()\n\n const onSubmit = (data) => {\n sesNotification(data)\n setisMessageSent(true)\n }\n\n async function sesNotification(data) {\n const { name, email, phone, message } = data\n try {\n await API.graphql({\n query: sesCall,\n variables: {\n msg: {\n name: name,\n email: email,\n phone: phone,\n course: message,\n },\n },\n })\n } catch (err) {\n console.log(\"error triggering lambda function: \", err)\n }\n }\n\n console.log(watch())\n\n return (\n \n Drop us an Email\n \n We will get back to you in 1 working day.{\" \"}\n \n \n {/*
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n
\n
*/}\n
\n )\n}\n\nexport default ContactForm\n","import React, { useState } from \"react\"\nimport { Text } from \"grommet\"\nimport { StaticImage } from \"gatsby-plugin-image\"\nimport ContactForm from \"./form/ContactForm\"\nimport {\n AddressInfoContainer,\n AddressInfoCover,\n AnimationContainer,\n ContactContentWrapper,\n ContactIconCover,\n InfoContent,\n SuccessMessageContainer,\n} from \"./styles\"\nimport Lottie from \"lottie-react\"\nimport successAnimation from \"../../data/message-sent-success.json\"\nimport data from \"../../assets/data.json\"\n\nconst ContactUs = () => {\n const [isMessageSent, setisMessageSent] = useState(false)\n\n return (\n \n \n \n \n \n \n \n

Phone Number

\n

+65 6455 9938

\n
\n
\n \n \n \n \n \n

Email Address

\n

training@aia.edu.sg

\n
\n
\n \n \n \n \n \n

Address

\n

{data.address}

\n
\n
\n
\n {isMessageSent ? (\n \n \n \n \n \n ) : (\n \n )}\n
\n )\n}\n\nexport default ContactUs\n","import React, { useEffect, useState } from \"react\"\nimport { graphql } from \"gatsby\"\nimport NumberFormat from \"react-number-format\"\nimport * as queryString from \"query-string\"\nimport { API } from \"aws-amplify\"\nimport { Row, Col, Container, Table } from \"reactstrap\"\nimport Link from \"../components/link\"\nimport {\n FaPhone,\n FaEnvelope,\n FaMapMarkerAlt,\n FaFax,\n} from \"react-icons/fa\"\nimport Styled from \"styled-components\"\nimport Hr from \"../components/hr\"\nimport PageTitle from \"../components/page-title\"\nimport SEO from \"../components/seo\"\nimport TitleBannerEnquiry from \"../components/titleBanner/TitleBannerEnquiry\"\nimport ContactUs from \"../components/contact/ContactUs\"\n\nconst Cirle = Styled.div`\n height: 4rem;\n width: 4rem;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\nlet StyledRow = Styled(Row)`\n justify-content: center;\n`\n\nlet ContactItem = ({\n text,\n type,\n Icon,\n href,\n children,\n}) => (\n \n \n \n \n
\n
{type}
\n \n {href ? (\n \n {children ? children : text}\n \n ) : children ? (\n children\n ) : (\n text\n )}\n \n
\n \n)\n\nconst Contact = ({ data, location }) => {\n const [session, setSession] = useState(null)\n let { address, email, phone, fax } =\n data.site.siteMetadata\n let { session_id } = queryString.parse(location.search)\n\n return (\n <>\n \n\n \n\n \n \n )\n}\n\nexport const query = graphql`\n query Contact {\n site {\n siteMetadata {\n address\n email\n phone\n fax\n }\n }\n }\n`\n\nexport default Contact\n"],"names":["Background","styled","title","props","id","description","hasPlainBanner","handleFilterClick","isFilterOpen","withoutFilter","selfCheckout","withOnlyDescription","netFee","coverPhoto","scroll","courseRuns","useMediaQuery","query","useState","modal","setModal","toggle","bannerImage","useStaticQuery","BannerBGImage1","background1","childImageSharp","fluid","BannerBGImage2","background2","className","href","target","rel","onClick","isBrowser","window","open","isOpen","to","price","selectedCourse","noop","charIsNumber","char","match","isNil","val","escapeRegExp","str","replace","splitDecimal","numStr","allowNegative","hasNagation","addNegation","parts","split","beforeDecimal","afterDecimal","limitToScale","scale","fixedDecimalScale","filler","i","repeat","count","Array","join","setCaretPosition","el","caretPos","value","createTextRange","range","move","select","selectionStart","focus","setSelectionRange","clamp","num","min","max","Math","getCurrentCaretPosition","selectionEnd","defaultProps","displayType","decimalSeparator","thousandsGroupStyle","prefix","suffix","allowEmptyFormatting","allowLeadingZeros","isNumericString","type","onValueChange","onChange","onKeyDown","onMouseUp","onFocus","onBlur","isAllowed","NumberFormat","superclass","call","this","defaultValue","validateProps","formattedValue","formatValueProp","state","numAsString","removeFormatting","mounted","selectionBeforeInput","bind","__proto__","prototype","Object","create","constructor","componentDidMount","setState","componentDidUpdate","prevProps","updateValueIfRequired","componentWillUnmount","clearTimeout","focusTimeout","caretPositionTimeout","ref","focusedElm","stateValue","lastNumStr","lastValueWithNewFormat","formatNumString","floatValue","parseFloat","lastFloatValue","isNaN","updateValue","input","source","event","getFloatString","decimalScale","getSeparators","numRegex","getNumberRegex","hasNegation","firstDecimalIndex","indexOf","substring","length","RegExp","g","ignoreDecimalSeparator","format","customNumerals","undefined","ref$1","thousandSeparator","allowedDecimalSeparators","getMaskAtIndex","index","mask","getValueObject","Error","toString","setPatchedCaretPosition","currentValue","setTimeout","correctCaretPosition","direction","firstHashPosition","lastIndexOf","nextPos","caretLeftBound","caretRightBound","getCaretPosition","inputValue","j","inputNumber","formattedNumber","currentInputChar","currentFormatChar","removePrefixAndSuffix","isNegative","suffixLastIndex","removePatternFormatting","formatArray","filter","start","ln","part","formatWithPattern","hashCount","formattedNumberAry","formatAsNumber","hasDecimalSeparator","ref$2","thousandsGroupRegex","getThousandsGroupRegex","search","applyThousandSeparator","customNumeralRegex","digit","isNonNumericFalsy","sign","coefficient","exponent","Number","decimalIndex","coffiecientLn","abs","toNumericString","shoudHaveDecimalSeparator","roundedDecimalParts","toFixed","reverse","reduce","roundedStr","current","idx","roundToPrecision","formatInput","formatNegation","negationRegex","doubleNegationRegex","test","removeNegation","isCharacterAFormat","correctInputValue","lastValue","this$1","ref$3","prevValue","newValue","prevLength","newLength","end","findChangedIndex","separator","substr","leftBound","rightBound","deletedValues","concat","find","deletedVal","deletedValuePortion","recordIndexOfFormatCharacters","resolvedPortion","forEach","currentPortion","push","keys","splice","numericString","ref$4","isBeforeDecimalPoint","params","currentCaretPosition","e","isChangeAllowed","fixLeadingZero","expectedCaretPosition","key","negativeRegex","isPatternFormat","newCaretPosition","preventDefault","isUnitTestRun","caretPosition","persist","render","customInput","renderText","getInputRef","otherProps","obj","exclude","k","hasOwnProperty","objectWithoutProperties","inputMode","navigator","platform","addInputMode","inputProps","assign","CustomInput","Styled","theme","primary","setisMessageSent","useForm","watch","register","handleSubmit","formState","errors","console","log","S","src","alt","layout","isMessageSent","data","animationData","successAnimation","loop","Row","location","site","siteMetadata","address","email","phone","fax","queryString","session_id","TitleBannerEnquiry"],"sourceRoot":""}