{"version":3,"file":"ej2-inputs.min.js","sources":["../../src/maskedtextbox/base/mask-base.js","../../src/input/input.js","../../src/numerictextbox/numerictextbox.js","../../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../../src/slider/slider.js","../../src/form-validator/form-validator.js","../../src/uploader/uploader.js","../../src/color-picker/color-picker.js","../../src/textbox/textbox.js","../../src/textarea/textarea.js","../../src/common/signature-base.js","../../src/signature/signature.js","../../src/rating/rating.js","../../src/otp-input/otp-input.js"],"sourcesContent":["/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n/**\n * MaskedTextBox base module\n */\nimport { EventHandler, isNullOrUndefined, merge, attributes, addClass, removeClass, Browser, extend } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nvar ERROR = 'e-error';\nvar INPUTGROUP = 'e-input-group';\nvar FLOATINPUT = 'e-float-input';\nvar UTILMASK = 'e-utility-mask';\nvar TOPLABEL = 'e-label-top';\nvar BOTTOMLABEL = 'e-label-bottom';\n/**\n * @hidden\n * Built-in masking elements collection.\n */\nexport var regularExpressions = {\n '0': '[0-9]',\n '9': '[0-9 ]',\n '#': '[0-9 +-]',\n 'L': '[A-Za-z]',\n '?': '[A-Za-z ]',\n '&': '[^\\x7f ]+',\n 'C': '[^\\x7f]+',\n 'A': '[A-Za-z0-9]',\n 'a': '[A-Za-z0-9 ]'\n};\n/**\n * Generate required masking elements to the MaskedTextBox from user mask input.\n *\n * @hidden\n */\nexport function createMask() {\n attributes(this.element, {\n 'role': 'textbox', 'autocomplete': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive'\n });\n if (this.mask) {\n var splitMask = this.mask.split(']');\n for (var i = 0; i < splitMask.length; i++) {\n if (splitMask[i][splitMask[i].length - 1] === '\\\\') {\n splitMask[i] = splitMask[i] + ']';\n var splitInnerMask = splitMask[i].split('[');\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j][splitInnerMask[j].length - 1] === '\\\\') {\n splitInnerMask[j] = splitInnerMask[j] + '[';\n }\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n else {\n var splitInnerMask = splitMask[i].split('[');\n if (splitInnerMask.length > 1) {\n var chkSpace = false;\n for (var j = 0; j < splitInnerMask.length; j++) {\n if (splitInnerMask[j] === '\\\\') {\n this.customRegExpCollec.push('[');\n this.hiddenMask += splitInnerMask[j] + '[';\n }\n else if (splitInnerMask[j] === '') {\n chkSpace = true;\n }\n else if ((splitInnerMask[j] !== '' && chkSpace) || j === splitInnerMask.length - 1) {\n this.customRegExpCollec.push('[' + splitInnerMask[j] + ']');\n this.hiddenMask += this.promptChar;\n chkSpace = false;\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[j]);\n }\n }\n }\n else {\n pushIntoRegExpCollec.call(this, splitInnerMask[0]);\n }\n }\n }\n this.escapeMaskValue = this.hiddenMask;\n this.promptMask = this.hiddenMask.replace(/[09?LCAa#&]/g, this.promptChar);\n if (!isNullOrUndefined(this.customCharacters)) {\n for (var i = 0; i < this.promptMask.length; i++) {\n if (!isNullOrUndefined(this.customCharacters[this.promptMask[i]])) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n this.promptMask = this.promptMask.replace(new RegExp(this.promptMask[i], 'g'), this.promptChar);\n }\n }\n }\n var escapeNumber = 0;\n if (this.hiddenMask.match(new RegExp(/\\\\/))) {\n for (var i = 0; i < this.hiddenMask.length; i++) {\n var j = 0;\n if (i >= 1) {\n j = i;\n }\n escapeNumber = this.hiddenMask.length - this.promptMask.length;\n j = j - escapeNumber;\n if ((i > 0 && this.hiddenMask[i - 1] !== '\\\\') && (this.hiddenMask[i] === '>' ||\n this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|')) {\n this.promptMask = this.promptMask.substring(0, j) +\n this.promptMask.substring((i + 1) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) +\n this.escapeMaskValue.substring((i + 1) - escapeNumber, this.escapeMaskValue.length);\n }\n if (this.hiddenMask[i] === '\\\\') {\n this.promptMask = this.promptMask.substring(0, j) + this.hiddenMask[i + 1] +\n this.promptMask.substring((i + 2) - escapeNumber, this.promptMask.length);\n this.escapeMaskValue = this.escapeMaskValue.substring(0, j) + this.escapeMaskValue[i + 1] +\n this.escapeMaskValue.substring((i + 2) - escapeNumber, this.escapeMaskValue.length);\n }\n }\n }\n else {\n this.promptMask = this.promptMask.replace(/[>|<]/g, '');\n this.escapeMaskValue = this.hiddenMask.replace(/[>|<]/g, '');\n }\n attributes(this.element, { 'aria-invalid': 'false' });\n }\n}\n/**\n * Apply mask ability with masking elements to the MaskedTextBox.\n *\n * @hidden\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * To wire required events to the MaskedTextBox.\n *\n * @hidden\n */\nexport function wireEvents() {\n EventHandler.add(this.element, 'keydown', maskInputKeyDownHandler, this);\n EventHandler.add(this.element, 'keypress', maskInputKeyPressHandler, this);\n EventHandler.add(this.element, 'keyup', maskInputKeyUpHandler, this);\n EventHandler.add(this.element, 'input', maskInputHandler, this);\n EventHandler.add(this.element, 'focus', maskInputFocusHandler, this);\n EventHandler.add(this.element, 'blur', maskInputBlurHandler, this);\n EventHandler.add(this.element, 'paste', maskInputPasteHandler, this);\n EventHandler.add(this.element, 'cut', maskInputCutHandler, this);\n EventHandler.add(this.element, 'drop', maskInputDropHandler, this);\n EventHandler.add(this.element, 'mousedown', maskInputMouseDownHandler, this);\n EventHandler.add(this.element, 'mouseup', maskInputMouseUpHandler, this);\n if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * To unwire events attached to the MaskedTextBox.\n *\n * @hidden\n */\nexport function unwireEvents() {\n EventHandler.remove(this.element, 'keydown', maskInputKeyDownHandler);\n EventHandler.remove(this.element, 'keypress', maskInputKeyPressHandler);\n EventHandler.remove(this.element, 'keyup', maskInputKeyUpHandler);\n EventHandler.remove(this.element, 'input', maskInputHandler);\n EventHandler.remove(this.element, 'focus', maskInputFocusHandler);\n EventHandler.remove(this.element, 'blur', maskInputBlurHandler);\n EventHandler.remove(this.element, 'paste', maskInputPasteHandler);\n EventHandler.remove(this.element, 'cut', maskInputCutHandler);\n EventHandler.remove(this.element, 'drop', maskInputDropHandler);\n EventHandler.remove(this.element, 'mousedown', maskInputMouseDownHandler);\n EventHandler.remove(this.element, 'mouseup', maskInputMouseUpHandler);\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * To bind required events to the MaskedTextBox clearButton.\n *\n * @hidden\n */\nexport function bindClearEvent() {\n if (this.showClearButton) {\n EventHandler.add(this.inputObj.clearButton, 'mousedown touchstart', resetHandler, this);\n }\n}\nfunction resetHandler(e) {\n e.preventDefault();\n if (!this.inputObj.clearButton.classList.contains('e-clear-icon-hide') || (this.inputObj.container.classList.contains('e-static-clear'))) {\n clear.call(this, e);\n this.value = '';\n }\n}\nfunction clear(event) {\n var value = this.element.value;\n setElementValue.call(this, this.promptMask);\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n triggerMaskChangeEvent.call(this, event, value);\n this.element.setSelectionRange(0, 0);\n}\nfunction resetFormHandler() {\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n setElementValue.call(this, this.promptMask);\n }\n else {\n this.value = this.initInputValue;\n }\n}\n/**\n * To get masked value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * To extract raw value from the MaskedTextBox.\n *\n * @hidden\n */\nexport function strippedValue(element, maskValues) {\n var value = '';\n var k = 0;\n var checkMask = false;\n var maskValue = (!isNullOrUndefined(maskValues)) ? maskValues : (!isNullOrUndefined(element) &&\n !isNullOrUndefined(this)) ? element.value : maskValues;\n if (maskValue !== this.promptMask) {\n for (var i = 0; i < this.customRegExpCollec.length; i++) {\n if (checkMask) {\n checkMask = false;\n }\n if (this.customRegExpCollec[k] === '>' || this.customRegExpCollec[k] === '<' ||\n this.customRegExpCollec[k] === '|' || this.customRegExpCollec[k] === '\\\\') {\n --i;\n checkMask = true;\n }\n if (!checkMask) {\n if ((maskValue[i] !== this.promptChar) && (!isNullOrUndefined(this.customRegExpCollec[k]) &&\n ((this._callPasteHandler || !isNullOrUndefined(this.regExpCollec[this.customRegExpCollec[k]])) ||\n (this.customRegExpCollec[k].length > 2 && this.customRegExpCollec[k][0] === '[' &&\n this.customRegExpCollec[k][this.customRegExpCollec[k].length - 1] === ']') ||\n (!isNullOrUndefined(this.customCharacters) &&\n (!isNullOrUndefined(this.customCharacters[this.customRegExpCollec[k]]))))) && (maskValue !== '')) {\n value += maskValue[i];\n }\n }\n ++k;\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n value = maskValue;\n }\n return value;\n}\nfunction pushIntoRegExpCollec(value) {\n for (var k = 0; k < value.length; k++) {\n this.hiddenMask += value[k];\n if (value[k] !== '\\\\') {\n this.customRegExpCollec.push(value[k]);\n }\n }\n}\nexport function maskInputMouseDownHandler() {\n this.isClicked = true;\n}\nexport function maskInputMouseUpHandler() {\n this.isClicked = false;\n}\nexport function maskInputFocusHandler(event) {\n var _this = this;\n var inputElement = this.element;\n var startIndex = 0;\n var modelValue = strippedValue.call(this, inputElement);\n var toAllowForward = false;\n var toAllowBackward = false;\n var eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: !isNullOrUndefined(this.inputObj) ? this.inputObj.container : this.inputObj,\n selectionEnd: inputElement.selectionEnd\n };\n if (!this.isClicked) {\n triggerFocus.call(this, eventArgs, inputElement);\n }\n if (this.mask) {\n if (!(!(modelValue === null || modelValue === '') || this.floatLabelType === 'Always' ||\n this.placeholder === null || this.placeholder === '')) {\n inputElement.value = this.promptMask;\n }\n setTimeout(function () {\n if (inputElement.selectionStart === _this.promptMask.length ||\n inputElement.value[inputElement.selectionStart] === _this.promptChar) {\n toAllowForward = true;\n }\n else {\n for (var i = inputElement.selectionStart; i < _this.promptMask.length; i++) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowForward = false;\n break;\n }\n }\n else {\n toAllowForward = true;\n break;\n }\n }\n }\n });\n setTimeout(function () {\n var backSelectionStart = inputElement.selectionStart - 1;\n if (backSelectionStart === _this.promptMask.length - 1 ||\n inputElement.value[backSelectionStart] === _this.promptChar) {\n toAllowBackward = true;\n }\n else {\n for (var i = backSelectionStart; i >= 0; i--) {\n if (inputElement.value[i] !== _this.promptChar) {\n if ((inputElement.value[i] !== _this.promptMask[i])) {\n toAllowBackward = false;\n break;\n }\n }\n else {\n toAllowBackward = true;\n break;\n }\n }\n }\n });\n if ((this.isClicked || (this.floatLabelType !== 'Always' &&\n ((modelValue === null || modelValue === '') &&\n (this.placeholder !== null && this.placeholder !== ''))))) {\n for (startIndex = 0; startIndex < this.promptMask.length; startIndex++) {\n if (inputElement.value[startIndex] === this.promptChar) {\n setTimeout(function () {\n if (toAllowForward || toAllowBackward) {\n inputElement.selectionEnd = startIndex;\n inputElement.selectionStart = startIndex;\n }\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: _this.value,\n maskedValue: inputElement.value,\n container: !isNullOrUndefined(_this.inputObj) ? _this.inputObj.container : _this.inputObj,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n }, 110);\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(escapeRegExp(this.promptChar)))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: !isNullOrUndefined(this.inputObj) ? this.inputObj.container : this.inputObj,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(this, eventArgs, inputElement);\n }\n this.isClicked = false;\n }\n }\n}\nexport function triggerFocus(eventArgs, inputElement) {\n this.trigger('focus', eventArgs, function (eventArgs) {\n inputElement.selectionStart = eventArgs.selectionStart;\n inputElement.selectionEnd = eventArgs.selectionEnd;\n });\n}\nexport function escapeRegExp(text) {\n return !isNullOrUndefined(text) ? text.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&') : text;\n}\nexport function maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: !isNullOrUndefined(this.inputObj) ? this.inputObj.container : this.inputObj\n };\n this.trigger('blur', this.blurEventArgs);\n if (this.mask) {\n this.isFocus = false;\n if (this.placeholder && this.element.value === this.promptMask && this.floatLabelType !== 'Always') {\n setElementValue.call(this, '');\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.floatLabelType === 'Auto' && !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL)) {\n removeClass([labelElement], TOPLABEL);\n }\n }\n }\n}\nfunction maskInputPasteHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var sIndex_1 = this.element.selectionStart;\n var eIndex_1 = this.element.selectionEnd;\n var oldValue_1 = this.element.value;\n setElementValue.call(this, '');\n this._callPasteHandler = true;\n setTimeout(function () {\n var value = _this.element.value.replace(/ /g, '');\n if (_this.redoCollec.length > 0 && _this.redoCollec[0].value === _this.element.value) {\n value = strippedValue.call(_this, _this.element);\n }\n setElementValue.call(_this, oldValue_1);\n _this.element.selectionStart = sIndex_1;\n _this.element.selectionEnd = eIndex_1;\n var i = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i], false, null);\n ++i;\n } while (i < value.length);\n _this.maskKeyPress = false;\n _this._callPasteHandler = false;\n if (_this.element.value === oldValue_1) {\n var i_1 = 0;\n _this.maskKeyPress = true;\n do {\n validateValue.call(_this, value[i_1], false, null);\n ++i_1;\n } while (i_1 < value.length);\n _this.maskKeyPress = false;\n }\n else {\n triggerMaskChangeEvent.call(_this, event, oldValue_1);\n }\n }, 1);\n }\n}\nfunction maskInputCutHandler(event) {\n var _this = this;\n if (this.mask && !this.readonly) {\n var preValue_1 = this.element.value;\n var sIndex_2 = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd });\n var value_1 = this.element.value.substring(0, sIndex_2) + this.promptMask.substring(sIndex_2, eIndex) +\n this.element.value.substring(eIndex);\n setTimeout(function () {\n setElementValue.call(_this, value_1);\n _this.element.selectionStart = _this.element.selectionEnd = sIndex_2;\n if (_this.element.value !== preValue_1) {\n triggerMaskChangeEvent.call(_this, event, null);\n }\n }, 0);\n }\n}\nexport function maskInputDropHandler(event) {\n event.preventDefault();\n}\nfunction maskInputHandler(event) {\n if (Browser.isIE === true && this.element.value === '' && this.floatLabelType === 'Never') {\n return;\n }\n var eventArgs = { ctrlKey: false, keyCode: 229 };\n extend(event, eventArgs);\n if (this.mask) {\n if (this.element.value === '') {\n this.redoCollec.unshift({\n value: this.promptMask, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (!this._callPasteHandler) {\n removeMaskInputValues.call(this, event);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var value = this.element.value.substring(startIndex - addedValues, startIndex);\n this.maskKeyPress = false;\n var i = 0;\n do {\n validateValue.call(this, value[i], event.ctrlKey, event);\n ++i;\n } while (i < value.length);\n if (this.element.value !== this.preEleVal) {\n triggerMaskChangeEvent.call(this, event, null);\n }\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (val === '') {\n setElementValue.call(this, this.promptMask);\n this.element.setSelectionRange(0, 0);\n }\n }\n}\nfunction maskInputKeyDownHandler(event) {\n if (this.mask && !this.readonly) {\n if (event.keyCode !== 229) {\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n event.preventDefault();\n }\n removeMaskInputValues.call(this, event);\n }\n var startValue = this.element.value;\n if (event.ctrlKey && (event.keyCode === 89 || event.keyCode === 90)) {\n var collec = void 0;\n if (event.keyCode === 90 && this.undoCollec.length > 0 && startValue !== this.undoCollec[this.undoCollec.length - 1].value) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.undoCollec.splice(this.undoCollec.length - 1, 1);\n }\n else if (event.keyCode === 89 && this.redoCollec.length > 0 && startValue !== this.redoCollec[0].value) {\n collec = this.redoCollec[0];\n this.undoCollec.push({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n setElementValue.call(this, collec.value);\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n this.redoCollec.splice(0, 1);\n }\n }\n }\n}\nexport function mobileRemoveFunction() {\n var collec;\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n collec = this.redoCollec[0];\n setElementValue.call(this, collec.value);\n if ((collec.startIndex - sIndex) === 1) {\n this.element.selectionStart = collec.startIndex;\n this.element.selectionEnd = collec.endIndex;\n }\n else {\n this.element.selectionStart = sIndex + 1;\n this.element.selectionEnd = eIndex + 1;\n }\n }\n else {\n setElementValue.call(this, this.promptMask);\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n }\n}\nfunction autoFillMaskInputValues(isRemove, oldEventVal, event) {\n if (event.type === 'input') {\n isRemove = false;\n oldEventVal = this.element.value;\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, oldEventVal);\n }\n return isRemove;\n}\nfunction removeMaskInputValues(event) {\n var isRemove = false;\n var oldEventVal;\n var isDeleted = false;\n if (this.element.value.length < this.promptMask.length) {\n isRemove = true;\n oldEventVal = this.element.value;\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n mobileRemoveFunction.call(this);\n }\n if (this.element.value.length >= this.promptMask.length && event.type === 'input') {\n isRemove = autoFillMaskInputValues.call(this, isRemove, oldEventVal, event);\n }\n var initStartIndex = this.element.selectionStart;\n var initEndIndex = this.element.selectionEnd;\n var startIndex = this.element.selectionStart;\n var endIndex = this.element.selectionEnd;\n var maskValue = this.hiddenMask.replace(/[>|\\\\<]/g, '');\n var curMask = maskValue[startIndex - 1];\n var deleteEndIndex = this.element.selectionEnd;\n if (isRemove || event.keyCode === 8 || event.keyCode === 46) {\n this.undoCollec.push({ value: this.element.value, startIndex: this.element.selectionStart, endIndex: endIndex });\n var multipleDel = false;\n var preValue = this.element.value;\n if (startIndex > 0 || ((event.keyCode === 8 || event.keyCode === 46) && startIndex < this.element.value.length\n && ((this.element.selectionEnd - startIndex) !== this.element.value.length))) {\n var index = startIndex;\n if (startIndex !== endIndex) {\n startIndex = endIndex;\n if (event.keyCode === 46) {\n multipleDel = true;\n }\n }\n else if (event.keyCode === 46) {\n ++index;\n }\n else {\n --index;\n }\n for (var k = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? k > index : k < index; (event.keyCode === 8 || isRemove || multipleDel) ? k-- : k++) {\n for (var i = startIndex; (event.keyCode === 8 || isRemove || multipleDel) ? i > 0 : i < this.element.value.length; (event.keyCode === 8 || isRemove || multipleDel) ? i-- : i++) {\n var sIndex = void 0;\n if (((event.keyCode === 8 || multipleDel) && ((initStartIndex !== initEndIndex && initStartIndex !== startIndex) ||\n (initStartIndex === initEndIndex))) || isRemove) {\n curMask = maskValue[i - 1];\n sIndex = startIndex - 1;\n }\n else {\n curMask = maskValue[i];\n sIndex = startIndex;\n ++startIndex;\n }\n var oldValue = this.element.value[sIndex];\n if ((isNullOrUndefined(this.regExpCollec[\"\" + curMask]) && (!isNullOrUndefined(this.customCharacters)\n && isNullOrUndefined(this.customCharacters[\"\" + curMask]))\n && ((this.hiddenMask[sIndex] !== this.promptChar && this.customRegExpCollec[sIndex][0] !== '['\n && this.customRegExpCollec[sIndex][this.customRegExpCollec[sIndex].length - 1] !== ']')))\n || (this.promptMask[sIndex] !== this.promptChar && isNullOrUndefined(this.customCharacters))) {\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n ++this.element.selectionStart;\n }\n }\n else {\n var value = this.element.value;\n var prompt_1 = this.promptChar;\n var elementValue = value.substring(0, sIndex) + prompt_1 + value.substring(startIndex, value.length);\n setElementValue.call(this, elementValue);\n event.preventDefault();\n if (event.keyCode === 46 && !multipleDel) {\n sIndex++;\n }\n this.element.selectionStart = this.element.selectionEnd = sIndex;\n isDeleted = true;\n }\n startIndex = this.element.selectionStart;\n if ((!isDeleted && event.keyCode === 8) || multipleDel || (!isDeleted && !(event.keyCode === 46))) {\n sIndex = startIndex - 1;\n }\n else {\n sIndex = startIndex;\n isDeleted = false;\n }\n oldValue = this.element.value[sIndex];\n if (((initStartIndex !== initEndIndex) && (this.element.selectionStart === initStartIndex))\n || (this.promptMask[sIndex] === this.promptChar) || ((oldValue !== this.promptMask[sIndex]) &&\n (this.promptMask[sIndex] !== this.promptChar) && !isNullOrUndefined(this.customCharacters))) {\n break;\n }\n }\n }\n }\n if (event.keyCode === 46 && multipleDel && isDeleted) {\n this.element.selectionStart = this.element.selectionEnd = deleteEndIndex;\n }\n if (this.element.selectionStart === 0 && (this.element.selectionEnd === this.element.value.length)) {\n setElementValue.call(this, this.promptMask);\n event.preventDefault();\n this.element.selectionStart = this.element.selectionEnd = startIndex;\n }\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart,\n endIndex: this.element.selectionEnd\n });\n if (this.element.value !== preValue) {\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n}\nfunction maskInputKeyPressHandler(event) {\n if (this.mask && !this.readonly) {\n var oldValue = this.element.value;\n if (!(event.ctrlKey || event.metaKey) || ((event.ctrlKey || event.metaKey) && event.code !== 'KeyA' && event.code !== 'KeyY'\n && event.code !== 'KeyZ' && event.code !== 'KeyX' && event.code !== 'KeyC' && event.code !== 'KeyV')) {\n this.maskKeyPress = true;\n var key = event.key;\n if (key === 'Spacebar') {\n key = String.fromCharCode(event.keyCode);\n }\n if (!key) {\n this.isIosInvalid = true;\n validateValue.call(this, String.fromCharCode(event.keyCode), event.ctrlKey, event);\n event.preventDefault();\n this.isIosInvalid = false;\n }\n else if (key && key.length === 1) {\n validateValue.call(this, key, event.ctrlKey, event);\n event.preventDefault();\n }\n if (event.keyCode === 32 && key === ' ' && this.promptChar === ' ') {\n this.element.selectionStart = this.element.selectionEnd = this.element.selectionStart - key.length;\n }\n }\n if (this.element.value !== oldValue) {\n triggerMaskChangeEvent.call(this, event, oldValue);\n }\n }\n}\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction triggerMaskChangeEvent(event, oldValue) {\n var prevOnChange = this.isProtectedOnChange;\n if (!isNullOrUndefined(this.changeEventArgs) && !this.isInitial) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.element.value, maskedValue: this.element.value, isInteraction: false, isInteracted: false };\n if (this.mask) {\n this.changeEventArgs.value = strippedValue.call(this, this.element);\n }\n if (!isNullOrUndefined(event)) {\n this.changeEventArgs.isInteracted = true;\n this.changeEventArgs.isInteraction = true;\n this.changeEventArgs.event = event;\n }\n this.isProtectedOnChange = true;\n this.value = this.changeEventArgs.value;\n this.isProtectedOnChange = prevOnChange;\n merge(eventArgs, this.changeEventArgs);\n /* istanbul ignore next */\n if (this.isAngular && this.preventChange) {\n this.preventChange = false;\n }\n else {\n this.trigger('change', eventArgs);\n }\n }\n this.preEleVal = this.element.value;\n this.prevValue = strippedValue.call(this, this.element);\n}\nfunction maskInputKeyUpHandler(event) {\n if (this.mask && !this.readonly) {\n var collec = void 0;\n if (!this.maskKeyPress && event.keyCode === 229) {\n var oldEventVal = void 0;\n if (this.element.value.length === 1) {\n this.element.value = this.element.value + this.promptMask;\n this.element.setSelectionRange(1, 1);\n }\n if (this.element.value.length > this.promptMask.length) {\n var startIndex = this.element.selectionStart;\n var addedValues = this.element.value.length - this.promptMask.length;\n var val_1 = this.element.value.substring(startIndex - addedValues, startIndex);\n if (this.undoCollec.length > 0) {\n collec = this.undoCollec[this.undoCollec.length - 1];\n var startIndex_1 = this.element.selectionStart;\n oldEventVal = collec.value;\n var oldVal = collec.value.substring(startIndex_1 - addedValues, startIndex_1);\n collec = this.redoCollec[0];\n val_1 = val_1.trim();\n var isSpace = Browser.isAndroid && val_1 === '';\n if (!isSpace && oldVal !== val_1 && collec.value.substring(startIndex_1 - addedValues, startIndex_1) !== val_1) {\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n else if (isSpace) {\n preventUnsupportedValues.call(this, event, startIndex_1 - 1, this.element.selectionEnd - 1, val_1, event.ctrlKey, false);\n }\n }\n else {\n oldEventVal = this.promptMask;\n validateValue.call(this, val_1, event.ctrlKey, event);\n }\n this.maskKeyPress = false;\n triggerMaskChangeEvent.call(this, event, oldEventVal);\n }\n }\n else {\n removeMaskError.call(this);\n }\n var val = strippedValue.call(this, this.element);\n if (!((this.element.selectionStart === 0) && (this.promptMask === this.element.value) && val === '')\n || (val === '' && this.value !== val)) {\n this.prevValue = val;\n this.value = val;\n }\n }\n else {\n triggerMaskChangeEvent.call(this, event);\n }\n if (this.element.selectionStart === 0 && this.element.selectionEnd === 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var temp_1 = this.element;\n setTimeout(function () {\n temp_1.setSelectionRange(0, 0);\n }, 0);\n }\n}\nfunction mobileSwipeCheck(key) {\n if (key.length > 1 && ((this.promptMask.length + key.length) < this.element.value.length)) {\n var elementValue = this.redoCollec[0].value.substring(0, this.redoCollec[0].startIndex) + key +\n this.redoCollec[0].value.substring(this.redoCollec[0].startIndex, this.redoCollec[0].value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = this.redoCollec[0].startIndex + key.length;\n }\n this.element.selectionStart = this.element.selectionStart - key.length;\n this.element.selectionEnd = this.element.selectionEnd - key.length;\n}\nfunction mobileValidation(key) {\n if (!this.maskKeyPress) {\n mobileSwipeCheck.call(this, key);\n }\n}\nfunction validateValue(key, isCtrlKey, event) {\n mobileValidation.call(this, key);\n if (isNullOrUndefined(this) || isNullOrUndefined(key)) {\n return;\n }\n var startIndex = this.element.selectionStart;\n var initStartIndex = startIndex;\n var curMask;\n var allowText = false;\n var value = this.element.value;\n var eventOldVal;\n var prevSupport = false;\n var isEqualVal = false;\n for (var k = 0; k < key.length; k++) {\n var keyValue = key[k];\n startIndex = this.element.selectionStart;\n if (!this.maskKeyPress && initStartIndex === startIndex) {\n startIndex = startIndex + k;\n }\n if ((!this.maskKeyPress || startIndex < this.promptMask.length)) {\n for (var i = startIndex; i < this.promptMask.length; i++) {\n var maskValue = this.escapeMaskValue;\n curMask = maskValue[startIndex];\n if (this.hiddenMask[startIndex] === '\\\\' && this.hiddenMask[startIndex + 1] === key) {\n isEqualVal = true;\n }\n if ((isNullOrUndefined(this.regExpCollec[\"\" + curMask]) && (isNullOrUndefined(this.customCharacters)\n || (!isNullOrUndefined(this.customCharacters) && isNullOrUndefined(this.customCharacters[\"\" + curMask])))\n && ((this.hiddenMask[startIndex] !== this.promptChar && this.customRegExpCollec[startIndex][0] !== '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] !== ']')))\n || ((this.promptMask[startIndex] !== this.promptChar) && isNullOrUndefined(this.customCharacters))\n || (this.promptChar === curMask && this.escapeMaskValue === this.mask)) {\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n startIndex = this.element.selectionStart;\n curMask = this.hiddenMask[startIndex];\n }\n }\n if (!isNullOrUndefined(this.customCharacters) && !isNullOrUndefined(this.customCharacters[\"\" + curMask])) {\n var customValStr = this.customCharacters[\"\" + curMask];\n var customValArr = customValStr.split(',');\n for (var i = 0; i < customValArr.length; i++) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n }\n else if (!isNullOrUndefined(this.regExpCollec[\"\" + curMask]) && keyValue.match(new RegExp(this.regExpCollec[\"\" + curMask]))\n && this.promptMask[startIndex] === this.promptChar) {\n allowText = true;\n }\n else if (this.promptMask[startIndex] === this.promptChar && this.customRegExpCollec[startIndex][0] === '['\n && this.customRegExpCollec[startIndex][this.customRegExpCollec[startIndex].length - 1] === ']'\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n && keyValue.match(new RegExp(this.customRegExpCollec[startIndex]))) {\n allowText = true;\n }\n if ((!this.maskKeyPress || startIndex < this.hiddenMask.length) && allowText) {\n if (k === 0) {\n if (this.maskKeyPress) {\n this.undoCollec.push({ value: value, startIndex: startIndex, endIndex: startIndex });\n }\n else {\n var sIndex = this.element.selectionStart;\n var eIndex = this.element.selectionEnd;\n if (this.redoCollec.length > 0) {\n eventOldVal = this.redoCollec[0].value;\n setElementValue.call(this, eventOldVal);\n this.undoCollec.push(this.redoCollec[0]);\n }\n else {\n this.undoCollec.push({ value: this.promptMask, startIndex: startIndex, endIndex: startIndex });\n eventOldVal = this.promptMask;\n setElementValue.call(this, eventOldVal);\n }\n this.element.selectionStart = sIndex;\n this.element.selectionEnd = eIndex;\n }\n }\n startIndex = this.element.selectionStart;\n applySupportedValues.call(this, event, startIndex, keyValue, eventOldVal, isEqualVal);\n prevSupport = true;\n if (k === key.length - 1) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n allowText = false;\n }\n else {\n startIndex = this.element.selectionStart;\n preventUnsupportedValues.call(this, event, startIndex, initStartIndex, key, isCtrlKey, prevSupport);\n }\n if (k === key.length - 1 && !allowText) {\n if (!Browser.isAndroid || (Browser.isAndroid && startIndex < this.promptMask.length)) {\n this.redoCollec.unshift({\n value: this.element.value, startIndex: this.element.selectionStart, endIndex: this.element.selectionEnd\n });\n }\n }\n }\n else {\n if (key.length === 1 && !isCtrlKey && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n }\n }\n}\nfunction applySupportedValues(event, startIndex, keyValue, eventOldVal, isEqualVal) {\n if (this.hiddenMask.length > this.promptMask.length) {\n keyValue = changeToLowerUpperCase.call(this, keyValue, this.element.value);\n }\n if (!isEqualVal) {\n var value = this.element.value;\n var elementValue = value.substring(0, startIndex) + keyValue + value.substring(startIndex + 1, value.length);\n setElementValue.call(this, elementValue);\n this.element.selectionStart = this.element.selectionEnd = startIndex + 1;\n }\n}\nfunction preventUnsupportedValues(event, sIdx, idx, key, ctrl, chkSupport) {\n if (!this.maskKeyPress) {\n var value = this.element.value;\n if (sIdx >= this.promptMask.length) {\n setElementValue.call(this, value.substring(0, sIdx));\n }\n else {\n if (idx === sIdx) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx + 1, value.length));\n }\n else {\n if (this.promptMask.length === this.element.value.length) {\n setElementValue.call(this, value.substring(0, sIdx) + value.substring(sIdx, value.length));\n }\n else {\n setElementValue.call(this, value.substring(0, idx) + value.substring(idx + 1, value.length));\n }\n }\n this.element.selectionStart = this.element.selectionEnd = (chkSupport ||\n this.element.value[idx] !== this.promptChar) ? sIdx : idx;\n }\n addMaskErrorClass.call(this);\n }\n if (key.length === 1 && !ctrl && !isNullOrUndefined(event)) {\n addMaskErrorClass.call(this);\n }\n}\nfunction addMaskErrorClass() {\n var _this = this;\n var parentElement = this.element.parentNode;\n var timer = 200;\n if (parentElement.classList.contains(INPUTGROUP) || parentElement.classList.contains(FLOATINPUT)) {\n addClass([parentElement], ERROR);\n }\n else {\n addClass([this.element], ERROR);\n }\n if (this.isIosInvalid === true) {\n timer = 400;\n }\n attributes(this.element, { 'aria-invalid': 'true' });\n setTimeout(function () {\n if (!_this.maskKeyPress) {\n removeMaskError.call(_this);\n }\n }, timer);\n}\nfunction removeMaskError() {\n var parentElement = this.element.parentNode;\n if (!isNullOrUndefined(parentElement)) {\n removeClass([parentElement], ERROR);\n }\n removeClass([this.element], ERROR);\n attributes(this.element, { 'aria-invalid': 'false' });\n}\n/**\n * Validates user input using masking elements '<' , '>' and '|'.\n *\n * @hidden\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var curVal = value;\n var caseCount = 0;\n for (i = 0; i < this.hiddenMask.length; i++) {\n if (this.hiddenMask[i] === '\\\\') {\n promptMask = curVal.substring(0, i) + '\\\\' + curVal.substring(i, curVal.length);\n }\n if (this.hiddenMask[i] === '>' || this.hiddenMask[i] === '<' || this.hiddenMask[i] === '|') {\n if (this.hiddenMask[i] !== curVal[i]) {\n promptMask = curVal.substring(0, i) + this.hiddenMask[i] + curVal.substring(i, curVal.length);\n }\n ++caseCount;\n }\n if (promptMask) {\n if (((promptMask[i] === this.promptChar) && (i > this.element.selectionStart)) ||\n (this.element.value.indexOf(this.promptChar) < 0 && (this.element.selectionStart + caseCount) === i)) {\n caseCount = 0;\n break;\n }\n curVal = promptMask;\n }\n }\n while (i >= 0 && promptMask) {\n if (i === 0 || promptMask[i - 1] !== '\\\\') {\n if (promptMask[i] === '>') {\n key = key.toUpperCase();\n break;\n }\n else if (promptMask[i] === '<') {\n key = key.toLowerCase();\n break;\n }\n else if (promptMask[i] === '|') {\n break;\n }\n }\n --i;\n }\n return key;\n}\n/**\n * To set updated values in the MaskedTextBox.\n *\n * @hidden\n */\nexport function setMaskValue(val) {\n if (this.mask && val !== undefined && (this.prevValue === undefined || this.prevValue !== val)) {\n this.maskKeyPress = true;\n setElementValue.call(this, this.promptMask);\n if (val !== '' && !(val === null && this.floatLabelType === 'Never' && this.placeholder)) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n if (val !== null) {\n for (var i = 0; i < val.length; i++) {\n validateValue.call(this, val[i], false, null);\n }\n }\n var newVal = strippedValue.call(this, this.element);\n this.prevValue = newVal;\n this.value = newVal;\n triggerMaskChangeEvent.call(this, null, null);\n this.maskKeyPress = false;\n var labelElement = this.element.parentNode.querySelector('.e-float-text');\n if (this.element.value === this.promptMask && this.floatLabelType === 'Auto' && this.placeholder &&\n !isNullOrUndefined(labelElement) && labelElement.classList.contains(TOPLABEL) && !this.isFocus) {\n removeClass([labelElement], TOPLABEL);\n addClass([labelElement], BOTTOMLABEL);\n setElementValue.call(this, '');\n }\n }\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n}\n/**\n * To set updated values in the input element.\n *\n * @hidden\n */\nexport function setElementValue(val, element) {\n if (!this.isFocus && this.floatLabelType === 'Auto' && this.placeholder && isNullOrUndefined(this.value)) {\n val = '';\n }\n var value = strippedValue.call(this, (element ? element : this.element), val);\n if (value === null || value === '') {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, false);\n if (this.showClearButton) {\n this.inputObj.clearButton.classList.add('e-clear-icon-hide');\n }\n }\n else {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n }\n}\n/**\n * Provide mask support to input textbox through utility method.\n *\n * @hidden\n */\nexport function maskInput(args) {\n var inputEle = getMaskInput(args);\n applyMask.call(inputEle);\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (args.mask) {\n unwireEvents.call(inputEle);\n wireEvents.call(inputEle);\n }\n}\nfunction getMaskInput(args) {\n addClass([args.element], UTILMASK);\n var inputEle = {\n element: args.element,\n mask: args.mask,\n promptMask: '',\n hiddenMask: '',\n escapeMaskValue: '',\n promptChar: args.promptChar ? (args.promptChar.length > 1) ? args.promptChar = args.promptChar[0]\n : args.promptChar : '_',\n value: args.value ? args.value : null,\n regExpCollec: regularExpressions,\n customRegExpCollec: [],\n customCharacters: args.customCharacters,\n undoCollec: [],\n redoCollec: [],\n maskKeyPress: false,\n prevValue: ''\n };\n createMask.call(inputEle);\n return inputEle;\n}\n/**\n * Gets raw value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * Gets masked value of the textbox which has been masked through utility method.\n *\n * @hidden\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * Arguments to perform undo and redo functionalities.\n *\n * @hidden\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nvar maskUndo = new MaskUndo();\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","/* eslint-disable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\nimport { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nvar CLASSNAMES = {\n RTL: 'e-rtl',\n DISABLE: 'e-disabled',\n INPUT: 'e-input',\n TEXTAREA: 'e-multi-line-input',\n INPUTGROUP: 'e-input-group',\n FLOATINPUT: 'e-float-input',\n FLOATLINE: 'e-float-line',\n FLOATTEXT: 'e-float-text',\n FLOATTEXTCONTENT: 'e-float-text-content',\n CLEARICON: 'e-clear-icon',\n CLEARICONHIDE: 'e-clear-icon-hide',\n LABELTOP: 'e-label-top',\n LABELBOTTOM: 'e-label-bottom',\n NOFLOATLABEL: 'e-no-float-label',\n INPUTCUSTOMTAG: 'e-input-custom-tag',\n FLOATCUSTOMTAG: 'e-float-custom-tag'\n};\n/**\n * Defines the constant attributes for the input element container.\n */\nexport var containerAttributes = ['title', 'style', 'class'];\n/**\n * Defines the constant focus class for the input element.\n */\nexport var TEXTBOX_FOCUS = 'e-input-focus';\n/**\n * Base for Input creation through util methods.\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\n var isBindClearAction = true;\n /**\n * Create a wrapper to input element with multiple span elements and set the basic properties to input based components.\n * ```\n * E.g : Input.createInput({ element: element, floatLabelType : \"Auto\", properties: { placeholder: 'Search' } });\n * ```\n *\n */\n function createInput(args, internalCreateElement) {\n args.element.__eventHandlers = {};\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var inputObject = { container: null, buttons: [], clearButton: null };\n floatType = args.floatLabelType;\n isBindClearAction = args.bindClearAction;\n if (isNullOrUndefined(args.floatLabelType) || args.floatLabelType === 'Never') {\n inputObject.container = createInputContainer(args, CLASSNAMES.INPUTGROUP, CLASSNAMES.INPUTCUSTOMTAG, 'span', makeElement);\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n addClass([args.element], CLASSNAMES.INPUT);\n inputObject.container.appendChild(args.element);\n }\n else {\n createFloatingInput(args, inputObject, makeElement);\n }\n bindInitialEvent(args);\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.showClearButton) &&\n args.properties.showClearButton) {\n setClearButton(args.properties.showClearButton, args.element, inputObject, true, makeElement);\n inputObject.clearButton.setAttribute('role', 'button');\n if (inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([inputObject.container], CLASSNAMES.INPUTGROUP);\n }\n }\n if (!isNullOrUndefined(args.buttons)) {\n for (var i = 0; i < args.buttons.length; i++) {\n inputObject.buttons.push(appendSpan(args.buttons[i], inputObject.container, makeElement));\n }\n }\n if (!isNullOrUndefined(args.element) && args.element.tagName === 'TEXTAREA') {\n addClass([inputObject.container], CLASSNAMES.TEXTAREA);\n }\n validateInputType(inputObject.container, args.element);\n inputObject = setPropertyValue(args, inputObject);\n createSpanElement(inputObject.container, makeElement);\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindFocusEventHandler(args) {\n var parent = getParentNode(args.element);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n if (args.floatLabelType !== 'Never') {\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n }\n }\n function bindBlurEventHandler(args) {\n var parent = getParentNode(args.element);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline') || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n if (args.floatLabelType !== 'Never') {\n setTimeout(function () {\n Input.calculateWidth(args.element, parent);\n }, 80);\n }\n }\n function bindInputEventHandler(args) {\n checkInputValue(args.floatLabelType, args.element);\n }\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n var focusHandler = function () { return bindFocusEventHandler(args); };\n var blurHandler = function () { return bindBlurEventHandler(args); };\n var inputHandler = function () { return bindInputEventHandler(args); };\n args.element.addEventListener('focus', focusHandler);\n args.element.addEventListener('blur', blurHandler);\n args.element.addEventListener('input', inputHandler);\n args.element.__eventHandlers['inputFocusHandler'] = { focusHandler: focusHandler };\n args.element.__eventHandlers['inputBlurHandler'] = { blurHandler: blurHandler };\n args.element.__eventHandlers['inputHandler'] = { inputHandler: inputHandler };\n }\n Input.bindInitialEvent = bindInitialEvent;\n function unbindInitialEvent(args) {\n if (!isNullOrUndefined(args.element)) {\n if (!isNullOrUndefined(args.element.__eventHandlers)) {\n if (!isNullOrUndefined(args.element.__eventHandlers['inputFocusHandler'])\n && !isNullOrUndefined(args.element.__eventHandlers['inputBlurHandler'])\n && !isNullOrUndefined(args.element.__eventHandlers['inputHandler'])) {\n var focusHandler_1 = args.element.__eventHandlers['inputFocusHandler'].focusHandler;\n var blurHandler_1 = args.element.__eventHandlers['inputBlurHandler'].blurHandler;\n var inputHandler_1 = args.element.__eventHandlers['inputHandler'].inputHandler;\n args.element.removeEventListener('focus', focusHandler_1);\n args.element.removeEventListener('blur', blurHandler_1);\n args.element.removeEventListener('input', inputHandler_1);\n // Clean up stored bound functions\n delete args.element.__eventHandlers['inputFocusHandler'];\n delete args.element.__eventHandlers['inputBlurHandler'];\n delete args.element.__eventHandlers['inputHandler'];\n }\n }\n }\n }\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n var inputParent = inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputValue !== '' && !isNullOrUndefined(inputValue)) {\n if (inputParent && inputParent.classList.contains('e-input-group')) {\n inputParent.classList.add('e-valid-input');\n }\n else if (grandParent && grandParent.classList.contains('e-input-group')) {\n grandParent.classList.add('e-valid-input');\n }\n }\n else if (floatLabelType !== 'Always') {\n if (inputParent && inputParent.classList.contains('e-input-group')) {\n inputParent.classList.remove('e-valid-input');\n }\n else if (grandParent && grandParent.classList.contains('e-input-group')) {\n grandParent.classList.remove('e-valid-input');\n }\n }\n }\n function _focusFn() {\n var label = getParentNode(this).getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function _blurFn() {\n var parent = getParentNode(this);\n if ((parent.getElementsByTagName('textarea')[0]) ? parent.getElementsByTagName('textarea')[0].value === '' :\n parent.getElementsByTagName('input')[0].value === '') {\n var label = parent.getElementsByClassName('e-float-text')[0];\n if (!isNullOrUndefined(label)) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function wireFloatingEvents(element) {\n element.addEventListener('focus', _focusFn);\n element.addEventListener('blur', _blurFn);\n }\n Input.wireFloatingEvents = wireFloatingEvents;\n function unwireFloatingEvents(element) {\n if (!isNullOrUndefined(element)) {\n element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\n }\n }\n function inputEventHandler(args) {\n validateLabel(args.element, args.floatLabelType);\n }\n function blurEventHandler(args) {\n validateLabel(args.element, args.floatLabelType);\n }\n function createFloatingInput(args, inputObject, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (args.floatLabelType === 'Auto') {\n wireFloatingEvents(args.element);\n }\n if (isNullOrUndefined(inputObject.container)) {\n inputObject.container = createInputContainer(args, CLASSNAMES.FLOATINPUT, CLASSNAMES.FLOATCUSTOMTAG, 'div', makeElement);\n inputObject.container.classList.add(CLASSNAMES.INPUTGROUP);\n if (args.element.parentNode) {\n args.element.parentNode.insertBefore(inputObject.container, args.element);\n }\n }\n else {\n if (!isNullOrUndefined(args.customTag)) {\n inputObject.container.classList.add(CLASSNAMES.FLOATCUSTOMTAG);\n }\n inputObject.container.classList.add(CLASSNAMES.FLOATINPUT);\n }\n var floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n var floatLabelElement = makeElement('label', { className: CLASSNAMES.FLOATTEXT });\n if (!isNullOrUndefined(args.element.id) && args.element.id !== '') {\n floatLabelElement.id = 'label_' + args.element.id.replace(/ /g, '_');\n attributes(args.element, { 'aria-labelledby': floatLabelElement.id });\n }\n if (!isNullOrUndefined(args.element.placeholder) && args.element.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.element.placeholder);\n args.element.removeAttribute('placeholder');\n }\n if (!isNullOrUndefined(args.properties) && !isNullOrUndefined(args.properties.placeholder) &&\n args.properties.placeholder !== '') {\n floatLabelElement.innerText = encodePlaceHolder(args.properties.placeholder);\n }\n if (!floatLabelElement.innerText) {\n inputObject.container.classList.add(CLASSNAMES.NOFLOATLABEL);\n }\n if (inputObject.container.classList.contains('e-float-icon-left')) {\n var inputWrap = inputObject.container.querySelector('.e-input-in-wrap');\n inputWrap.appendChild(args.element);\n inputWrap.appendChild(floatLinelement);\n inputWrap.appendChild(floatLabelElement);\n }\n else {\n inputObject.container.appendChild(args.element);\n inputObject.container.appendChild(floatLinelement);\n inputObject.container.appendChild(floatLabelElement);\n }\n updateLabelState(args.element.value, floatLabelElement);\n if (args.floatLabelType === 'Always') {\n if (floatLabelElement.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([floatLabelElement], CLASSNAMES.LABELBOTTOM);\n }\n addClass([floatLabelElement], CLASSNAMES.LABELTOP);\n }\n if (args.floatLabelType === 'Auto') {\n var inputFloatHandler = function () { return inputEventHandler(args); };\n var blurFloatHandler = function () { return blurEventHandler(args); };\n // Add event listeners using the defined functions\n args.element.addEventListener('input', inputFloatHandler);\n args.element.addEventListener('blur', blurFloatHandler);\n // Store the event handler functions to remove them later\n args.element.__eventHandlers['floatInputHandler'] = { inputFloatHandler: inputFloatHandler };\n args.element.__eventHandlers['floatBlurHandler'] = { blurFloatHandler: blurFloatHandler };\n }\n else {\n unWireFloatLabelEvents(args);\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\n }\n }\n function unWireFloatLabelEvents(args) {\n if (!isNullOrUndefined(args.element) &&\n !isNullOrUndefined(args.element.__eventHandlers)\n && !isNullOrUndefined(args.element.__eventHandlers['floatInputHandler'])\n && !isNullOrUndefined(args.element.__eventHandlers['floatBlurHandler'])) {\n var inputFloatHandler = args.element.__eventHandlers['floatInputHandler'].inputFloatHandler;\n var blurFloatHandler = args.element.__eventHandlers['floatBlurHandler'].blurFloatHandler;\n // Remove the event listeners using the defined functions\n args.element.removeEventListener('input', inputFloatHandler);\n args.element.removeEventListener('blur', blurFloatHandler);\n // Clean up stored event handler functions\n delete args.element.__eventHandlers['floatInputHandler'];\n delete args.element.__eventHandlers['floatBlurHandler'];\n }\n }\n function checkFloatLabelType(type, container) {\n if (type === 'Always' && container.classList.contains('e-outline')) {\n container.classList.add('e-valid-input');\n }\n }\n function setPropertyValue(args, inputObject) {\n if (!isNullOrUndefined(args.properties)) {\n for (var _i = 0, _a = Object.keys(args.properties); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n setCssClass(args.properties.cssClass, [inputObject.container]);\n checkFloatLabelType(args.floatLabelType, inputObject.container);\n break;\n case 'enabled':\n setEnabled(args.properties.enabled, args.element, args.floatLabelType, inputObject.container);\n break;\n case 'enableRtl':\n setEnableRtl(args.properties.enableRtl, [inputObject.container]);\n break;\n case 'placeholder':\n setPlaceholder(args.properties.placeholder, args.element);\n break;\n case 'readonly':\n setReadonly(args.properties.readonly, args.element);\n break;\n }\n }\n }\n return inputObject;\n }\n function updateIconState(value, button, readonly) {\n if (!isNullOrUndefined(button)) {\n if (value && !readonly) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n function updateLabelState(value, label, element) {\n if (element === void 0) { element = null; }\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n var isNotFocused = element != null ? element !== document.activeElement : true;\n if (isNotFocused) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n function clickHandler(event, element, button) {\n if (!(element.classList.contains(CLASSNAMES.DISABLE) || element.readOnly)) {\n event.preventDefault();\n if (element !== document.activeElement) {\n element.focus();\n }\n element.value = '';\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function inputHandler(element, button) {\n updateIconState(element.value, button);\n }\n function focusHandler(element, button) {\n updateIconState(element.value, button, element.readOnly);\n }\n function blurHandler(element, button) {\n setTimeout(function () {\n if (!isNullOrUndefined(button)) {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n button = !isNullOrUndefined(element) && element.classList.contains('e-combobox') ? null : button;\n }\n }, 200);\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction === undefined || isBindClearAction) {\n var clickHandlerEvent = function (e) { return clickHandler(e, element, button); };\n button.addEventListener('click', clickHandlerEvent);\n element.__eventHandlers['clearClickHandler'] = { clickHandlerEvent: clickHandlerEvent };\n }\n var inputHandlerEvent = function () { return inputHandler(element, button); };\n var focusHandlerEvent = function () { return focusHandler(element, button); };\n var blurHandlerEvent = function () { return blurHandler(element, button); };\n element.addEventListener('input', inputHandlerEvent);\n element.addEventListener('focus', focusHandlerEvent);\n element.addEventListener('blur', blurHandlerEvent);\n // Store the bound functions to remove them later\n element.__eventHandlers['clearInputHandler'] = { inputHandlerEvent: inputHandlerEvent };\n element.__eventHandlers['clearFocusHandler'] = { focusHandlerEvent: focusHandlerEvent };\n element.__eventHandlers['clearBlurHandler'] = { blurHandlerEvent: blurHandlerEvent };\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\n function unWireClearBtnEvents(element, button) {\n if (!isNullOrUndefined(element) &&\n !isNullOrUndefined(element.__eventHandlers)) {\n if (!isNullOrUndefined(element.__eventHandlers['clearClickHandler'])) {\n var clickHandlerEvent = element.__eventHandlers['clearClickHandler'].clickHandlerEvent;\n if (isBindClearAction === undefined || isBindClearAction) {\n if (!isNullOrUndefined(button)) {\n button.removeEventListener('click', clickHandlerEvent);\n }\n }\n delete element.__eventHandlers['clearClickHandler'];\n }\n if (!isNullOrUndefined(element.__eventHandlers['clearInputHandler'])\n && !isNullOrUndefined(element.__eventHandlers['clearFocusHandler'])\n && !isNullOrUndefined(element.__eventHandlers['clearBlurHandler'])) {\n var inputHandlerEvent = element.__eventHandlers['clearInputHandler'].inputHandlerEvent;\n var focusHandlerEvent = element.__eventHandlers['clearFocusHandler'].focusHandlerEvent;\n var blurHandlerEvent = element.__eventHandlers['clearBlurHandler'].blurHandlerEvent;\n element.removeEventListener('input', inputHandlerEvent);\n element.removeEventListener('focus', focusHandlerEvent);\n element.removeEventListener('blur', blurHandlerEvent);\n // Clean up stored Event functions\n delete element.__eventHandlers['clearInputHandler'];\n delete element.__eventHandlers['clearFocusHandler'];\n delete element.__eventHandlers['clearBlurHandler'];\n }\n }\n }\n function destroy(args, button) {\n if (button === void 0) { button = null; }\n unbindInitialEvent(args);\n if (args.floatLabelType === 'Auto') {\n unWireFloatLabelEvents(args);\n }\n if (args.properties.showClearButton) {\n unWireClearBtnEvents(args.element, button);\n }\n if (!isNullOrUndefined(args.buttons)) {\n _internalRipple(false, null, args.buttons);\n }\n unwireFloatingEvents(args.element);\n if (!isNullOrUndefined(args.element)) {\n delete args.element.__eventHandlers;\n }\n privateInputObj = null;\n }\n Input.destroy = destroy;\n function validateLabel(element, floatLabelType) {\n var parent = getParentNode(element);\n if (parent.classList.contains(CLASSNAMES.FLOATINPUT) && floatLabelType === 'Auto') {\n var label = getParentNode(element).getElementsByClassName('e-float-text')[0];\n updateLabelState(element.value, label, element);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '';\n var hiddenInput = (spanEle.children[0]);\n result = hiddenInput.placeholder;\n }\n return result;\n }\n /**\n * Sets the value to the input element.\n * ```\n * E.g : Input.setValue('content', element, \"Auto\", true );\n * ```\n *\n * @param {string} value - Specify the value of the input element.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the specified value is updated.\n * @param {string} floatLabelType - Specify the float label type of the input element.\n * @param {boolean} clearButton - Boolean value to specify whether the clear icon is enabled / disabled on the input.\n */\n function setValue(value, element, floatLabelType, clearButton) {\n element.value = value;\n if (floatLabelType !== 'Never') {\n calculateWidth(element, element.parentElement);\n }\n if ((!isNullOrUndefined(floatLabelType)) && floatLabelType === 'Auto') {\n validateLabel(element, floatLabelType);\n }\n if (!isNullOrUndefined(clearButton) && clearButton) {\n var parentElement = getParentNode(element);\n if (!isNullOrUndefined(parentElement)) {\n var button = parentElement.getElementsByClassName(CLASSNAMES.CLEARICON)[0];\n if (!isNullOrUndefined(button)) {\n if (element.value && !isNullOrUndefined(parentElement) && parentElement.classList.contains('e-input-focus')) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n }\n }\n checkInputValue(floatLabelType, element);\n }\n Input.setValue = setValue;\n /**\n * Sets the single or multiple cssClass to wrapper of input element.\n * ```\n * E.g : Input.setCssClass('e-custom-class', [element]);\n * ```\n *\n * @param {string} cssClass - Css class names which are needed to add.\n * @param {Element[] | NodeList} elements - The elements which are needed to add / remove classes.\n * @param {string} oldClass\n * - Css class names which are needed to remove. If old classes are need to remove, can give this optional parameter.\n */\n function setCssClass(cssClass, elements, oldClass) {\n if (!isNullOrUndefined(oldClass) && oldClass !== '') {\n removeClass(elements, oldClass.split(' '));\n }\n if (!isNullOrUndefined(cssClass) && cssClass !== '') {\n addClass(elements, cssClass.split(' '));\n }\n }\n Input.setCssClass = setCssClass;\n /**\n * Set the width to the placeholder when it overflows on the button such as spinbutton, clearbutton, icon etc\n * ```\n * E.g : Input.calculateWidth(element, container);\n * ```\n *\n * @param {any} element - Input element which is need to add.\n * @param {HTMLElement} container - The parent element which is need to get the label span to calculate width\n */\n function calculateWidth(element, container, moduleName) {\n if (moduleName !== 'multiselect' && !_isElementVisible(element)) {\n return;\n }\n var elementWidth = moduleName === 'multiselect' ? element : element.clientWidth - parseInt(getComputedStyle(element, null).getPropertyValue('padding-left'), 10);\n if (!isNullOrUndefined(container.getElementsByClassName('e-float-text-content')[0])) {\n if (container.getElementsByClassName('e-float-text-content')[0].classList.contains('e-float-text-overflow')) {\n container.getElementsByClassName('e-float-text-content')[0].classList.remove('e-float-text-overflow');\n }\n if (elementWidth < container.getElementsByClassName('e-float-text-content')[0].clientWidth || elementWidth === container.getElementsByClassName('e-float-text-content')[0].clientWidth) {\n container.getElementsByClassName('e-float-text-content')[0].classList.add('e-float-text-overflow');\n }\n }\n }\n Input.calculateWidth = calculateWidth;\n /**\n * Set the width to the wrapper of input element.\n * ```\n * E.g : Input.setWidth('200px', container);\n * ```\n *\n * @param {number | string} width - Width value which is need to add.\n * @param {HTMLElement} container - The element on which the width is need to add.\n */\n function setWidth(width, container) {\n if (typeof width === 'number') {\n container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n calculateWidth(container.firstChild, container);\n }\n Input.setWidth = setWidth;\n /**\n * Set the placeholder attribute to the input element.\n * ```\n * E.g : Input.setPlaceholder('Search here', element);\n * ```\n *\n * @param {string} placeholder - Placeholder value which is need to add.\n * @param {HTMLInputElement | HTMLTextAreaElement} element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n placeholder = encodePlaceHolder(placeholder);\n var parentElement = getParentNode(element);\n if (parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var floatTextContent = parentElement.getElementsByClassName('e-float-text-content')[0];\n if (floatTextContent) {\n floatTextContent.children[0].textContent = placeholder;\n }\n else {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n }\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n var floatTextContent = parentElement.getElementsByClassName('e-float-text-content')[0];\n if (floatTextContent) {\n floatTextContent.children[0].textContent = '';\n }\n else {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n }\n }\n }\n Input.setPlaceholder = setPlaceholder;\n /**\n * Set the read only attribute to the input element\n * ```\n * E.g : Input.setReadonly(true, element);\n * ```\n *\n * @param {boolean} isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - The element which is need to enable read only.\n */\n function setReadonly(isReadonly, element, floatLabelType) {\n if (isReadonly) {\n attributes(element, { readonly: '' });\n }\n else {\n element.removeAttribute('readonly');\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setReadonly = setReadonly;\n /**\n * Displays the element direction from right to left when its enabled.\n * ```\n * E.g : Input.setEnableRtl(true, [inputObj.container]);\n * ```\n *\n * @param {boolean} isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param {Element[] | NodeList} elements\n * - The elements that are needed to enable/disable RTL.\n */\n function setEnableRtl(isRtl, elements) {\n if (isRtl) {\n addClass(elements, CLASSNAMES.RTL);\n }\n else {\n removeClass(elements, CLASSNAMES.RTL);\n }\n }\n Input.setEnableRtl = setEnableRtl;\n /**\n * Enables or disables the given input element.\n * ```\n * E.g : Input.setEnabled(false, element);\n * ```\n *\n * @param {boolean} isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param {HTMLInputElement | HTMLTextAreaElement} element\n * - Element to be enabled or disabled.\n */\n function setEnabled(isEnable, element, floatLabelType, inputContainer) {\n var disabledAttrs = { 'disabled': '', 'aria-disabled': 'true' };\n var considerWrapper = isNullOrUndefined(inputContainer) ? false : true;\n if (isEnable) {\n element.classList.remove(CLASSNAMES.DISABLE);\n removeAttributes(disabledAttrs, element);\n if (considerWrapper) {\n removeClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n else {\n element.classList.add(CLASSNAMES.DISABLE);\n addAttributes(disabledAttrs, element);\n if (considerWrapper) {\n addClass([inputContainer], CLASSNAMES.DISABLE);\n }\n }\n if (!isNullOrUndefined(floatLabelType)) {\n validateLabel(element, floatLabelType);\n }\n }\n Input.setEnabled = setEnabled;\n function setClearButton(isClear, element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n if (isClear) {\n inputObject.clearButton = createClearButton(element, inputObject, initial, makeElement);\n }\n else {\n remove(inputObject.clearButton);\n inputObject.clearButton = null;\n }\n }\n Input.setClearButton = setClearButton;\n /**\n * Removing the multiple attributes from the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.removeAttributes({ 'disabled': 'disabled', 'aria-disabled': 'true' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which are need to removed from the element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be removed.\n */\n function removeAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.remove(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n else {\n element.removeAttribute(key);\n }\n }\n }\n Input.removeAttributes = removeAttributes;\n /**\n * Adding the multiple attributes to the given element such as \"disabled\",\"id\" , etc.\n * ```\n * E.g : Input.addAttributes({ 'id': 'inputpopup' }, element);\n * ```\n *\n * @param {string} attrs\n * - Array of attributes which is added to element.\n * @param {HTMLInputElement | HTMLElement} element\n * - Element on which the attributes are needed to be added.\n */\n function addAttributes(attrs, element) {\n for (var _i = 0, _a = Object.keys(attrs); _i < _a.length; _i++) {\n var key = _a[_i];\n var parentElement = getParentNode(element);\n if (key === 'disabled') {\n element.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'disabled' && parentElement.classList.contains(CLASSNAMES.INPUTGROUP)) {\n parentElement.classList.add(CLASSNAMES.DISABLE);\n }\n if (key === 'placeholder' && parentElement.classList.contains(CLASSNAMES.FLOATINPUT)) {\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = attrs[\"\" + key];\n }\n else {\n element.setAttribute(key, attrs[\"\" + key]);\n }\n }\n }\n Input.addAttributes = addAttributes;\n function removeFloating(input) {\n var container = input.container;\n if (!isNullOrUndefined(container) && container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n var inputEle = container.querySelector('textarea') ? container.querySelector('textarea') :\n container.querySelector('input');\n var placeholder = container.querySelector('.' + CLASSNAMES.FLOATTEXT).textContent;\n var clearButton = container.querySelector('.e-clear-icon') !== null;\n detach(container.querySelector('.' + CLASSNAMES.FLOATLINE));\n detach(container.querySelector('.' + CLASSNAMES.FLOATTEXT));\n classList(container, [CLASSNAMES.INPUTGROUP], [CLASSNAMES.FLOATINPUT]);\n unwireFloatingEvents(inputEle);\n attributes(inputEle, { 'placeholder': placeholder });\n inputEle.classList.add(CLASSNAMES.INPUT);\n if (!clearButton && inputEle.tagName === 'INPUT') {\n inputEle.removeAttribute('required');\n }\n }\n }\n Input.removeFloating = removeFloating;\n function addFloating(input, type, placeholder, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container = closest(input, '.' + CLASSNAMES.INPUTGROUP);\n floatType = type;\n var customTag = container.tagName;\n customTag = customTag !== 'DIV' && customTag !== 'SPAN' ? customTag : null;\n var args = { element: input, floatLabelType: type,\n customTag: customTag, properties: { placeholder: placeholder } };\n if (type !== 'Never') {\n var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\n createSpanElement(inputObj.container, makeElement);\n calculateWidth(args.element, inputObj.container);\n var isPrependIcon = container.classList.contains('e-float-icon-left');\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n var inputWrap = container.querySelector('.e-input-in-wrap');\n iconEle = inputWrap.querySelector('.e-input-group-icon');\n }\n else {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n if (isNullOrUndefined(iconEle)) {\n if (isPrependIcon) {\n iconEle = container.querySelector('.e-input-group-icon');\n }\n }\n else {\n var floatLine = container.querySelector('.' + CLASSNAMES.FLOATLINE);\n var floatText = container.querySelector('.' + CLASSNAMES.FLOATTEXT);\n var wrapper = isPrependIcon ? container.querySelector('.e-input-in-wrap') : container;\n wrapper.insertBefore(input, iconEle);\n wrapper.insertBefore(floatLine, iconEle);\n wrapper.insertBefore(floatText, iconEle);\n }\n }\n else {\n unWireFloatLabelEvents(args);\n }\n checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\n /**\n * Create the span inside the label and add the label text into the span textcontent\n * ```\n * E.g : Input.createSpanElement(inputObject, makeElement);\n * ```\n *\n * @param {Element} inputObject\n * - Element which is need to get the label\n * @param {createElementParams} makeElement\n * - Element which is need to create the span\n */\n function createSpanElement(inputObject, makeElement) {\n if (inputObject.classList.contains('e-outline') && inputObject.getElementsByClassName('e-float-text')[0]) {\n var labelSpanElement = makeElement('span', { className: CLASSNAMES.FLOATTEXTCONTENT });\n labelSpanElement.innerHTML = inputObject.getElementsByClassName('e-float-text')[0].innerHTML;\n inputObject.getElementsByClassName('e-float-text')[0].innerHTML = '';\n inputObject.getElementsByClassName('e-float-text')[0].appendChild(labelSpanElement);\n }\n }\n Input.createSpanElement = createSpanElement;\n /**\n * Enable or Disable the ripple effect on the icons inside the Input. Ripple effect is only applicable for material theme.\n * ```\n * E.g : Input.setRipple(true, [inputObjects]);\n * ```\n *\n * @param {boolean} isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param {InputObject[]} inputObj\n * - Specify the collection of input objects.\n */\n function setRipple(isRipple, inputObj) {\n for (var i = 0; i < inputObj.length; i++) {\n _internalRipple(isRipple, inputObj[parseInt(i.toString(), 10)].container);\n }\n }\n Input.setRipple = setRipple;\n function _internalRipple(isRipple, container, button) {\n var argsButton = [];\n argsButton.push(button);\n var buttons = isNullOrUndefined(button) ?\n container.querySelectorAll('.e-input-group-icon') : argsButton;\n if (isRipple && buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString(), 10)].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[parseInt(index.toString(), 10)].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[parseInt(index.toString(), 10)].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[parseInt(index.toString(), 10)].removeEventListener('mouseup', _onMouseUpRipple, this);\n }\n }\n }\n function _onMouseRipple(container, button) {\n if (!container.classList.contains('e-disabled') && !container.querySelector('input').readOnly) {\n button.classList.add('e-input-btn-ripple');\n }\n }\n function _isElementVisible(element) {\n if (!element) {\n return false;\n }\n // Check if the element or any of its parents are hidden using display: none\n var currentElement = element;\n while (currentElement && currentElement !== document.body) {\n var style = window.getComputedStyle(currentElement);\n if (style.display === 'none') {\n return false;\n }\n currentElement = currentElement.parentElement;\n }\n // If none of the elements have display: none, the element is considered visible\n return true;\n }\n function _onMouseDownRipple() {\n var ele = null || this;\n var parentEle = this.parentElement;\n while (!parentEle.classList.contains('e-input-group')) {\n parentEle = parentEle.parentElement;\n }\n _onMouseRipple(parentEle, ele);\n }\n function _onMouseUpRipple() {\n var ele = null || this;\n setTimeout(function () {\n ele.classList.remove('e-input-btn-ripple');\n }, 500);\n }\n function createIconEle(iconClass, makeElement) {\n var button = makeElement('span', { className: iconClass });\n button.classList.add('e-input-group-icon');\n return button;\n }\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.addIcon('append', 'e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param {string | string[]} icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} input - The inputElement on which created span element is going to prepend.\n */\n function addIcon(position, icons, container, input, internalCreate) {\n var result = typeof (icons) === 'string' ? icons.split(',')\n : icons;\n if (position.toLowerCase() === 'append') {\n for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n var icon = result_1[_i];\n appendSpan(icon, container, internalCreate);\n }\n }\n else {\n for (var _a = 0, result_2 = result; _a < result_2.length; _a++) {\n var icon = result_2[_a];\n prependSpan(icon, container, input, internalCreate);\n }\n }\n if (container.getElementsByClassName('e-input-group-icon')[0] && container.getElementsByClassName('e-float-text-overflow')[0]) {\n container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n }\n }\n Input.addIcon = addIcon;\n /**\n * Creates a new span element with the given icons added and prepend it in input element.\n * ```\n * E.g : Input.prependSpan('e-icon-spin', inputObj.container, inputElement);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n * @param {HTMLElement} inputElement - The inputElement on which created span element is going to prepend.\n */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n container.classList.add('e-float-icon-left');\n var innerWrapper = container.querySelector('.e-input-in-wrap');\n if (isNullOrUndefined(innerWrapper)) {\n innerWrapper = makeElement('span', { className: 'e-input-in-wrap' });\n inputElement.parentNode.insertBefore(innerWrapper, inputElement);\n var result = container.querySelectorAll(inputElement.tagName + ' ~ *');\n innerWrapper.appendChild(inputElement);\n for (var i = 0; i < result.length; i++) {\n var element = result[parseInt(i.toString(), 10)];\n var parentElement = innerWrapper.parentElement;\n if (!(element.classList.contains('e-float-line')) || (!(parentElement && parentElement.classList.contains('e-filled')) && parentElement)) {\n innerWrapper.appendChild(element);\n }\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n _internalRipple(true, container, button);\n return button;\n }\n Input.prependSpan = prependSpan;\n /**\n * Creates a new span element with the given icons added and append it in container element.\n * ```\n * E.g : Input.appendSpan('e-icon-spin', inputObj.container);\n * ```\n *\n * @param {string} iconClass - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for input.\n * @param {HTMLElement} container - The container on which created span element is going to append.\n */\n function appendSpan(iconClass, container, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = createIconEle(iconClass, makeElement);\n var wrap = (container.classList.contains('e-float-icon-left')) ? container.querySelector('.e-input-in-wrap') :\n container;\n wrap.appendChild(button);\n _internalRipple(true, container, button);\n return button;\n }\n Input.appendSpan = appendSpan;\n function validateInputType(containerElement, input) {\n if (input.type === 'hidden') {\n containerElement.classList.add('e-hidden');\n }\n else if (containerElement.classList.contains('e-hidden')) {\n containerElement.classList.remove('e-hidden');\n }\n }\n Input.validateInputType = validateInputType;\n function updateHTMLAttributesToElement(htmlAttributes, element) {\n if (!isNullOrUndefined(htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttributes.indexOf(key) < 0) {\n element.setAttribute(key, htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n Input.updateHTMLAttributesToElement = updateHTMLAttributesToElement;\n function updateCssClass(newClass, oldClass, container) {\n setCssClass(getInputValidClassList(newClass), [container], getInputValidClassList(oldClass));\n }\n Input.updateCssClass = updateCssClass;\n function getInputValidClassList(inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n }\n Input.getInputValidClassList = getInputValidClassList;\n function updateHTMLAttributesToWrapper(htmlAttributes, container) {\n if (!isNullOrUndefined(htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (containerAttributes.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(htmlAttributes[\"\" + key]);\n if (updatedClassValues !== '') {\n addClass([container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + htmlAttributes[\"\" + key]) :\n htmlAttributes[\"\" + key];\n container.setAttribute(key, setStyle);\n }\n else {\n container.setAttribute(key, htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n }\n Input.updateHTMLAttributesToWrapper = updateHTMLAttributesToWrapper;\n function isBlank(inputString) {\n return (!inputString || /^\\s*$/.test(inputString));\n }\n Input.isBlank = isBlank;\n})(Input || (Input = {}));\n/* eslint-enable valid-jsdoc, jsdoc/require-jsdoc, jsdoc/require-returns, jsdoc/require-param */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\nvar selectionTimeOut = 0;\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\n /**\n *\n * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function NumericTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.preventChange = false;\n _this.isDynamicChange = false;\n _this.numericOptions = options;\n return _this;\n }\n NumericTextBox.prototype.preRender = function () {\n this.isPrevFocused = false;\n this.decimalSeparator = '.';\n // eslint-disable-next-line no-useless-escape\n this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n this.isCalled = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formEle = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n else if (attributeName === 'class') {\n input.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-numerictextbox');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off' });\n var localeText = {\n incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n };\n this.l10n = new L10n('numerictextbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('numerictextbox'));\n }\n this.isValidState = true;\n this.inputStyle = null;\n this.inputName = null;\n this.cultureInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.prevValue = this.value;\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n this.createWrapper();\n if (this.showSpinButton) {\n this.spinBtnCreation();\n }\n this.setElementWidth(this.width);\n if (!this.container.classList.contains('e-input-group')) {\n this.container.classList.add('e-input-group');\n }\n this.changeValue(this.value === null || isNaN(this.value) ?\n null : this.strictMode ? this.trimValue(this.value) : this.value);\n this.wireEvents();\n if (this.value !== null && !isNaN(this.value)) {\n if (this.decimals) {\n this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n }\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n }\n this.elementPrevValue = this.element.value;\n if (this.element.hasAttribute('data-val')) {\n this.element.setAttribute('data-val', 'false');\n }\n if (!this.element.hasAttribute('aria-labelledby') && !this.element.hasAttribute('placeholder')) {\n this.element.setAttribute('aria-label', 'numerictextbox');\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n this.renderComplete();\n }\n };\n NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'disabled':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n }\n break;\n case 'min':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (minValue !== null && !isNaN(minValue)) {\n this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n }\n }\n break;\n case 'max':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (maxValue !== null && !isNaN(maxValue)) {\n this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n }\n }\n break;\n case 'step':\n if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if (stepValue !== null && !isNaN(stepValue)) {\n this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n }\n }\n break;\n case 'style':\n this.inputStyle = this.element.getAttribute(prop);\n break;\n case 'name':\n this.inputName = this.element.getAttribute(prop);\n break;\n default:\n {\n var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n this.setProperties(setValue(prop, value, {}), true);\n }\n }\n break;\n }\n }\n }\n };\n NumericTextBox.prototype.updatePlaceholder = function () {\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n };\n NumericTextBox.prototype.initCultureFunc = function () {\n this.instance = new Internationalization(this.locale);\n };\n NumericTextBox.prototype.initCultureInfo = function () {\n this.cultureInfo.format = this.format;\n if (getValue('currency', this) !== null) {\n setValue('currency', this.currency, this.cultureInfo);\n this.setProperties({ currencyCode: this.currency }, true);\n }\n };\n /* Wrapper creation */\n NumericTextBox.prototype.createWrapper = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n }\n var inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n readonly: this.readonly,\n placeholder: this.placeholder,\n cssClass: updatedCssClassValue,\n enableRtl: this.enableRtl,\n showClearButton: this.showClearButton,\n enabled: this.enabled\n }\n }, this.createElement);\n this.inputWrapper = inputObj;\n this.container = inputObj.container;\n this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n this.updateHTMLAttrToWrapper();\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n 'validateHidden': 'true', 'aria-label': 'hidden', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n if (this.isAngular && this.angularTagName === 'EJS-NUMERICTEXTBOX' && this.cloneElement.id.length > 0) {\n attributes(this.hiddenInput, { 'name': this.cloneElement.id });\n }\n else {\n attributes(this.hiddenInput, { 'name': this.inputName });\n }\n this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n this.updateDataAttribute(false);\n if (this.inputStyle !== null) {\n attributes(this.container, { 'style': this.inputStyle });\n }\n };\n NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n var attr = {};\n if (!isDynamic) {\n for (var a = 0; a < this.element.attributes.length; a++) {\n attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n }\n }\n else {\n attr = this.htmlAttributes;\n }\n for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key.indexOf('data') === 0) {\n this.hiddenInput.setAttribute(key, attr[\"\" + key]);\n }\n }\n };\n NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n };\n NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n };\n NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n var result = numericClassName;\n if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttributes.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[\"\" + pro]);\n if (updatedClassValue !== '') {\n addClass([this.container], updatedClassValue.split(' '));\n }\n }\n else if (pro === 'style') {\n var numericStyle = this.container.getAttribute(pro);\n numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[\"\" + pro]) :\n this.htmlAttributes[\"\" + pro];\n this.container.setAttribute(pro, numericStyle);\n }\n else {\n this.container.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n }\n };\n NumericTextBox.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.container.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n /* Spinner creation */\n NumericTextBox.prototype.spinBtnCreation = function () {\n this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle')\n });\n this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle')\n });\n this.wireSpinBtnEvents();\n };\n NumericTextBox.prototype.validateMinMax = function () {\n if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n }\n if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n this.setProperties({ max: Number.MAX_VALUE }, true);\n }\n if (this.decimals !== null) {\n if (this.min !== -(Number.MAX_VALUE)) {\n this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n }\n if (this.max !== (Number.MAX_VALUE)) {\n this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n }\n }\n this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n if (this.min !== -(Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemin': this.min.toString() });\n }\n if (this.max !== (Number.MAX_VALUE)) {\n attributes(this.element, { 'aria-valuemax': this.max.toString() });\n }\n };\n NumericTextBox.prototype.formattedValue = function (decimals, value) {\n return this.instance.getNumberFormat({\n maximumFractionDigits: decimals,\n minimumFractionDigits: decimals, useGrouping: false\n })(value);\n };\n NumericTextBox.prototype.validateStep = function () {\n if (this.decimals !== null) {\n this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n }\n };\n NumericTextBox.prototype.action = function (operation, event) {\n this.isInteract = true;\n var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n this.changeValue(this.performAction(value, this.step, operation));\n this.raiseChangeEvent(event);\n };\n NumericTextBox.prototype.checkErrorClass = function () {\n if (this.isValidState) {\n removeClass([this.container], ERROR);\n }\n else {\n addClass([this.container], ERROR);\n }\n attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n };\n NumericTextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n }\n };\n NumericTextBox.prototype.resetHandler = function (e) {\n e.preventDefault();\n if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n NumericTextBox.prototype.clear = function (event) {\n this.setProperties({ value: null }, true);\n this.setElementValue('');\n this.hiddenInput.value = '';\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.resetFormHandler = function () {\n if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n this.updateValue(null);\n }\n else {\n this.updateValue(this.inputEleValue);\n }\n };\n NumericTextBox.prototype.setSpinButton = function () {\n if (!isNullOrUndefined(this.spinDown)) {\n attributes(this.spinDown, {\n 'title': this.l10n.getConstant('decrementTitle'),\n 'aria-label': this.l10n.getConstant('decrementTitle')\n });\n }\n if (!isNullOrUndefined(this.spinUp)) {\n attributes(this.spinUp, {\n 'title': this.l10n.getConstant('incrementTitle'),\n 'aria-label': this.l10n.getConstant('incrementTitle')\n });\n }\n };\n NumericTextBox.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n if (this.enabled) {\n this.bindClearEvent();\n if (this.formEle) {\n EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n }\n }\n };\n NumericTextBox.prototype.wireSpinBtnEvents = function () {\n /* bind spin button events */\n EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n };\n NumericTextBox.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n EventHandler.remove(this.element, 'paste', this.pasteHandler);\n if (this.formEle) {\n EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n }\n };\n NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n /* unbind spin button events */\n EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n };\n NumericTextBox.prototype.changeHandler = function (event) {\n event.stopPropagation();\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n };\n NumericTextBox.prototype.raiseChangeEvent = function (event) {\n this.inputValue = (isNullOrUndefined(this.inputValue) || isNaN(this.inputValue)) ? null : this.inputValue;\n if (this.prevValue !== this.value || this.prevValue !== this.inputValue) {\n var eventArgs = {};\n this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n isInteraction: this.isInteract, event: event };\n if (event) {\n this.changeEventArgs.event = event;\n }\n if (this.changeEventArgs.event === undefined) {\n this.changeEventArgs.isInteracted = false;\n this.changeEventArgs.isInteraction = false;\n }\n merge(eventArgs, this.changeEventArgs);\n this.prevValue = this.value;\n this.isInteract = false;\n this.elementPrevValue = this.element.value;\n this.preventChange = false;\n this.trigger('change', eventArgs);\n }\n };\n NumericTextBox.prototype.pasteHandler = function () {\n var _this = this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var beforeUpdate = this.element.value;\n setTimeout(function () {\n if (!_this.numericRegex().test(_this.element.value)) {\n _this.setElementValue(beforeUpdate);\n }\n });\n };\n NumericTextBox.prototype.preventHandler = function () {\n var _this = this;\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n setTimeout(function () {\n if (_this.element.selectionStart > 0) {\n var currentPos = _this.element.selectionStart;\n var prevPos = _this.element.selectionStart - 1;\n var start = 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (!isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n }\n if (_this.element.value[_this.element.selectionStart - 1] === decimalSeparator &&\n _this.decimals === 0 &&\n _this.validateDecimalOnType) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n }\n }\n _this.prevVal = _this.element.value;\n }\n });\n };\n NumericTextBox.prototype.keyUpHandler = function () {\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n if (!iOS && Browser.isDevice) {\n this.preventHandler();\n }\n var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.inputHandler = function (event) {\n var numerictextboxObj = null || this;\n if (!this.enabled || this.readonly) {\n return;\n }\n var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n if ((fireFox || iOS) && Browser.isDevice) {\n this.preventHandler();\n }\n /* istanbul ignore next */\n if (this.isAngular\n && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n parsedValue = isNaN(parsedValue) ? null : parsedValue;\n numerictextboxObj.localChange({ value: parsedValue });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n //EJ2-54963-if type \".\" or \".0\" or \"-.0\" it converts to \"0\" automatically when binding v-model\n var nonZeroRegex = new RegExp('[^0-9]+$');\n if (nonZeroRegex.test(this.element.value) ||\n ((this.elementPrevValue.indexOf('.') !== -1 || this.elementPrevValue.indexOf('-') !== -1) &&\n this.element.value[this.element.value.length - 1] === '0')) {\n current = this.value;\n }\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n NumericTextBox.prototype.keyDownHandler = function (event) {\n if (!this.readonly) {\n switch (event.keyCode) {\n case 38:\n event.preventDefault();\n this.action(INCREMENT, event);\n break;\n case 40:\n event.preventDefault();\n this.action(DECREMENT, event);\n break;\n default: break;\n }\n }\n };\n NumericTextBox.prototype.performAction = function (value, step, operation) {\n if (value === null || isNaN(value)) {\n value = 0;\n }\n var updatedValue = operation === INCREMENT ? value + step : value - step;\n updatedValue = this.correctRounding(value, step, updatedValue);\n return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n };\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var floatValue = floatExp.test(value.toString());\n var floatStep = floatExp.test(step.toString());\n if (floatValue || floatStep) {\n var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n var max = Math.max(valueCount, stepCount);\n return value = this.roundValue(result, max);\n }\n return result;\n };\n NumericTextBox.prototype.roundValue = function (result, precision) {\n precision = precision || 0;\n var divide = Math.pow(10, precision);\n return result *= divide, result = Math.round(result) / divide;\n };\n NumericTextBox.prototype.updateValue = function (value, event) {\n if (event) {\n this.isInteract = true;\n }\n if (value !== null && !isNaN(value)) {\n if (this.decimals) {\n value = this.roundNumber(value, this.decimals);\n }\n }\n this.inputValue = value;\n this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n /* istanbul ignore next */\n if (!this.isDynamicChange) {\n this.raiseChangeEvent(event);\n }\n };\n NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n setValue(prop, propVal, this.cultureInfo);\n this.updateValue(this.value);\n };\n NumericTextBox.prototype.changeValue = function (value) {\n if (!(value || value === 0)) {\n value = null;\n this.setProperties({ value: value }, true);\n }\n else {\n var numberOfDecimals = this.getNumberOfDecimals(value);\n this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n }\n this.modifyText();\n if (!this.strictMode) {\n this.validateState();\n }\n };\n NumericTextBox.prototype.modifyText = function () {\n if (this.value || this.value === 0) {\n var value = this.formatNumber();\n var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n this.setElementValue(elementValue);\n attributes(this.element, { 'aria-valuenow': value });\n this.hiddenInput.value = this.value.toString();\n if (this.value !== null && this.serverDecimalSeparator) {\n this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n }\n }\n else {\n this.setElementValue('');\n this.element.removeAttribute('aria-valuenow');\n this.hiddenInput.value = null;\n }\n };\n NumericTextBox.prototype.setElementValue = function (val, element) {\n Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n };\n NumericTextBox.prototype.validateState = function () {\n this.isValidState = true;\n if (this.value || this.value === 0) {\n this.isValidState = !(this.value > this.max || this.value < this.min);\n }\n this.checkErrorClass();\n };\n NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n var numberOfDecimals;\n // eslint-disable-next-line no-useless-escape\n var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n var valueString = value.toString();\n if (EXPREGEXP.test(valueString)) {\n var result = EXPREGEXP.exec(valueString);\n if (!isNullOrUndefined(result)) {\n valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n }\n }\n var decimalPart = valueString.split('.')[1];\n numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n if (this.decimals !== null) {\n numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n }\n return numberOfDecimals;\n };\n NumericTextBox.prototype.formatNumber = function () {\n var numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\n NumericTextBox.prototype.trimValue = function (value) {\n if (value > this.max) {\n return this.max;\n }\n if (value < this.min) {\n return this.min;\n }\n return value;\n };\n NumericTextBox.prototype.roundNumber = function (value, precision) {\n var result = value;\n var decimals = precision || 0;\n var result1 = result.toString().split('e');\n result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n var result2 = result.toString().split('e');\n result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n return Number(result.toFixed(decimals));\n };\n NumericTextBox.prototype.cancelEvent = function (event) {\n event.preventDefault();\n return false;\n };\n NumericTextBox.prototype.keyPressHandler = function (event) {\n if (!this.enabled || this.readonly) {\n return true;\n }\n if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput, event);\n return true;\n }\n if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n return true;\n }\n var currentChar = String.fromCharCode(event.which);\n var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n var isAlterNumPadDecimalChar = event.code === 'NumpadDecimal' && currentChar !== decimalSeparator;\n //EJ2-59813-replace the culture decimal separator value with numberpad decimal separator value when culture decimal separator and numberpad decimal separator are different\n if (isAlterNumPadDecimalChar) {\n currentChar = decimalSeparator;\n }\n var text = this.element.value;\n text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n if (!this.numericRegex().test(text)) {\n event.preventDefault();\n event.stopPropagation();\n return false;\n }\n else {\n //EJ2-59813-update the numberpad decimal separator and update the cursor position\n if (isAlterNumPadDecimalChar) {\n var start = this.element.selectionStart + 1;\n this.element.value = text;\n this.element.setSelectionRange(start, start);\n event.preventDefault();\n event.stopPropagation();\n }\n return true;\n }\n };\n NumericTextBox.prototype.numericRegex = function () {\n var numericObject = getNumericObject(this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n var fractionRule = '*';\n if (decimalSeparator === DECIMALSEPARATOR) {\n decimalSeparator = '\\\\' + decimalSeparator;\n }\n if (this.decimals === 0 && this.validateDecimalOnType) {\n return INTREGEXP;\n }\n if (this.decimals && this.validateDecimalOnType) {\n fractionRule = '{0,' + this.decimals + '}';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n };\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n var rawEvent = event;\n if (rawEvent.wheelDelta) {\n delta = rawEvent.wheelDelta / 120;\n }\n else if (rawEvent.detail) {\n delta = -rawEvent.detail / 3;\n }\n if (delta > 0) {\n this.action(INCREMENT, event);\n }\n else if (delta < 0) {\n this.action(DECREMENT, event);\n }\n this.cancelEvent(event);\n };\n NumericTextBox.prototype.focusHandler = function (event) {\n var _this = this;\n clearTimeout(selectionTimeOut);\n this.focusEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('focus', this.focusEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n this.isFocused = true;\n removeClass([this.container], ERROR);\n this.prevValue = this.value;\n if ((this.value || this.value === 0)) {\n var formatValue_1 = this.formatNumber();\n this.setElementValue(formatValue_1);\n if (!this.isPrevFocused) {\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n this.element.setSelectionRange(0, formatValue_1.length);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n selectionTimeOut = setTimeout(function () {\n _this.element.setSelectionRange(0, formatValue_1.length);\n }, delay);\n }\n }\n }\n if (!Browser.isDevice) {\n EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n }\n };\n NumericTextBox.prototype.focusOutHandler = function (event) {\n var _this = this;\n this.blurEventArgs = { event: event, value: this.value, container: this.container };\n this.trigger('blur', this.blurEventArgs);\n if (!this.enabled || this.readonly) {\n return;\n }\n if (this.isPrevFocused) {\n event.preventDefault();\n if (Browser.isDevice) {\n var value_1 = this.element.value;\n this.element.focus();\n this.isPrevFocused = false;\n var ele_1 = this.element;\n setTimeout(function () {\n _this.setElementValue(value_1, ele_1);\n }, 200);\n }\n }\n else {\n this.isFocused = false;\n if (!this.element.value.length) {\n this.setProperties({ value: null }, true);\n }\n var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n this.updateValue(parsedInput);\n if (!Browser.isDevice) {\n EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n }\n }\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var focusEvent = document.createEvent('FocusEvent');\n focusEvent.initEvent('focusout', false, true);\n element.dispatchEvent(focusEvent);\n }\n };\n NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n var _this = this;\n if (this.isFocused) {\n this.isPrevFocused = true;\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n this.getElementData(event);\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n this.timeOut = setInterval(function () {\n _this.isCalled = true;\n _this.action(action, event);\n }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target;\n if (event.type === 'touchmove') {\n var touchEvent = event.touches;\n target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n }\n else {\n target = document.elementFromPoint(event.clientX, event.clientY);\n }\n if (!(target.classList.contains(SPINICON))) {\n clearInterval(this.timeOut);\n }\n };\n NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n this.prevValue = this.value;\n if (this.isPrevFocused) {\n this.element.focus();\n if (!Browser.isDevice) {\n this.isPrevFocused = false;\n }\n }\n if (!Browser.isDevice) {\n event.preventDefault();\n }\n if (!this.getElementData(event)) {\n return;\n }\n var target = event.currentTarget;\n var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n if (!this.isCalled) {\n this.action(action, event);\n }\n this.isCalled = false;\n EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n var formElement = closest(this.element, 'form');\n if (formElement) {\n var element = this.element.nextElementSibling;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n NumericTextBox.prototype.getElementData = function (event) {\n if ((event.which && event.which === 3) || (event.button && event.button === 2)\n || !this.enabled || this.readonly) {\n return false;\n }\n clearInterval(this.timeOut);\n return true;\n };\n NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n Input.removeFloating(this.inputWrapper);\n var hiddenInput = this.hiddenInput;\n this.hiddenInput.remove();\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n };\n NumericTextBox.prototype.mouseUpClick = function (event) {\n event.stopPropagation();\n clearInterval(this.timeOut);\n this.isCalled = false;\n if (this.spinUp) {\n EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n }\n if (this.spinDown) {\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n }\n };\n /**\n * Increments the NumericTextBox value with the specified step value.\n *\n * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n * if its not given then numeric value will be incremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.increment = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, INCREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Decrements the NumericTextBox value with specified step value.\n *\n * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n * if its not given then numeric value will be decremented based on the step property value.\n * @returns {void}\n */\n NumericTextBox.prototype.decrement = function (step) {\n if (step === void 0) { step = this.step; }\n this.isInteract = false;\n this.changeValue(this.performAction(this.value, step, DECREMENT));\n this.raiseChangeEvent();\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n detach(this.hiddenInput);\n if (this.showSpinButton) {\n this.unwireSpinBtnEvents();\n detach(this.spinUp);\n detach(this.spinDown);\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'tabindex',\n 'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n this.container.insertAdjacentElement('afterend', this.element);\n detach(this.container);\n this.spinUp = null;\n this.spinDown = null;\n this.container = null;\n this.hiddenInput = null;\n this.changeEventArgs = null;\n this.blurEventArgs = null;\n this.focusEventArgs = null;\n this.inputWrapper = null;\n Input.destroy({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n * @returns {string} - Returns the formatted value of the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n addClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns the persisted data.\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'width':\n this.setElementWidth(newProp.width);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.container]);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n if (this.readonly) {\n attributes(this.element, { 'aria-readonly': 'true' });\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.updateDataAttribute(true);\n this.checkAttributes(true);\n Input.validateInputType(this.container, this.element);\n break;\n case 'placeholder':\n Input.setPlaceholder(newProp.placeholder, this.element);\n Input.calculateWidth(this.element, this.container);\n break;\n case 'step':\n this.step = newProp.step;\n this.validateStep();\n break;\n case 'showSpinButton':\n this.updateSpinButton(newProp);\n break;\n case 'showClearButton':\n this.updateClearButton(newProp);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n this.floatLabelTypeUpdate();\n break;\n case 'value':\n this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n this.updateValue(newProp.value);\n if (this.isDynamicChange) {\n this.preventChange = false;\n this.isDynamicChange = false;\n }\n break;\n case 'min':\n case 'max':\n setValue(prop, getValue(prop, newProp), this);\n this.validateMinMax();\n this.updateValue(this.value);\n break;\n case 'strictMode':\n this.strictMode = newProp.strictMode;\n this.updateValue(this.value);\n this.validateState();\n break;\n case 'locale':\n this.initCultureFunc();\n this.l10n.setLocale(this.locale);\n this.setSpinButton();\n this.updatePlaceholder();\n Input.setPlaceholder(this.placeholder, this.element);\n this.updateValue(this.value);\n break;\n case 'currency':\n {\n var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n }\n break;\n case 'currencyCode':\n {\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\n }\n break;\n case 'format':\n setValue(prop, getValue(prop, newProp), this);\n this.initCultureInfo();\n this.updateValue(this.value);\n break;\n case 'decimals':\n this.decimals = newProp.decimals;\n this.updateValue(this.value);\n }\n }\n };\n NumericTextBox.prototype.updateClearButton = function (newProp) {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n NumericTextBox.prototype.getModuleName = function () {\n return 'numerictextbox';\n };\n __decorate([\n Property('')\n ], NumericTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(-(Number.MAX_VALUE))\n ], NumericTextBox.prototype, \"min\", void 0);\n __decorate([\n Property(Number.MAX_VALUE)\n ], NumericTextBox.prototype, \"max\", void 0);\n __decorate([\n Property(1)\n ], NumericTextBox.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property('n2')\n ], NumericTextBox.prototype, \"format\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"decimals\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currency\", void 0);\n __decorate([\n Property(null)\n ], NumericTextBox.prototype, \"currencyCode\", void 0);\n __decorate([\n Property(true)\n ], NumericTextBox.prototype, \"strictMode\", void 0);\n __decorate([\n Property(false)\n ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n __decorate([\n Property('Never')\n ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], NumericTextBox.prototype, \"blur\", void 0);\n NumericTextBox = __decorate([\n NotifyPropertyChanges\n ], NumericTextBox);\n return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Event, Property, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, setValue, addClass, detach } from '@syncfusion/ej2-base';\nimport { removeClass, Browser, closest } from '@syncfusion/ej2-base';\nimport { Input } from '../../input/input';\nimport { regularExpressions, createMask, applyMask, wireEvents, unwireEvents, unstrippedValue, strippedValue } from '../base/index';\nimport { setMaskValue, setElementValue, bindClearEvent } from '../base/index';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n /**\n *\n * @param {MaskedTextBoxModel} options - Specifies the MaskedTextBox model.\n * @param {string | HTMLElement | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function MaskedTextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initInputValue = '';\n _this.preventChange = false;\n _this.isClicked = false;\n _this.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name.\n *\n * @returns {string} Returns the component name.\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.preRender = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.regExpCollec = regularExpressions;\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n this.changeEventArgs = {};\n this.focusEventArgs = {};\n this.blurEventArgs = {};\n this.maskKeyPress = false;\n this.isFocus = false;\n this.isInitial = false;\n this.isIosInvalid = false;\n var ejInstance = getValue('ej2_instances', this.element);\n this.cloneElement = this.element.cloneNode(true);\n removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n this.angularTagName = null;\n this.formElement = closest(this.element, 'form');\n if (this.element.tagName === 'EJS-MASKEDTEXTBOX') {\n this.angularTagName = this.element.tagName;\n var input = this.createElement('input');\n for (var i = 0; i < this.element.attributes.length; i++) {\n input.setAttribute(this.element.attributes[i].nodeName, this.element.attributes[i].nodeValue);\n input.innerHTML = this.element.innerHTML;\n }\n if (this.element.hasAttribute('id')) {\n this.element.removeAttribute('id');\n }\n if (this.element.hasAttribute('name')) {\n this.element.removeAttribute('name');\n }\n this.element.classList.remove('e-control', 'e-maskedtextbox');\n this.element.classList.add('e-mask-container');\n this.element.appendChild(input);\n this.element = input;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkHtmlAttributes(false);\n if (this.formElement) {\n this.initInputValue = this.value;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\n *\n * @returns {void}\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (this.floatLabelType === 'Never') {\n addClass([this.element], INPUT);\n }\n this.createWrapper();\n this.updateHTMLAttrToWrapper();\n if (this.element.name === '') {\n this.element.setAttribute('name', this.element.id);\n }\n this.isInitial = true;\n this.resetMaskedTextBox();\n this.isInitial = false;\n this.setMaskPlaceholder(true, false);\n this.setWidth(this.width);\n this.preEleVal = this.element.value;\n if (!Browser.isDevice && (Browser.info.version === '11.0' || Browser.info.name === 'edge')) {\n this.element.blur();\n }\n if (Browser.isDevice && Browser.isIos) {\n this.element.blur();\n }\n if (this.element.getAttribute('value') || this.value) {\n this.element.setAttribute('value', this.element.value);\n }\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n if (!this.element.hasAttribute('aria-labelledby') && !this.element.hasAttribute('placeholder')) {\n this.element.setAttribute('aria-label', 'maskedtextbox');\n }\n this.renderComplete();\n }\n };\n MaskedTextBox.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n MaskedTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getValidClassList(newClass), [this.inputObj.container], this.getValidClassList(oldClass));\n };\n MaskedTextBox.prototype.getValidClassList = function (maskClassName) {\n var result = maskClassName;\n if (!isNullOrUndefined(maskClassName) && maskClassName !== '') {\n result = (maskClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\n };\n MaskedTextBox.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (wrapperAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.inputObj.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var maskStyle = this.inputObj.container.getAttribute(key);\n maskStyle = !isNullOrUndefined(maskStyle) ? (maskStyle + this.htmlAttributes[\"\" + key]) :\n this.htmlAttributes[\"\" + key];\n this.inputObj.container.setAttribute(key, maskStyle);\n }\n else {\n this.inputObj.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n }\n }\n }\n }\n };\n MaskedTextBox.prototype.resetMaskedTextBox = function () {\n this.promptMask = '';\n this.hiddenMask = '';\n this.escapeMaskValue = '';\n this.customRegExpCollec = [];\n this.undoCollec = [];\n this.redoCollec = [];\n if (this.promptChar.length > 1) {\n this.promptChar = this.promptChar[0];\n }\n createMask.call(this);\n applyMask.call(this);\n if (this.mask === null || this.mask === '' && this.value !== undefined) {\n setElementValue.call(this, this.value);\n }\n var val = strippedValue.call(this, this.element);\n this.prevValue = val;\n this.value = val;\n if (!this.isInitial) {\n unwireEvents.call(this);\n }\n wireEvents.call(this);\n };\n MaskedTextBox.prototype.setMaskPlaceholder = function (setVal, dynamicPlaceholder) {\n if (dynamicPlaceholder || this.placeholder) {\n Input.setPlaceholder(this.placeholder, this.element);\n if ((this.element.value === this.promptMask && setVal && this.floatLabelType !== 'Always') ||\n this.element.value === this.promptMask && this.floatLabelType === 'Never') {\n setElementValue.call(this, '');\n }\n }\n };\n MaskedTextBox.prototype.setWidth = function (width) {\n if (!isNullOrUndefined(width)) {\n if (typeof width === 'number') {\n this.inputObj.container.style.width = formatUnit(width);\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n var elementWidth = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n this.inputObj.container.style.width = elementWidth;\n this.element.style.width = elementWidth;\n }\n }\n };\n MaskedTextBox.prototype.checkHtmlAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes)\n : ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'placeholder':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['enabled'] === undefined)) || isDynamic) {\n var isEnabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: isEnabled }, !isDynamic);\n }\n break;\n case 'value':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['value'] === undefined)) || isDynamic) {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['readonly'] === undefined)) || isDynamic) {\n var isReadonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: isReadonly }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n MaskedTextBox.prototype.createWrapper = function () {\n var updatedCssClassValues = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValues = this.getValidClassList(this.cssClass);\n }\n this.inputObj = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValues,\n enabled: this.enabled,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n }, this.createElement);\n this.inputObj.container.setAttribute('class', ROOT + ' ' + this.inputObj.container.getAttribute('class'));\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {MaskedTextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {MaskedTextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @hidden\n */\n MaskedTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n setMaskValue.call(this, this.value);\n if (this.placeholder && !this.isFocus) {\n this.setMaskPlaceholder(false, false);\n }\n if (this.value === '' && oldProp.value != null) {\n this.element.selectionStart = 0;\n this.element.selectionEnd = 0;\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\n Input.calculateWidth(this.element, this.inputObj.container);\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element, this.floatLabelType, this.inputObj.container);\n break;\n case 'readonly':\n Input.setReadonly(newProp.readonly, this.element);\n break;\n case 'enableRtl':\n Input.setEnableRtl(newProp.enableRtl, [this.inputObj.container]);\n break;\n case 'customCharacters':\n this.customCharacters = newProp.customCharacters;\n this.resetMaskedTextBox();\n break;\n case 'showClearButton':\n Input.setClearButton(newProp.showClearButton, this.element, this.inputObj, undefined, this.createElement);\n bindClearEvent.call(this);\n break;\n case 'floatLabelType':\n this.floatLabelType = newProp.floatLabelType;\n Input.removeFloating(this.inputObj);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHtmlAttributes(true);\n break;\n case 'mask':\n {\n var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\n }\n break;\n case 'promptChar': {\n if (newProp.promptChar.length > 1) {\n newProp.promptChar = newProp.promptChar[0];\n }\n if (newProp.promptChar) {\n this.promptChar = newProp.promptChar;\n }\n else {\n this.promptChar = '_';\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n this.promptMask = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n this.undoCollec = this.redoCollec = [];\n setElementValue.call(this, value);\n break;\n }\n }\n }\n this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n };\n MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n *\n * @returns {string} Returns the value with the masked format.\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.isFocus = true;\n this.element.focus();\n addClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n MaskedTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.isFocus = false;\n this.element.blur();\n removeClass([this.inputObj.container], [MASKINPUT_FOCUS]);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n MaskedTextBox.prototype.destroy = function () {\n unwireEvents.call(this);\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'aria-live', 'aria-invalid'];\n for (var i = 0; i < attrArray.length; i++) {\n this.element.removeAttribute(attrArray[i]);\n }\n this.element.classList.remove('e-input');\n if (this.inputObj) {\n this.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\n }\n this.blurEventArgs = null;\n Input.destroy({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n this.changeEventArgs = null;\n this.inputObj = null;\n _super.prototype.destroy.call(this);\n };\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"width\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('Never')\n ], MaskedTextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property({})\n ], MaskedTextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], MaskedTextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], MaskedTextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"mask\", void 0);\n __decorate([\n Property('_')\n ], MaskedTextBox.prototype, \"promptChar\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], MaskedTextBox.prototype, \"customCharacters\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], MaskedTextBox.prototype, \"blur\", void 0);\n MaskedTextBox = __decorate([\n NotifyPropertyChanges\n ], MaskedTextBox);\n return MaskedTextBox;\n}(Component));\nexport { MaskedTextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Complex, Collection } from '@syncfusion/ej2-base';\nimport { L10n, Internationalization } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, setStyleAttribute, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, Browser, SanitizeHtmlHelper, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { Tooltip, getZindexPartial } from '@syncfusion/ej2-popups';\n/**\n * Configures the ticks data of the Slider.\n */\nvar TicksData = /** @class */ (function (_super) {\n __extends(TicksData, _super);\n function TicksData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('None')\n ], TicksData.prototype, \"placement\", void 0);\n __decorate([\n Property(10)\n ], TicksData.prototype, \"largeStep\", void 0);\n __decorate([\n Property(1)\n ], TicksData.prototype, \"smallStep\", void 0);\n __decorate([\n Property(false)\n ], TicksData.prototype, \"showSmallTicks\", void 0);\n __decorate([\n Property(null)\n ], TicksData.prototype, \"format\", void 0);\n return TicksData;\n}(ChildProperty));\nexport { TicksData };\n/**\n * It illustrates the color track data in slider.\n * {% codeBlock src='slider/colorrange/index.md' %}{% endcodeBlock %}\n */\nvar ColorRangeData = /** @class */ (function (_super) {\n __extends(ColorRangeData, _super);\n function ColorRangeData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"color\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"start\", void 0);\n __decorate([\n Property(null)\n ], ColorRangeData.prototype, \"end\", void 0);\n return ColorRangeData;\n}(ChildProperty));\nexport { ColorRangeData };\n/**\n * It illustrates the limit data in slider.\n * {% codeBlock src='slider/limits/index.md' %}{% endcodeBlock %}\n */\nvar LimitData = /** @class */ (function (_super) {\n __extends(LimitData, _super);\n function LimitData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property(false)\n ], LimitData.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"minEnd\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxStart\", void 0);\n __decorate([\n Property(null)\n ], LimitData.prototype, \"maxEnd\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"startHandleFixed\", void 0);\n __decorate([\n Property(false)\n ], LimitData.prototype, \"endHandleFixed\", void 0);\n return LimitData;\n}(ChildProperty));\nexport { LimitData };\n/**\n * It illustrates the tooltip data in slider.\n */\nvar TooltipData = /** @class */ (function (_super) {\n __extends(TooltipData, _super);\n function TooltipData() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], TooltipData.prototype, \"cssClass\", void 0);\n __decorate([\n Property('Before')\n ], TooltipData.prototype, \"placement\", void 0);\n __decorate([\n Property('Focus')\n ], TooltipData.prototype, \"showOn\", void 0);\n __decorate([\n Property(false)\n ], TooltipData.prototype, \"isVisible\", void 0);\n __decorate([\n Property(null)\n ], TooltipData.prototype, \"format\", void 0);\n return TooltipData;\n}(ChildProperty));\nexport { TooltipData };\nvar bootstrapTooltipOffset = 6;\nvar bootstrap4TooltipOffset = 3;\nvar classNames = {\n root: 'e-slider',\n rtl: 'e-rtl',\n sliderHiddenInput: 'e-slider-input',\n controlWrapper: 'e-control-wrapper',\n sliderHandle: 'e-handle',\n rangeBar: 'e-range',\n sliderButton: 'e-slider-button',\n firstButton: 'e-first-button',\n secondButton: 'e-second-button',\n scale: 'e-scale',\n tick: 'e-tick',\n large: 'e-large',\n tickValue: 'e-tick-value',\n sliderTooltip: 'e-slider-tooltip',\n sliderHover: 'e-slider-hover',\n sliderFirstHandle: 'e-handle-first',\n sliderSecondHandle: 'e-handle-second',\n sliderDisabled: 'e-disabled',\n sliderContainer: 'e-slider-container',\n horizontalTooltipBefore: 'e-slider-horizontal-before',\n horizontalTooltipAfter: 'e-slider-horizontal-after',\n verticalTooltipBefore: 'e-slider-vertical-before',\n verticalTooltipAfter: 'e-slider-vertical-after',\n materialTooltip: 'e-material-tooltip',\n materialTooltipOpen: 'e-material-tooltip-open',\n materialTooltipActive: 'e-tooltip-active',\n materialSlider: 'e-material-slider',\n sliderTrack: 'e-slider-track',\n sliderHorizantalColor: 'e-slider-horizantal-color',\n sliderVerticalColor: 'e-slider-vertical-color',\n sliderHandleFocused: 'e-handle-focused',\n verticalSlider: 'e-vertical',\n horizontalSlider: 'e-horizontal',\n sliderHandleStart: 'e-handle-start',\n sliderTooltipStart: 'e-material-tooltip-start',\n sliderTabHandle: 'e-tab-handle',\n sliderButtonIcon: 'e-button-icon',\n sliderSmallSize: 'e-small-size',\n sliderTickPosition: 'e-tick-pos',\n sliderFirstTick: 'e-first-tick',\n sliderLastTick: 'e-last-tick',\n sliderButtonClass: 'e-slider-btn',\n sliderTooltipWrapper: 'e-tooltip-wrap',\n sliderTabTrack: 'e-tab-track',\n sliderTabRange: 'e-tab-range',\n sliderActiveHandle: 'e-handle-active',\n sliderMaterialHandle: 'e-material-handle',\n sliderMaterialRange: 'e-material-range',\n sliderMaterialDefault: 'e-material-default',\n materialTooltipShow: 'e-material-tooltip-show',\n materialTooltipHide: 'e-material-tooltip-hide',\n readonly: 'e-read-only',\n limits: 'e-limits',\n limitBarDefault: 'e-limit-bar',\n limitBarFirst: 'e-limit-first',\n limitBarSecond: 'e-limit-second',\n dragHorizontal: 'e-drag-horizontal',\n dragVertical: 'e-drag-vertical'\n};\n/**\n * The Slider component allows the user to select a value or range\n * of values in-between a min and max range, by dragging the handle over the slider bar.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.isDragComplete = false;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n Slider.prototype.formatNumber = function (value) {\n var numberOfDecimals = this.numberOfDecimals(value);\n return this.internationalization.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(value);\n };\n Slider.prototype.numberOfDecimals = function (value) {\n var decimalPart = value.toString().split('.')[1];\n var numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n return numberOfDecimals;\n };\n Slider.prototype.makeRoundNumber = function (value, precision) {\n var decimals = precision || 0;\n return Number(value.toFixed(decimals));\n };\n Slider.prototype.fractionalToInteger = function (value) {\n value = (this.numberOfDecimals(value) === 0) ? Number(value).toFixed(this.noOfDecimals) : value;\n var tens = 1;\n for (var i = 0; i < this.noOfDecimals; i++) {\n tens *= 10;\n }\n value = Number((value * tens).toFixed(0));\n return value;\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n Slider.prototype.render = function () {\n var _this = this;\n this.initialize();\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\n if (this.element.tagName === 'EJS-SLIDER') {\n if (this.getTheme(this.sliderContainer) === 'none') {\n setTimeout(function () {\n _this.refresh();\n }, 0);\n }\n }\n };\n Slider.prototype.initialize = function () {\n addClass([this.element], classNames.root);\n this.setCSSClass();\n };\n Slider.prototype.setElementWidth = function (width) {\n if (!isNullOrUndefined(width) && !isNullOrUndefined(this.sliderContainer)) {\n if (typeof width === 'number') {\n this.sliderContainer.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.sliderContainer.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n }\n };\n Slider.prototype.setCSSClass = function (oldCSSClass) {\n if (oldCSSClass) {\n removeClass([this.element], oldCSSClass.split(' '));\n }\n if (this.cssClass) {\n addClass([this.element], this.cssClass.split(' '));\n }\n };\n Slider.prototype.setEnabled = function () {\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.add(classNames.sliderDisabled);\n }\n this.unwireEvents();\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n if (this.tooltip.isVisible && this.tooltipElement && this.tooltip.showOn === 'Always') {\n this.tooltipElement.classList.remove(classNames.sliderDisabled);\n }\n this.wireEvents();\n }\n };\n Slider.prototype.getTheme = function (container) {\n var theme = window.getComputedStyle(container, ':after').getPropertyValue('content');\n return theme.replace(/['\"]+/g, '');\n };\n /**\n * Initialize the rendering\n *\n * @returns {void}\n * @private\n */\n Slider.prototype.initRender = function () {\n this.sliderContainer = this.createElement('div', { className: classNames.sliderContainer + ' ' + classNames.controlWrapper });\n this.element.parentNode.insertBefore(this.sliderContainer, this.element);\n this.sliderContainer.appendChild(this.element);\n this.sliderTrack = this.createElement('div', { className: classNames.sliderTrack });\n this.element.appendChild(this.sliderTrack);\n this.setElementWidth(this.width);\n this.element.tabIndex = -1;\n this.getThemeInitialization();\n this.setHandler();\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setOrientClass();\n this.hiddenInput = (this.createElement('input', {\n attrs: {\n type: 'hidden', value: (isNullOrUndefined(this.value) ? (isNullOrUndefined(this.min) ? '0' : this.min.toString()) : this.value.toString()),\n name: this.element.getAttribute('name') || this.element.getAttribute('id') ||\n '_' + (Math.random() * 1000).toFixed(0) + 'slider', class: classNames.sliderHiddenInput\n }\n }));\n this.hiddenInput.tabIndex = -1;\n this.sliderContainer.appendChild(this.hiddenInput);\n if (this.showButtons) {\n this.setButtons();\n }\n this.setEnableRTL();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n else {\n this.value = isNullOrUndefined(this.value) ? (isNullOrUndefined(this.min) ? 0 : parseFloat(formatUnit(this.min.toString()))) : this.value;\n }\n this.previousVal = this.type !== 'Range' ? this.checkHandleValue(parseFloat(formatUnit(this.value.toString()))) :\n [this.checkHandleValue(parseFloat(formatUnit(this.value[0].toString()))),\n this.checkHandleValue(parseFloat(formatUnit(this.value[1].toString())))];\n this.previousChanged = this.previousVal;\n if (!isNullOrUndefined(this.element.hasAttribute('name'))) {\n this.element.removeAttribute('name');\n }\n this.setValue();\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n }\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n }\n if (!this.enabled) {\n addClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n }\n if (this.readonly) {\n addClass([this.sliderContainer], [classNames.readonly]);\n }\n else {\n removeClass([this.sliderContainer], [classNames.readonly]);\n }\n };\n Slider.prototype.getThemeInitialization = function () {\n this.isMaterial = this.getTheme(this.sliderContainer) === 'material'\n || this.getTheme(this.sliderContainer) === 'material-dark';\n this.isMaterial3 = this.getTheme(this.sliderContainer) === 'Material3'\n || this.getTheme(this.sliderContainer) === 'Material3-dark';\n this.isBootstrap = this.getTheme(this.sliderContainer) === 'bootstrap'\n || this.getTheme(this.sliderContainer) === 'bootstrap-dark';\n this.isBootstrap4 = this.getTheme(this.sliderContainer) === 'bootstrap4';\n this.isTailwind = this.getTheme(this.sliderContainer) === 'tailwind' || this.getTheme(this.sliderContainer) === 'tailwind-dark';\n this.isBootstrap5 = this.getTheme(this.sliderContainer) === 'bootstrap5';\n this.isFluent = this.getTheme(this.sliderContainer) === 'FluentUI';\n this.isFluent2 = this.getTheme(this.sliderContainer) === 'fluent2';\n this.isMaterialTooltip = (this.isMaterial || this.isMaterial3) && this.type !== 'Range' && this.tooltip.isVisible;\n };\n Slider.prototype.createRangeBar = function () {\n if (this.type !== 'Default') {\n this.rangeBar = (this.createElement('div', { attrs: { class: classNames.rangeBar } }));\n this.element.appendChild(this.rangeBar);\n if (this.drag && this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n this.rangeBar.classList.add(classNames.dragHorizontal);\n }\n else {\n this.rangeBar.classList.add(classNames.dragVertical);\n }\n }\n }\n };\n Slider.prototype.createLimitBar = function () {\n var firstElementClassName = this.type !== 'Range' ? classNames.limitBarDefault :\n classNames.limitBarFirst;\n firstElementClassName += ' ' + classNames.limits;\n this.limitBarFirst = (this.createElement('div', {\n attrs: { class: firstElementClassName }\n }));\n this.element.appendChild(this.limitBarFirst);\n if (this.type === 'Range') {\n this.limitBarSecond = (this.createElement('div', {\n attrs: {\n class: classNames.limitBarSecond + ' ' + classNames.limits\n }\n }));\n this.element.appendChild(this.limitBarSecond);\n }\n };\n Slider.prototype.setOrientClass = function () {\n if (this.orientation !== 'Vertical') {\n this.sliderContainer.classList.remove(classNames.verticalSlider);\n this.sliderContainer.classList.add(classNames.horizontalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'horizontal');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'horizontal');\n }\n }\n else {\n this.sliderContainer.classList.remove(classNames.horizontalSlider);\n this.sliderContainer.classList.add(classNames.verticalSlider);\n this.firstHandle.setAttribute('aria-orientation', 'vertical');\n if (this.type === 'Range') {\n this.secondHandle.setAttribute('aria-orientation', 'vertical');\n }\n }\n };\n Slider.prototype.setAriaAttributes = function (element) {\n var _this = this;\n var min = this.min;\n var max = this.max;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n min = this.customValues[0];\n max = this.customValues[this.customValues.length - 1];\n }\n if (this.type !== 'Range') {\n attributes(element, {\n 'aria-valuemin': isNullOrUndefined(min) ? '0' : min.toString(), 'aria-valuemax': (isNullOrUndefined(max) ? '100' : max.toString())\n });\n }\n else {\n var range = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n [[min.toString(), (this.customValues[this.value[1]]).toString()],\n [(this.customValues[this.value[0]]).toString(), max.toString()]] :\n [[min.toString(), this.value[1].toString()], [this.value[0].toString(), max.toString()]];\n range.forEach(function (range, index) {\n var element = index === 0 ? _this.firstHandle : _this.secondHandle;\n if (element) {\n attributes(element, {\n 'aria-valuemin': range[0], 'aria-valuemax': range[1]\n });\n }\n });\n }\n };\n Slider.prototype.createSecondHandle = function () {\n this.secondHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0', 'aria-label': 'slider'\n }\n });\n this.secondHandle.classList.add(classNames.sliderSecondHandle);\n this.element.appendChild(this.secondHandle);\n };\n Slider.prototype.createFirstHandle = function () {\n this.firstHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle, 'role': 'slider', tabIndex: '0', 'aria-label': 'slider'\n }\n });\n this.firstHandle.classList.add(classNames.sliderFirstHandle);\n this.element.appendChild(this.firstHandle);\n if (this.isMaterialTooltip) {\n this.materialHandle = this.createElement('div', {\n attrs: {\n class: classNames.sliderHandle + ' ' +\n classNames.sliderMaterialHandle\n }\n });\n this.element.appendChild(this.materialHandle);\n }\n };\n Slider.prototype.wireFirstHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.firstHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.firstHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.firstHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.firstHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.firstHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.firstHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.firstHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.wireSecondHandleEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.secondHandle, 'mousedown touchstart', this.handleFocus, this);\n EventHandler.add(this.secondHandle, 'transitionend', this.transitionEnd, this);\n EventHandler.add(this.secondHandle, 'mouseenter touchenter', this.handleOver, this);\n EventHandler.add(this.secondHandle, 'mouseleave touchend', this.handleLeave, this);\n }\n else {\n EventHandler.remove(this.secondHandle, 'mousedown touchstart', this.handleFocus);\n EventHandler.remove(this.secondHandle, 'transitionend', this.transitionEnd);\n EventHandler.remove(this.secondHandle, 'mouseenter touchenter', this.handleOver);\n EventHandler.remove(this.secondHandle, 'mouseleave touchend', this.handleLeave);\n }\n };\n Slider.prototype.handleStart = function () {\n if (this.type !== 'Range') {\n this.firstHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.isMaterialTooltip) {\n this.materialHandle.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderHandleStart);\n if (this.tooltipElement) {\n this.tooltipElement.classList[this.handlePos1 === 0 ? 'add' : 'remove'](classNames.sliderTooltipStart);\n }\n }\n }\n };\n Slider.prototype.transitionEnd = function (e) {\n if (e.propertyName !== 'transform') {\n this.handleStart();\n if (!this.enableAnimation) {\n this.getHandle().style.transition = 'none';\n }\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if ((this.isMaterial || this.isMaterial3) && this.tooltip.isVisible && this.type === 'Default') {\n this.tooltipElement.style.transition = this.transition.handle;\n }\n this.tooltipToggle(this.getHandle());\n this.closeTooltip();\n }\n };\n Slider.prototype.handleFocusOut = function () {\n if (this.firstHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.firstHandle.classList.remove(classNames.sliderHandleFocused);\n }\n if (this.type === 'Range') {\n if (this.secondHandle.classList.contains(classNames.sliderHandleFocused)) {\n this.secondHandle.classList.remove(classNames.sliderHandleFocused);\n }\n }\n };\n Slider.prototype.handleFocus = function (e) {\n this.focusSliderElement();\n this.sliderBarClick(e);\n if (e.currentTarget === this.firstHandle) {\n this.firstHandle.classList.add(classNames.sliderHandleFocused);\n this.firstHandle.classList.add(classNames.sliderTabHandle);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n this.secondHandle.classList.add(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n addClass([this.sliderContainer], classNames.rtl);\n }\n else {\n removeClass([this.sliderContainer], classNames.rtl);\n }\n var preDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (this.enableRtl) {\n this.horDir = 'right';\n this.verDir = 'bottom';\n }\n else {\n this.horDir = 'left';\n this.verDir = 'bottom';\n }\n var currDir = (this.orientation !== 'Vertical') ? this.horDir : this.verDir;\n if (preDir !== currDir) {\n if (this.orientation === 'Horizontal') {\n setStyleAttribute(this.firstHandle, { 'right': '', 'left': 'auto' });\n if (this.type === 'Range') {\n setStyleAttribute(this.secondHandle, { 'top': '', 'left': 'auto' });\n }\n }\n }\n this.setBarColor();\n };\n Slider.prototype.tooltipValue = function () {\n var _this = this;\n var text;\n var args = {\n value: this.value,\n text: ''\n };\n if (this.initialTooltip) {\n this.initialTooltip = false;\n this.setTooltipContent();\n args.text = text = (typeof (this.tooltipObj.content) === 'function' ? this.tooltipObj.content() : this.tooltipObj.content);\n this.trigger('tooltipChange', args, function (observedArgs) {\n _this.addTooltipClass(observedArgs.text);\n if (text !== observedArgs.text) {\n _this.customAriaText = observedArgs.text;\n if (_this.enableHtmlSanitizer) {\n observedArgs.text = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n observedArgs.text = observedArgs.text.toString();\n }\n var contentTemp = function () {\n return observedArgs.text;\n };\n _this.tooltipObj.content = initializeCSPTemplate(contentTemp);\n _this.setAriaAttrValue(_this.firstHandle);\n if (_this.type === 'Range') {\n _this.setAriaAttrValue(_this.secondHandle);\n }\n }\n });\n if (this.isMaterialTooltip) {\n this.setPreviousVal('change', this.value);\n }\n }\n };\n Slider.prototype.setTooltipContent = function () {\n var content = this.formatContent(this.tooltipFormatInfo, false);\n var contentTemp = function () {\n return content;\n };\n this.tooltipObj.content = initializeCSPTemplate(contentTemp);\n };\n Slider.prototype.formatContent = function (formatInfo, ariaContent) {\n var content = '';\n var handle1 = this.handleVal1;\n var handle2 = this.handleVal2;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n handle1 = this.customValues[this.handleVal1];\n handle2 = this.customValues[this.handleVal2];\n }\n if (!ariaContent) {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle2, formatInfo)\n .formatString + ' - ' + this.formatString(handle1, formatInfo).formatString) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(formatInfo.format)) ? (this.formatString(handle1, formatInfo)\n .formatString + ' - ' + this.formatString(handle2, formatInfo).formatString) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(formatInfo.format)) ?\n this.formatString(handle1, formatInfo).formatString : handle1.toString();\n }\n }\n return content;\n }\n else {\n if (this.type === 'Range') {\n if (this.enableRtl && this.orientation !== 'Vertical') {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle2, formatInfo).elementVal + ' - ' +\n this.formatString(handle1, formatInfo).elementVal) :\n (handle2.toString() + ' - ' + handle1.toString());\n }\n else {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n (this.formatString(handle1, formatInfo).elementVal + ' - ' +\n this.formatString(handle2, formatInfo).elementVal) :\n (handle1.toString() + ' - ' + handle2.toString());\n }\n }\n else {\n if (!isNullOrUndefined(handle1)) {\n content = (!isNullOrUndefined(this.tooltip) && !isNullOrUndefined(this.tooltip.format)) ?\n this.formatString(handle1, formatInfo).elementVal : handle1.toString();\n }\n }\n return content;\n }\n };\n Slider.prototype.addTooltipClass = function (content) {\n if (this.isMaterialTooltip) {\n var count = content.toString().length;\n if (!this.tooltipElement) {\n var cssClass = count > 4 ? classNames.sliderMaterialRange : classNames.sliderMaterialDefault;\n this.tooltipObj.cssClass = classNames.sliderTooltip + ' ' + cssClass;\n }\n else {\n var cssClass = count > 4 ?\n { oldCss: classNames.sliderMaterialDefault, newCss: classNames.sliderMaterialRange } :\n { oldCss: classNames.sliderMaterialRange, newCss: classNames.sliderMaterialDefault };\n this.tooltipElement.classList.remove(cssClass.oldCss);\n if (!this.tooltipElement.classList.contains(cssClass.newCss)) {\n this.tooltipElement.classList.add(cssClass.newCss);\n this.tooltipElement.style.transform = count > 4 ? 'scale(1)' :\n this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n }\n };\n Slider.prototype.tooltipPlacement = function () {\n return this.orientation === 'Horizontal' ? (this.tooltip.placement === 'Before' ? 'TopCenter' : 'BottomCenter') :\n (this.tooltip.placement === 'Before' ? 'LeftCenter' : 'RightCenter');\n };\n Slider.prototype.tooltipBeforeOpen = function (args) {\n this.tooltipElement = args.element;\n if (this.tooltip.cssClass) {\n addClass([this.tooltipElement], this.tooltip.cssClass.split(' ').filter(function (css) { return css; }));\n }\n args.target.removeAttribute('aria-describedby');\n if (this.isMaterialTooltip) {\n this.tooltipElement.firstElementChild.classList.add(classNames.materialTooltipHide);\n this.handleStart();\n this.setTooltipTransform();\n }\n };\n Slider.prototype.tooltipCollision = function (position) {\n if (this.isBootstrap || this.isBootstrap4 || ((this.isMaterial || this.isMaterial3) && !this.isMaterialTooltip)) {\n var tooltipOffsetValue = this.isBootstrap4 ? bootstrap4TooltipOffset : bootstrapTooltipOffset;\n switch (position) {\n case 'TopCenter':\n this.tooltipObj.setProperties({ 'offsetY': -(tooltipOffsetValue) }, false);\n break;\n case 'BottomCenter':\n this.tooltipObj.setProperties({ 'offsetY': tooltipOffsetValue }, false);\n break;\n case 'LeftCenter':\n this.tooltipObj.setProperties({ 'offsetX': -(tooltipOffsetValue) }, false);\n break;\n case 'RightCenter':\n this.tooltipObj.setProperties({ 'offsetX': tooltipOffsetValue }, false);\n break;\n }\n }\n };\n Slider.prototype.materialTooltipEventCallBack = function (event) {\n this.sliderBarClick(event);\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.wireMaterialTooltipEvent = function (destroy) {\n if (this.isMaterialTooltip) {\n if (!destroy) {\n EventHandler.add(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack, this);\n }\n else {\n EventHandler.remove(this.tooltipElement, 'mousedown touchstart', this.materialTooltipEventCallBack);\n }\n }\n };\n Slider.prototype.tooltipPositionCalculation = function (position) {\n var cssClass;\n switch (position) {\n case 'TopCenter':\n cssClass = classNames.horizontalTooltipBefore;\n break;\n case 'BottomCenter':\n cssClass = classNames.horizontalTooltipAfter;\n break;\n case 'LeftCenter':\n cssClass = classNames.verticalTooltipBefore;\n break;\n case 'RightCenter':\n cssClass = classNames.verticalTooltipAfter;\n break;\n }\n return cssClass;\n };\n Slider.prototype.getTooltipTransformProperties = function (className) {\n var transformProperties;\n if (this.tooltipElement) {\n var position = this.orientation === 'Horizontal' ?\n ((this.tooltipElement.clientHeight + 14) - (this.tooltipElement.clientHeight / 2)) :\n ((this.tooltipElement.clientWidth + 14) - (this.tooltipElement.clientWidth / 2));\n transformProperties = this.orientation === 'Horizontal' ?\n (className === classNames.horizontalTooltipBefore ? { rotate: 'rotate(45deg)', translate: \"translateY(\" + position + \"px)\" } :\n { rotate: 'rotate(225deg)', translate: \"translateY(\" + -(position) + \"px)\" }) :\n (className === classNames.verticalTooltipBefore ? { rotate: 'rotate(-45deg)', translate: \"translateX(\" + position + \"px)\" } :\n { rotate: 'rotate(-225deg)', translate: \"translateX(\" + (-position) + \"px)\" });\n }\n return transformProperties;\n };\n Slider.prototype.openMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n this.refreshTooltip(this.firstHandle);\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n tooltipContentElement.classList.remove(classNames.materialTooltipHide);\n tooltipContentElement.classList.add(classNames.materialTooltipShow);\n this.firstHandle.style.cursor = 'default';\n this.tooltipElement.style.transition = this.scaleTransform;\n this.tooltipElement.classList.add(classNames.materialTooltipOpen);\n this.materialHandle.style.transform = 'scale(0)';\n if (tooltipContentElement.innerText.length > 4) {\n this.tooltipElement.style.transform = 'scale(1)';\n }\n else {\n this.tooltipElement.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n if (this.type === 'Default') {\n setTimeout(function () { if (_this.tooltipElement) {\n _this.tooltipElement.style.transition = _this.transition.handle;\n } }, 2500);\n }\n else {\n setTimeout(function () { if (_this.tooltipElement) {\n _this.tooltipElement.style.transition = 'none';\n } }, 2500);\n }\n }\n };\n Slider.prototype.closeMaterialTooltip = function () {\n var _this = this;\n if (this.isMaterialTooltip) {\n var tooltipContentElement = this.tooltipElement.firstElementChild;\n this.tooltipElement.style.transition = this.scaleTransform;\n tooltipContentElement.classList.remove(classNames.materialTooltipShow);\n tooltipContentElement.classList.add(classNames.materialTooltipHide);\n this.firstHandle.style.cursor = '-webkit-grab';\n this.firstHandle.style.cursor = 'grab';\n if (this.materialHandle) {\n this.materialHandle.style.transform = 'scale(1)';\n }\n this.tooltipElement.classList.remove(classNames.materialTooltipOpen);\n this.setTooltipTransform();\n this.tooltipTarget = undefined;\n setTimeout(function () { if (_this.tooltipElement) {\n _this.tooltipElement.style.transition = 'none';\n } }, 2500);\n }\n };\n Slider.prototype.checkTooltipPosition = function (args) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\n if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition || !args.element.classList.contains(tooltipClass)) {\n if (this.isMaterialTooltip) {\n if (tooltipClass !== undefined) {\n args.element.classList.remove(this.previousTooltipClass);\n args.element.classList.add(tooltipClass);\n this.previousTooltipClass = tooltipClass;\n }\n if (args.element.style.transform && args.element.classList.contains(classNames.materialTooltipOpen) &&\n args.element.firstElementChild.innerText.length <= 4) {\n args.element.style.transform = this.getTooltipTransformProperties(this.previousTooltipClass).rotate;\n }\n }\n this.tooltipCollidedPosition = args.collidedPosition;\n }\n if (this.isMaterialTooltip && this.tooltipElement && this.tooltipElement.style.transform.indexOf('translate') !== -1) {\n this.setTooltipTransform();\n }\n };\n Slider.prototype.setTooltipTransform = function () {\n var transformProperties = this.getTooltipTransformProperties(this.previousTooltipClass);\n if (isNullOrUndefined(this.tooltipElement)) {\n return;\n }\n if (this.tooltipElement.firstElementChild.innerText.length > 4) {\n this.tooltipElement.style.transform = transformProperties.translate + \" scale(0.01)\";\n }\n else {\n this.tooltipElement.style.transform = transformProperties.translate + \" \" + transformProperties.rotate + \" scale(0.01)\";\n }\n };\n Slider.prototype.renderTooltip = function () {\n this.tooltipObj = new Tooltip({\n showTipPointer: this.isBootstrap || this.isMaterial || this.isMaterial3 ||\n this.isBootstrap4 || this.isTailwind || this.isBootstrap5 || this.isFluent || this.isFluent2,\n cssClass: classNames.sliderTooltip,\n height: (this.isMaterial || this.isMaterial3) ? 30 : 'auto',\n animation: { open: { effect: 'None' }, close: { effect: 'FadeOut', duration: 500 } },\n opensOn: 'Custom',\n beforeOpen: this.tooltipBeforeOpen.bind(this),\n beforeCollision: this.checkTooltipPosition.bind(this),\n beforeClose: this.tooltipBeforeClose.bind(this),\n enableHtmlSanitizer: this.enableHtmlSanitizer\n });\n this.tooltipObj.appendTo(this.firstHandle);\n this.initializeTooltipProps();\n };\n Slider.prototype.initializeTooltipProps = function () {\n var tooltipShowOn = (this.tooltip.showOn === 'Auto' ? 'Hover' : this.tooltip.showOn);\n this.setProperties({ tooltip: { showOn: tooltipShowOn } }, true);\n this.tooltipObj.position = this.tooltipPlacement();\n this.tooltipCollision(this.tooltipObj.position);\n [this.firstHandle, this.rangeBar, this.secondHandle].forEach(function (handle) {\n if (!isNullOrUndefined(handle)) {\n handle.style.transition = 'none';\n }\n });\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n this.tooltipValue();\n this.tooltipObj.animation.close.effect = 'None';\n this.tooltipObj.open(this.firstHandle);\n }\n };\n Slider.prototype.tooltipBeforeClose = function () {\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n };\n Slider.prototype.setButtons = function () {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.firstBtn.querySelector('span').classList.add('e-icons');\n }\n this.firstBtn.tabIndex = -1;\n this.secondBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.secondButton });\n this.secondBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\n if (this.isTailwind) {\n this.secondBtn.querySelector('span').classList.add('e-icons');\n }\n this.secondBtn.tabIndex = -1;\n this.sliderContainer.classList.add(classNames.sliderButtonClass);\n this.sliderContainer.appendChild(this.firstBtn);\n this.sliderContainer.appendChild(this.secondBtn);\n this.sliderContainer.appendChild(this.element);\n this.buttonTitle();\n };\n Slider.prototype.buttonTitle = function () {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n this.l10n.setLocale(this.locale);\n var decrementTitle = this.l10n.getConstant('decrementTitle');\n var incrementTitle = this.l10n.getConstant('incrementTitle');\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': decrementTitle, title: decrementTitle });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': incrementTitle, title: incrementTitle });\n };\n Slider.prototype.buttonFocusOut = function () {\n if (this.isMaterial || this.isMaterial3) {\n this.getHandle().classList.remove('e-large-thumb-size');\n }\n };\n Slider.prototype.repeatButton = function (args) {\n var hVal = this.handleValueUpdate();\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var value;\n if (args.target.parentElement.classList.contains(classNames.firstButton)\n || args.target.classList.contains(classNames.firstButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n if (value >= this.min && value <= this.max) {\n this.changeHandleValue(value);\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.repeatHandlerMouse = function (args) {\n args.preventDefault();\n if (args.type === ('mousedown') || args.type === ('touchstart')) {\n this.buttonClick(args);\n this.repeatInterval = setInterval(this.repeatButton.bind(this), 180, args);\n }\n };\n Slider.prototype.materialChange = function () {\n if (!this.getHandle().classList.contains('e-large-thumb-size')) {\n this.getHandle().classList.add('e-large-thumb-size');\n }\n };\n Slider.prototype.focusHandle = function () {\n if (!this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.getHandle().classList.add(classNames.sliderTabHandle);\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n Slider.prototype.renderScale = function () {\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n this.noOfDecimals = this.numberOfDecimals(this.step);\n this.ul = this.createElement('ul', {\n className: classNames.scale + ' ' + 'e-' + orien + '-scale ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n this.ul.style.zIndex = '-1';\n if (Browser.isAndroid && orien === 'h') {\n this.ul.classList.add(classNames.sliderTickPosition);\n }\n var smallStep = this.ticks.smallStep;\n if (!this.ticks.showSmallTicks) {\n if (this.ticks.largeStep > 0) {\n smallStep = this.ticks.largeStep;\n }\n else {\n smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)));\n }\n }\n else if (smallStep <= 0) {\n smallStep = parseFloat(formatUnit(this.step));\n }\n var min = this.fractionalToInteger(this.min);\n var max = this.fractionalToInteger(this.max);\n var steps = this.fractionalToInteger(smallStep);\n var bigNum = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 && this.customValues.length - 1;\n var customStep = this.customTickCounter(bigNum);\n var count = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n (bigNum * customStep) + bigNum : Math.abs((max - min) / steps);\n this.element.appendChild(this.ul);\n var li;\n var start = parseFloat(this.min.toString());\n if (orien === 'v') {\n start = parseFloat(this.max.toString());\n }\n var left = 0;\n var islargeTick;\n var tickWidth = 100 / count;\n if (tickWidth === Infinity) {\n tickWidth = 5;\n }\n for (var i = 0, y = !isNullOrUndefined(this.customValues) && this.customValues.length > 0 ?\n this.customValues.length - 1 : 0, k = 0; i <= count; i++) {\n li = (this.createElement('li', {\n attrs: {\n class: classNames.tick, role: 'presentation', tabIndex: '-1',\n 'aria-hidden': 'true'\n }\n }));\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n islargeTick = i % (customStep + 1) === 0;\n if (islargeTick) {\n if (orien === 'h') {\n start = this.customValues[k];\n k++;\n }\n else {\n start = this.customValues[y];\n y--;\n }\n li.setAttribute('title', start.toString());\n }\n }\n else {\n li.setAttribute('title', start.toString());\n if (this.numberOfDecimals(this.max) === 0 && this.numberOfDecimals(this.min) === 0 &&\n this.numberOfDecimals(this.step) === 0) {\n if (orien === 'h') {\n islargeTick = ((start - parseFloat(this.min.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(start - parseFloat(this.max.toString())) % this.ticks.largeStep === 0) ? true : false;\n }\n }\n else {\n var largestep = this.fractionalToInteger(this.ticks.largeStep);\n var startValue = this.fractionalToInteger(start);\n if (orien === 'h') {\n islargeTick = ((startValue - min) % largestep === 0) ? true : false;\n }\n else {\n islargeTick = (Math.abs(startValue - parseFloat(max.toString())) % largestep === 0) ? true : false;\n }\n }\n }\n if (islargeTick) {\n li.classList.add(classNames.large);\n }\n if (orien === 'h') {\n li.style.width = tickWidth + '%';\n }\n else {\n li.style.height = tickWidth + '%';\n }\n var repeat = islargeTick ? (this.ticks.placement === 'Both' ? 2 : 1) : 0;\n if (islargeTick) {\n for (var j = 0; j < repeat; j++) {\n this.createTick(li, start, tickWidth);\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n }\n this.ul.appendChild(li);\n this.tickElementCollection.push(li);\n var decimalPoints = void 0;\n if (isNullOrUndefined(this.customValues)) {\n if (this.numberOfDecimals(smallStep) > this.numberOfDecimals(start)) {\n decimalPoints = this.numberOfDecimals(smallStep);\n }\n else {\n decimalPoints = this.numberOfDecimals(start);\n }\n if (orien === 'h') {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n if (this.min > this.max) {\n start = this.makeRoundNumber(start + smallStep, decimalPoints);\n }\n else {\n start = this.makeRoundNumber(start - smallStep, decimalPoints);\n }\n }\n left = this.makeRoundNumber(left + smallStep, decimalPoints);\n }\n }\n this.ticksAlignment(orien, tickWidth);\n };\n Slider.prototype.ticksAlignment = function (orien, tickWidth, triggerEvent) {\n if (triggerEvent === void 0) { triggerEvent = true; }\n this.firstChild = this.ul.firstElementChild;\n this.lastChild = this.ul.lastElementChild;\n this.firstChild.classList.add(classNames.sliderFirstTick);\n this.lastChild.classList.add(classNames.sliderLastTick);\n this.sliderContainer.classList.add(classNames.scale + '-' + this.ticks.placement.toLowerCase());\n if (orien === 'h') {\n this.firstChild.style.width = tickWidth / 2 + '%';\n this.lastChild.style.width = tickWidth / 2 + '%';\n }\n else {\n this.firstChild.style.height = tickWidth / 2 + '%';\n this.lastChild.style.height = tickWidth / 2 + '%';\n }\n var eventArgs = { ticksWrapper: this.ul, tickElements: this.tickElementCollection };\n if (triggerEvent) {\n this.trigger('renderedTicks', eventArgs);\n }\n this.scaleAlignment();\n };\n Slider.prototype.createTick = function (li, start, tickWidth) {\n var span = this.createElement('span', {\n className: classNames.tickValue + ' ' + classNames.tick + '-' + this.ticks.placement.toLowerCase(),\n attrs: { role: 'presentation', tabIndex: '-1', 'aria-hidden': 'true' }\n });\n li.appendChild(span);\n if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start, span);\n }\n else {\n if (this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(start.toString());\n }\n else {\n span.innerHTML = start.toString();\n }\n }\n };\n Slider.prototype.formatTicksValue = function (li, start, spanElement) {\n var _this = this;\n var tickText = this.formatNumber(start);\n var text = !isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format) ?\n this.formatString(start, this.ticksFormatInfo).formatString : tickText;\n var eventArgs = { value: start, text: text, tickElement: li };\n this.trigger('renderingTicks', eventArgs, function (observedArgs) {\n li.setAttribute('title', observedArgs.text.toString());\n if (spanElement) {\n if (_this.enableHtmlSanitizer) {\n spanElement.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n spanElement.innerHTML = observedArgs.text.toString();\n }\n }\n });\n };\n Slider.prototype.scaleAlignment = function () {\n this.tickValuePosition();\n if (this.orientation === 'Vertical') {\n if (this.element.getBoundingClientRect().width <= 15) {\n this.sliderContainer.classList.add(classNames.sliderSmallSize);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n }\n else {\n if (this.element.getBoundingClientRect().height <= 15) {\n this.sliderContainer.classList.add(classNames.sliderSmallSize);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n }\n };\n Slider.prototype.tickValuePosition = function () {\n this.firstChild = this.element.querySelector('ul').children[0];\n var first = this.firstChild.getBoundingClientRect();\n var firstChild;\n var otherChild;\n var smallStep = this.ticks.smallStep;\n var count = Math.abs((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min)))) / smallStep;\n if (this.firstChild.children.length > 0) {\n firstChild = this.firstChild.children[0].getBoundingClientRect();\n }\n var tickElements = [this.sliderContainer.querySelectorAll('.' + classNames.tick + '.' +\n classNames.large + ' .' + classNames.tickValue)];\n var other;\n if (this.ticks.placement === 'Both') {\n other = [].slice.call(tickElements[0], 2);\n }\n else {\n other = [].slice.call(tickElements[0], 1);\n }\n var tickWidth = this.orientation === 'Vertical' ?\n (first.height * 2) : (first.width * 2);\n for (var i = 0; i < this.firstChild.children.length; i++) {\n if (this.orientation === 'Vertical') {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\n else {\n if (!this.enableRtl) {\n this.firstChild.children[i].style.left = -(firstChild.width / 2) + 'px';\n }\n else {\n this.firstChild.children[i].style.left = (tickWidth -\n this.firstChild.children[i].getBoundingClientRect().width) / 2 + 'px';\n }\n }\n }\n for (var i = 0; i < other.length; i++) {\n otherChild = other[i].getBoundingClientRect();\n if (this.orientation === 'Vertical') {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\n else {\n setStyleAttribute(other[i], { left: (tickWidth - otherChild.width) / 2 + 'px' });\n }\n }\n if (this.enableRtl && this.lastChild.children.length && count !== 0) {\n this.lastChild.children[0].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n if (this.ticks.placement === 'Both') {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n this.firstChild.children[0].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n if (this.ticks.placement === 'Both') {\n this.firstChild.children[1].style.left =\n (this.firstChild.getBoundingClientRect().width / 2) + 2 + 'px';\n }\n }\n }\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n };\n Slider.prototype.setAriaAttrValue = function (element) {\n var ariaValueText;\n var isTickFormatted = ((!isNullOrUndefined(this.ticks) && !isNullOrUndefined(this.ticks.format))) ? true : false;\n var text = !isTickFormatted ?\n this.formatContent(this.ticksFormatInfo, false) : this.formatContent(this.tooltipFormatInfo, false);\n var valuenow = isTickFormatted ? this.formatContent(this.ticksFormatInfo, true) :\n this.formatContent(this.tooltipFormatInfo, true);\n text = (!this.customAriaText) ? (text) : (this.customAriaText);\n if (text.split(' - ').length === 2) {\n ariaValueText = text.split(' - ');\n }\n else {\n ariaValueText = [text, text];\n }\n this.setAriaAttributes(element);\n if (this.type !== 'Range') {\n attributes(element, { 'aria-valuenow': valuenow, 'aria-valuetext': text });\n }\n else {\n if (!this.enableRtl) {\n if (element === this.firstHandle) {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] });\n }\n else {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] });\n }\n }\n else {\n if (element === this.firstHandle) {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] });\n }\n else {\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] });\n }\n }\n }\n };\n Slider.prototype.handleValueUpdate = function () {\n var hVal;\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n hVal = this.handleVal1;\n }\n else {\n hVal = this.handleVal2;\n }\n }\n else {\n hVal = this.handleVal1;\n }\n return hVal;\n };\n Slider.prototype.getLimitCorrectedValues = function (value) {\n if (this.type === 'MinRange' || this.type === 'Default') {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n if (this.activeHandle === 1) {\n value = (this.getLimitValueAndPosition(value, this.limits.minStart, this.limits.minEnd))[0];\n }\n else {\n value = (this.getLimitValueAndPosition(value, this.limits.maxStart, this.limits.maxEnd))[0];\n }\n }\n return value;\n };\n Slider.prototype.focusSliderElement = function () {\n if (!this.isElementFocused) {\n this.element.focus();\n this.isElementFocused = true;\n }\n };\n Slider.prototype.buttonClick = function (args) {\n this.focusSliderElement();\n var value;\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n var hVal = this.handleValueUpdate();\n if ((args.keyCode === 40) || (args.keyCode === 37)\n || args.currentTarget.classList.contains(classNames.firstButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.step.toString()), false);\n }\n else {\n value = this.add(hVal, parseFloat(this.step.toString()), true);\n }\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false);\n }\n else {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true);\n }\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n if (enabledRTL) {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true);\n }\n else {\n value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false);\n }\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min < this.max ? this.min.toString() : this.max.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.min < this.max ? this.max.toString() : this.min.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\n this.focusHandle();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n if (!this.tooltipElement.classList.contains(classNames.materialTooltipOpen)) {\n this.openMaterialTooltip();\n }\n else {\n this.refreshTooltip(this.firstHandle);\n }\n }\n else {\n if (!this.tooltipElement) {\n this.openTooltip(target);\n }\n else {\n this.refreshTooltip(target);\n }\n }\n };\n Slider.prototype.buttonUp = function (args) {\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.remove(this.firstBtn, 'mouseup touchend', this.buttonUp);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.remove(this.secondBtn, 'mouseup touchend', this.buttonUp);\n }\n };\n Slider.prototype.setRangeBar = function () {\n if (this.orientation === 'Horizontal' && !isNullOrUndefined(this.rangeBar)) {\n if (this.type === 'MinRange') {\n if (this.enableRtl) {\n this.rangeBar.style.right = '0px';\n }\n else {\n this.rangeBar.style.left = '0px';\n }\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n if (this.enableRtl) {\n this.rangeBar.style.right = this.handlePos1 + 'px';\n }\n else {\n this.rangeBar.style.left = this.handlePos1 + 'px';\n }\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else if (!isNullOrUndefined(this.rangeBar)) {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos1 + 'px' : '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.min > this.max ? this.element.clientHeight - this.handlePos1 + 'px' : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos2 + 'px' : this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.min > this.max ? this.handlePos1 - this.handlePos2 + 'px' : this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n };\n Slider.prototype.checkValidValueAndPos = function (value) {\n value = this.checkHandleValue(value);\n value = this.checkHandlePosition(value);\n return value;\n };\n Slider.prototype.setLimitBarPositions = function (fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarFirst.style.left = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n else {\n this.limitBarFirst.style.right = fromMinPostion + 'px';\n this.limitBarFirst.style.width = (fromMaxpostion - fromMinPostion) + 'px';\n }\n }\n else {\n this.limitBarFirst.style.bottom = (this.min < this.max ? fromMinPostion : fromMaxpostion) + 'px';\n this.limitBarFirst.style.height = (this.min < this.max ? (fromMaxpostion - fromMinPostion) : (fromMinPostion - fromMaxpostion)) + 'px';\n }\n if (this.type === 'Range') {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.limitBarSecond.style.left = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n else {\n this.limitBarSecond.style.right = toMinPostion + 'px';\n this.limitBarSecond.style.width = (toMaxpostion - toMinPostion) + 'px';\n }\n }\n else {\n this.limitBarSecond.style.bottom = (this.min < this.max ? toMinPostion : toMaxpostion) + 'px';\n this.limitBarSecond.style.height = (this.min < this.max ? (toMaxpostion - toMinPostion) : (toMinPostion - toMaxpostion)) + 'px';\n }\n }\n };\n Slider.prototype.setLimitBar = function () {\n if (this.type === 'Default' || this.type === 'MinRange') {\n var fromPosition = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromPosition = this.checkValidValueAndPos(fromPosition);\n var toPosition = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n toPosition = this.checkValidValueAndPos(toPosition);\n this.setLimitBarPositions(fromPosition, toPosition);\n }\n else if (this.type === 'Range') {\n var fromMinPostion = (this.getLimitValueAndPosition(this.limits.minStart, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMinPostion = this.checkValidValueAndPos(fromMinPostion);\n var fromMaxpostion = (this.getLimitValueAndPosition(this.limits.minEnd, this.limits.minStart, this.limits.minEnd, true))[0];\n fromMaxpostion = this.checkValidValueAndPos(fromMaxpostion);\n var toMinPostion = (this.getLimitValueAndPosition(this.limits.maxStart, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMinPostion = this.checkValidValueAndPos(toMinPostion);\n var toMaxpostion = (this.getLimitValueAndPosition(this.limits.maxEnd, this.limits.maxStart, this.limits.maxEnd, true))[0];\n toMaxpostion = this.checkValidValueAndPos(toMaxpostion);\n this.setLimitBarPositions(fromMinPostion, fromMaxpostion, toMinPostion, toMaxpostion);\n }\n };\n Slider.prototype.getLimitValueAndPosition = function (currentValue, minValue, maxValue, limitBar) {\n if (isNullOrUndefined(minValue)) {\n minValue = this.min < this.max ? this.min : this.max;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.min < this.max ? this.max : this.min;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = maxValue;\n }\n }\n if (currentValue < minValue) {\n currentValue = minValue;\n }\n if (currentValue > maxValue) {\n currentValue = maxValue;\n }\n return [currentValue, this.checkHandlePosition(currentValue)];\n };\n Slider.prototype.setValue = function () {\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n this.min = 0;\n this.max = this.customValues.length - 1;\n this.setBarColor();\n }\n this.setAriaAttributes(this.firstHandle);\n this.handleVal1 = isNullOrUndefined(this.value) ? this.checkHandleValue(parseFloat(this.min.toString())) :\n this.checkHandleValue(parseFloat(this.value.toString()));\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.preHandlePos1 = this.handlePos1;\n if (isNullOrUndefined(this.activeHandle)) {\n this.activeHandle = this.type === 'Range' ? 2 : 1;\n }\n if (this.type === 'Default' || this.type === 'MinRange') {\n if (this.limits.enabled) {\n var values = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values[0];\n this.handlePos1 = values[1];\n this.preHandlePos1 = this.handlePos1;\n }\n this.setHandlePosition(null);\n this.handleStart();\n this.value = this.handleVal1;\n this.setAriaAttrValue(this.firstHandle);\n this.changeEvent('changed', null);\n }\n else {\n this.validateRangeValue();\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n };\n Slider.prototype.rangeValueUpdate = function () {\n if (this.value === null || typeof (this.value) !== 'object') {\n this.value = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n };\n Slider.prototype.validateRangeValue = function () {\n this.rangeValueUpdate();\n this.setRangeValue();\n };\n Slider.prototype.modifyZindex = function () {\n if (this.type === 'Range' && !isNullOrUndefined(this.firstHandle) && !isNullOrUndefined(this.secondHandle)) {\n if (this.activeHandle === 1) {\n this.firstHandle.style.zIndex = (this.zIndex + 4) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n else {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n }\n else if (this.isMaterialTooltip && this.tooltipElement) {\n this.tooltipElement.style.zIndex = getZindexPartial(this.element) + '';\n }\n };\n Slider.prototype.setHandlePosition = function (event) {\n var _this = this;\n var handle;\n var pos = (this.activeHandle === 1) ? this.handlePos1 : this.handlePos2;\n if (this.isMaterialTooltip) {\n handle = [this.firstHandle, this.materialHandle];\n }\n else {\n handle = [this.getHandle()];\n }\n this.handleStart();\n handle.forEach(function (handle) {\n if (isNullOrUndefined(handle)) {\n return;\n }\n if (_this.orientation === 'Horizontal') {\n if (_this.enableRtl) {\n handle.style.right = pos + \"px\";\n }\n else {\n handle.style.left = pos + \"px\";\n }\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n });\n this.changeEvent('change', event);\n };\n Slider.prototype.getHandle = function () {\n return (this.activeHandle === 1) ? this.firstHandle : this.secondHandle;\n };\n Slider.prototype.setRangeValue = function () {\n this.updateRangeValue();\n this.activeHandle = 1;\n this.setHandlePosition(null);\n this.activeHandle = 2;\n this.setHandlePosition(null);\n this.activeHandle = 1;\n };\n Slider.prototype.changeEvent = function (eventName, e) {\n var previous = eventName === 'change' ? this.previousVal : this.previousChanged;\n if (this.type !== 'Range') {\n this.setProperties({ 'value': this.handleVal1 }, true);\n if (previous !== this.value && (!this.isMaterialTooltip || !this.initialTooltip)) {\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.firstHandle);\n }\n else {\n var value = this.value = [this.handleVal1, this.handleVal2];\n this.setProperties({ 'value': value }, true);\n if (previous.length === this.value.length\n && this.value[0] !== previous[0] || this.value[1] !== previous[1]) {\n this.initialTooltip = false;\n this.trigger(eventName, this.changeEventArgs(eventName, e));\n this.initialTooltip = true;\n this.setPreviousVal(eventName, this.value);\n }\n this.setAriaAttrValue(this.getHandle());\n }\n this.hiddenInput.value = this.value.toString();\n };\n Slider.prototype.changeEventArgs = function (eventName, e) {\n var eventArgs;\n if (this.tooltip.isVisible && this.tooltipObj && this.initialTooltip) {\n this.tooltipValue();\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: (typeof (this.tooltipObj.content) === 'function' ? this.tooltipObj.content() : this.tooltipObj.content), isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n else {\n eventArgs = {\n value: this.value,\n previousValue: eventName === 'change' ? this.previousVal : this.previousChanged,\n action: eventName, text: isNullOrUndefined(this.ticksFormatInfo.format) ? this.value.toString() :\n (this.type !== 'Range' ? this.formatString(this.value, this.ticksFormatInfo).formatString :\n (this.formatString(this.value[0], this.ticksFormatInfo).formatString + ' - ' +\n this.formatString(this.value[1], this.ticksFormatInfo).formatString)),\n isInteracted: isNullOrUndefined(e) ? false : true\n };\n }\n return eventArgs;\n };\n Slider.prototype.setPreviousVal = function (eventName, value) {\n if (eventName === 'change') {\n this.previousVal = value;\n }\n else {\n this.previousChanged = value;\n }\n };\n Slider.prototype.updateRangeValue = function () {\n var values = this.value.toString().split(',').map(Number);\n if ((this.enableRtl && this.orientation !== 'Vertical') || this.rtl) {\n this.value = [values[1], values[0]];\n }\n else {\n this.value = [values[0], values[1]];\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n this.handleVal1 = this.checkHandleValue(this.value[1]);\n this.handleVal2 = this.checkHandleValue(this.value[0]);\n }\n else {\n this.handleVal1 = this.checkHandleValue(this.value[0]);\n this.handleVal2 = this.checkHandleValue(this.value[1]);\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.min < this.max && this.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.min > this.max && this.handlePos1 < this.handlePos2) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n this.preHandlePos1 = this.handlePos1;\n this.preHandlePos2 = this.handlePos2;\n if (this.limits.enabled) {\n this.activeHandle = 1;\n var values_1 = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = values_1[0];\n this.handlePos1 = values_1[1];\n this.preHandlePos1 = this.handlePos1;\n this.activeHandle = 2;\n values_1 = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = values_1[0];\n this.handlePos2 = values_1[1];\n this.preHandlePos2 = this.handlePos2;\n }\n };\n Slider.prototype.checkHandlePosition = function (value) {\n var pos;\n value = (100 *\n (value - (parseFloat(formatUnit(this.min))))) / ((parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (value / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (value / 100);\n }\n if (((parseFloat(formatUnit(this.max))) === (parseFloat(formatUnit(this.min))))) {\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width;\n }\n else {\n pos = this.element.getBoundingClientRect().height;\n }\n }\n return pos;\n };\n Slider.prototype.checkHandleValue = function (value) {\n if (this.min === this.max) {\n return (parseFloat(formatUnit(this.max)));\n }\n var handle = this.tempStartEnd();\n if (value < handle.start) {\n value = handle.start;\n }\n else if (value > handle.end) {\n value = handle.end;\n }\n return value;\n };\n /**\n * It is used to reposition slider.\n *\n * @returns {void}\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n if (!isNullOrUndefined(this.firstHandle)) {\n this.firstHandle.style.transition = 'none';\n }\n if (this.type !== 'Default' && !isNullOrUndefined(this.rangeBar)) {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle)) {\n this.secondHandle.style.transition = 'none';\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.handleVal2) {\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n }\n if (this.orientation === 'Horizontal') {\n if (this.enableRtl) {\n this.firstHandle.style.right = this.handlePos1 + \"px\";\n }\n else {\n this.firstHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.isMaterialTooltip && !isNullOrUndefined(this.materialHandle)) {\n if (this.enableRtl) {\n this.materialHandle.style.right = this.handlePos1 + \"px\";\n }\n else {\n this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n }\n if (this.type === 'MinRange' && !isNullOrUndefined(this.rangeBar)) {\n if (this.enableRtl) {\n this.rangeBar.style.right = '0px';\n }\n else {\n this.rangeBar.style.left = '0px';\n }\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle) && !isNullOrUndefined(this.rangeBar)) {\n if (this.enableRtl) {\n this.secondHandle.style.right = this.handlePos2 + \"px\";\n this.rangeBar.style.right = this.handlePos1 + 'px';\n }\n else {\n this.secondHandle.style.left = this.handlePos2 + \"px\";\n this.rangeBar.style.left = this.handlePos1 + 'px';\n }\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n this.firstHandle.style.bottom = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n this.materialHandle.style.bottom = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos1 + 'px' : '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.min > this.max ? this.element.clientHeight - this.handlePos1 + 'px' : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.min > this.max ? this.handlePos2 + 'px' : this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': this.min > this.max ? this.handlePos1 - this.handlePos2 + 'px' : this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n if (this.limits.enabled) {\n this.setLimitBar();\n }\n if (this.ticks.placement !== 'None' && this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n this.handleStart();\n if (!this.tooltip.isVisible) {\n setTimeout(function () {\n if (!isNullOrUndefined(_this.firstHandle)) {\n _this.firstHandle.style.transition = _this.scaleTransform;\n }\n if (_this.type === 'Range' && !isNullOrUndefined(_this.secondHandle)) {\n _this.secondHandle.style.transition = _this.scaleTransform;\n }\n });\n }\n this.refreshTooltip(this.tooltipTarget);\n this.setBarColor();\n };\n Slider.prototype.changeHandleValue = function (value) {\n var position = null;\n if (this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n this.handleVal1 = this.checkHandleValue(value);\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n if (this.type === 'Range' && ((this.handlePos1 > this.handlePos2 && this.min < this.max) || (this.handlePos1 < this.handlePos2 && this.min > this.max))) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\n }\n if (this.handlePos1 !== this.preHandlePos1) {\n position = this.preHandlePos1 = this.handlePos1;\n }\n }\n this.modifyZindex();\n }\n else {\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n this.handleVal2 = this.checkHandleValue(value);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n if (this.type === 'Range' && ((this.handlePos2 < this.handlePos1 && this.min < this.max) || (this.handlePos2 > this.handlePos1 && this.min > this.max))) {\n this.handlePos2 = this.handlePos1;\n this.handleVal2 = this.handleVal1;\n }\n if (this.handlePos2 !== this.preHandlePos2) {\n position = this.preHandlePos2 = this.handlePos2;\n }\n }\n this.modifyZindex();\n }\n if (position !== null) {\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n this.setHandlePosition(null);\n }\n };\n Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.min < (this.max) && (this.handlePos2 - handlepos) < (handlepos - this.handlePos1) || (this.min > this.max) && (this.handlePos1 - handlepos) > (handlepos - this.handlePos2))) {\n this.activeHandle = 2;\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n }\n this.modifyZindex();\n this.secondHandle.focus();\n }\n else {\n this.activeHandle = 1;\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.modifyZindex();\n this.firstHandle.focus();\n }\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.add(classNames.materialTooltipActive);\n }\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement && this.getHandle() !== focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n var handle = this.activeHandle === 1 ? this.firstHandle : this.secondHandle;\n var behindElement;\n if ((evt.type === 'click' || evt.type === 'mousedown') && evt.target === handle) {\n var eventX = evt.clientX, eventY = evt.clientY;\n behindElement = document.elementFromPoint(eventX, eventY);\n }\n if (evt.target === handle && behindElement !== handle) {\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.sliderBarUp(evt);\n this.tooltipToggle(this.getHandle());\n return;\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n var transition = (this.isMaterial || this.isMaterial3) && this.tooltip.isVisible ?\n this.transitionOnMaterialTooltip : this.transition;\n this.getHandle().style.transition = transition.handle;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = transition.rangeBar;\n }\n this.setHandlePosition(evt);\n if (this.isMaterialTooltip) {\n this.initialTooltip = false;\n }\n if (evt.target !== handle) {\n this.changeEvent('changed', evt);\n }\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.handleValueAdjust = function (handleValue, assignValue, handleNumber) {\n if (handleNumber === 1) {\n this.handleVal1 = assignValue;\n this.handleVal2 = this.handleVal1 + this.minDiff;\n }\n else if (handleNumber === 2) {\n this.handleVal2 = assignValue;\n this.handleVal1 = this.handleVal2 - this.minDiff;\n }\n this.handlePos1 = this.checkHandlePosition(this.handleVal1);\n this.handlePos2 = this.checkHandlePosition(this.handleVal2);\n };\n Slider.prototype.dragRangeBarMove = function (event) {\n var _a, _b;\n if (event.type !== 'touchmove') {\n event.preventDefault();\n }\n this.rangeBarDragged = true;\n var pos;\n this.rangeBar.style.transition = 'none';\n this.firstHandle.style.transition = 'none';\n this.secondHandle.style.transition = 'none';\n var xPostion;\n var yPostion;\n if (event.type === 'mousemove') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (!(this.limits.enabled && this.limits.startHandleFixed) && !(this.limits.enabled && this.limits.endHandleFixed)) {\n if (!this.enableRtl) {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion + this.secondPartRemain };\n }\n else {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion + this.secondPartRemain };\n }\n if (this.min > this.max) {\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n }\n else {\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n }\n if (!this.enableRtl) {\n pos = { x: xPostion + this.secondPartRemain, y: yPostion - this.firstPartRemain };\n }\n else {\n pos = { x: xPostion - this.firstPartRemain, y: yPostion - this.firstPartRemain };\n }\n if (this.min > this.max) {\n this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\n }\n else {\n this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\n }\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(this.handleVal1, this.limits.minStart, this.limits.minEnd);\n this.handleVal1 = value[0];\n this.handlePos1 = value[1];\n if (this.handleVal1 === this.limits.minEnd) {\n this.handleValueAdjust(this.handleVal1, this.limits.minEnd, 1);\n }\n if (this.handleVal1 === this.limits.minStart) {\n this.handleValueAdjust(this.handleVal1, this.limits.minStart, 1);\n }\n value = this.getLimitValueAndPosition(this.handleVal2, this.limits.maxStart, this.limits.maxEnd);\n this.handleVal2 = value[0];\n this.handlePos2 = value[1];\n if (this.handleVal2 === this.limits.maxStart) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxStart, 2);\n }\n if (this.handleVal2 === this.limits.maxEnd) {\n this.handleValueAdjust(this.handleVal2, this.limits.maxEnd, 2);\n }\n }\n if (this.handleVal2 === (this.min > this.max ? this.min : this.max)) {\n this.handleValueAdjust(this.handleVal2, (this.min > this.max ? this.min : this.max), 2);\n }\n if (this.handleVal1 === (this.min > this.max ? this.max : this.min)) {\n this.handleValueAdjust(this.handleVal1, (this.min > this.max ? this.max : this.min), 1);\n }\n }\n this.activeHandle = 1;\n this.setHandlePosition(event);\n this.activeHandle = 2;\n this.setHandlePosition(event);\n this.tooltipToggle(this.rangeBar);\n this.setRangeBar();\n };\n Slider.prototype.sliderBarUp = function (event) {\n this.changeEvent('changed', event);\n this.handleFocusOut();\n this.firstHandle.classList.remove(classNames.sliderActiveHandle);\n if (this.type === 'Range') {\n this.initialTooltip = false;\n this.secondHandle.classList.remove(classNames.sliderActiveHandle);\n }\n this.closeTooltip();\n if (this.isMaterial || this.isMaterial3) {\n this.getHandle().classList.remove('e-large-thumb-size');\n if (this.isMaterialTooltip) {\n this.tooltipElement.classList.remove(classNames.materialTooltipActive);\n }\n }\n EventHandler.remove(document, 'mousemove touchmove', this.sliderBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.sliderBarUp);\n };\n Slider.prototype.sliderBarMove = function (evt) {\n if (evt.type !== 'touchmove') {\n evt.preventDefault();\n }\n var pos;\n if (evt.type === 'mousemove') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n handlepos = Math.round(handlepos);\n if (this.type !== 'Range' && this.activeHandle === 1) {\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if (this.limits.enabled) {\n var valueAndPostion = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handlepos = valueAndPostion[1];\n handleVal = valueAndPostion[0];\n }\n this.handlePos1 = handlepos;\n this.handleVal1 = handleVal;\n }\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n }\n if (this.type === 'Range') {\n if (this.activeHandle === 1) {\n this.firstHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.startHandleFixed)) {\n if ((this.min < this.max && handlepos > this.handlePos2 || (this.min > this.max && handlepos < this.handlePos2))) {\n handlepos = this.handlePos2;\n handleVal = this.handleVal2;\n }\n if (handlepos !== this.preHandlePos1) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.minStart, this.limits.minEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos1 = this.preHandlePos1 = handlepos;\n this.handleVal1 = handleVal;\n this.activeHandle = 1;\n }\n }\n }\n else if (this.activeHandle === 2) {\n this.secondHandle.classList.add(classNames.sliderActiveHandle);\n if (!(this.limits.enabled && this.limits.endHandleFixed)) {\n if ((this.min < this.max && handlepos < this.handlePos1) || (this.min > this.max && handlepos > this.handlePos1)) {\n handlepos = this.handlePos1;\n handleVal = this.handleVal1;\n }\n if (handlepos !== this.preHandlePos2) {\n if (this.limits.enabled) {\n var value = this.getLimitValueAndPosition(handleVal, this.limits.maxStart, this.limits.maxEnd);\n handleVal = value[0];\n handlepos = value[1];\n }\n this.handlePos2 = this.preHandlePos2 = handlepos;\n this.handleVal2 = handleVal;\n this.activeHandle = 2;\n }\n }\n }\n }\n if (!this.checkRepeatedValue(handleVal)) {\n return;\n }\n this.getHandle().style.transition = this.scaleTransform;\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n this.setHandlePosition(evt);\n if ((this.isMaterial || this.isMaterial3) && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n if (this.type !== 'Default') {\n this.setRangeBar();\n }\n };\n Slider.prototype.dragRangeBarUp = function (event) {\n if (!this.rangeBarDragged) {\n this.focusSliderElement();\n this.sliderBarClick(event);\n }\n else {\n this.isDragComplete = true;\n }\n this.changeEvent('changed', event);\n this.closeTooltip();\n EventHandler.remove(document, 'mousemove touchmove', this.dragRangeBarMove);\n EventHandler.remove(document, 'mouseup touchend', this.dragRangeBarUp);\n this.rangeBarDragged = false;\n };\n Slider.prototype.checkRepeatedValue = function (currentValue) {\n if (this.type === 'Range') {\n var previousVal = this.enableRtl && this.orientation !== 'Vertical' ? (this.activeHandle === 1 ?\n this.previousVal[1] : this.previousVal[0]) :\n (this.activeHandle === 1 ? this.previousVal[0] : this.previousVal[1]);\n if (currentValue === previousVal) {\n return 0;\n }\n }\n else {\n if (currentValue === this.previousVal) {\n return 0;\n }\n }\n return 1;\n };\n Slider.prototype.refreshTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj) {\n this.tooltipValue();\n if (target) {\n this.tooltipObj.refresh(target);\n this.tooltipTarget = target;\n }\n }\n };\n Slider.prototype.openTooltip = function (target) {\n if (this.tooltip.isVisible && this.tooltipObj && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.open(target);\n this.tooltipTarget = target;\n }\n };\n Slider.prototype.closeTooltip = function () {\n if (this.tooltip.isVisible && this.tooltipObj && this.tooltip.showOn !== 'Always' && !this.isMaterialTooltip) {\n this.tooltipValue();\n this.tooltipObj.close();\n this.tooltipTarget = undefined;\n }\n };\n Slider.prototype.keyDown = function (event) {\n switch (event.keyCode) {\n case 37:\n case 38:\n case 39:\n case 40:\n case 33:\n case 34:\n case 36:\n case 35:\n event.preventDefault();\n this.buttonClick(event);\n break;\n }\n };\n Slider.prototype.wireButtonEvt = function (destroy) {\n if (!destroy) {\n EventHandler.add(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut, this);\n EventHandler.add(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse, this);\n EventHandler.add(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp, this);\n EventHandler.add(this.firstBtn, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.secondBtn, 'focusout', this.sliderFocusOut, this);\n }\n else {\n EventHandler.remove(this.firstBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.secondBtn, 'mouseleave touchleave', this.buttonFocusOut);\n EventHandler.remove(this.firstBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.firstBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.secondBtn, 'mousedown touchstart', this.repeatHandlerMouse);\n EventHandler.remove(this.secondBtn, 'mouseup mouseleave touchup touchend', this.repeatHandlerUp);\n EventHandler.remove(this.firstBtn, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.secondBtn, 'focusout', this.sliderFocusOut);\n }\n };\n Slider.prototype.rangeBarMousedown = function (event) {\n var _a, _b;\n event.preventDefault();\n this.focusSliderElement();\n if (this.type === 'Range' && this.drag && event.target === this.rangeBar) {\n var xPostion = void 0;\n var yPostion = void 0;\n if (event.type === 'mousedown') {\n _a = [event.clientX, event.clientY], xPostion = _a[0], yPostion = _a[1];\n }\n else if (event.type === 'touchstart') {\n _b = [event.changedTouches[0].clientX, event.changedTouches[0].clientY], xPostion = _b[0], yPostion = _b[1];\n }\n if (this.orientation === 'Horizontal') {\n this.firstPartRemain = xPostion - this.rangeBar.getBoundingClientRect().left;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().right - xPostion;\n }\n else {\n this.firstPartRemain = yPostion - this.rangeBar.getBoundingClientRect().top;\n this.secondPartRemain = this.rangeBar.getBoundingClientRect().bottom - yPostion;\n }\n this.minDiff = this.handleVal2 - this.handleVal1;\n this.tooltipToggle(this.rangeBar);\n var focusedElement = this.element.querySelector('.' + classNames.sliderTabHandle);\n if (focusedElement) {\n focusedElement.classList.remove(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.dragRangeBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.dragRangeBarUp, this);\n }\n };\n Slider.prototype.elementClick = function (event) {\n if (this.isDragComplete) {\n this.isDragComplete = false;\n return;\n }\n event.preventDefault();\n this.focusSliderElement();\n this.sliderBarClick(event);\n this.focusHandle();\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n var previousSibling = event.target.previousSibling;\n if (previousSibling && previousSibling.classList.contains(classNames.sliderHandle)) {\n this.activeHandle = 2;\n }\n else {\n this.activeHandle = 1;\n }\n }\n this.getHandle().focus();\n this.tooltipToggle(this.getHandle());\n }\n }\n this.closeTooltip();\n this.changeEvent('changed', event);\n };\n Slider.prototype.hover = function (event) {\n if (!isNullOrUndefined(event)) {\n if (event.type === 'mouseover' || event.type === 'touchmove' || event.type === 'mousemove' ||\n event.type === 'pointermove' || event.type === 'touchstart') {\n this.sliderContainer.classList.add(classNames.sliderHover);\n }\n else {\n this.sliderContainer.classList.remove(classNames.sliderHover);\n var curTarget = event.currentTarget;\n if (this.tooltip.isVisible && this.tooltip.showOn !== 'Always' && this.tooltipObj && this.isMaterialTooltip &&\n !curTarget.classList.contains(classNames.sliderHandleFocused) &&\n !curTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeMaterialTooltip();\n }\n }\n }\n };\n Slider.prototype.sliderFocusOut = function (event) {\n if (event.relatedTarget !== this.secondHandle && event.relatedTarget !== this.firstHandle &&\n event.relatedTarget !== this.element && event.relatedTarget !== this.firstBtn && event.relatedTarget !== this.secondBtn) {\n this.closeMaterialTooltip();\n this.closeTooltip();\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n if (this.element.querySelector('.' + classNames.sliderTabTrack)) {\n this.element.querySelector('.' + classNames.sliderTabTrack).classList.remove(classNames.sliderTabTrack);\n if ((this.type === 'Range' || this.type === 'MinRange') &&\n this.element.querySelector('.' + classNames.sliderTabRange)) {\n this.element.querySelector('.' + classNames.sliderTabRange).classList.remove(classNames.sliderTabRange);\n }\n }\n this.hiddenInput.focus();\n this.hiddenInput.blur();\n this.isElementFocused = false;\n }\n };\n Slider.prototype.removeElement = function (element) {\n if (element.parentNode) {\n element.parentNode.removeChild(element);\n }\n };\n Slider.prototype.changeSliderType = function (type, args) {\n if (this.isMaterialTooltip && this.materialHandle) {\n this.sliderContainer.classList.remove(classNames.materialSlider);\n this.removeElement(this.materialHandle);\n this.materialHandle = undefined;\n }\n this.removeElement(this.firstHandle);\n this.firstHandle = undefined;\n if (type !== 'Default') {\n if (type === 'Range') {\n this.removeElement(this.secondHandle);\n this.secondHandle = undefined;\n }\n this.removeElement(this.rangeBar);\n this.rangeBar = undefined;\n }\n if (this.tooltip.isVisible && !isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipElement = undefined;\n this.tooltipCollidedPosition = undefined;\n }\n if (this.limits.enabled) {\n if (type === 'MinRange' || type === 'Default') {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n this.removeElement(this.limitBarFirst);\n this.limitBarFirst = undefined;\n }\n }\n else {\n if (!isNullOrUndefined(this.limitBarSecond)) {\n this.removeElement(this.limitBarSecond);\n this.limitBarSecond = undefined;\n }\n }\n }\n this.activeHandle = 1;\n this.getThemeInitialization();\n if (this.type === 'Range') {\n this.rangeValueUpdate();\n }\n this.createRangeBar();\n if (this.limits.enabled) {\n this.createLimitBar();\n }\n this.setHandler();\n this.setOrientClass();\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n this.setValue();\n if (this.tooltip.isVisible) {\n this.renderTooltip();\n this.wireMaterialTooltipEvent(false);\n }\n this.setBarColor();\n if (args !== 'tooltip') {\n this.updateConfig();\n }\n if (this.readonly) {\n this.sliderContainer.classList.remove(classNames.readonly);\n this.setReadOnly();\n }\n };\n Slider.prototype.changeRtl = function () {\n if (!this.enableRtl && this.type === 'Range') {\n this.value = [this.handleVal2, this.handleVal1];\n }\n this.updateConfig();\n if (this.tooltip.isVisible) {\n this.tooltipObj.refresh(this.firstHandle);\n }\n if (this.showButtons) {\n var enabledRTL = this.enableRtl && this.orientation !== 'Vertical';\n attributes(enabledRTL ? this.secondBtn : this.firstBtn, { 'aria-label': 'Decrease', title: 'Decrease' });\n attributes(enabledRTL ? this.firstBtn : this.secondBtn, { 'aria-label': 'Increase', title: 'Increase' });\n }\n };\n Slider.prototype.changeOrientation = function () {\n this.changeSliderType(this.type, 'null');\n };\n Slider.prototype.updateConfig = function () {\n this.setEnableRTL();\n this.setValue();\n if (this.tooltip.isVisible) {\n this.refreshTooltip(this.tooltipTarget);\n }\n if (this.ticks.placement !== 'None') {\n if (this.ul) {\n this.removeElement(this.ul);\n this.ul = undefined;\n this.renderScale();\n }\n }\n this.limitsPropertyChange();\n };\n Slider.prototype.limitsPropertyChange = function () {\n if (this.limits.enabled) {\n if (isNullOrUndefined(this.limitBarFirst) && this.type !== 'Range') {\n this.createLimitBar();\n }\n if (isNullOrUndefined(this.limitBarFirst) && isNullOrUndefined(this.limitBarSecond) && this.type === 'Range') {\n this.createLimitBar();\n }\n this.setLimitBar();\n this.setValue();\n }\n else {\n if (!isNullOrUndefined(this.limitBarFirst)) {\n detach(this.limitBarFirst);\n }\n if (!isNullOrUndefined(this.limitBarSecond)) {\n detach(this.limitBarSecond);\n }\n }\n };\n /**\n * Get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns the string\n * @private\n */\n Slider.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Slider.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unwireEvents();\n window.removeEventListener('resize', this.onresize);\n removeClass([this.sliderContainer], [classNames.sliderDisabled]);\n this.firstHandle.removeAttribute('aria-orientation');\n if (this.type === 'Range') {\n this.secondHandle.removeAttribute('aria-orientation');\n }\n if (this.sliderContainer.parentNode) {\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n }\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n this.hiddenInput = null;\n this.sliderContainer = null;\n this.sliderTrack = null;\n this.rangeBar = null;\n this.firstHandle = null;\n this.secondHandle = null;\n this.tickElementCollection = null;\n this.ul = null;\n this.firstBtn = null;\n this.secondBtn = null;\n this.materialHandle = null;\n this.tooltipObj = null;\n this.tooltipTarget = null;\n this.limitBarFirst = null;\n this.limitBarSecond = null;\n this.firstChild = null;\n this.lastChild = null;\n this.tooltipElement = null;\n };\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {SliderModel} newProp - Specifies the new properties\n * @param {SliderModel} oldProp - Specifies the old properties\n * @returns {void}\n * @private\n */\n Slider.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n case 'value':\n if (newProp && oldProp) {\n var value = isNullOrUndefined(newProp.value) ?\n (this.type === 'Range' ? [this.min, this.max] : this.min) : newProp.value;\n this.setProperties({ 'value': value }, true);\n if (!isNullOrUndefined(oldProp.value) && oldProp.value.toString() !== value.toString()) {\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (this.type === 'Range') {\n if (isNullOrUndefined(newProp.value) || oldProp.value[1] === value[1]) {\n this.activeHandle = 1;\n }\n else {\n this.activeHandle = 2;\n }\n }\n }\n }\n break;\n case 'min':\n case 'step':\n case 'max':\n this.setMinMaxValue();\n break;\n case 'tooltip':\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.initialTooltip = true;\n this.setTooltip(prop);\n if (!this.showButtons) {\n this.wireEvents();\n }\n }\n break;\n case 'type':\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n break;\n case 'enableRtl':\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n this.changeOrientation();\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n break;\n case 'locale':\n if (this.showButtons) {\n this.buttonTitle();\n }\n break;\n case 'showButtons':\n if (newProp.showButtons) {\n this.setButtons();\n this.reposition();\n if (this.enabled && !this.readonly) {\n this.wireButtonEvt(false);\n }\n }\n else {\n if (this.firstBtn && this.secondBtn) {\n this.sliderContainer.removeChild(this.firstBtn);\n this.sliderContainer.removeChild(this.secondBtn);\n this.sliderContainer.classList.remove(classNames.sliderButtonClass);\n this.firstBtn = undefined;\n this.secondBtn = undefined;\n this.reposition();\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n break;\n case 'readonly':\n this.setReadOnly();\n break;\n case 'customValues':\n this.setValue();\n this.reposition();\n break;\n case 'colorRange':\n this.reposition();\n break;\n case 'width':\n this.setElementWidth(newProp.width);\n this.setMinMaxValue();\n if (this.limits) {\n this.limitsPropertyChange();\n }\n break;\n }\n }\n };\n Slider.prototype.setReadOnly = function () {\n if (this.readonly) {\n this.unwireEvents();\n this.sliderContainer.classList.add(classNames.readonly);\n }\n else {\n this.wireEvents();\n this.sliderContainer.classList.remove(classNames.readonly);\n }\n };\n Slider.prototype.setMinMaxValue = function () {\n var _this = this;\n this.setValue();\n this.refreshTooltip(this.tooltipTarget);\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (this.ul) {\n detach(this.ul);\n Array.prototype.forEach.call(this.sliderContainer.classList, function (className) {\n if (className.match(/e-scale-/)) {\n _this.sliderContainer.classList.remove(className);\n }\n });\n }\n }\n if (this.ticks.placement !== 'None') {\n this.renderScale();\n this.setZindex();\n }\n };\n Slider.prototype.setZindex = function () {\n this.zIndex = 6;\n if (!isNullOrUndefined(this.ticks) && this.ticks.placement !== 'None' && !isNullOrUndefined(this.ul) && !isNullOrUndefined(this.element)) {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !this.isMaterial3 && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!isNullOrUndefined(this.firstHandle)) {\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n }\n if (this.type === 'Range' && !isNullOrUndefined(this.secondHandle)) {\n this.secondHandle.style.zIndex = (this.zIndex + 4) + '';\n }\n };\n Slider.prototype.setTooltip = function (args) {\n this.changeSliderType(this.type, args);\n };\n Slider.prototype.setBarColor = function () {\n var trackPosition;\n var trackClassName;\n var child = this.sliderTrack.lastElementChild;\n while (child) {\n this.sliderTrack.removeChild(child);\n child = this.sliderTrack.lastElementChild;\n }\n for (var i = 0; i < this.colorRange.length; i++) {\n if (!isNullOrUndefined(this.colorRange[i].start) && !isNullOrUndefined(this.colorRange[i].end)) {\n if (this.colorRange[i].end > this.colorRange[i].start) {\n if (this.colorRange[i].start < this.min) {\n this.colorRange[i].start = this.min;\n }\n if (this.colorRange[i].end > this.max) {\n this.colorRange[i].end = this.max;\n }\n var startingPosition = this.checkHandlePosition(this.colorRange[i].start);\n var endPosition = this.checkHandlePosition(this.colorRange[i].end);\n var trackContainer = this.createElement('div');\n trackContainer.style.backgroundColor = this.colorRange[i].color;\n trackContainer.style.border = '1px solid ' + this.colorRange[i].color;\n if (this.orientation === 'Horizontal') {\n trackClassName = classNames.sliderHorizantalColor;\n if (this.enableRtl) {\n if (isNullOrUndefined(this.customValues)) {\n trackPosition =\n this.checkHandlePosition(this.max) - this.checkHandlePosition(this.colorRange[i].end);\n }\n else {\n trackPosition = this.checkHandlePosition(this.customValues.length - this.colorRange[i].end - 1);\n }\n }\n else {\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n }\n trackContainer.style.width = endPosition - startingPosition + 'px';\n trackContainer.style.left = trackPosition + 'px';\n }\n else {\n trackClassName = classNames.sliderVerticalColor;\n trackPosition = this.checkHandlePosition(this.colorRange[i].start);\n trackContainer.style.height = endPosition - startingPosition + 'px';\n trackContainer.style.bottom = trackPosition + 'px';\n }\n trackContainer.classList.add(trackClassName);\n this.sliderTrack.appendChild(trackContainer);\n }\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} - Returns the string\n * @private\n */\n Slider.prototype.getModuleName = function () {\n return 'slider';\n };\n __decorate([\n Property(null)\n ], Slider.prototype, \"value\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"customValues\", void 0);\n __decorate([\n Property(1)\n ], Slider.prototype, \"step\", void 0);\n __decorate([\n Property(null)\n ], Slider.prototype, \"width\", void 0);\n __decorate([\n Property(0)\n ], Slider.prototype, \"min\", void 0);\n __decorate([\n Property(100)\n ], Slider.prototype, \"max\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"readonly\", void 0);\n __decorate([\n Property('Default')\n ], Slider.prototype, \"type\", void 0);\n __decorate([\n Collection([{}], ColorRangeData)\n ], Slider.prototype, \"colorRange\", void 0);\n __decorate([\n Complex({}, TicksData)\n ], Slider.prototype, \"ticks\", void 0);\n __decorate([\n Complex({}, LimitData)\n ], Slider.prototype, \"limits\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enabled\", void 0);\n __decorate([\n Complex({}, TooltipData)\n ], Slider.prototype, \"tooltip\", void 0);\n __decorate([\n Property(false)\n ], Slider.prototype, \"showButtons\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property('Horizontal')\n ], Slider.prototype, \"orientation\", void 0);\n __decorate([\n Property('')\n ], Slider.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Slider.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"changed\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderingTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"renderedTicks\", void 0);\n __decorate([\n Event()\n ], Slider.prototype, \"tooltipChange\", void 0);\n Slider = __decorate([\n NotifyPropertyChanges\n ], Slider);\n return Slider;\n}(Component));\nexport { Slider };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\nexport var regex = {\n /* eslint-disable no-useless-escape */\n EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n /* eslint-disable-next-line security/detect-unsafe-regex */\n URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n DIGITS: new RegExp('^[0-9]*$'),\n PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n CREDITCARD: new RegExp('^\\\\d{13,16}$')\n /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n *
\n * \n * \n *
\n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n /**\n * Initializes the FormValidator.\n *\n * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n * @param {FormValidatorModel} options - Specifies the FormValidator model.\n * @private\n */\n function FormValidator(element, options) {\n var _this = _super.call(this, options, element) || this;\n _this.validated = [];\n _this.errorRules = [];\n _this.allowSubmit = false;\n _this.required = 'required';\n _this.infoElement = null;\n _this.inputElement = null;\n _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\n *\n * @default { List of validation message }\n */\n _this.defaultMessages = {\n required: 'This field is required.',\n email: 'Please enter a valid email address.',\n url: 'Please enter a valid URL.',\n date: 'Please enter a valid date.',\n dateIso: 'Please enter a valid date ( ISO ).',\n creditcard: 'Please enter valid card number',\n number: 'Please enter a valid number.',\n digits: 'Please enter only digits.',\n maxLength: 'Please enter no more than {0} characters.',\n minLength: 'Please enter at least {0} characters.',\n rangeLength: 'Please enter a value between {0} and {1} characters long.',\n range: 'Please enter a value between {0} and {1}.',\n max: 'Please enter a value less than or equal to {0}.',\n min: 'Please enter a value greater than or equal to {0}.',\n regex: 'Please enter a correct value.',\n tel: 'Please enter a valid phone number.',\n pattern: 'Please enter a correct pattern value.',\n equalTo: 'Please enter the valid match text'\n };\n if (typeof _this.rules === 'undefined') {\n _this.rules = {};\n }\n _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n if (_this.locale) {\n _this.localeFunc();\n }\n onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n element = typeof element === 'string' ? select(element, document) : element;\n // Set novalidate to prevent default HTML5 form validation\n if (_this.element != null) {\n _this.element.setAttribute('novalidate', '');\n _this.inputElements = selectAll(_this.selectQuery, _this.element);\n _this.createHTML5Rules();\n _this.wireEvents();\n }\n else {\n return undefined;\n }\n return _this;\n }\n FormValidator_1 = FormValidator;\n /* eslint-enable @typescript-eslint/no-explicit-any */\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n *\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\n // eslint-disable-next-line no-prototype-builtins\n if (this.rules.hasOwnProperty(name)) {\n extend(this.rules[\"\" + name], rules, {});\n }\n else {\n this.rules[\"\" + name] = rules;\n }\n }\n };\n /**\n * Remove validation to the corresponding field based on name attribute.\n * When no parameter is passed, remove all the validations in the form.\n *\n * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @returns {void}\n */\n FormValidator.prototype.removeRules = function (name, rules) {\n if (!name && !rules) {\n this.rules = {};\n }\n else if (this.rules[\"\" + name] && !rules) {\n delete this.rules[\"\" + name];\n }\n else if (!isNullOrUndefined(this.rules[\"\" + name] && rules)) {\n for (var i = 0; i < rules.length; i++) {\n delete this.rules[\"\" + name][rules[parseInt(i.toString(), 10)]];\n }\n }\n else {\n return;\n }\n };\n /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n *\n * @param {string} selected - Optional parameter to validate specified element.\n * @returns {boolean} - Returns form validation status.\n */\n FormValidator.prototype.validate = function (selected) {\n var rules = Object.keys(this.rules);\n if (selected && rules.length) {\n this.validateRules(selected);\n //filter the selected element it don't have any valid input element\n return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n return data.name === selected;\n }).length === 0;\n }\n else {\n this.errorRules = [];\n for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n var name_1 = rules_1[_i];\n this.validateRules(name_1);\n }\n return this.errorRules.length === 0;\n }\n };\n /**\n * Reset the value of all the fields in form.\n *\n * @returns {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement} - Returns the input element.\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /**\n * Destroy the form validator object and error elements.\n *\n * @returns {void}\n */\n FormValidator.prototype.destroy = function () {\n this.reset();\n this.unwireEvents();\n this.rules = {};\n var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element = elements_1[_i];\n detach(element);\n }\n _super.prototype.destroy.call(this);\n this.infoElement = null;\n onIntlChange.off('notifyExternalChange', this.afterLocalization);\n };\n /**\n * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'locale':\n this.localeFunc();\n break;\n }\n }\n };\n /**\n * @private\n * @returns {void}\n */\n FormValidator.prototype.localeFunc = function () {\n for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n var key = _a[_i];\n this.l10n.setLocale(this.locale);\n var value = this.l10n.getConstant(key);\n this.localyMessage[\"\" + key] = value;\n }\n };\n /**\n * @private\n * @returns {string} - Returns the component name.\n */\n FormValidator.prototype.getModuleName = function () {\n return 'formvalidator';\n };\n /**\n * @param {any} args - Specifies the culture name.\n * @returns {void}\n * @private\n */\n FormValidator.prototype.afterLocalization = function (args) {\n this.locale = args.locale;\n this.localeFunc();\n };\n /**\n * Allows you to refresh the form validator base events to the elements inside the form.\n *\n * @returns {void}\n */\n FormValidator.prototype.refresh = function () {\n this.unwireEvents();\n this.inputElements = selectAll(this.selectQuery, this.element);\n this.wireEvents();\n };\n FormValidator.prototype.clearForm = function () {\n this.errorRules = [];\n this.validated = [];\n var elements = selectAll(this.selectQuery, this.element);\n for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n var element = elements_2[_i];\n var input = element;\n input.removeAttribute('aria-invalid');\n var inputParent = input.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (input.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.remove(this.errorClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') ||\n grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove(this.errorClass);\n }\n else {\n input.classList.remove(this.errorClass);\n }\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (input.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') ||\n grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.remove(this.validClass);\n }\n else {\n input.classList.remove(this.validClass);\n }\n }\n };\n FormValidator.prototype.createHTML5Rules = function () {\n var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n 'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n 'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n 'data-val-creditcard', 'data-val-phone'];\n var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n // Default attribute rules\n var allRule = {};\n for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n var rule = defRules_1[_b];\n if (input.getAttribute(rule) !== null) {\n switch (rule) {\n case 'required':\n this.defRule(input, allRule, rule, input.required);\n break;\n case 'data-validation':\n rule = input.getAttribute(rule);\n this.defRule(input, allRule, rule, true);\n break;\n case 'type':\n if (acceptedTypes.indexOf(input.type) !== -1) {\n this.defRule(input, allRule, input.type, true);\n }\n break;\n case 'rangeLength':\n case 'range':\n this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n break;\n case 'equalTo':\n {\n var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\n }\n break;\n default:\n if (input.getAttribute('data-val') === 'true') {\n this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n }\n else {\n this.defRule(input, allRule, rule, input.getAttribute(rule));\n }\n }\n }\n }\n //adding pattern type validation\n if (Object.keys(allRule).length !== 0) {\n this.addRules(input.name, allRule);\n }\n }\n };\n FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n var annotationRule = ruleName.split('-');\n var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n var ruleFirstName = annotationRule[annotationRule.length - 1];\n var ruleSecondName = annotationRule[annotationRule.length - 2];\n if (rulesList.indexOf(ruleFirstName) !== -1) {\n switch (ruleFirstName) {\n case 'required':\n this.defRule(input, ruleCon, 'required', value);\n break;\n case 'creditcard':\n this.defRule(input, ruleCon, 'creditcard', value);\n break;\n case 'phone':\n this.defRule(input, ruleCon, 'tel', value);\n break;\n }\n }\n else if (rulesList.indexOf(ruleSecondName) !== -1) {\n switch (ruleSecondName) {\n case 'maxlength':\n this.defRule(input, ruleCon, 'maxLength', value);\n break;\n case 'minlength':\n this.defRule(input, ruleCon, 'minLength', value);\n break;\n case 'range':\n {\n var minvalue = input.getAttribute('data-val-range-min');\n var maxvalue = input.getAttribute('data-val-range-max');\n this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n }\n break;\n case 'equalto':\n {\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n }\n break;\n case 'regex':\n this.defRule(input, ruleCon, 'regex', value);\n break;\n }\n }\n };\n FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n var message = input.getAttribute('data-' + ruleName + '-message');\n var annotationMessage = input.getAttribute('data-val-' + ruleName);\n var customMessage;\n if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n this.getInputElement(input.name);\n customMessage = this.getErrorMessage(this.rules[input.name][\"\" + ruleName], ruleName);\n }\n if (message) {\n value = [value, message];\n }\n else if (annotationMessage) {\n value = [value, annotationMessage];\n }\n else if (customMessage) {\n value = [value, customMessage];\n }\n ruleCon[\"\" + ruleName] = value;\n };\n // Wire events to the form elements\n FormValidator.prototype.wireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n if (FormValidator_1.isCheckable(input)) {\n EventHandler.add(input, 'click', this.clickHandler, this);\n }\n else if (input.tagName === 'SELECT') {\n EventHandler.add(input, 'change', this.changeHandler, this);\n }\n else {\n EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n }\n }\n EventHandler.add(this.element, 'submit', this.submitHandler, this);\n EventHandler.add(this.element, 'reset', this.resetHandler, this);\n };\n // UnWire events to the form elements\n FormValidator.prototype.unwireEvents = function () {\n for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n var input = _a[_i];\n EventHandler.clearEvents(input);\n }\n EventHandler.remove(this.element, 'submit', this.submitHandler);\n EventHandler.remove(this.element, 'reset', this.resetHandler);\n };\n // Handle input element focusout event\n FormValidator.prototype.focusOutHandler = function (e) {\n this.trigger('focusout', e);\n //FormValidator.triggerCallback(this.focusout, e);\n var element = e.target;\n if (this.rules[element.name]) {\n if (this.rules[element.name][this.required] || element.value.length > 0) {\n this.validate(element.name);\n }\n else if (this.validated.indexOf(element.name) === -1) {\n this.validated.push(element.name);\n }\n }\n };\n // Handle input element keyup event\n FormValidator.prototype.keyUpHandler = function (e) {\n this.trigger('keyup', e);\n var element = e.target;\n // List of keys need to prevent while validation\n var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n return;\n }\n if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n this.validate(element.name);\n }\n };\n // Handle input click event\n FormValidator.prototype.clickHandler = function (e) {\n this.trigger('click', e);\n var element = e.target;\n // If element type is not submit allow validation\n if (element.type !== 'submit') {\n this.validate(element.name);\n }\n else if (element.getAttribute('formnovalidate') !== null) {\n // Prevent form validation, if submit button has formnovalidate attribute\n this.allowSubmit = true;\n }\n };\n // Handle input change event\n FormValidator.prototype.changeHandler = function (e) {\n this.trigger('change', e);\n var element = e.target;\n this.validate(element.name);\n };\n // Handle form submit event\n FormValidator.prototype.submitHandler = function (e) {\n this.trigger('submit', e);\n //FormValidator.triggerCallback(this.submit, e);\n // Prevent form submit if validation failed\n if (!this.allowSubmit && !this.validate()) {\n e.preventDefault();\n }\n else {\n this.allowSubmit = false;\n }\n };\n // Handle form reset\n FormValidator.prototype.resetHandler = function () {\n this.clearForm();\n };\n // Validate each rule based on input element name\n FormValidator.prototype.validateRules = function (name) {\n if (!this.rules[\"\" + name]) {\n return;\n }\n var rules = Object.keys(this.rules[\"\" + name]);\n var hiddenType = false;\n var validateHiddenType = false;\n var vhPos = rules.indexOf('validateHidden');\n var hPos = rules.indexOf('hidden');\n this.getInputElement(name);\n if (hPos !== -1) {\n hiddenType = true;\n }\n if (vhPos !== -1) {\n validateHiddenType = true;\n }\n if (!hiddenType || (hiddenType && validateHiddenType)) {\n if (vhPos !== -1) {\n rules.splice(vhPos, 1);\n }\n if (hPos !== -1) {\n rules.splice((hPos - 1), 1);\n }\n this.getErrorElement(name);\n for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n var rule = rules_2[_i];\n var errorMessage = this.getErrorMessage(this.rules[\"\" + name][\"\" + rule], rule);\n var errorRule = { name: name, message: errorMessage };\n var eventArgs = {\n inputName: name,\n element: this.inputElement,\n message: errorMessage\n };\n if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n this.removeErrorRules(name);\n this.errorRules.push(errorRule);\n // Set aria attributes to invalid elements\n this.inputElement.setAttribute('aria-invalid', 'true');\n this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.add(this.errorClass);\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') ||\n grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.errorClass);\n grandParent.classList.remove(this.validClass);\n }\n else {\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n }\n if (!this.infoElement) {\n this.createErrorElement(name, errorRule.message, this.inputElement);\n }\n else {\n this.showMessage(errorRule);\n }\n eventArgs.errorElement = this.infoElement;\n eventArgs.status = 'failure';\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.add(this.errorClass);\n inputParent.classList.remove(this.validClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') ||\n grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.errorClass);\n grandParent.classList.remove(this.validClass);\n }\n else {\n this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\n }\n this.optionalValidationStatus(name, eventArgs);\n this.trigger('validationComplete', eventArgs);\n // Set aria-required to required rule elements\n if (rule === 'required') {\n this.inputElement.setAttribute('aria-required', 'true');\n }\n break;\n }\n else {\n this.hideMessage(name);\n eventArgs.status = 'success';\n this.trigger('validationComplete', eventArgs);\n }\n }\n }\n else {\n return;\n }\n };\n // Update the optional validation status\n FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n refer.status = '';\n this.hideMessage(name);\n }\n };\n // Check the input element whether it's value satisfy the validation rule or not\n FormValidator.prototype.isValid = function (name, rule) {\n var params = this.rules[\"\" + name][\"\" + rule];\n var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n var currentRule = this.rules[\"\" + name][\"\" + rule];\n var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n this.trigger('validationBegin', args);\n if (!args.param && rule === 'required') {\n return true;\n }\n if (currentRule && typeof currentRule[0] === 'function') {\n var fn = currentRule[0];\n return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n }\n else if (FormValidator_1.isCheckable(this.inputElement)) {\n if (rule !== 'required') {\n return true;\n }\n return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n }\n else {\n return FormValidator_1.checkValidator[\"\" + rule](args);\n }\n };\n // Return default error message or custom error message\n FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n this.inputElement.getAttribute('data-' + rule + '-message') :\n (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[\"\" + rule] : this.defaultMessages[\"\" + rule];\n var formats = message.match(/{(\\d)}/g);\n if (!isNullOrUndefined(formats)) {\n for (var i = 0; i < formats.length; i++) {\n var value = ruleValue instanceof Array ? ruleValue[parseInt(i.toString(), 10)] : ruleValue;\n message = message.replace(formats[parseInt(i.toString(), 10)], value);\n }\n }\n return message;\n };\n // Create error element based on name and error message\n FormValidator.prototype.createErrorElement = function (name, message, input) {\n var errorElement = createElement(this.errorElement, {\n className: this.errorClass,\n innerHTML: message,\n attrs: { for: name }\n });\n // Create message design if errorOption is message\n if (this.errorOption === ErrorOption.Message) {\n errorElement.classList.remove(this.errorClass);\n errorElement.classList.add('e-message');\n errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n }\n errorElement.id = this.inputElement.name + '-info';\n // Append error message into MVC error message element\n if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n }\n else if (input.hasAttribute('data-msg-containerid') === true) {\n // Append error message into custom div element\n var containerId = input.getAttribute('data-msg-containerid');\n var divElement = select('#' + containerId, this.element);\n divElement.appendChild(errorElement);\n }\n else if (this.customPlacement != null) {\n // Call custom placement function if customPlacement is not null\n this.customPlacement.call(this, this.inputElement, errorElement);\n }\n else {\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n grandParent.insertBefore(errorElement, inputParent.nextSibling);\n }\n else if (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper')) {\n grandParent.parentElement.insertBefore(errorElement, grandParent.nextSibling);\n }\n else {\n inputParent.insertBefore(errorElement, this.inputElement.nextSibling);\n }\n }\n errorElement.style.display = 'block';\n this.getErrorElement(name);\n this.validated.push(name);\n this.checkRequired(name);\n };\n // Get error element by name\n FormValidator.prototype.getErrorElement = function (name) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n if (!this.infoElement) {\n this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n }\n return this.infoElement;\n };\n // Remove existing rule from errorRules object\n FormValidator.prototype.removeErrorRules = function (name) {\n for (var i = 0; i < this.errorRules.length; i++) {\n var rule = this.errorRules[parseInt(i.toString(), 10)];\n if (rule.name === name) {\n this.errorRules.splice(i, 1);\n }\n }\n };\n // Show error message to the input element\n FormValidator.prototype.showMessage = function (errorRule) {\n this.infoElement.style.display = 'block';\n this.infoElement.innerHTML = errorRule.message;\n this.checkRequired(errorRule.name);\n };\n // Hide error message based on input name\n FormValidator.prototype.hideMessage = function (name) {\n if (this.infoElement) {\n this.infoElement.style.display = 'none';\n this.removeErrorRules(name);\n var inputParent = this.inputElement.parentElement;\n var grandParent = inputParent.parentElement;\n if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') ||\n (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n inputParent.classList.add(this.validClass);\n inputParent.classList.remove(this.errorClass);\n }\n else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n grandParent.classList.add(this.validClass);\n grandParent.classList.remove(this.errorClass);\n }\n else {\n this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\n }\n this.inputElement.setAttribute('aria-invalid', 'false');\n }\n };\n // Check whether the input element have required rule and its value is not empty\n FormValidator.prototype.checkRequired = function (name) {\n if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n this.infoElement.innerHTML = this.inputElement.value;\n this.infoElement.setAttribute('aria-invalid', 'false');\n this.hideMessage(name);\n }\n };\n // Return boolean result if the input have checkable or submit types\n FormValidator.isCheckable = function (input) {\n var inputType = input.getAttribute('type');\n return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n };\n var FormValidator_1;\n // List of function to validate the rules\n FormValidator.checkValidator = {\n required: function (option) {\n return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n },\n email: function (option) {\n return regex.EMAIL.test(option.value);\n },\n url: function (option) {\n return regex.URL.test(option.value);\n },\n dateIso: function (option) {\n return regex.DATE_ISO.test(option.value);\n },\n tel: function (option) {\n return regex.PHONE.test(option.value);\n },\n creditcard: function (option) {\n return regex.CREDITCARD.test(option.value);\n },\n number: function (option) {\n return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n },\n digits: function (option) {\n return regex.DIGITS.test(option.value);\n },\n maxLength: function (option) {\n return option.value.length <= Number(option.param);\n },\n minLength: function (option) {\n return option.value.length >= Number(option.param);\n },\n rangeLength: function (option) {\n var param = option.param;\n return option.value.length >= param[0] && option.value.length <= param[1];\n },\n range: function (option) {\n var param = option.param;\n return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n },\n date: function (option) {\n if (!isNullOrUndefined(option.param) && (typeof (option.param) === 'string' && option.param !== '')) {\n var globalize = new Internationalization;\n var dateOptions = { format: option.param.toString(), type: 'dateTime', skeleton: 'yMd' };\n var dateValue = globalize.parseDate(option.value, dateOptions);\n return (!isNullOrUndefined(dateValue) && dateValue instanceof Date && !isNaN(+dateValue));\n }\n else {\n return !isNaN(new Date(option.value).getTime());\n }\n },\n max: function (option) {\n if (!isNaN(Number(option.value))) {\n // Maximum rule validation for number\n return +option.value <= +option.param;\n }\n // Maximum rule validation for date\n return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n },\n min: function (option) {\n if (!isNaN(Number(option.value))) {\n // Minimum rule validation for number\n return +option.value >= +option.param;\n }\n else if ((option.value).indexOf(',') !== -1) {\n var uNum = (option.value).replace(/,/g, '');\n return parseFloat(uNum) >= Number(option.param); // Convert option.param to a number\n }\n else {\n // Minimum rule validation for date\n return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n }\n },\n regex: function (option) {\n /* eslint-disable-next-line security/detect-non-literal-regexp */\n return new RegExp(option.param).test(option.value);\n },\n equalTo: function (option) {\n var compareTo = option.formElement.querySelector('#' + option.param);\n option.param = compareTo.value;\n return option.param === option.value;\n }\n };\n __decorate([\n Property('')\n ], FormValidator.prototype, \"locale\", void 0);\n __decorate([\n Property('e-hidden')\n ], FormValidator.prototype, \"ignore\", void 0);\n __decorate([\n Property()\n ], FormValidator.prototype, \"rules\", void 0);\n __decorate([\n Property('e-error')\n ], FormValidator.prototype, \"errorClass\", void 0);\n __decorate([\n Property('e-valid')\n ], FormValidator.prototype, \"validClass\", void 0);\n __decorate([\n Property('label')\n ], FormValidator.prototype, \"errorElement\", void 0);\n __decorate([\n Property('div')\n ], FormValidator.prototype, \"errorContainer\", void 0);\n __decorate([\n Property(ErrorOption.Label)\n ], FormValidator.prototype, \"errorOption\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"focusout\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"keyup\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"click\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"submit\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationBegin\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"validationComplete\", void 0);\n __decorate([\n Event()\n ], FormValidator.prototype, \"customPlacement\", void 0);\n FormValidator = FormValidator_1 = __decorate([\n NotifyPropertyChanges\n ], FormValidator);\n return FormValidator;\n}(Base));\nexport { FormValidator };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n *\n * @param {UploaderModel} options - Specifies the Uploader model.\n * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n * @private\n */\n function Uploader(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.initialAttr = { accept: null, multiple: false, disabled: false };\n _this.uploadedFilesData = [];\n _this.base64String = [];\n _this.isForm = false;\n _this.allTypes = false;\n _this.pausedData = [];\n _this.uploadMetaData = [];\n _this.tabIndex = '0';\n _this.btnTabIndex = '0';\n _this.disableKeyboardNavigation = false;\n _this.count = -1;\n _this.actionCompleteCount = 0;\n _this.flag = true;\n _this.selectedFiles = [];\n _this.uploaderName = 'UploadFiles';\n _this.fileStreams = [];\n _this.newFileRef = 0;\n _this.isFirstFileOnSelection = false;\n _this.dragCounter = 0;\n /**\n * Get the file item(li) which are shown in file list.\n *\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\n *\n * @private\n */\n _this.filesData = [];\n _this.uploaderOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n if (this.isReact) {\n this.reRenderFileList();\n }\n else {\n this.clearAll();\n }\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[\"\" + key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n /* istanbul ignore next */\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.internalCreateFileList(this.filesData);\n if (this.actionButtons) {\n this.removeActionButtons();\n this.renderActionButtons();\n this.checkActionButtonStatus();\n }\n }\n };\n Uploader.prototype.preRender = function () {\n this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload', invalidFileName: 'File Name is not allowed',\n dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n fileUploadCancel: 'File upload canceled', invalidFileSelection: 'Invalid files selected', totalFiles: 'Total files',\n size: 'Size'\n };\n this.l10n = new L10n('uploader', this.localeText, this.locale);\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n this.formRendered();\n this.updateHTMLAttrToElement();\n this.checkHTMLAttributes(false);\n var ejInstance = getValue('ej2_instances', this.element);\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-UPLOADER') {\n var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n if (this.element.attributes[index].nodeName !== 'id') {\n inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n }\n else if (this.element.attributes[index].nodeName === 'id') {\n inputElement.setAttribute(this.element.attributes[index].nodeName, getUniqueID('uploader'));\n }\n inputElement.innerHTML = this.element.innerHTML;\n }\n if (!inputElement.hasAttribute('name')) {\n inputElement.setAttribute('name', 'UploadFiles');\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n /* istanbul ignore next */\n if (ejInstance[0].isPureReactComponent) {\n if (!isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.name);\n }\n else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n this.element.setAttribute('name', ejInstance[0].props.id);\n }\n else {\n this.element.setAttribute('name', 'UploadFiles');\n }\n }\n if (isNullOrUndefined(this.element.getAttribute('name'))) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (!this.element.hasAttribute('type')) {\n this.element.setAttribute('type', 'file');\n }\n this.updateDirectoryAttributes();\n this.keyConfigs = {\n enter: 'enter'\n };\n if (this.element.hasAttribute('tabindex')) {\n this.tabIndex = this.element.getAttribute('tabindex');\n }\n this.browserName = Browser.info.name;\n this.uploaderName = this.element.getAttribute('name');\n };\n Uploader.prototype.formRendered = function () {\n var parentEle = closest(this.element, 'form');\n if (!isNullOrUndefined(parentEle)) {\n for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n if (parentEle.tagName === 'FORM') {\n this.isForm = true;\n this.formElement = parentEle;\n parentEle.setAttribute('enctype', 'multipart/form-data');\n parentEle.setAttribute('encoding', 'multipart/form-data');\n }\n }\n }\n };\n Uploader.prototype.getPersistData = function () {\n return this.addOnPersist(['filesData']);\n };\n /**\n * Return the module name of the component.\n *\n * @returns {string} Returns the component name.\n */\n Uploader.prototype.getModuleName = function () {\n return 'uploader';\n };\n Uploader.prototype.updateDirectoryAttributes = function () {\n if (this.directoryUpload) {\n this.element.setAttribute('directory', 'true');\n this.element.setAttribute('webkitdirectory', 'true');\n }\n else {\n this.element.removeAttribute('directory');\n this.element.removeAttribute('webkitdirectory');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @private\n * @returns {void}\n */\n Uploader.prototype.render = function () {\n this.renderBrowseButton();\n this.initializeUpload();\n this.updateHTMLAttrToWrapper();\n this.wireEvents();\n this.setMultipleSelection();\n this.setExtensions(this.allowedExtensions);\n this.setRTL();\n this.renderPreLoadFiles();\n this.setControlStatus();\n this.setCSSClass();\n };\n Uploader.prototype.renderBrowseButton = function () {\n this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n this.browseButton.setAttribute('tabindex', this.tabIndex);\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n }\n else {\n this.browseButton.appendChild(this.buttons.browse);\n }\n this.element.setAttribute('aria-label', 'Uploader');\n };\n Uploader.prototype.renderActionButtons = function () {\n this.element.setAttribute('tabindex', '-1');\n this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS,\n attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n this.actionButtons.appendChild(this.clearButton);\n this.actionButtons.appendChild(this.uploadButton);\n this.renderButtonTemplates();\n this.uploadWrapper.appendChild(this.actionButtons);\n this.browseButton.blur();\n if (!this.isPreloadFiles) {\n this.uploadButton.focus();\n }\n this.wireActionButtonEvents();\n };\n /* istanbul ignore next */\n Uploader.prototype.serverActionButtonsEventBind = function (element) {\n if (element && !this.isForm) {\n this.browseButton.blur();\n this.actionButtons = element;\n this.uploadButton = this.actionButtons.querySelector('.e-file-upload-btn');\n this.clearButton = this.actionButtons.querySelector('.e-file-clear-btn');\n this.uploadButton.focus();\n this.unwireActionButtonEvents();\n this.wireActionButtonEvents();\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.wireActionButtonEvents = function () {\n EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n };\n Uploader.prototype.unwireActionButtonEvents = function () {\n EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n };\n Uploader.prototype.removeActionButtons = function () {\n if (this.actionButtons) {\n this.unwireActionButtonEvents();\n detach(this.actionButtons);\n this.actionButtons = null;\n }\n };\n Uploader.prototype.renderButtonTemplates = function () {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.textContent);\n }\n else {\n this.browseButton.innerHTML = '';\n this.browseButton.appendChild(this.buttons.browse);\n }\n if (this.uploadButton) {\n var uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n this.buttons.upload = uploadText;\n if (typeof (this.buttons.upload) === 'string') {\n this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n }\n else {\n this.uploadButton.innerHTML = '';\n this.uploadButton.appendChild(this.buttons.upload);\n }\n }\n if (this.clearButton) {\n var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n this.buttons.clear = clearText;\n if (typeof (this.buttons.clear) === 'string') {\n this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.clearButton.textContent);\n }\n else {\n this.clearButton.innerHTML = '';\n this.clearButton.appendChild(this.buttons.clear);\n }\n }\n };\n Uploader.prototype.initializeUpload = function () {\n this.element.setAttribute('tabindex', '-1');\n var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n this.element.parentElement.insertBefore(inputWrapper, this.element);\n this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n inputWrapper.appendChild(this.element);\n this.dropAreaWrapper.appendChild(this.browseButton);\n this.dropAreaWrapper.appendChild(inputWrapper);\n this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n this.uploadWrapper.appendChild(this.dropAreaWrapper);\n this.setDropArea();\n };\n Uploader.prototype.renderPreLoadFiles = function () {\n if (this.files.length) {\n if (this.enablePersistence && this.filesData.length) {\n this.internalCreateFileList(this.filesData);\n return;\n }\n if (isNullOrUndefined(this.files[0].size)) {\n return;\n }\n this.isPreloadFiles = true;\n var files = [].slice.call(this.files);\n var filesData = [];\n if (!this.multiple) {\n this.clearData();\n files = [files[0]];\n }\n for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n var data = files_1[_i];\n var fileData = {\n name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n rawFile: '',\n size: data.size,\n status: this.localizedTexts('uploadSuccessMessage'),\n type: data.type,\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '2'\n };\n filesData.push(fileData);\n this.filesData.push(fileData);\n }\n this.internalCreateFileList(filesData);\n if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n if (this.sequentialUpload) {\n this.count = this.filesData.length - 1;\n }\n this.isPreloadFiles = false;\n }\n };\n Uploader.prototype.checkActionButtonStatus = function () {\n if (this.actionButtons) {\n var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n else {\n this.uploadButton.removeAttribute('disabled');\n }\n }\n };\n Uploader.prototype.setDropArea = function () {\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (this.dropArea) {\n this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n select(this.dropArea, document);\n var element = this.element;\n var enableDropText = false;\n while (element.parentNode) {\n element = element.parentNode;\n if (element === this.dropZoneElement) {\n enableDropText = true;\n if (!dropTextArea) {\n this.createDropTextHint();\n }\n else {\n dropTextArea.innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n }\n if (!enableDropText && dropTextArea) {\n remove(dropTextArea);\n }\n }\n else if (!isNullOrUndefined(this.uploaderOptions) && this.uploaderOptions.dropArea === undefined) {\n this.createDropTextHint();\n this.dropZoneElement = this.uploadWrapper;\n this.setProperties({ dropArea: this.uploadWrapper }, true);\n }\n this.bindDropEvents();\n };\n Uploader.prototype.updateDropArea = function () {\n if (this.dropArea) {\n this.setDropArea();\n }\n else {\n this.dropZoneElement = null;\n var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n if (dropTextArea) {\n remove(dropTextArea);\n }\n }\n };\n Uploader.prototype.createDropTextHint = function () {\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n };\n Uploader.prototype.updateHTMLAttrToElement = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) < 0) {\n this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n };\n Uploader.prototype.updateHTMLAttrToWrapper = function () {\n if (!isNullOrUndefined(this.htmlAttributes)) {\n for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n var pro = _a[_i];\n if (wrapperAttr.indexOf(pro) > -1) {\n if (pro === 'class') {\n var updatedClassValues = (this.htmlAttributes[\"\" + pro].replace(/\\s+/g, ' ')).trim();\n if (updatedClassValues !== '') {\n addClass([this.uploadWrapper], updatedClassValues.split(' '));\n }\n }\n else if (pro === 'style') {\n var uploadStyle = this.uploadWrapper.getAttribute(pro);\n uploadStyle = !isNullOrUndefined(uploadStyle) ? (uploadStyle + this.htmlAttributes[\"\" + pro]) :\n this.htmlAttributes[\"\" + pro];\n this.uploadWrapper.setAttribute(pro, uploadStyle);\n }\n else {\n this.uploadWrapper.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n }\n }\n }\n }\n };\n Uploader.prototype.setMultipleSelection = function () {\n if (this.multiple && !this.element.hasAttribute('multiple')) {\n var newAttr = document.createAttribute('multiple');\n newAttr.value = 'multiple';\n this.element.setAttributeNode(newAttr);\n }\n else if (!this.multiple) {\n this.element.removeAttribute('multiple');\n }\n };\n Uploader.prototype.checkAutoUpload = function (fileData) {\n if (this.autoUpload) {\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.sequenceUpload(fileData);\n }\n else {\n this.upload(fileData);\n }\n this.removeActionButtons();\n }\n else if (!this.actionButtons) {\n this.renderActionButtons();\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.sequenceUpload = function (fileData) {\n if (this.filesData.length - fileData.length === 0 ||\n this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n if (this.multiple || this.count < 0) {\n ++this.count;\n }\n var isFileListCreated = this.showFileList ? false : true;\n if (typeof this.filesData[this.count] === 'object') {\n this.isFirstFileOnSelection = false;\n this.upload(this.filesData[this.count], isFileListCreated);\n if (this.filesData[this.count].statusCode === '0') {\n this.sequenceUpload(fileData);\n }\n }\n else {\n --this.count;\n }\n }\n };\n Uploader.prototype.setCSSClass = function (oldCSSClass) {\n var updatedOldCssClass = oldCSSClass;\n if (!isNullOrUndefined(oldCSSClass)) {\n updatedOldCssClass = (oldCSSClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(oldCSSClass) && updatedOldCssClass !== '') {\n removeClass([this.uploadWrapper], updatedOldCssClass.split(' '));\n }\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n }\n if (!isNullOrUndefined(this.cssClass) && updatedCssClassValue !== '') {\n addClass([this.uploadWrapper], updatedCssClassValue.split(updatedCssClassValue.indexOf(',') > -1 ? ',' : ' '));\n }\n };\n Uploader.prototype.wireEvents = function () {\n EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n EventHandler.add(document, 'click', this.removeFocus, this);\n this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n };\n Uploader.prototype.unWireEvents = function () {\n EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n EventHandler.remove(this.element, 'change', this.onSelectFiles);\n EventHandler.remove(document, 'click', this.removeFocus);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (this.keyboardModule) {\n this.keyboardModule.destroy();\n }\n };\n Uploader.prototype.resetForm = function () {\n this.clearAll();\n };\n Uploader.prototype.keyActionHandler = function (e) {\n var targetElement = e.target;\n switch (e.action) {\n case 'enter':\n if (e.target === this.clearButton) {\n this.clearButtonClick();\n }\n else if (e.target === this.uploadButton) {\n this.uploadButtonClick();\n }\n else if (e.target === this.browseButton) {\n this.browseButtonClick();\n }\n else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n var metaData = this.getCurrentMetaData(null, e);\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pauseUpload');\n this.abortUpload(metaData, false);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n this.resumeUpload(this.getCurrentMetaData(null, e), e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n var metaData = this.getCurrentMetaData(null, e);\n if (!isNullOrUndefined(metaData)) {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n else {\n var target = e.target.parentElement;\n var fileData = this.filesData[this.fileList.indexOf(target)];\n this.retry(fileData);\n }\n }\n else {\n this.removeFiles(e);\n if (!targetElement.classList.contains(ABORT_ICON)) {\n this.browseButton.focus();\n }\n }\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n };\n Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n var fileData;\n var targetMetaData;\n if (isNullOrUndefined(fileInfo)) {\n var target = e.target.parentElement;\n fileData = this.filesData[this.fileList.indexOf(target)];\n }\n else {\n fileData = fileInfo;\n }\n for (var i = 0; i < this.uploadMetaData.length; i++) {\n if (this.uploadMetaData[i].file.name === fileData.name) {\n targetMetaData = this.uploadMetaData[i];\n }\n }\n return targetMetaData;\n };\n Uploader.prototype.removeFocus = function () {\n if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n document.activeElement.blur();\n this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n }\n };\n Uploader.prototype.browseButtonClick = function () {\n this.element.click();\n };\n Uploader.prototype.uploadButtonClick = function () {\n if (this.sequentialUpload) {\n this.sequenceUpload(this.filesData);\n }\n else {\n this.upload(this.filesData);\n }\n };\n Uploader.prototype.clearButtonClick = function () {\n this.clearAll();\n /* istanbul ignore next */\n if (this.sequentialUpload) {\n this.count = -1;\n }\n this.actionCompleteCount = 0;\n };\n Uploader.prototype.bindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n }\n };\n Uploader.prototype.unBindDropEvents = function () {\n if (this.dropZoneElement) {\n EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n }\n };\n Uploader.prototype.onDragEnter = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\n this.dragCounter = this.dragCounter + 1;\n e.preventDefault();\n e.stopPropagation();\n };\n Uploader.prototype.onDragLeave = function () {\n if (!this.enabled) {\n return;\n }\n this.dragCounter = this.dragCounter - 1;\n if (!this.dragCounter) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n }\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n if (this.dropEffect !== 'Default') {\n e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n }\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.dropElement = function (e) {\n this.dragCounter = 0;\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n this.onSelectFiles(e);\n e.preventDefault();\n e.stopPropagation();\n };\n /* istanbul ignore next */\n Uploader.prototype.onPasteFile = function (event) {\n var item = event.clipboardData.items;\n if (event.type === 'paste' && this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = event.clipboardData.files;\n }\n if (item.length !== 1 && !this.multiple) {\n return;\n }\n for (var file = 0; file < item.length; file++) {\n var pasteFile = [].slice.call(item)[file];\n if ((pasteFile.kind === 'file') || pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n }\n }\n };\n Uploader.prototype.getSelectedFiles = function (index) {\n var data = [];\n var liElement = this.fileList[index];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < index; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n for (var j = startIndex; j < (startIndex + nameElements); j++) {\n data.push(allFiles[j]);\n }\n return data;\n };\n Uploader.prototype.removeFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var selectedElement = args.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var liElement = this.fileList[index];\n var formUpload = this.isFormUpload();\n var fileData = formUpload ? this.getSelectedFiles(index) : this.getFilesInArray(this.filesData[index]);\n if (isNullOrUndefined(fileData)) {\n return;\n }\n if (args.target.classList.contains(ABORT_ICON) && !formUpload) {\n fileData[0].statusCode = '5';\n if (!isNullOrUndefined(liElement)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n this.uploadSequential();\n }\n if (!(liElement.classList.contains(RESTRICT_RETRY))) {\n this.checkActionComplete(true);\n }\n }\n else if (!closest(args.target, '.' + SPINNER_PANE)) {\n this.remove(fileData, false, false, true, args);\n }\n this.checkActionButtonStatus();\n };\n Uploader.prototype.removeFilesData = function (file, customTemplate) {\n var index;\n if (customTemplate) {\n if (!this.showFileList) {\n index = this.filesData.indexOf(file);\n this.filesData.splice(index, 1);\n }\n return;\n }\n var selectedElement = this.getLiElement(file);\n if (isNullOrUndefined(selectedElement)) {\n return;\n }\n this.element.value = '';\n detach(selectedElement);\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n this.removeActionButtons();\n }\n if (this.sequentialUpload) {\n /* istanbul ignore next */\n if (index <= this.count) {\n --this.count;\n }\n }\n };\n Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n var _this = this;\n var selectedFiles = file;\n var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n e.cancel = true;\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n });\n }\n else {\n _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n }\n };\n ajax.onLoad = function (e) {\n _this.removeCompleted(e, selectedFiles, custom);\n return {};\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.removeFailed(e, selectedFiles, custom);\n return {};\n };\n ajax.send(formData);\n };\n Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n /* istanbul ignore next */\n var name = this.element.getAttribute('name');\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name, selectedFiles.name);\n }\n this.updateFormData(formData, eventArgs.customFormData);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateFormData = function (formData, customData) {\n if (customData.length > 0 && customData[0]) {\n var _loop_1 = function (i) {\n var data = customData[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[\"\" + e];\n });\n formData.append(Object.keys(data)[0], value);\n };\n for (var i = 0; i < customData.length; i++) {\n _loop_1(i);\n }\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n if (currentRequest.length > 0 && currentRequest[0]) {\n var _loop_2 = function (i) {\n var data = currentRequest[i];\n // eslint-disable-next-line @typescript-eslint/tslint/config\n var value = Object.keys(data).map(function (e) {\n return data[\"\" + e];\n });\n request.setRequestHeader(Object.keys(data)[0], value);\n };\n for (var i = 0; i < currentRequest.length; i++) {\n _loop_2(i);\n }\n }\n };\n Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n };\n this.trigger('success', args);\n this.removeFilesData(files, customTemplate);\n var index = this.uploadedFilesData.indexOf(files);\n this.uploadedFilesData.splice(index, 1);\n this.trigger('change', { files: this.uploadedFilesData });\n }\n else {\n this.removeFailed(e, files, customTemplate);\n }\n };\n Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var args = {\n e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n };\n if (!customTemplate) {\n var index = this.filesData.indexOf(files);\n var rootElement = this.fileList[index];\n if (rootElement) {\n rootElement.classList.remove(UPLOAD_SUCCESS);\n rootElement.classList.add(UPLOAD_FAILED);\n var statusElement = rootElement.querySelector('.' + STATUS);\n if (statusElement) {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(UPLOAD_FAILED);\n }\n }\n this.checkActionButtonStatus();\n }\n this.trigger('failure', args);\n var liElement = this.getLiElement(files);\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getFilesFromFolder = function (event) {\n this.filesEntries = [];\n var items = this.multiple ?\n event.dataTransfer.items : [event.dataTransfer.items[0]];\n var validDirectoryUpload = this.checkDirectoryUpload(items);\n if (!validDirectoryUpload) {\n return;\n }\n var _loop_3 = function (i) {\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n (item).file(function (fileObj) {\n var path = item.fullPath;\n files_2.push({ 'path': path, 'file': fileObj });\n });\n this_1.renderSelectedFiles(event, files_2, true);\n }\n else if (item.isDirectory) {\n this_1.traverseFileTree(item, event);\n }\n };\n var this_1 = this;\n for (var i = 0; i < items.length; i++) {\n _loop_3(i);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.checkDirectoryUpload = function (items) {\n for (var i = 0; items && i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n var directoryReader = item.createReader();\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i], event);\n }\n _this.pushFilesEntries(event);\n if (entries.length) {\n _this.readFileFromDirectory(directoryReader);\n }\n });\n };\n Uploader.prototype.pushFilesEntries = function (event) {\n var _this = this;\n var files = [];\n var _loop_4 = function (i) {\n this_2.filesEntries[i].file(function (fileObj) {\n if (_this.filesEntries.length) {\n var path = _this.filesEntries[i].fullPath;\n files.push({ 'path': path, 'file': fileObj });\n if (i === _this.filesEntries.length - 1) {\n _this.filesEntries = [];\n _this.renderSelectedFiles(event, files, true);\n }\n }\n });\n };\n var this_2 = this;\n for (var i = 0; i < this.filesEntries.length; i++) {\n _loop_4(i);\n }\n };\n Uploader.prototype.onSelectFiles = function (args) {\n if (!this.enabled) {\n return;\n }\n var targetFiles;\n /* istanbul ignore next */\n if (args.type === 'drop') {\n if (this.directoryUpload) {\n this.getFilesFromFolder(args);\n }\n else {\n var files = this.sortFilesList = args.dataTransfer.files;\n if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n this.element.files = files;\n }\n if (files.length > 0) {\n targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n this.renderSelectedFiles(args, targetFiles);\n }\n }\n }\n else {\n targetFiles = [].slice.call(args.target.files);\n this.renderSelectedFiles(args, targetFiles);\n }\n if (this.isAngular || this.isReact) {\n args.stopPropagation();\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.getBase64 = function (file) {\n return new Promise(function (resolve, reject) {\n var fileReader = new FileReader();\n fileReader.readAsDataURL(file);\n fileReader.onload = function () { return resolve(fileReader.result); };\n fileReader.onerror = function (error) { return reject(error); };\n });\n };\n /* istanbul ignore next */\n /* tslint:ignore */\n Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n isModified: false,\n modifiedFilesData: [],\n progressInterval: '',\n isCanceled: false,\n currentRequest: null,\n customFormData: null\n };\n /* istanbul ignore next */\n if (targetFiles.length < 1) {\n eventArgs.isCanceled = true;\n this.trigger('selected', eventArgs);\n return;\n }\n this.flag = true;\n var fileData = [];\n if (!this.multiple) {\n this.clearData(true);\n this.actionCompleteCount = 0;\n targetFiles = [targetFiles[0]];\n }\n for (var i = 0; i < targetFiles.length; i++) {\n var file = directory ? targetFiles[i].file : targetFiles[i];\n this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n }\n eventArgs.filesData = fileData;\n if (this.allowedExtensions.indexOf('*') > -1) {\n this.allTypes = true;\n }\n if (this.enableHtmlSanitizer) {\n for (var i = 0; i < fileData.length; i++) {\n var sanitizeFile = SanitizeHtmlHelper.beforeSanitize();\n var sanitizeFileName = SanitizeHtmlHelper.serializeValue(sanitizeFile, fileData[parseInt(i.toString(), 10)].name);\n var currentFileName = fileData[parseInt(i.toString(), 10)].name;\n var isUTF8 = false;\n for (var i_1 = 0; i_1 < currentFileName.length; i_1++) {\n if (currentFileName.charCodeAt(i_1) > 127) {\n isUTF8 = true;\n break;\n }\n }\n var htmlTagRegex = /<([a-z][a-z0-9]*)\\b[^>]*>(.*?)<\\/\\1>/i;\n var hasHTMLString = htmlTagRegex.test(currentFileName);\n if ((sanitizeFileName !== fileData[parseInt(i.toString(), 10)].name) && !(isUTF8 && !hasHTMLString)) {\n var encodedFileName = targetFiles[parseInt(i.toString(), 10)].name.replace(/[\\u00A0-\\u9999<>\\\\&]/g, function (i) {\n return '&#' + i.charCodeAt(0) + ';';\n });\n fileData[parseInt(i.toString(), 10)].name = encodedFileName;\n fileData[parseInt(i.toString(), 10)].status = this.localizedTexts('invalidFileName');\n fileData[parseInt(i.toString(), 10)].statusCode = '0';\n }\n }\n }\n if (!this.allTypes) {\n fileData = this.checkExtension(fileData);\n }\n this.trigger('selected', eventArgs, function (eventArgs) {\n _this._internalRenderSelect(eventArgs, fileData);\n });\n };\n Uploader.prototype.updateInitialFileDetails = function (args, targetFiles, file, i, fileData, directory, paste) {\n var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n var fileDetails = {\n name: fileName,\n rawFile: file,\n size: file.size,\n status: this.localizedTexts('readyToUploadMessage'),\n type: this.getFileType(file.name),\n validationMessages: this.validatedFileSize(file.size),\n statusCode: '1',\n id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n };\n /* istanbul ignore next */\n if (paste) {\n fileDetails.fileSource = 'paste';\n }\n fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n fileDetails.statusCode = '0';\n }\n fileData.push(fileDetails);\n };\n Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n if (!eventArgs.cancel) {\n /* istanbul ignore next */\n this.selectedFiles = this.selectedFiles.concat(fileData);\n this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n if (this.showFileList) {\n if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n for (var j = 0; j < eventArgs.modifiedFilesData.length; j++) {\n for (var k = 0; k < fileData.length; k++) {\n if (eventArgs.modifiedFilesData[j].id === fileData[k].id) {\n eventArgs.modifiedFilesData[j].rawFile = fileData[k].rawFile;\n }\n }\n }\n var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n this.checkExtension(eventArgs.modifiedFilesData);\n this.updateSortedFileList(dataFiles);\n this.filesData = this.filesData.concat(dataFiles);\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.internalCreateFileList(fileData);\n if (this.autoUpload && this.sequenceUpload && this.sequentialUpload && this.filesData.length > 0 && this.filesData[this.filesData.length - 1].statusCode !== '2' && this.filesData[this.filesData.length - 1].statusCode !== '0') {\n this.filesData = this.filesData.concat(fileData);\n return;\n }\n this.filesData = this.filesData.concat(fileData);\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(fileData);\n }\n }\n if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n this.progressInterval = eventArgs.progressInterval;\n }\n }\n else {\n this.filesData = this.filesData.concat(fileData);\n if (this.autoUpload) {\n this.upload(this.filesData, true);\n }\n }\n for (var item = 0; item < this.filesData.length; item++) {\n if (this.filesData[item].statusCode === '0') {\n this.checkActionComplete(true);\n }\n }\n this.isFirstFileOnSelection = true;\n }\n };\n Uploader.prototype.allowUpload = function () {\n var allowFormUpload = false;\n if (this.isForm && (!isNullOrUndefined(this.asyncSettings.saveUrl) && this.asyncSettings.saveUrl !== '')) {\n allowFormUpload = true;\n }\n return allowFormUpload;\n };\n Uploader.prototype.isFormUpload = function () {\n var isFormUpload = false;\n if (this.isForm && ((isNullOrUndefined(this.asyncSettings.saveUrl) || this.asyncSettings.saveUrl === '')\n && (isNullOrUndefined(this.asyncSettings.removeUrl) || this.asyncSettings.removeUrl === ''))) {\n isFormUpload = true;\n }\n return isFormUpload;\n };\n Uploader.prototype.clearData = function (singleUpload) {\n if (!isNullOrUndefined(this.listParent)) {\n detach(this.listParent);\n this.listParent = null;\n }\n if (this.browserName !== 'msie' && !singleUpload) {\n this.element.value = '';\n }\n this.fileList = [];\n this.filesData = [];\n this.removeActionButtons();\n };\n Uploader.prototype.updateSortedFileList = function (filesData) {\n var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n var added = -1;\n if (this.listParent) {\n for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n var liElement = this.listParent.querySelectorAll('li')[i];\n previousListClone.appendChild(liElement.cloneNode(true));\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n this.createParentUL();\n for (var index = 0; index < filesData.length; index++) {\n for (var j = 0; j < this.filesData.length; j++) {\n if (this.filesData[j].name === filesData[index].name) {\n this.listParent.appendChild(oldList[j]);\n EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n this.fileList.push(oldList[j]);\n added = index;\n }\n }\n if (added !== index) {\n this.internalCreateFileList([filesData[index]]);\n }\n }\n }\n else {\n this.internalCreateFileList(filesData);\n }\n };\n Uploader.prototype.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\n };\n Uploader.prototype.checkExtension = function (files) {\n var dropFiles = files;\n if (!this.isBlank(this.allowedExtensions)) {\n var allowedExtensions = [];\n var extensions = this.allowedExtensions.split(',');\n for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n var extension = extensions_1[_i];\n allowedExtensions.push(extension.trim().toLocaleLowerCase());\n }\n for (var i = 0; i < files.length; i++) {\n var checkFileType = files[i].type.indexOf('.') !== -1 ?\n files[i].type.replace('.', '') : files[i].type;\n if (allowedExtensions.indexOf(('.' + checkFileType).toLocaleLowerCase()) === -1) {\n files[i].status = this.localizedTexts('invalidFileType');\n files[i].statusCode = '0';\n }\n }\n }\n return dropFiles;\n };\n Uploader.prototype.validatedFileSize = function (fileSize) {\n var minSizeError = '';\n var maxSizeError = '';\n if (fileSize < this.minFileSize) {\n minSizeError = this.localizedTexts('invalidMinFileSize');\n }\n else if (fileSize > this.maxFileSize) {\n maxSizeError = this.localizedTexts('invalidMaxFileSize');\n }\n else {\n minSizeError = '';\n maxSizeError = '';\n }\n var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n return errorMessage;\n };\n Uploader.prototype.isPreLoadFile = function (fileData) {\n var isPreload = false;\n for (var i = 0; i < this.files.length; i++) {\n if (this.files[i].name === fileData.name.slice(0, fileData.name.lastIndexOf('.')) &&\n this.files[i].type === fileData.type) {\n isPreload = true;\n }\n }\n return isPreload;\n };\n Uploader.prototype.createCustomfileList = function (fileData) {\n this.createParentUL();\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, listElement);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: listElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(listElement);\n this.fileList.push(listElement);\n }\n this.renderReactTemplates();\n };\n Uploader.prototype.createParentUL = function () {\n if (isNullOrUndefined(this.listParent)) {\n this.listParent = this.createElement('ul', { className: LIST_PARENT });\n this.uploadWrapper.appendChild(this.listParent);\n }\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formFileList = function (fileData, files) {\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var statusMessage;\n for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n var listItem = fileData_2[_i];\n var fileNameEle = this.createElement('span', { className: FILE_NAME });\n fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileTypeEle.innerHTML = '.' + fileType;\n if (!fileType) {\n fileTypeEle.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n fileContainer.appendChild(fileNameEle);\n fileContainer.appendChild(fileTypeEle);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileTypeEle);\n rtlContainer.appendChild(fileNameEle);\n fileContainer.appendChild(rtlContainer);\n }\n this.truncateName(fileNameEle);\n statusMessage = this.formValidateFileInfo(listItem, fileList);\n }\n fileList.appendChild(fileContainer);\n this.setListToFileInfo(fileData, fileList);\n var index = this.listParent.querySelectorAll('li').length;\n var infoEle = this.createElement('span');\n if (fileList.classList.contains(INVALID_FILE)) {\n infoEle.classList.add(STATUS);\n infoEle.classList.add(INVALID_FILE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n this.createFormInput(fileData);\n }\n fileContainer.appendChild(infoEle);\n if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n fileList.appendChild(fileContainer);\n fileList.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n iconElement.classList.add(REMOVE_ICON);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: this.mergeFileInfo(fileData, fileList),\n index: index,\n isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n };\n Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n var statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n this.addInvalidClass(fileList);\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n this.addInvalidClass(fileList);\n statusMessage = typeValidationMessage;\n }\n return statusMessage;\n };\n Uploader.prototype.addInvalidClass = function (fileList) {\n fileList.classList.add(INVALID_FILE);\n };\n Uploader.prototype.createFormInput = function (fileData) {\n if (this.browserName !== 'safari') {\n var inputElement = this.element.cloneNode(true);\n inputElement.classList.add(HIDDEN_INPUT);\n for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n var listItem = fileData_3[_i];\n listItem.input = inputElement;\n }\n inputElement.setAttribute('id', getUniqueID('hiddenUploader'));\n inputElement.setAttribute('name', this.uploaderName);\n this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n this.element.value = '';\n }\n }\n };\n Uploader.prototype.getFileSize = function (fileData) {\n var fileSize = 0;\n for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n var file = fileData_4[_i];\n fileSize += file.size;\n }\n return fileSize;\n };\n Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n var result = {\n name: '',\n rawFile: '',\n size: 0,\n status: '',\n type: '',\n validationMessages: { minSize: '', maxSize: '' },\n statusCode: '1',\n list: fileList\n };\n var fileNames = [];\n var type = '';\n for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n var listItem = fileData_5[_i];\n fileNames.push(listItem.name);\n type = listItem.type;\n }\n result.name = fileNames.join(', ');\n result.size = this.getFileSize(fileData);\n result.type = type;\n result.status = this.statusForFormUpload(fileData, fileList);\n return result;\n };\n Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n var isValid = true;\n var statusMessage;\n for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n var listItem = fileData_6[_i];\n statusMessage = listItem.status;\n var validationMessages = this.validatedFileSize(listItem.size);\n if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n isValid = false;\n statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n }\n var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n isValid = false;\n statusMessage = typeValidationMessage;\n }\n }\n if (!isValid) {\n fileList.classList.add(INVALID_FILE);\n statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n }\n else {\n statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n + this.localizedTexts('size') + ': ' +\n this.bytesToSize(this.getFileSize(fileData));\n }\n return statusMessage;\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n var fileList = this.createElement('li', { className: FILE });\n fileList.setAttribute('data-files-count', fileData.length + '');\n this.setListToFileInfo(fileData, fileList);\n var result = this.mergeFileInfo(fileData, fileList);\n fileList.setAttribute('data-file-name', result.name);\n this.uploadTemplateFn = this.templateComplier(this.template);\n var liTempCompiler = this.uploadTemplateFn(result, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, fileList);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, fileList);\n }\n var index = this.listParent.querySelectorAll('li').length;\n if (!fileList.classList.contains(INVALID_FILE)) {\n this.createFormInput(fileData);\n }\n var eventArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n var eventsArgs = {\n element: fileList,\n fileInfo: result,\n index: index,\n isPreload: this.isPreLoadFile(result)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(fileList);\n this.fileList.push(fileList);\n this.renderReactTemplates();\n };\n /**\n * Create the file list for specified files data.\n *\n * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n * @returns {void}\n */\n Uploader.prototype.createFileList = function (fileData) {\n this.filesData = this.filesData && this.filesData.length > 0 ? this.filesData.concat(fileData) : fileData;\n this.internalCreateFileList(fileData);\n };\n Uploader.prototype.internalCreateFileList = function (fileData) {\n this.createParentUL();\n if (this.template !== '' && !isNullOrUndefined(this.template)) {\n if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formCustomFileList(fileData, this.element.files);\n }\n else {\n this.createCustomfileList(fileData);\n }\n }\n else if (this.isFormUpload()) {\n this.uploadWrapper.classList.add(FORM_UPLOAD);\n this.formFileList(fileData, this.element.files);\n }\n else {\n for (var _i = 0, fileData_7 = fileData; _i < fileData_7.length; _i++) {\n var listItem = fileData_7[_i];\n var liElement = this.createElement('li', {\n className: FILE,\n attrs: { 'data-file-name': listItem.name, 'data-files-count': '1' }\n });\n var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n textElement.innerHTML = this.getFileNameOnly(listItem.name);\n var fileExtension = this.createElement('span', { className: FILE_TYPE });\n var fileType = this.getFileType(listItem.name);\n fileExtension.innerHTML = '.' + fileType;\n if (!fileType) {\n fileExtension.classList.add('e-hidden');\n }\n if (!this.enableRtl) {\n textContainer.appendChild(textElement);\n textContainer.appendChild(fileExtension);\n }\n else {\n var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n rtlContainer.appendChild(fileExtension);\n rtlContainer.appendChild(textElement);\n textContainer.appendChild(rtlContainer);\n }\n var fileSize = this.createElement('span', { className: FILE_SIZE });\n fileSize.innerHTML = this.bytesToSize(listItem.size);\n textContainer.appendChild(fileSize);\n var statusElement = this.createElement('span', { className: STATUS });\n textContainer.appendChild(statusElement);\n statusElement.innerHTML = listItem.status;\n liElement.appendChild(textContainer);\n var iconElement = this.createElement('span', { className: ' e-icons',\n attrs: { 'tabindex': this.btnTabIndex } });\n /* istanbul ignore next */\n if (this.browserName === 'msie') {\n iconElement.classList.add('e-msie');\n }\n iconElement.setAttribute('title', this.localizedTexts('remove'));\n liElement.appendChild(iconElement);\n EventHandler.add(iconElement, 'click', this.removeFiles, this);\n if (listItem.statusCode === '2') {\n statusElement.classList.add(UPLOAD_SUCCESS);\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', this.localizedTexts('delete'));\n }\n else if (listItem.statusCode !== '1') {\n statusElement.classList.remove(UPLOAD_SUCCESS);\n statusElement.classList.add(VALIDATION_FAILS);\n }\n if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n statusElement.innerHTML = '';\n }\n if (!iconElement.classList.contains(DELETE_ICON)) {\n iconElement.classList.add(REMOVE_ICON);\n }\n var index = fileData.indexOf(listItem);\n var eventArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n var eventsArgs = {\n element: liElement,\n fileInfo: listItem,\n index: index,\n isPreload: this.isPreLoadFile(listItem)\n };\n this.trigger('rendering', eventArgs);\n this.trigger('fileListRendering', eventsArgs);\n this.listParent.appendChild(liElement);\n this.fileList.push(liElement);\n this.truncateName(textElement);\n var preventActionComplete = this.flag;\n if (this.isPreLoadFile(listItem)) {\n this.flag = false;\n this.checkActionComplete(true);\n this.flag = preventActionComplete;\n }\n }\n }\n };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text = nameElement.textContent;\n nameElement.dataset.tail = text.slice(text.length - 10);\n };\n Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n var listItem = fileData_8[_i];\n listItem.list = fileList;\n }\n };\n Uploader.prototype.truncateName = function (name) {\n var nameElement = name;\n if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n /* istanbul ignore next */\n }\n else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n this.getSlicedName(nameElement);\n }\n };\n Uploader.prototype.getFileType = function (name) {\n var extension;\n var index = name.lastIndexOf('.');\n if (index >= 0) {\n extension = name.substring(index + 1);\n }\n return extension ? extension : '';\n };\n Uploader.prototype.getFileNameOnly = function (name) {\n var type = this.getFileType(name);\n var names = name.split('.' + type);\n return type = names[0];\n };\n Uploader.prototype.setInitialAttributes = function () {\n if (this.initialAttr.accept) {\n this.element.setAttribute('accept', this.initialAttr.accept);\n }\n if (this.initialAttr.disabled) {\n this.element.setAttribute('disabled', 'disabled');\n }\n if (this.initialAttr.multiple) {\n var newAttr = document.createAttribute('multiple');\n this.element.setAttributeNode(newAttr);\n }\n };\n Uploader.prototype.filterfileList = function (files) {\n var filterFiles = [];\n var li;\n for (var i = 0; i < files.length; i++) {\n li = this.getLiElement(files[i]);\n if (!isNullOrUndefined(li) && !li.classList.contains(UPLOAD_SUCCESS)) {\n filterFiles.push(files[i]);\n }\n else if (!this.showFileList && files[i].status !== 'File uploaded successfully') {\n filterFiles.push(files[i]);\n }\n }\n return filterFiles;\n };\n Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n if (updateLiStatus === void 0) { updateLiStatus = true; }\n if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n files.status = status;\n files.statusCode = statusCode;\n }\n if (updateLiStatus) {\n var li = this.getLiElement(files);\n if (!isNullOrUndefined(li)) {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n li.querySelector('.' + STATUS).textContent = status;\n }\n }\n }\n return files;\n };\n Uploader.prototype.getLiElement = function (files) {\n var index;\n for (var i = 0; i < this.filesData.length; i++) {\n if (!isNullOrUndefined(files) && ((!isNullOrUndefined(this.filesData[i].id) &&\n !isNullOrUndefined(files.id)) ? (this.filesData[i].name === files.name &&\n this.filesData[i].id === files.id) : this.filesData[i].name === files.name)) {\n index = i;\n }\n }\n return this.fileList[index];\n };\n Uploader.prototype.createProgressBar = function (liElement) {\n var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n progressBar.setAttribute('style', 'width: 0%');\n var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n progressbarText.textContent = '0%';\n progressbarInnerWrapper.appendChild(progressBar);\n progressbarWrapper.appendChild(progressbarInnerWrapper);\n progressbarWrapper.appendChild(progressbarText);\n liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n };\n /* istanbul ignore next */\n Uploader.prototype.updateProgressbar = function (e, li) {\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n if (value === 0 || value === 100) {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n else {\n this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n }\n }\n };\n Uploader.prototype.changeProgressValue = function (li, progressValue) {\n li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n };\n Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n var li = this.getLiElement(files);\n if (isNullOrUndefined(li) && (!customUI)) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n /* istanbul ignore next */\n if (files.statusCode === '5') {\n this.cancelUploadingFile(files, e, request, li);\n }\n if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n this.createProgressBar(li);\n this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n this.updateProgressbar(e, li);\n var iconEle = li.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n iconEle.setAttribute('title', this.localizedTexts('abort'));\n iconEle.classList.remove(REMOVE_ICON);\n }\n }\n else {\n this.cancelUploadingFile(files, e, request);\n }\n var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n this.trigger('progress', args);\n };\n /* istanbul ignore next */\n Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n var _this = this;\n if (files.statusCode === '5') {\n var eventArgs = {\n event: e,\n fileData: files,\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('canceling', eventArgs, function (eventArgs) {\n if (eventArgs.cancel) {\n files.statusCode = '3';\n if (!isNullOrUndefined(li)) {\n var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(li.querySelector('.e-spinner-pane'));\n }\n }\n }\n else {\n request.emitError = false;\n request.httpRequest.abort();\n var formData = new FormData();\n if (files.statusCode === '5') {\n var name_1 = _this.element.getAttribute('name');\n formData.append(name_1, files.name);\n formData.append('cancel-uploading', files.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax_1 = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax_1.emitError = false;\n ajax_1.beforeSend = function (e) {\n if (eventArgs.currentRequest) {\n _this.updateCustomheader(ajax_1.httpRequest, eventArgs.currentRequest);\n }\n };\n ajax_1.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax_1.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (isNullOrUndefined(liElement) || liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n return;\n }\n this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n this.renderFailureState(e, file, liElement);\n var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n if (!isNullOrUndefined(liElement)) {\n hideSpinner(spinnerTarget);\n if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n this.trigger('success', args);\n };\n Uploader.prototype.renderFailureState = function (e, file, liElement) {\n var _this = this;\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n }\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n if (isNullOrUndefined(deleteIcon)) {\n return;\n }\n deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n /* istanbul ignore next */\n retryElement.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement, false);\n }, false);\n };\n Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n file.statusCode = '1';\n file.status = this.localizedTexts('readyToUploadMessage');\n if (!custom) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n }\n if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n detach(liElement.querySelector('.' + RETRY_ICON));\n }\n this.pauseButton = null;\n }\n /* istanbul ignore next */\n if (!isNullOrUndefined(liElement)) {\n liElement.classList.add(RESTRICT_RETRY);\n }\n this.upload([file]);\n };\n /* istanbul ignore next */\n Uploader.prototype.uploadComplete = function (e, file, customUI) {\n var status = e.target;\n if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n var li = this.getLiElement(file);\n if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI)) && this.showFileList) {\n return;\n }\n if (!isNullOrUndefined(li)) {\n this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n this.removeProgressbar(li, 'success');\n var iconEle = li.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(iconEle)) {\n iconEle.classList.add(DELETE_ICON);\n iconEle.setAttribute('title', this.localizedTexts('delete'));\n iconEle.classList.remove(ABORT_ICON);\n iconEle.classList.remove(UPLOAD_INPROGRESS);\n }\n }\n this.raiseSuccessEvent(e, file);\n }\n else {\n this.uploadFailed(e, file);\n }\n };\n Uploader.prototype.getResponse = function (e) {\n var target = e.currentTarget;\n var response = {\n readyState: target.readyState,\n statusCode: target.status,\n statusText: target.statusText,\n headers: target.getAllResponseHeaders(),\n withCredentials: target.withCredentials\n };\n return response;\n };\n Uploader.prototype.raiseSuccessEvent = function (e, file) {\n var _this = this;\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadSuccessMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '2', false), statusText: statusMessage\n };\n var liElement = this.getLiElement(file);\n if (!isNullOrUndefined(liElement)) {\n var spinnerEle = liElement.querySelector('.' + SPINNER_PANE);\n if (!isNullOrUndefined(spinnerEle)) {\n hideSpinner(liElement);\n detach(spinnerEle);\n }\n }\n this.trigger('success', args, function (args) {\n _this.updateStatus(file, args.statusText, '2');\n _this.uploadedFilesData.push(file);\n _this.trigger('change', { file: _this.uploadedFilesData });\n _this.checkActionButtonStatus();\n if (_this.fileList.length > 0) {\n if ((!(_this.getLiElement(file)).classList.contains(RESTRICT_RETRY))) {\n _this.uploadSequential();\n _this.checkActionComplete(true);\n }\n else {\n /* istanbul ignore next */\n (_this.getLiElement(file)).classList.remove(RESTRICT_RETRY);\n }\n }\n else if (!_this.showFileList) {\n _this.checkActionComplete(true);\n }\n });\n };\n Uploader.prototype.uploadFailed = function (e, file) {\n var _this = this;\n var li = this.getLiElement(file);\n var response = e && e.currentTarget ? this.getResponse(e) : null;\n var statusMessage = this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '0', false), statusText: statusMessage\n };\n if (!isNullOrUndefined(li)) {\n this.renderFailureState(e, file, li);\n }\n this.trigger('failure', args, function (args) {\n _this.updateStatus(file, args.statusText, '0');\n _this.checkActionButtonStatus();\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n };\n Uploader.prototype.uploadSequential = function () {\n if (this.sequentialUpload) {\n if (this.autoUpload) {\n /* istanbul ignore next */\n this.checkAutoUpload(this.filesData);\n }\n else {\n this.uploadButtonClick();\n }\n }\n };\n Uploader.prototype.checkActionComplete = function (increment) {\n if (increment) {\n ++this.actionCompleteCount;\n }\n else {\n --this.actionCompleteCount;\n }\n this.raiseActionComplete();\n };\n Uploader.prototype.raiseActionComplete = function () {\n if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n this.flag = false;\n var eventArgs = {\n fileData: []\n };\n eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n this.trigger('actionComplete', eventArgs);\n }\n };\n Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n var matchFiles = [];\n var matchFilesIndex = 0;\n for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n var selectedFileData = selectedFiles[selectFileIndex];\n for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n if (this.filesData[fileDataIndex].name === selectedFileData.name &&\n this.filesData[fileDataIndex].status === selectedFileData.status) {\n matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n ++matchFilesIndex;\n }\n }\n }\n return matchFiles;\n };\n Uploader.prototype.updateProgressBarClasses = function (li, className) {\n var progressBar = li.querySelector('.' + PROGRESSBAR);\n if (!isNullOrUndefined(progressBar)) {\n progressBar.classList.add(className);\n }\n };\n Uploader.prototype.removeProgressbar = function (li, callType) {\n var _this = this;\n if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n this.progressAnimation = new Animation({ duration: 1250 });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n setTimeout(function () {\n _this.animateProgressBar(li, callType);\n }, 750);\n }\n };\n /* istanbul ignore next */\n Uploader.prototype.animateProgressBar = function (li, callType) {\n if (callType === 'success') {\n li.classList.add(UPLOAD_SUCCESS);\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n }\n }\n else {\n if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n }\n if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n detach(li.querySelector('.' + PROGRESS_WRAPPER));\n }\n };\n Uploader.prototype.setExtensions = function (extensions) {\n if (extensions !== '' && !isNullOrUndefined(extensions)) {\n this.element.setAttribute('accept', extensions);\n }\n else {\n this.element.removeAttribute('accept');\n }\n };\n Uploader.prototype.templateComplier = function (uploadTemplate) {\n if (uploadTemplate) {\n try {\n if (typeof uploadTemplate !== 'function' && selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\n }\n else {\n return compile(uploadTemplate);\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n if (this.enableRtl) {\n addClass([this.uploadWrapper], RTL);\n }\n else {\n removeClass([this.uploadWrapper], RTL);\n }\n };\n Uploader.prototype.localizedTexts = function (localeText) {\n this.l10n.setLocale(this.locale);\n return this.l10n.getConstant(localeText);\n };\n Uploader.prototype.setControlStatus = function () {\n if (!this.enabled) {\n this.uploadWrapper.classList.add(DISABLED);\n this.element.setAttribute('disabled', 'disabled');\n this.browseButton.setAttribute('disabled', 'disabled');\n if (!isNullOrUndefined(this.clearButton)) {\n this.clearButton.setAttribute('disabled', 'disabled');\n }\n if (!isNullOrUndefined(this.uploadButton)) {\n this.uploadButton.setAttribute('disabled', 'disabled');\n }\n }\n else {\n if (this.uploadWrapper.classList.contains(DISABLED)) {\n this.uploadWrapper.classList.remove(DISABLED);\n }\n if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n this.element.removeAttribute('disabled');\n this.browseButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n this.clearButton.removeAttribute('disabled');\n }\n if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n this.uploadButton.hasAttribute('disabled');\n }\n }\n };\n Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['accept', 'multiple', 'disabled'];\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var prop = attributes_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n switch (prop) {\n case 'accept':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n || isDynamic) {\n this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n this.initialAttr.accept = this.allowedExtensions;\n }\n break;\n case 'multiple':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n this.setProperties({ multiple: isMutiple }, !isDynamic);\n this.initialAttr.multiple = true;\n }\n break;\n case 'disabled':\n if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n this.setProperties({ enabled: isDisabled }, !isDynamic);\n this.initialAttr.disabled = true;\n }\n }\n }\n }\n };\n Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n var start = 0;\n var end = Math.min(this.asyncSettings.chunkSize, file.size);\n var index = 0;\n var blob = file.rawFile.slice(start, end);\n var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n this.sendRequest(file, metaData, custom, fileIndex);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var blob = file.rawFile.slice(metaData.start, metaData.end);\n formData.append(this.uploaderName, blob, file.name);\n formData.append('chunk-index', metaData.chunkIndex.toString());\n formData.append('chunkIndex', metaData.chunkIndex.toString());\n var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n formData.append('total-chunk', totalChunk.toString());\n formData.append('totalChunk', totalChunk.toString());\n var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.chunkUploadComplete(e, metaData, custom);\n return {};\n };\n ajax.onUploadProgress = function (e) {\n _this.chunkUploadInProgress(e, metaData, custom);\n return {};\n };\n var eventArgs = {\n fileData: file,\n customFormData: [],\n cancel: false,\n chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n };\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n eventArgs.currentChunkIndex = metaData.chunkIndex;\n if (eventArgs.currentChunkIndex === 0) {\n // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n else {\n _this.trigger('chunkUploading', eventArgs, function (eventArgs) {\n _this.uploadingEventCallback(formData, eventArgs, e, file);\n });\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.chunkUploadFailed(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n metaData.request = ajax;\n };\n Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n if (eventArgs.cancel) {\n this.eventCancelByArgs(e, eventArgs, file);\n }\n else {\n this.updateFormData(formData, eventArgs.customFormData);\n }\n };\n Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n var _this = this;\n e.cancel = true;\n if (eventArgs.fileData.statusCode === '5') {\n return;\n }\n eventArgs.fileData.statusCode = '5';\n eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n var liElement = this.getLiElement(eventArgs.fileData);\n if (liElement) {\n if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n }\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n if (removeIcon) {\n removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n }\n this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n /* istanbul ignore next */\n this.pauseButton.addEventListener('click', function (e) {\n _this.reloadcanceledFile(e, file, liElement);\n }, false);\n this.checkActionButtonStatus();\n }\n };\n Uploader.prototype.checkChunkUpload = function () {\n return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n };\n Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n var _this = this;\n var response = e.target;\n var liElement;\n if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: totalChunk,\n chunkSize: this.asyncSettings.chunkSize,\n response: requestResponse\n };\n this.trigger('chunkSuccess', eventArgs);\n if (isNullOrUndefined(custom) || !custom) {\n liElement = this.getLiElement(metaData.file);\n }\n this.updateMetaData(metaData);\n if (metaData.end === metaData.file.size) {\n metaData.file.statusCode = '3';\n }\n if (metaData.file.statusCode === '5') {\n var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n this.trigger('canceling', eventArgs_1, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n metaData.file.statusCode = '3';\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n _this.sendNextRequest(metaData);\n }\n else {\n metaData.request.emitError = false;\n response.abort();\n var formData = new FormData();\n var name_2 = _this.element.getAttribute('name');\n formData.append(name_2, metaData.file.name);\n formData.append('cancel-uploading', metaData.file.name);\n formData.append('cancelUploading', metaData.file.name);\n _this.updateFormData(formData, eventArgs.customFormData);\n var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removeChunkFile(e, metaData, custom);\n return {};\n };\n ajax.send(formData);\n }\n });\n }\n else {\n if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n var index = this.pausedData.indexOf(metaData);\n if (index >= 0) {\n this.pausedData.splice(index, 1);\n }\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n if (metaData.file.statusCode !== '4') {\n this.sendNextRequest(metaData);\n }\n }\n }\n else {\n this.chunkUploadFailed(e, metaData);\n }\n };\n Uploader.prototype.sendNextRequest = function (metaData) {\n metaData.start = metaData.end;\n metaData.end += this.asyncSettings.chunkSize;\n metaData.end = Math.min(metaData.end, metaData.file.size);\n metaData.chunkIndex += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n var liElement = this.getLiElement(metaData.file);\n var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n var spinnerTarget = deleteIcon;\n this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n this.removeProgressbar(liElement, 'failure');\n if (deleteIcon) {\n deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n }\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n if (pauseIcon) {\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n }\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n hideSpinner(spinnerTarget);\n detach(liElement.querySelector('.e-spinner-pane'));\n }\n }\n };\n Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n metaData.file.statusCode = '4';\n metaData.file.status = this.localizedTexts('pause');\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.abortUpload(metaData, custom, eventArgs);\n };\n Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n if (metaData.file.statusCode !== '4') {\n metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\n }\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n targetElement.classList.remove(PAUSE_UPLOAD);\n targetElement.classList.add(RESUME_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('resume'));\n targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n }\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData.splice(i, 1);\n }\n }\n this.pausedData.push(metaData);\n this.trigger('pausing', eventArgs);\n };\n Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n var liElement = this.getLiElement(metaData.file);\n var targetElement;\n if (!isNullOrUndefined(liElement)) {\n targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n }\n if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n targetElement.classList.remove(RESUME_UPLOAD);\n targetElement.classList.add(PAUSE_UPLOAD);\n targetElement.setAttribute('title', this.localizedTexts('pause'));\n targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n targetElement.nextElementSibling.classList.add(ABORT_ICON);\n targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n }\n metaData.file.status = this.localizedTexts('inProgress');\n metaData.file.statusCode = '3';\n this.updateMetaData(metaData);\n var eventArgs = {\n event: e ? e : null,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n chunkSize: this.asyncSettings.chunkSize\n };\n this.trigger('resuming', eventArgs);\n for (var i = 0; i < this.pausedData.length; i++) {\n if (this.pausedData[i].end === this.pausedData[i].file.size) {\n this.chunkUploadComplete(e, metaData, custom);\n }\n else {\n if (this.pausedData[i].file.name === metaData.file.name) {\n this.pausedData[i].start = this.pausedData[i].end;\n this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n }\n }\n }\n };\n Uploader.prototype.updateMetaData = function (metaData) {\n if (this.uploadMetaData.indexOf(metaData) === -1) {\n this.uploadMetaData.push(metaData);\n }\n else {\n this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n this.uploadMetaData.push(metaData);\n }\n };\n Uploader.prototype.removeChunkProgressBar = function (metaData) {\n var liElement = this.getLiElement(metaData.file);\n if (!isNullOrUndefined(liElement)) {\n this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n this.removeProgressbar(liElement, 'success');\n var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n if (!isNullOrUndefined(cancelButton)) {\n cancelButton.classList.add(DELETE_ICON);\n cancelButton.setAttribute('title', this.localizedTexts('delete'));\n cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n }\n }\n };\n Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n var _this = this;\n var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n var liElement;\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n liElement = this.getLiElement(metaData.file);\n }\n var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n var eventArgs = {\n event: e,\n file: metaData.file,\n chunkIndex: metaData.chunkIndex,\n totalChunk: chunkCount,\n chunkSize: this.asyncSettings.chunkSize,\n cancel: false,\n response: requestResponse\n };\n this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n // To prevent triggering of failure event\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () {\n _this.retryRequest(liElement, metaData, custom);\n }, _this.asyncSettings.retryAfterDelay);\n }\n else {\n if (!isNullOrUndefined(liElement)) {\n var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n if (!isNullOrUndefined(pauseButton)) {\n pauseButton.classList.add(RETRY_ICON);\n pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n }\n _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n _this.removeProgressbar(liElement, 'failure');\n liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n iconElement.classList.remove(ABORT_ICON);\n if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n if (metaData.start > 0) {\n iconElement.classList.add(DELETE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('delete'));\n }\n else {\n iconElement.classList.add(REMOVE_ICON);\n iconElement.setAttribute('title', _this.localizedTexts('remove'));\n }\n }\n metaData.retryCount = 0;\n var file_1 = metaData.file;\n var failureMessage = _this.localizedTexts('uploadFailedMessage');\n var args = {\n e: e, response: requestResponse,\n operation: 'upload',\n file: _this.updateStatus(file_1, failureMessage, '0', false),\n statusText: failureMessage\n };\n _this.trigger('failure', args, function (args) {\n _this.updateStatus(file_1, args.statusText, '0');\n _this.uploadSequential();\n _this.checkActionComplete(true);\n });\n }\n }\n });\n };\n Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n }\n metaData.retryCount += 1;\n this.sendRequest(metaData.file, metaData);\n };\n Uploader.prototype.checkPausePlayAction = function (e) {\n var targetElement = e.target;\n var selectedElement = e.target.parentElement;\n var index = this.fileList.indexOf(selectedElement);\n var fileData = this.filesData[index];\n var metaData = this.getCurrentMetaData(fileData);\n if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n /* istanbul ignore next */\n this.pauseUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n /* istanbul ignore next */\n this.resumeUpload(metaData, e);\n }\n else if (targetElement.classList.contains(RETRY_ICON)) {\n if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n this.retryUpload(metaData, false);\n }\n else {\n this.retryUpload(metaData, true);\n }\n }\n };\n Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n if (fromcanceledStage) {\n metaData.end = metaData.end + this.asyncSettings.chunkSize;\n metaData.start = metaData.start + this.asyncSettings.chunkSize;\n this.sendRequest(metaData.file, metaData);\n }\n else {\n metaData.file.statusCode = '1';\n metaData.file.status = this.localizedTexts('readyToUploadMessage');\n this.chunkUpload(metaData.file);\n }\n /* istanbul ignore next */\n (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n };\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n var _this = this;\n if (metaData.file.statusCode === '4') {\n return;\n }\n if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n metaData.file.statusCode = '3';\n metaData.file.status = this.localizedTexts('inProgress');\n }\n this.updateMetaData(metaData);\n var liElement = this.getLiElement(metaData.file);\n if (isNullOrUndefined(liElement)) {\n return;\n }\n var retryElement = liElement.querySelector('.' + RETRY_ICON);\n if (!isNullOrUndefined(retryElement)) {\n retryElement.classList.add(PAUSE_UPLOAD);\n retryElement.setAttribute('title', this.localizedTexts('pause'));\n retryElement.classList.remove(RETRY_ICON);\n }\n if (!isNullOrUndefined(liElement)) {\n if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n var statusElement = liElement.querySelector('.' + STATUS);\n if (isNullOrUndefined(this.template)) {\n statusElement.classList.add(UPLOAD_INPROGRESS);\n statusElement.classList.remove(UPLOAD_FAILED);\n this.createProgressBar(liElement);\n this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n }\n var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n liElement.querySelector('.' + DELETE_ICON);\n if (!isNullOrUndefined(clearIcon)) {\n clearIcon.classList.add(ABORT_ICON);\n clearIcon.setAttribute('title', this.localizedTexts('abort'));\n clearIcon.classList.remove(REMOVE_ICON);\n }\n }\n if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n var progressVal = void 0;\n var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n if (this.asyncSettings.chunkSize && totalChunks) {\n progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n this.changeProgressValue(liElement, progressVal.toString() + '%');\n }\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n if (this.browserName === 'msie') {\n this.pauseButton.classList.add('e-msie');\n }\n var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n this.pauseButton.addEventListener('click', function (e) {\n _this.checkPausePlayAction(e);\n }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n *\n * @param { number } bytes - Specifies the file size in bytes.\n * @returns {string} - Returns the file size.\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n if (!bytes) {\n return '0.0 KB';\n }\n do {\n bytes = bytes / 1024;\n i++;\n } while (bytes > 99);\n if (i >= 2) {\n bytes = bytes * 1024;\n i = 1;\n }\n return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n };\n /**\n * Allows you to sort the file data alphabetically based on its file name clearly.\n *\n * @param { FileList } filesData - specifies the files data for upload.\n * @returns {File[]}\n */\n /* istanbul ignore next */\n Uploader.prototype.sortFileList = function (filesData) {\n filesData = filesData ? filesData : this.sortFilesList;\n var files = filesData;\n var fileNames = [];\n for (var i = 0; i < files.length; i++) {\n fileNames.push(files[i].name);\n }\n var sortedFileNames = fileNames.sort();\n var sortedFilesData = [];\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_3 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_3 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n *\n * @method destroy\n * @returns {void}\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n this.clearAll();\n this.unWireEvents();\n this.unBindDropEvents();\n if (this.multiple) {\n this.element.removeAttribute('multiple');\n }\n if (!this.enabled) {\n this.element.removeAttribute('disabled');\n }\n this.element.removeAttribute('accept');\n this.setInitialAttributes();\n var attributes = ['aria-label', 'directory', 'webkitdirectory', 'tabindex'];\n for (var _i = 0, attributes_2 = attributes; _i < attributes_2.length; _i++) {\n var key = attributes_2[_i];\n this.element.removeAttribute(key);\n }\n if (!isNullOrUndefined(this.uploadWrapper)) {\n this.uploadWrapper.parentElement.appendChild(this.element);\n detach(this.uploadWrapper);\n }\n this.uploadWrapper = null;\n this.uploadWrapper = null;\n this.browseButton = null;\n this.dropAreaWrapper = null;\n this.dropZoneElement = null;\n this.dropArea = null;\n this.keyboardModule = null;\n this.clearButton = null;\n this.uploadButton = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Allows you to call the upload process manually by calling save URL action.\n * To process the selected files (added in upload queue), pass an empty argument otherwise\n * upload the specific file based on its argument.\n *\n * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.upload = function (files, custom) {\n var _this = this;\n files = files ? files : this.filesData;\n if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n this.sequenceUpload(files);\n }\n else {\n var uploadFiles_1 = this.getFilesInArray(files);\n var eventArgs = {\n customFormData: [],\n currentRequest: null,\n cancel: false\n };\n this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.uploadFiles(uploadFiles_1, custom);\n }\n });\n }\n };\n Uploader.prototype.getFilesInArray = function (files) {\n var uploadFiles = [];\n if (files instanceof Array) {\n uploadFiles = files;\n }\n else {\n uploadFiles.push(files);\n }\n return uploadFiles;\n };\n /* istanbul ignore next */\n Uploader.prototype.serverReadFileBase64 = function (fileIndex, position, totalCount) {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var file = _this.fileStreams[fileIndex].rawFile;\n try {\n var reader = new FileReader();\n reader.onload = (function (args) {\n return function () {\n try {\n var contents = args.result;\n var data = contents ? contents.split(';base64,')[1] : null;\n resolve(data);\n }\n catch (e) {\n reject(e);\n }\n };\n })(reader);\n reader.readAsDataURL(file.slice(position, position + totalCount));\n }\n catch (e) {\n reject(e);\n }\n });\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var result = files.length;\n return result;\n };\n /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return -1;\n }\n var file = files[index];\n var fileCount = this.newFileRef++;\n this.fileStreams[fileCount] = file;\n return fileCount;\n };\n Uploader.prototype.uploadFiles = function (files, custom) {\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n return;\n }\n if (!custom || isNullOrUndefined(custom)) {\n if (!this.multiple) {\n var file = [];\n file.push(files[0]);\n selectedFiles = this.filterfileList(file);\n }\n else {\n selectedFiles = this.filterfileList(files);\n }\n }\n else {\n selectedFiles = files;\n }\n for (var i = 0; i < selectedFiles.length; i++) {\n this.uploadFilesRequest(selectedFiles, i, custom);\n }\n };\n Uploader.prototype.uploadFilesRequest = function (selectedFiles, i, custom) {\n var _this = this;\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var eventArgs = {\n fileData: selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n /* istanbul ignore next */\n if (eventArgs.cancel) {\n _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n }\n _this.updateFormData(formData, eventArgs.customFormData);\n });\n };\n if (selectedFiles[i].statusCode === '1') {\n var name_4 = this.element.getAttribute('name');\n formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n if (chunkEnabled && selectedFiles[i].size > this.asyncSettings.chunkSize) {\n this.chunkUpload(selectedFiles[i], custom, i);\n }\n else {\n ajax.onLoad = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadComplete(e, selectedFiles[i], custom);\n return {};\n }\n };\n ajax.onUploadProgress = function (e) {\n if (eventArgs.cancel) {\n return {};\n }\n else {\n _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n return {};\n }\n };\n /* istanbul ignore next */\n ajax.onError = function (e) {\n _this.uploadFailed(e, selectedFiles[i]);\n return {};\n };\n ajax.send(formData);\n }\n }\n };\n Uploader.prototype.spliceFiles = function (liIndex) {\n var liElement = this.fileList[liIndex];\n var allFiles = this.getFilesData();\n var nameElements = +liElement.getAttribute('data-files-count');\n var startIndex = 0;\n for (var i = 0; i < liIndex; i++) {\n startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n }\n var endIndex = (startIndex + nameElements) - 1;\n for (var j = endIndex; j >= startIndex; j--) {\n allFiles.splice(j, 1);\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-param */\n /**\n * Remove the uploaded file from server manually by calling the remove URL action.\n * If you pass an empty argument to this method, the complete file list can be cleared,\n * otherwise remove the specific file based on its argument (“file_data”).\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n * @param { boolean } removeDirectly - Set true if files remove without removing event.\n * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n * @returns {void}\n */\n Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n var _this = this;\n if (isNullOrUndefined(postRawFile)) {\n postRawFile = true;\n }\n var eventArgs = {\n event: args,\n cancel: false,\n filesData: [],\n customFormData: [],\n postRawFile: postRawFile,\n currentRequest: null\n };\n var beforeEventArgs = {\n cancel: false,\n customFormData: [],\n currentRequest: null\n };\n this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n if (!beforeEventArgs.cancel) {\n if (_this.isFormUpload()) {\n eventArgs.filesData = fileData;\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n var removingFiles = _this.getFilesInArray(fileData);\n var isLiRemoved = false;\n var liIndex = void 0;\n for (var _i = 0, removingFiles_1 = removingFiles; _i < removingFiles_1.length; _i++) {\n var data = removingFiles_1[_i];\n if (!isLiRemoved) {\n liIndex = _this.fileList.indexOf(data.list);\n }\n if (liIndex > -1) {\n var inputElement = !isNullOrUndefined(data.input) ? data.input : null;\n if (inputElement) {\n detach(inputElement);\n }\n _this.spliceFiles(liIndex);\n detach(_this.fileList[liIndex]);\n _this.fileList.splice(liIndex, 1);\n isLiRemoved = true;\n liIndex = -1;\n }\n }\n }\n });\n }\n else if (_this.isForm && (isNullOrUndefined(_this.asyncSettings.removeUrl) || _this.asyncSettings.removeUrl === '')) {\n eventArgs.filesData = _this.getFilesData();\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearAll();\n }\n });\n }\n else {\n var removeFiles = [];\n fileData = !isNullOrUndefined(fileData) ? fileData : _this.filesData;\n if (fileData instanceof Array) {\n removeFiles = fileData;\n }\n else {\n removeFiles.push(fileData);\n }\n eventArgs.filesData = removeFiles;\n var removeUrl = _this.asyncSettings.removeUrl;\n var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n var _loop_5 = function (files) {\n var fileUploadedIndex = _this.uploadedFilesData.indexOf(files);\n if ((files.statusCode === '2' || files.statusCode === '4' || (files.statusCode === '0' &&\n fileUploadedIndex !== -1)) && validUrl) {\n _this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n }\n else {\n if (!removeDirectly) {\n _this.trigger('removing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.removeFilesData(files, customTemplate);\n }\n });\n }\n else {\n _this.removeFilesData(files, customTemplate);\n }\n }\n if (args && !args.target.classList.contains(REMOVE_ICON)) {\n _this.checkActionComplete(false);\n }\n };\n for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n var files = removeFiles_1[_i];\n _loop_5(files);\n }\n }\n }\n });\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n *\n * @returns {void}\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent)) {\n if (this.browserName !== 'msie') {\n this.element.value = '';\n }\n this.filesData = [];\n return;\n }\n var eventArgs = {\n cancel: false,\n filesData: this.filesData\n };\n this.trigger('clearing', eventArgs, function (eventArgs) {\n if (!eventArgs.cancel) {\n _this.clearData();\n _this.actionCompleteCount = 0;\n _this.count = -1;\n }\n });\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get the data of files which are shown in file list.\n *\n * @param { number } index - specifies the file list item(li) index.\n * @returns {FileInfo[]}\n */\n Uploader.prototype.getFilesData = function (index) {\n if (isNullOrUndefined(index)) {\n return this.filesData;\n }\n else {\n return this.getSelectedFiles(index);\n }\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Pauses the in-progress chunked upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.pause = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.pauseUploading(fileDataFiles, custom);\n };\n Uploader.prototype.pauseUploading = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n Uploader.prototype.getFiles = function (fileData) {\n var files = [];\n if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n files.push(fileData);\n }\n else {\n files = fileData;\n }\n return files;\n };\n /**\n * Resumes the chunked upload that is previously paused based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n * @param { boolean } custom - Set true if used custom UI.\n * @returns {void}\n */\n Uploader.prototype.resume = function (fileData, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n this.resumeFiles(fileDataFiles, custom);\n };\n Uploader.prototype.resumeFiles = function (fileData, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '4') {\n this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n }\n }\n };\n /**\n * Retries the canceled or failed file upload based on the file data.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n * @returns {void}\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\n if (this.sequentialUpload && this.isFirstFileOnSelection) {\n this.isFirstFileOnSelection = false;\n }\n this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n };\n Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n var files = this.getFiles(fileData);\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n if (this.asyncSettings.chunkSize > 0 && this.getCurrentMetaData(files[i], null)) {\n this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n }\n else {\n var liElement = void 0;\n if (!custom) {\n liElement = this.fileList[this.filesData.indexOf(files[i])];\n }\n this.reloadcanceledFile(null, files[i], liElement, custom);\n }\n }\n }\n };\n /**\n * Stops the in-progress chunked upload based on the file data.\n * When the file upload is canceled, the partially uploaded file is removed from server.\n *\n * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n * @returns {void}\n */\n Uploader.prototype.cancel = function (fileData) {\n fileData = fileData ? fileData : this.filesData;\n var cancelingFiles = this.getFilesInArray(fileData);\n this.cancelUpload(cancelingFiles);\n };\n Uploader.prototype.cancelUpload = function (fileData) {\n var files = this.getFiles(fileData);\n if (this.asyncSettings.chunkSize > 0) {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n var metaData = this.getCurrentMetaData(files[i], null);\n metaData.file.statusCode = '5';\n metaData.file.status = this.localizedTexts('fileUploadCancel');\n this.updateMetaData(metaData);\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n else {\n for (var i = 0; i < files.length; i++) {\n if (files[i].statusCode === '3') {\n files[i].statusCode = '5';\n files[i].status = this.localizedTexts('fileUploadCancel');\n this.showHideUploadSpinner(files[i]);\n }\n }\n }\n };\n Uploader.prototype.showHideUploadSpinner = function (files) {\n var liElement = this.getLiElement(files);\n if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n };\n __decorate([\n Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n ], Uploader.prototype, \"asyncSettings\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"sequentialUpload\", void 0);\n __decorate([\n Property({})\n ], Uploader.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"cssClass\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enabled\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"template\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"multiple\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"autoUpload\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"enableHtmlSanitizer\", void 0);\n __decorate([\n Complex({}, ButtonsProps)\n ], Uploader.prototype, \"buttons\", void 0);\n __decorate([\n Property('')\n ], Uploader.prototype, \"allowedExtensions\", void 0);\n __decorate([\n Property(0)\n ], Uploader.prototype, \"minFileSize\", void 0);\n __decorate([\n Property(30000000)\n ], Uploader.prototype, \"maxFileSize\", void 0);\n __decorate([\n Property(null)\n ], Uploader.prototype, \"dropArea\", void 0);\n __decorate([\n Collection([{}], FilesProp)\n ], Uploader.prototype, \"files\", void 0);\n __decorate([\n Property(true)\n ], Uploader.prototype, \"showFileList\", void 0);\n __decorate([\n Property(false)\n ], Uploader.prototype, \"directoryUpload\", void 0);\n __decorate([\n Property('Default')\n ], Uploader.prototype, \"dropEffect\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"actionComplete\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"rendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeUpload\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"fileListRendering\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"selected\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"uploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"success\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"failure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"removing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"beforeRemove\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"clearing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkSuccess\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkFailure\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"chunkUploading\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"canceling\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"pausing\", void 0);\n __decorate([\n Event()\n ], Uploader.prototype, \"resuming\", void 0);\n Uploader = __decorate([\n NotifyPropertyChanges\n ], Uploader);\n return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable prefer-spread */\nimport { Component, Event, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { Browser, closest, detach, EventHandler, getInstance, select, selectAll, formatUnit } from '@syncfusion/ej2-base';\nimport { addClass, attributes, classList, isNullOrUndefined, L10n } from '@syncfusion/ej2-base';\nimport { remove, removeClass, rippleEffect } from '@syncfusion/ej2-base';\nimport { SplitButton, getModel } from '@syncfusion/ej2-splitbuttons';\nimport { Deferred } from '@syncfusion/ej2-splitbuttons';\nimport { Tooltip, getZindexPartial, Popup, isCollide } from '@syncfusion/ej2-popups';\nimport { Input } from './../input/index';\nimport { NumericTextBox } from './../numerictextbox/index';\nimport { Slider } from './../slider/slider';\nvar APPLY = 'e-apply';\nvar CANCEL = 'e-cancel';\nvar CURRENT = 'e-current';\nvar CONTAINER = 'e-container';\nvar CTRLBTN = 'e-ctrl-btn';\nvar CTRLSWITCH = 'e-switch-ctrl-btn';\nvar DISABLED = 'e-disabled';\nvar FORMATSWITCH = 'e-value-switch-btn';\nvar HANDLER = 'e-handler';\nvar HEX = 'e-hex';\nvar HIDEHEX = 'e-hide-hex-value';\nvar HIDEOPACITY = 'e-hide-opacity';\nvar HIDERGBA = 'e-hide-switchable-value';\nvar HIDEVALUE = 'e-hide-value';\nvar HIDEVALUESWITCH = 'e-hide-valueswitcher';\nvar HSVAREA = 'e-hsv-color';\nvar HSVCONTAINER = 'e-hsv-container';\nvar INPUTWRAPPER = 'e-selected-value';\nvar MODESWITCH = 'e-mode-switch-btn';\nvar NOCOLOR = 'e-nocolor-item';\nvar OPACITY = 'e-opacity-value';\nvar PALETTES = 'e-palette';\nvar PALETTECONTENT = 'e-color-palette';\nvar PICKERCONTENT = 'e-color-picker';\nvar PREVIEW = 'e-preview-container';\nvar PREVIOUS = 'e-previous';\nvar RTL = 'e-rtl';\nvar SHOWVALUE = 'e-show-value';\nvar SELECT = 'e-selected';\nvar SPLITPREVIEW = 'e-split-preview';\nvar TILE = 'e-tile';\nvar presets = {\n default: ['#000000', '#f44336', '#e91e63', '#9c27b0', '#673ab7', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#ffeb3b',\n '#ffffff', '#ffebee', '#fce4ec', '#f3e5f5', '#ede7f6', '#e3f2fd', '#e1f5fe', '#e0f7fa', '#e0f2f1', '#fffde7',\n '#f2f2f2', '#ffcdd2', '#f8bbd0', '#e1bee7', '#d1c4e9', '#bbdefb', '#b3e5fc', '#b2ebf2', '#b2dfdb', '#fff9c4',\n '#e6e6e6', '#ef9a9a', '#f48fb1', '#ce93d8', '#b39ddb', '#90caf9', '#81d4fa', '#80deea', '#80cbc4', '#fff59d',\n '#cccccc', '#e57373', '#f06292', '#ba68c8', '#9575cd', '#64b5f6', '#4fc3f7', '#4dd0e1', '#4db6ac', '#fff176',\n '#b3b3b3', '#ef5350', '#ec407a', '#ab47bc', '#7e57c2', '#42a5f5', '#29b6f6', '#26c6da', '#26a69a', '#ffee58',\n '#999999', '#e53935', '#d81b60', '#8e24aa', '#5e35b1', '#1e88e5', '#039be5', '#00acc1', '#00897b', '#fdd835',\n '#808080', '#d32f2f', '#c2185b', '#7b1fa2', '#512da8', '#1976d2', '#0288d1', '#0097a7', '#00796b', '#fbc02d',\n '#666666', '#c62828', '#ad1457', '#6a1b9a', '#4527a0', '#1565c0', '#0277bd', '#00838f', '#00695c', '#f9a825',\n '#4d4d4d', '#b71c1c', '#880e4f', '#4a148c', '#311b92', '#0d47a1', '#01579b', '#006064', '#004d40', '#f57f17']\n};\n/**\n * ColorPicker component is a user interface to select and adjust color values. It provides supports for various\n * color specification like Red Green Blue, Hue Saturation Value and Hex codes.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n ColorPicker.prototype.render = function () {\n this.initWrapper();\n if (this.inline) {\n this.createWidget();\n }\n else {\n this.createSplitBtn();\n }\n if (!this.enableOpacity) {\n addClass([this.container.parentElement], HIDEOPACITY);\n }\n this.renderComplete();\n };\n ColorPicker.prototype.initWrapper = function () {\n var wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n this.element.parentNode.insertBefore(wrapper, this.element);\n wrapper.appendChild(this.element);\n attributes(this.element, { 'tabindex': '-1', 'spellcheck': 'false', 'aria-label': 'colorpicker' });\n this.container = this.createElement('div', { className: CONTAINER });\n this.getWrapper().appendChild(this.container);\n var value = this.value ? this.roundValue(this.value).toLowerCase() : '#008000ff';\n if (this.noColor && this.mode === 'Palette' && this.value === '') {\n value = '';\n }\n var slicedValue = value.slice(0, 7);\n if (isNullOrUndefined(this.initialInputValue)) {\n this.initialInputValue = slicedValue;\n }\n this.element.value = slicedValue;\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': slicedValue }, true);\n }\n if (this.enableRtl) {\n wrapper.classList.add(RTL);\n }\n if (this.cssClass) {\n addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n this.tileRipple = rippleEffect(this.container, { selector: '.' + TILE });\n this.ctrlBtnRipple = rippleEffect(this.container, { selector: '.e-btn' });\n };\n ColorPicker.prototype.getWrapper = function () {\n return this.element.parentElement;\n };\n ColorPicker.prototype.createWidget = function () {\n if (this.mode === 'Palette') {\n this.createPalette();\n if (!this.inline) {\n this.firstPaletteFocus();\n }\n }\n else {\n this.createPicker();\n if (!this.inline) {\n this.getDragHandler().focus();\n }\n }\n this.isRgb = true;\n this.createInput();\n this.createCtrlBtn();\n if (!this.disabled) {\n this.wireEvents();\n }\n if (this.inline && this.disabled) {\n this.toggleDisabled(true);\n }\n if (Browser.isDevice) {\n this.refreshPopupPos();\n }\n };\n ColorPicker.prototype.createSplitBtn = function () {\n var _this = this;\n var splitButton = this.createElement('button', { className: 'e-split-colorpicker' });\n this.getWrapper().appendChild(splitButton);\n this.splitBtn = new SplitButton({\n iconCss: 'e-selected-color',\n target: this.container,\n disabled: this.disabled,\n enableRtl: this.enableRtl,\n createPopupOnClick: this.createPopupOnClick,\n open: this.onOpen.bind(this),\n click: function () {\n var ev = new MouseEvent('click', { bubbles: true, cancelable: false });\n _this.trigger('change', {\n currentValue: { hex: _this.value.slice(0, 7), rgba: _this.convertToRgbString(_this.hexToRgb(_this.value)) },\n previousValue: { hex: null, rgba: null }, value: _this.value, event: ev\n });\n }\n });\n this.splitBtn.createElement = this.createElement;\n this.splitBtn.appendTo(splitButton);\n var preview = this.createElement('span', { className: SPLITPREVIEW });\n select('.e-selected-color', splitButton).appendChild(preview);\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(this.value));\n var popupEle = this.getPopupEle();\n addClass([popupEle], 'e-colorpicker-popup');\n if (this.cssClass) {\n addClass([popupEle], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n }\n if (Browser.isDevice && !this.createPopupOnClick) {\n var popupInst = this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(this.splitBtn.element).toString();\n }\n this.bindCallBackEvent();\n };\n ColorPicker.prototype.onOpen = function () {\n this.trigger('open', { element: this.container });\n if (!Browser.isDevice) {\n var popupInst = this.getPopupInst();\n var collision = isCollide(popupInst.element);\n if (collision.length > 0) {\n popupInst.collision = { X: 'flip', Y: 'fit' };\n popupInst.position = { X: 'right', Y: 'bottom' };\n popupInst.targetType = 'container';\n }\n }\n };\n ColorPicker.prototype.getPopupInst = function () {\n return getInstance(this.getPopupEle(), Popup);\n };\n ColorPicker.prototype.bindCallBackEvent = function () {\n var _this = this;\n this.splitBtn.beforeOpen = function (args) {\n var callBackPromise = new Deferred();\n _this.trigger('beforeOpen', args, function (observeOpenArgs) {\n if (!observeOpenArgs.cancel) {\n var popupEle = _this.getPopupEle();\n popupEle.style.top = formatUnit(0 + pageYOffset);\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.display = 'block';\n _this.createWidget();\n popupEle.style.display = '';\n if (Browser.isDevice) {\n if (_this.createPopupOnClick) {\n var popupInst = _this.getPopupInst();\n popupInst.relateTo = document.body;\n popupInst.position = { X: 'center', Y: 'center' };\n popupInst.targetType = 'container';\n popupInst.collision = { X: 'fit', Y: 'fit' };\n popupInst.offsetY = 4;\n popupEle.style.zIndex = getZindexPartial(_this.splitBtn.element).toString();\n }\n _this.modal = _this.createElement('div');\n _this.modal.className = 'e-' + _this.getModuleName() + ' e-modal';\n _this.modal.style.display = 'none';\n document.body.insertBefore(_this.modal, popupEle);\n document.body.className += ' e-colorpicker-overflow';\n _this.modal.style.display = 'block';\n _this.modal.style.zIndex = (Number(popupEle.style.zIndex) - 1).toString();\n }\n }\n args.cancel = observeOpenArgs.cancel;\n callBackPromise.resolve(observeOpenArgs);\n });\n return callBackPromise;\n };\n this.splitBtn.beforeClose = function (args) {\n var callBackPromise = new Deferred();\n if (!isNullOrUndefined(args.event)) {\n var beforeCloseArgs = { element: _this.container, event: args.event, cancel: false };\n _this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n if (Browser.isDevice && args.event.target === _this.modal) {\n observedCloseArgs.cancel = true;\n }\n if (!observedCloseArgs.cancel) {\n _this.onPopupClose();\n }\n args.cancel = observedCloseArgs.cancel;\n callBackPromise.resolve(observedCloseArgs);\n });\n }\n else {\n callBackPromise.resolve(args);\n }\n return callBackPromise;\n };\n };\n ColorPicker.prototype.onPopupClose = function () {\n this.unWireEvents();\n this.destroyOtherComp();\n this.container.style.width = '';\n select('.' + SPLITPREVIEW, this.splitBtn.element).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n this.container.innerHTML = '';\n removeClass([this.container], [PICKERCONTENT, PALETTECONTENT]);\n if (Browser.isDevice && this.modal) {\n removeClass([document.body], 'e-colorpicker-overflow');\n this.modal.style.display = 'none';\n this.modal.outerHTML = '';\n this.modal = null;\n }\n };\n ColorPicker.prototype.createPalette = function () {\n classList(this.container, [PALETTECONTENT], [PICKERCONTENT]);\n if (this.presetColors) {\n var paletteGroup = this.createElement('div', { className: 'e-custom-palette' });\n this.appendElement(paletteGroup);\n var keys = Object.keys(this.presetColors);\n if (keys.length === 1) {\n this.appendPalette(this.presetColors[keys[0]], keys[0], paletteGroup);\n }\n else {\n for (var i = 0, len = keys.length; i < len; i++) {\n this.appendPalette(this.presetColors[keys[i]], keys[i], paletteGroup);\n }\n }\n if (selectAll('.e-row', paletteGroup).length > 10) {\n addClass([paletteGroup], 'e-palette-group');\n }\n }\n else {\n this.appendPalette(presets.default, 'default');\n }\n if (this.mode === 'Palette' && !this.modeSwitcher && this.noColor) {\n this.setNoColor();\n }\n var width = parseInt(getComputedStyle(this.container).borderBottomWidth, 10);\n this.container.style.width = formatUnit(this.container.children[0].offsetWidth + width + width);\n this.rgb = this.hexToRgb(this.roundValue(this.value));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n };\n ColorPicker.prototype.firstPaletteFocus = function () {\n if (!select('.' + SELECT, this.container.children[0])) {\n selectAll('.' + PALETTES, this.container)[0].focus();\n }\n };\n ColorPicker.prototype.appendPalette = function (colors, key, refEle) {\n var palette = this.createElement('div', { className: PALETTES, attrs: { 'tabindex': '0', 'role': 'grid' } });\n if (refEle) {\n refEle.appendChild(palette);\n }\n else {\n this.appendElement(palette);\n }\n var row;\n var tile;\n var roundedColor;\n for (var i = 0, len = colors.length; i < len; i++) {\n if (i === 0 || i % this.columns === 0) {\n row = this.createElement('div', {\n className: 'e-row', attrs: { 'role': 'row' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false', 'tabindex': '0' }\n });\n this.trigger('beforeTileRender', { element: tile, presetName: key, value: colors[i] });\n row.appendChild(tile);\n if (this.value === roundedColor) {\n this.addTileSelection(tile);\n palette.focus();\n }\n tile.style.backgroundColor = this.convertToRgbString(this.hexToRgb(roundedColor));\n }\n };\n ColorPicker.prototype.setNoColor = function () {\n var noColorEle = this.container.querySelector('.e-row').children[0];\n noColorEle.classList.add(NOCOLOR);\n if (!this.value) {\n noColorEle.classList.add(SELECT);\n closest(noColorEle, '.' + PALETTES).focus();\n }\n ['aria-selected', 'aria-label'].forEach(function (attr) { noColorEle.removeAttribute(attr); });\n noColorEle.style.backgroundColor = '';\n };\n ColorPicker.prototype.appendElement = function (ele, insertPos) {\n if (insertPos === void 0) { insertPos = 0; }\n var refEle = this.container.children[insertPos];\n if (refEle) {\n this.container.insertBefore(ele, refEle);\n }\n else {\n this.container.appendChild(ele);\n }\n };\n ColorPicker.prototype.addTileSelection = function (ele) {\n ele.classList.add(SELECT);\n ele.setAttribute('aria-selected', 'true');\n };\n ColorPicker.prototype.createPicker = function () {\n classList(this.container, [PICKERCONTENT], [PALETTECONTENT]);\n var hsvContainer = this.createElement('div', { className: HSVCONTAINER });\n this.appendElement(hsvContainer);\n hsvContainer.appendChild(this.createElement('div', { className: HSVAREA }));\n var dragHandler = this.createElement('span', { className: HANDLER, attrs: { 'tabindex': '0' } });\n hsvContainer.appendChild(dragHandler);\n if (this.value === null || this.value === '') {\n this.value = '#008000ff';\n }\n this.rgb = this.hexToRgb(this.value);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHsvContainerBg();\n this.setHandlerPosition();\n this.createSlider();\n this.createDragTooltip();\n };\n ColorPicker.prototype.setHsvContainerBg = function (h) {\n if (h === void 0) { h = this.hsv[0]; }\n this.getHsvContainer().style.backgroundColor = this.convertToRgbString(this.hsvToRgb(h, 100, 100, 1));\n };\n ColorPicker.prototype.getHsvContainer = function () {\n return select('.' + HSVCONTAINER, this.container);\n };\n ColorPicker.prototype.setHandlerPosition = function () {\n var dragHandler = this.getDragHandler();\n var hsvArea = select('.' + HSVAREA, this.container);\n if (this.enableRtl) {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * Math.abs(100 - this.hsv[1]) / 100);\n }\n else {\n dragHandler.style.left = formatUnit(hsvArea.offsetWidth * this.hsv[1] / 100);\n }\n dragHandler.style.top = formatUnit(hsvArea.offsetHeight * (100 - this.hsv[2]) / 100);\n };\n ColorPicker.prototype.createSlider = function () {\n var sliderPreviewWrapper = this.createElement('div', { className: 'e-slider-preview' });\n this.appendElement(sliderPreviewWrapper, 1);\n this.createPreview(sliderPreviewWrapper);\n var sliderWrapper = this.createElement('div', { className: 'e-colorpicker-slider' });\n sliderPreviewWrapper.insertBefore(sliderWrapper, sliderPreviewWrapper.children[0]);\n var slider = this.createElement('div', { className: 'e-hue-slider' });\n sliderWrapper.appendChild(slider);\n this.hueSlider = new Slider({\n value: this.hsv[0],\n min: 0,\n max: 359,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.hueChange.bind(this)\n });\n this.hueSlider.createElement = this.createElement;\n this.hueSlider.appendTo(slider);\n if (this.enableOpacity) {\n slider = this.createElement('div', { className: 'e-opacity-slider' });\n sliderWrapper.appendChild(slider);\n this.createOpacitySlider(slider);\n }\n };\n ColorPicker.prototype.createOpacitySlider = function (slider) {\n this.opacitySlider = new Slider({\n value: this.rgb[3] * 100,\n min: 0,\n max: 100,\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n change: this.opacityChange.bind(this)\n });\n this.opacitySlider.createElement = this.createElement;\n this.opacitySlider.appendTo(slider);\n var opacityBgTrack = this.createElement('div', { className: 'e-opacity-empty-track' });\n slider.appendChild(opacityBgTrack);\n this.updateOpacitySliderBg();\n };\n ColorPicker.prototype.updateOpacitySliderBg = function () {\n var direction = this.enableRtl ? 'to left' : 'to right';\n var opacityEle = select('.e-opacity-empty-track', this.opacitySlider.element);\n if (opacityEle) {\n opacityEle.style.background =\n 'linear-gradient(' + direction + ', rgba(' + this.rgb.slice(0, 3) + ', 0) 0%, ' +\n this.convertToRgbString(this.rgb.slice(0, 3)) + ' 100%)';\n }\n };\n ColorPicker.prototype.hueChange = function (args) {\n this.hsv[0] = args.value;\n this.setHsvContainerBg();\n this.convertToOtherFormat();\n };\n ColorPicker.prototype.opacityChange = function (args) {\n var value = args.value;\n var pValue = this.rgbToHex(this.rgb);\n this.hsv[3] = value / 100;\n this.rgb[3] = value / 100;\n var cValue = this.rgbToHex(this.rgb);\n this.updateOpacityInput(value);\n var rgb = this.convertToRgbString(this.rgb);\n this.updatePreview(rgb);\n this.triggerEvent(cValue, pValue, rgb);\n };\n ColorPicker.prototype.updateOpacityInput = function (value) {\n if (this.enableOpacity && !this.getWrapper().classList.contains(HIDEVALUE)) {\n var opacityTextBoxInst = getInstance(select('.' + OPACITY, this.container), NumericTextBox);\n opacityTextBoxInst.value = value;\n opacityTextBoxInst.dataBind();\n }\n };\n ColorPicker.prototype.createPreview = function (parentEle) {\n var previewContainer = this.createElement('div', { className: PREVIEW });\n parentEle.appendChild(previewContainer);\n var preview = this.createElement('span', { className: 'e-preview ' + CURRENT });\n previewContainer.appendChild(preview);\n var colorValue = this.convertToRgbString(this.rgb);\n preview.style.backgroundColor = colorValue;\n preview = this.createElement('span', { className: 'e-preview ' + PREVIOUS });\n previewContainer.appendChild(preview);\n preview.style.backgroundColor = colorValue;\n };\n ColorPicker.prototype.isPicker = function () {\n return !this.container.classList.contains(PALETTECONTENT);\n };\n ColorPicker.prototype.getPopupEle = function () {\n return this.container.parentElement;\n };\n ColorPicker.prototype.createNumericInput = function (element, value, label, max) {\n var _this = this;\n var numericInput = new NumericTextBox({\n value: value,\n placeholder: label,\n min: 0,\n max: max,\n format: '###.##',\n showSpinButton: false,\n floatLabelType: 'Always',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true,\n change: function (args) {\n if (args.event) {\n _this.inputHandler(args.event);\n }\n }\n });\n numericInput.createElement = this.createElement;\n numericInput.appendTo(element);\n };\n ColorPicker.prototype.createInput = function () {\n var isPicker = this.isPicker();\n var wrapper = this.getWrapper();\n if ((isPicker && !wrapper.classList.contains(HIDEVALUE)) || (!isPicker && wrapper.classList.contains(SHOWVALUE))) {\n var inputWrap = this.createElement('div', { className: INPUTWRAPPER });\n if (isPicker) {\n this.appendElement(inputWrap, 2);\n }\n else {\n this.appendElement(inputWrap, 1);\n }\n var container = this.createElement('div', { className: 'e-input-container' });\n inputWrap.appendChild(container);\n if (!wrapper.classList.contains(HIDEVALUESWITCH)) {\n this.appendValueSwitchBtn(inputWrap);\n }\n if (!wrapper.classList.contains(HIDEHEX)) {\n var hexInput = this.createElement('input', {\n className: HEX,\n attrs: { 'maxlength': '7', 'spellcheck': 'false', 'aria-label': 'HEX' }\n });\n container.appendChild(hexInput);\n Input.createInput({\n element: hexInput,\n floatLabelType: 'Always',\n properties: {\n placeholder: 'HEX',\n enableRtl: this.enableRtl,\n enabled: !this.disabled,\n readonly: this.isPicker() ? false : true\n }\n }, this.createElement);\n Input.setValue(this.value.slice(0, 7), hexInput);\n hexInput.addEventListener('input', this.inputHandler.bind(this));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n var label = void 0;\n var value = void 0;\n if (this.isRgb) {\n label = 'RGB';\n value = this.rgb;\n }\n else {\n label = 'HSV';\n value = this.hsv;\n }\n var clsName = ['rh', 'gs', 'bv'];\n for (var i = 0; i < 3; i++) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: 'e-' + clsName[i] + '-value' })), value[i], label[i], 255);\n }\n if (this.enableOpacity) {\n this.appendOpacityValue(container);\n }\n }\n }\n };\n ColorPicker.prototype.appendOpacityValue = function (container) {\n this.createNumericInput(container.appendChild(this.createElement('input', { className: OPACITY })), this.rgb[3] * 100, 'A', 100);\n };\n ColorPicker.prototype.appendValueSwitchBtn = function (targetEle) {\n var valueSwitchBtn = this.createElement('button', {\n className: 'e-icons e-css e-btn e-flat e-icon-btn ' + FORMATSWITCH,\n attrs: { 'title': 'Toggle format' }\n });\n targetEle.appendChild(valueSwitchBtn);\n if (this.isPicker() && !this.getWrapper().classList.contains(HIDERGBA)) {\n valueSwitchBtn.addEventListener('click', this.formatSwitchHandler.bind(this));\n }\n };\n ColorPicker.prototype.createCtrlBtn = function () {\n if (this.modeSwitcher || this.showButtons) {\n this.l10n.setLocale(this.locale);\n var btnWrapper = this.createElement('div', { className: CTRLSWITCH });\n this.container.appendChild(btnWrapper);\n if (this.showButtons) {\n var controlBtnWrapper = this.createElement('div', { className: CTRLBTN });\n btnWrapper.appendChild(controlBtnWrapper);\n var apply = this.l10n.getConstant('Apply');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: apply,\n className: 'e-btn e-css e-flat e-primary e-small ' + APPLY,\n attrs: { 'title': apply }\n }));\n var cancel = this.l10n.getConstant('Cancel');\n controlBtnWrapper.appendChild(this.createElement('button', {\n innerHTML: cancel,\n className: 'e-btn e-css e-flat e-small ' + CANCEL,\n attrs: { 'title': cancel }\n }));\n }\n if (this.modeSwitcher) {\n this.appendModeSwitchBtn();\n }\n }\n };\n ColorPicker.prototype.appendModeSwitchBtn = function () {\n var modeSwitcher = this.createElement('button', {\n className: 'e-icons e-btn e-flat e-icon-btn ' + MODESWITCH, attrs: { title: this.l10n.getConstant('ModeSwitcher') }\n });\n select('.' + CTRLSWITCH, this.container).insertBefore(modeSwitcher, select('.' + CTRLBTN, this.container));\n };\n ColorPicker.prototype.createDragTooltip = function () {\n var _this = this;\n var tooltip = new Tooltip({\n opensOn: 'Custom',\n showTipPointer: false,\n cssClass: 'e-color-picker-tooltip',\n htmlAttributes: { title: 'tooltip' },\n beforeOpen: function (args) {\n _this.tooltipEle = args.element;\n },\n animation: { open: { effect: 'None' }, close: { effect: 'None' } }\n });\n tooltip.createElement = this.createElement;\n tooltip.appendTo(this.container);\n tooltip.open(this.container);\n this.tooltipEle.style.zIndex = getZindexPartial(this.tooltipEle).toString();\n this.tooltipEle.setAttribute('aria-label', 'colorpicker-tooltip');\n select('.e-tip-content', this.tooltipEle).appendChild(this.createElement('div', { className: 'e-tip-transparent' }));\n };\n ColorPicker.prototype.getTooltipInst = function () {\n return getInstance(this.container, Tooltip);\n };\n ColorPicker.prototype.setTooltipOffset = function (value) {\n this.getTooltipInst().offsetY = value;\n };\n ColorPicker.prototype.toggleDisabled = function (enable) {\n if (enable) {\n this.getWrapper().classList.add(DISABLED);\n }\n else {\n this.getWrapper().classList.remove(DISABLED);\n }\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n if (enable) {\n attributes(ele, { 'disabled': '' });\n }\n else {\n ele.removeAttribute('disabled');\n }\n });\n }\n };\n ColorPicker.prototype.convertToRgbString = function (rgb) {\n return rgb.length ? rgb.length === 4 ? 'rgba(' + rgb.join() + ')' : 'rgb(' + rgb.join() + ')' : '';\n };\n ColorPicker.prototype.convertToHsvString = function (hsv) {\n return hsv.length === 4 ? 'hsva(' + hsv.join() + ')' : 'hsv(' + hsv.join() + ')';\n };\n ColorPicker.prototype.updateHsv = function () {\n this.hsv[1] = this.hsv[1] > 100 ? 100 : this.hsv[1];\n this.hsv[2] = this.hsv[2] > 100 ? 100 : this.hsv[2];\n this.setHandlerPosition();\n };\n ColorPicker.prototype.convertToOtherFormat = function (isKey, e) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hsvToRgb.apply(this, this.hsv);\n var cValue = this.rgbToHex(this.rgb);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.updateInput(cValue);\n this.triggerEvent(cValue, pValue, rgba, isKey, e);\n };\n ColorPicker.prototype.updateInput = function (value) {\n var wrapper = this.getWrapper();\n if (!wrapper.classList.contains(HIDEVALUE)) {\n if (!wrapper.classList.contains(HIDEHEX)) {\n Input.setValue(value.substr(0, 7), select('.' + HEX, this.container));\n }\n if (!wrapper.classList.contains(HIDERGBA)) {\n if (this.isRgb) {\n this.updateValue(this.rgb, false);\n }\n else {\n this.updateValue(this.hsv, false);\n }\n }\n }\n };\n ColorPicker.prototype.updatePreview = function (value) {\n if (this.enableOpacity) {\n this.updateOpacitySliderBg();\n }\n select('.e-tip-transparent', this.tooltipEle).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = value;\n select('.' + PREVIEW + ' .' + PREVIOUS, this.container).style.backgroundColor\n = this.convertToRgbString(this.hexToRgb(this.value));\n };\n ColorPicker.prototype.getDragHandler = function () {\n return select('.' + HANDLER, this.container);\n };\n ColorPicker.prototype.removeTileSelection = function () {\n var selectedEle = [].slice.call(selectAll('.' + SELECT, this.container.children[0]));\n selectedEle.forEach(function (ele) {\n ele.classList.remove(SELECT);\n ele.setAttribute('aria-selected', 'false');\n });\n };\n ColorPicker.prototype.convertRgbToNumberArray = function (value) {\n return (value.slice(value.indexOf('(') + 1, value.indexOf(')'))).split(',').map(function (n, i) {\n return (i !== 3) ? parseInt(n, 10) : parseFloat(n);\n });\n };\n /**\n * To get color value in specified type.\n *\n * @param {string} value - Specify the color value.\n * @param {string} type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @returns {string} - Color value\n */\n ColorPicker.prototype.getValue = function (value, type) {\n if (!value) {\n value = this.value;\n }\n type = !type ? 'hex' : type.toLowerCase();\n if (value[0] === 'r') {\n var cValue = this.convertRgbToNumberArray(value);\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue.slice(0, 3)));\n }\n else {\n if (type === 'hsva') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, cValue));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n if (value[0] === 'h') {\n var cValue = this.hsvToRgb.apply(this, this.convertRgbToNumberArray(value));\n if (type === 'rgba') {\n return this.convertToRgbString(cValue);\n }\n else {\n if (type === 'hex' || type === 'hexa') {\n var hex = this.rgbToHex(cValue);\n return type === 'hex' ? hex.slice(0, 7) : hex;\n }\n else {\n if (type === 'rgb') {\n return this.convertToRgbString(cValue.slice(0, 3));\n }\n else {\n return 'null';\n }\n }\n }\n }\n else {\n value = this.roundValue(value);\n var rgb = this.hexToRgb(value);\n if (type === 'rgb' || type === 'hsv') {\n rgb = rgb.slice(0, 3);\n }\n if (type === 'rgba' || type === 'rgb') {\n return this.convertToRgbString(rgb);\n }\n else {\n if (type === 'hsva' || type === 'hsv') {\n return this.convertToHsvString(this.rgbToHsv.apply(this, rgb));\n }\n else {\n if (type === 'hex') {\n return value.slice(0, 7);\n }\n else {\n if (type === 'a') {\n return rgb[3].toString();\n }\n else {\n return 'null';\n }\n }\n }\n }\n }\n }\n };\n /**\n * To show/hide ColorPicker popup based on current state of the SplitButton.\n *\n * @method toggle\n * @returns {void}\n */\n ColorPicker.prototype.toggle = function () {\n if (this.container.parentElement.classList.contains('e-popup-close')) {\n this.splitBtn.toggle();\n }\n else {\n this.closePopup(null);\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n ColorPicker.prototype.getModuleName = function () {\n return 'colorpicker';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n ColorPicker.prototype.getPersistData = function () {\n return this.addOnPersist(['value']);\n };\n ColorPicker.prototype.wireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.add(dragHandler, 'keydown', this.pickerKeyDown, this);\n var ctrlBtn = select('.' + CTRLBTN, this.container);\n if (ctrlBtn) {\n EventHandler.add(ctrlBtn, 'keydown', this.ctrlBtnKeyDown, this);\n }\n EventHandler.add(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown, this);\n if (this.modeSwitcher || this.showButtons) {\n this.addCtrlSwitchEvent();\n }\n EventHandler.add(select('.' + PREVIOUS, this.container), 'click', this.previewHandler, this);\n }\n else {\n EventHandler.add(this.container, 'click', this.paletteClickHandler, this);\n EventHandler.add(this.container, 'keydown', this.paletteKeyDown, this);\n }\n };\n ColorPicker.prototype.formResetHandler = function () {\n this.value = this.initialInputValue;\n attributes(this.element, { 'value': this.initialInputValue });\n };\n ColorPicker.prototype.addCtrlSwitchEvent = function () {\n var ctrlSwitchBtn = select('.' + CTRLSWITCH, this.container);\n if (ctrlSwitchBtn) {\n EventHandler.add(ctrlSwitchBtn, 'click', this.btnClickHandler, this);\n }\n };\n ColorPicker.prototype.ctrlBtnKeyDown = function (e) {\n if (e.keyCode === 13) {\n var applyBtn = select('.' + APPLY, this.container);\n if (applyBtn) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue);\n }\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.pickerKeyDown = function (e) {\n switch (e.keyCode) {\n case 39:\n this.handlerDragPosition(1, this.enableRtl ? -1 : 1, e);\n break;\n case 37:\n this.handlerDragPosition(1, this.enableRtl ? 1 : -1, e);\n break;\n case 38:\n this.handlerDragPosition(2, 1, e);\n break;\n case 40:\n this.handlerDragPosition(2, -1, e);\n break;\n case 13: {\n e.preventDefault();\n var cValue = this.rgbToHex(this.rgb);\n this.enterKeyHandler(cValue, e);\n }\n }\n };\n ColorPicker.prototype.enterKeyHandler = function (value, e) {\n this.triggerChangeEvent(value);\n if (!this.inline) {\n this.splitBtn.element.focus();\n }\n };\n ColorPicker.prototype.closePopup = function (e) {\n var _this = this;\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs, function (observedcloseArgs) {\n if (!observedcloseArgs.cancel) {\n _this.splitBtn.toggle();\n _this.onPopupClose();\n }\n });\n };\n ColorPicker.prototype.triggerChangeEvent = function (value, e) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) }, event: e,\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) },\n value: this.enableOpacity ? value : hex\n });\n if (this.enableOpacity) {\n this.setProperties({ 'value': value }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n };\n ColorPicker.prototype.handlerDragPosition = function (prob, value, e) {\n e.preventDefault();\n this.hsv[prob] += value * (e.ctrlKey ? 1 : 3);\n if (this.hsv[prob] < 0) {\n this.hsv[prob] = 0;\n }\n this.updateHsv();\n this.convertToOtherFormat(true, e);\n };\n ColorPicker.prototype.handlerDown = function (e) {\n e.preventDefault();\n if (e.type === 'mousedown') {\n this.clientX = Math.abs(e.pageX - pageXOffset);\n this.clientY = Math.abs(e.pageY - pageYOffset);\n this.setTooltipOffset(8);\n }\n else {\n this.clientX = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n this.clientY = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n this.setTooltipOffset(-8);\n }\n this.setHsv(this.clientX, this.clientY);\n this.getDragHandler().style.transition = 'left .4s cubic-bezier(.25, .8, .25, 1), top .4s cubic-bezier(.25, .8, .25, 1)';\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n this.getDragHandler().focus();\n EventHandler.add(document, 'mousemove touchmove', this.handlerMove, this);\n EventHandler.add(document, 'mouseup touchend', this.handlerEnd, this);\n };\n ColorPicker.prototype.handlerMove = function (e) {\n if (e.type !== 'touchmove') {\n e.preventDefault();\n }\n var x;\n var y;\n if (e.type === 'mousemove') {\n x = Math.abs(e.pageX - pageXOffset);\n y = Math.abs(e.pageY - pageYOffset);\n }\n else {\n x = Math.abs(e.changedTouches[0].pageX - pageXOffset);\n y = Math.abs(e.changedTouches[0].pageY - pageYOffset);\n }\n this.setHsv(x, y);\n var dragHandler = this.getDragHandler();\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n this.getTooltipInst().refresh(dragHandler);\n if (!this.tooltipEle.style.transform) {\n if (Math.abs(this.clientX - x) > 8 || Math.abs(this.clientY - y) > 8) {\n select('.' + HSVAREA, this.container).style.cursor = 'pointer';\n dragHandler.style.transition = 'none';\n if (!this.inline) {\n this.tooltipEle.style.zIndex = (parseInt(this.getPopupEle().style.zIndex, 10) + 1).toString();\n }\n this.tooltipEle.style.transform = 'rotate(45deg)';\n dragHandler.classList.add('e-hide-handler');\n }\n }\n };\n ColorPicker.prototype.setHsv = function (clientX, clientY) {\n var ele = select('.' + HSVAREA, this.container);\n var position = ele.getBoundingClientRect();\n if (this.enableRtl) {\n clientX = clientX > position.right ? 0 : Math.abs(clientX - position.right);\n }\n else {\n clientX = clientX > position.left ? Math.abs(clientX - position.left) : 0;\n }\n clientY = clientY > position.top ? Math.abs(clientY - position.top) : 0;\n this.hsv[2] = Math.round(Number(100 * (ele.offsetHeight -\n Math.max(0, Math.min(ele.offsetHeight, (clientY - ele.offsetTop)))) / ele.offsetHeight) * 10) / 10;\n this.hsv[1] =\n Math.round(Number(100 * (Math.max(0, Math.min(ele.offsetWidth, (clientX - ele.offsetLeft)))) / ele.offsetWidth) * 10) / 10;\n };\n ColorPicker.prototype.handlerEnd = function (e) {\n if (e.type !== 'touchend') {\n e.preventDefault();\n }\n EventHandler.remove(document, 'mousemove touchmove', this.handlerMove);\n EventHandler.remove(document, 'mouseup touchend', this.handlerEnd);\n var dragHandler = this.getDragHandler();\n select('.' + HSVAREA, this.container).style.cursor = '';\n if (this.tooltipEle.style.transform) {\n this.tooltipEle.style.transform = '';\n dragHandler.classList.remove('e-hide-handler');\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n };\n ColorPicker.prototype.btnClickHandler = function (e) {\n var target = e.target;\n if (closest(target, '.' + MODESWITCH)) {\n e.stopPropagation();\n this.switchToPalette();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n }\n };\n ColorPicker.prototype.switchToPalette = function () {\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Palette' });\n this.unWireEvents();\n this.destroyOtherComp();\n detach(select('.e-slider-preview', this.container));\n if (!this.getWrapper().classList.contains(HIDEVALUE)) {\n remove(select('.' + INPUTWRAPPER, this.container));\n }\n detach(this.getHsvContainer());\n this.createPalette();\n this.firstPaletteFocus();\n this.createInput();\n this.refreshPopupPos();\n //for image editor popup position refreshing\n if (this.element.parentElement && this.element.parentElement.parentElement && this.element.parentElement.parentElement.classList.contains('e-ie-ddb-popup')) {\n this.refreshImageEditorPopupPos();\n }\n ;\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\n };\n //for image editor popup position refreshing\n ColorPicker.prototype.refreshImageEditorPopupPos = function () {\n if (Browser.isDevice) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n var btnElem = document.querySelector(\"#\" + this.element.parentElement.parentElement.id.split('-popup')[0]);\n if (btnElem) {\n popupEle.parentElement.ej2_instances[0].refreshPosition(btnElem);\n }\n }\n };\n ColorPicker.prototype.refreshPopupPos = function () {\n if (!this.inline) {\n var popupEle = this.getPopupEle();\n popupEle.style.left = formatUnit(0 + pageXOffset);\n popupEle.style.top = formatUnit(0 + pageYOffset);\n this.getPopupInst().refreshPosition(this.splitBtn.element.parentElement);\n }\n };\n ColorPicker.prototype.formatSwitchHandler = function () {\n if (this.isRgb) {\n this.updateValue(this.hsv, true, 3, [360, 100, 100]);\n this.isRgb = false;\n }\n else {\n this.updateValue(this.rgb, true, 2);\n this.isRgb = true;\n }\n };\n ColorPicker.prototype.updateValue = function (value, format, idx, max) {\n var clsName = ['e-rh-value', 'e-gs-value', 'e-bv-value'];\n var inst;\n for (var i = 0, len = clsName.length; i < len; i++) {\n inst = getInstance(select('.' + clsName[i], this.container), NumericTextBox);\n inst.value = Math.round(value[i]);\n if (format) {\n inst.placeholder = clsName[i].substr(idx, 1).toUpperCase();\n inst.max = max ? max[i] : 255;\n }\n inst.dataBind();\n }\n };\n ColorPicker.prototype.previewHandler = function (e) {\n var target = e.target;\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.convertRgbToNumberArray(target.style.backgroundColor);\n if (!this.rgb[3]) {\n this.rgb[3] = 1;\n }\n var cValue = this.rgbToHex(this.rgb);\n var hsv = this.rgbToHsv.apply(this, this.rgb);\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n }\n this.setHsvContainerBg(hsv[0]);\n if (this.enableOpacity && hsv[3] !== this.hsv[3]) {\n this.opacitySlider.setProperties({ 'value': hsv[3] * 100 }, true);\n this.opacitySlider.refresh();\n this.updateOpacitySliderBg();\n }\n this.hsv = hsv;\n this.setHandlerPosition();\n this.updateInput(cValue);\n select('.' + PREVIEW + ' .' + CURRENT, this.container).style.backgroundColor = this.convertToRgbString(this.rgb);\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), false, e);\n };\n ColorPicker.prototype.paletteClickHandler = function (e) {\n e.preventDefault();\n var target = e.target;\n if (target.classList.contains(TILE)) {\n this.removeTileSelection();\n this.addTileSelection(target);\n if (target.classList.contains(NOCOLOR)) {\n this.noColorTile();\n }\n else {\n var cValue = target.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(this.roundValue(cValue));\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), false, e);\n }\n if (!this.inline && !this.showButtons) {\n this.closePopup(e);\n }\n }\n else {\n if (closest(target, '.' + MODESWITCH)) {\n this.switchToPicker();\n }\n else {\n if (target.classList.contains(APPLY) || target.classList.contains(CANCEL)) {\n this.ctrlBtnClick(target, e);\n }\n else {\n if (this.getWrapper().classList.contains(SHOWVALUE) && closest(target, '.' + FORMATSWITCH)) {\n this.formatSwitchHandler();\n }\n }\n }\n }\n };\n ColorPicker.prototype.noColorTile = function (isKey) {\n if (isKey === void 0) { isKey = false; }\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = [];\n this.hsv = [];\n this.triggerEvent('', pValue, '', isKey);\n };\n ColorPicker.prototype.switchToPicker = function () {\n var wrapper = this.getWrapper();\n this.trigger('beforeModeSwitch', { element: this.container, mode: 'Picker' });\n this.unWireEvents();\n ([].slice.call(selectAll('.' + PALETTES, this.container))).forEach(function (ele) {\n detach(ele);\n });\n if (wrapper.classList.contains(SHOWVALUE)) {\n detach(select('.' + INPUTWRAPPER, this.container));\n }\n this.container.style.width = '';\n var grpEle = select('.e-custom-palette', this.container);\n if (this.presetColors) {\n remove(grpEle);\n }\n this.createPicker();\n this.getDragHandler().focus();\n this.createInput();\n this.refreshPopupPos();\n //for image editor popup position refreshing\n if (this.element.parentElement && this.element.parentElement.parentElement && this.element.parentElement.parentElement.classList.contains('e-ie-ddb-popup')) {\n this.refreshImageEditorPopupPos();\n }\n ;\n this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Picker' });\n };\n ColorPicker.prototype.ctrlBtnClick = function (ele, e) {\n if (ele.classList.contains(APPLY)) {\n var cValue = this.rgbToHex(this.rgb);\n this.triggerChangeEvent(cValue, e);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\n }\n else if (ele.classList.contains(CANCEL)) {\n var beforeCloseArgs = { element: this.container, event: e, cancel: false };\n this.trigger('beforeClose', beforeCloseArgs);\n }\n };\n ColorPicker.prototype.paletteKeyDown = function (e) {\n var target = e.target;\n if (!target.classList.contains(PALETTES)) {\n return;\n }\n var selectedEle;\n var idx;\n var tiles = [].slice.call(selectAll('.' + TILE, target));\n var prevSelectedEle = (tiles.filter(function (tile) { return tile.classList.contains('e-selected'); })).pop();\n switch (!e.altKey && e.keyCode) {\n case 39:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? -1 : 1)]\n : tiles[this.enableRtl ? tiles.length - 1 : 0];\n this.keySelectionChanges(selectedEle);\n break;\n case 37:\n e.preventDefault();\n selectedEle = prevSelectedEle ? tiles[this.tilePosition(tiles, prevSelectedEle, this.enableRtl ? 1 : -1)]\n : tiles[this.enableRtl ? 0 : tiles.length - 1];\n this.keySelectionChanges(selectedEle);\n break;\n case 38:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, -this.columns) : 0;\n selectedEle = tiles[idx] ? tiles[idx] : tiles[idx - this.columns];\n this.keySelectionChanges(selectedEle);\n break;\n case 40:\n e.preventDefault();\n idx = prevSelectedEle ? this.tilePosition(tiles, prevSelectedEle, this.columns) : tiles.length - 1;\n if (tiles[idx]) {\n selectedEle = tiles[idx];\n }\n else {\n idx %= tiles.length;\n idx += tiles[tiles.length - 1].parentElement.childElementCount;\n selectedEle = tiles[idx];\n }\n this.keySelectionChanges(selectedEle);\n break;\n case 13:\n e.preventDefault();\n if (prevSelectedEle) {\n var cValue = prevSelectedEle.getAttribute('aria-label');\n this.enterKeyHandler(cValue ? cValue : '', e);\n }\n }\n };\n ColorPicker.prototype.keySelectionChanges = function (newEle) {\n this.removeTileSelection();\n this.addTileSelection(newEle);\n if (newEle.classList.contains(NOCOLOR)) {\n this.noColorTile(true);\n }\n else {\n var cValue = newEle.getAttribute('aria-label');\n var pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(cValue);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n if (this.getWrapper().classList.contains(SHOWVALUE)) {\n this.updateInput(cValue);\n }\n this.triggerEvent(cValue, pValue, this.convertToRgbString(this.rgb), true);\n }\n };\n ColorPicker.prototype.tilePosition = function (items, element, cIdx) {\n items = Array.prototype.slice.call(items);\n var n = items.length;\n var emptyCount = this.columns - items[n - 1].parentElement.childElementCount;\n var idx = items.indexOf(element);\n idx += cIdx;\n if (idx < 0) {\n idx += n + emptyCount;\n }\n else {\n idx %= n + emptyCount;\n }\n return idx;\n };\n ColorPicker.prototype.inputHandler = function (e) {\n var target = e.target;\n if (!target.value.length) {\n return;\n }\n var hsv;\n var pValue;\n var label = select('.e-float-text', target.parentElement).textContent;\n switch (label) {\n case 'HEX': {\n var value = '';\n if ((target.value[0] === '#' && target.value.length !== 5) || (target.value[0] !== '#' && target.value.length !== 4)) {\n value = this.roundValue(target.value);\n }\n if (value.length === 9) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb = this.hexToRgb(value + value.substr(-2));\n this.inputValueChange(this.rgbToHsv.apply(this, this.rgb), pValue, target.value, e);\n }\n else {\n return;\n }\n break;\n }\n case 'R':\n if (this.rgb[0] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[0] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue, null, e);\n }\n break;\n case 'G':\n if (this.rgb[1] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[1] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue, null, e);\n }\n break;\n case 'B':\n if (this.rgb[2] !== Number(target.value)) {\n pValue = this.rgbToHex(this.rgb);\n this.rgb[2] = Number(target.value);\n hsv = this.rgbToHsv.apply(this, this.rgb);\n this.inputValueChange(hsv, pValue, null, e);\n }\n break;\n case 'H':\n this.hueSlider.value = Number(target.value);\n break;\n case 'S':\n if (this.hsv[1] !== Number(target.value)) {\n this.hsv[1] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n }\n break;\n case 'V':\n if (this.hsv[2] !== Number(target.value)) {\n this.hsv[2] = Number(target.value);\n this.updateHsv();\n this.convertToOtherFormat(false, e);\n }\n break;\n case 'A':\n this.opacitySlider.value = Number(target.value);\n break;\n }\n };\n ColorPicker.prototype.inputValueChange = function (hsv, pValue, value, e) {\n if (hsv[0] !== this.hsv[0]) {\n this.hueSlider.setProperties({ 'value': hsv[0] }, true);\n this.hueSlider.refresh();\n this.setHsvContainerBg(hsv[0]);\n }\n this.hsv = hsv;\n var cValue = this.rgbToHex(this.rgb);\n this.setHandlerPosition();\n this.updateInput(value ? value : cValue);\n var rgba = this.convertToRgbString(this.rgb);\n this.updatePreview(rgba);\n this.triggerEvent(cValue, pValue, rgba, false, e);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey, e) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (isNullOrUndefined(e)) {\n e = new MouseEvent('click', { bubbles: true, cancelable: false });\n }\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba }, event: e,\n previousValue: { hex: this.value.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(this.value)) }, value: cValue });\n if (this.enableOpacity) {\n this.setProperties({ 'value': cValue }, true);\n }\n else {\n this.setProperties({ 'value': hex }, true);\n }\n this.element.value = hex ? hex : '#000000';\n }\n else {\n this.trigger('select', {\n currentValue: { hex: hex, rgba: rgba }, event: e,\n previousValue: { hex: pValue.slice(0, 7), rgba: this.convertToRgbString(this.hexToRgb(pValue)) }\n });\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n ColorPicker.prototype.destroy = function () {\n var _this = this;\n var wrapper = this.getWrapper();\n _super.prototype.destroy.call(this);\n ['tabindex', 'spellcheck'].forEach(function (attr) { _this.element.removeAttribute(attr); });\n if (this.inline) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n else {\n if (this.isPopupOpen()) {\n this.unWireEvents();\n this.destroyOtherComp();\n }\n this.splitBtn.destroy();\n this.splitBtn = null;\n }\n this.tileRipple();\n this.tileRipple = null;\n this.ctrlBtnRipple();\n this.ctrlBtnRipple = null;\n if (this.element.nextElementSibling) {\n detach(this.element.nextElementSibling);\n }\n if (wrapper) {\n wrapper.parentElement.insertBefore(this.element, wrapper);\n detach(wrapper);\n }\n this.container = null;\n if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n }\n };\n ColorPicker.prototype.destroyOtherComp = function () {\n if (this.isPicker()) {\n var popup = closest(this.hueSlider.element, '.e-color-picker');\n var numericElemColl = popup.querySelectorAll('.e-numerictextbox');\n for (var i = 0; i < numericElemColl.length; i++) {\n getInstance(numericElemColl[i], NumericTextBox).destroy();\n }\n this.hueSlider.destroy();\n if (this.enableOpacity) {\n this.opacitySlider.destroy();\n this.opacitySlider = null;\n }\n this.hueSlider = null;\n var tooltipInst = this.getTooltipInst();\n tooltipInst.close();\n tooltipInst.destroy();\n this.tooltipEle = null;\n }\n };\n ColorPicker.prototype.isPopupOpen = function () {\n return this.getPopupEle().classList.contains('e-popup-open');\n };\n ColorPicker.prototype.unWireEvents = function () {\n if (this.isPicker()) {\n var dragHandler = this.getDragHandler();\n EventHandler.remove(dragHandler, 'keydown', this.pickerKeyDown);\n var ctrlBtn = select('.' + CTRLBTN, this.container);\n if (ctrlBtn) {\n EventHandler.remove(ctrlBtn, 'keydown', this.ctrlBtnKeyDown);\n }\n EventHandler.remove(this.getHsvContainer(), 'mousedown touchstart', this.handlerDown);\n if (this.modeSwitcher || this.showButtons) {\n EventHandler.remove(select('.' + CTRLSWITCH, this.container), 'click', this.btnClickHandler);\n }\n EventHandler.remove(select('.' + PREVIOUS, this.container), 'click', this.previewHandler);\n }\n else {\n EventHandler.remove(this.container, 'click', this.paletteClickHandler);\n EventHandler.remove(this.container, 'keydown', this.paletteKeyDown);\n }\n };\n ColorPicker.prototype.roundValue = function (value) {\n if (!value) {\n return '';\n }\n if (value[0] !== '#') {\n value = '#' + value;\n }\n var len = value.length;\n if (len === 4) {\n value += 'f';\n len = 5;\n }\n if (len === 5) {\n var tempValue = '';\n for (var i = 1, len_1 = value.length; i < len_1; i++) {\n tempValue += (value.charAt(i) + value.charAt(i));\n }\n value = '#' + tempValue;\n len = 9;\n }\n if (len === 7) {\n value += 'ff';\n }\n return value;\n };\n ColorPicker.prototype.hexToRgb = function (hex) {\n if (!hex) {\n return [];\n }\n hex = hex.trim();\n if (hex.length !== 9) {\n hex = this.roundValue(hex);\n }\n var opacity = Number((parseInt(hex.slice(-2), 16) / 255).toFixed(2));\n hex = hex.slice(1, 7);\n var bigInt = parseInt(hex, 16);\n var h = [];\n h.push((bigInt >> 16) & 255);\n h.push((bigInt >> 8) & 255);\n h.push(bigInt & 255);\n h.push(opacity);\n return h;\n };\n ColorPicker.prototype.rgbToHsv = function (r, g, b, opacity) {\n if (this.rgb && !this.rgb.length) {\n return [];\n }\n r /= 255;\n g /= 255;\n b /= 255;\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var h;\n var v = max;\n var d = max - min;\n var s = max === 0 ? 0 : d / max;\n if (max === min) {\n h = 0;\n }\n else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n var hsv = [Math.round(h * 360), Math.round(s * 1000) / 10, Math.round(v * 1000) / 10];\n if (!isNullOrUndefined(opacity)) {\n hsv.push(opacity);\n }\n return hsv;\n };\n ColorPicker.prototype.hsvToRgb = function (h, s, v, opacity) {\n var r;\n var g;\n var b;\n s /= 100;\n v /= 100;\n if (s === 0) {\n r = g = b = v;\n return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255), opacity];\n }\n h /= 60;\n var i = Math.floor(h);\n var f = h - i;\n var p = v * (1 - s);\n var q = v * (1 - s * f);\n var t = v * (1 - s * (1 - f));\n switch (i) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n default:\n r = v;\n g = p;\n b = q;\n }\n var rgb = [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];\n if (!isNullOrUndefined(opacity)) {\n rgb.push(opacity);\n }\n return rgb;\n };\n ColorPicker.prototype.rgbToHex = function (rgb) {\n return rgb.length ? ('#' + this.hex(rgb[0]) + this.hex(rgb[1]) + this.hex(rgb[2]) +\n (!isNullOrUndefined(rgb[3]) ? (rgb[3] !== 0 ? (Math.round(rgb[3] * 255) + 0x10000).toString(16).substr(-2) : '00') : '')) : '';\n };\n ColorPicker.prototype.hex = function (x) {\n return ('0' + x.toString(16)).slice(-2);\n };\n ColorPicker.prototype.changeModeSwitcherProp = function (prop) {\n var ctrlSwitchWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlSwitchWrapper) {\n this.appendModeSwitchBtn();\n }\n else {\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n }\n else {\n if (ctrlSwitchWrapper) {\n if (this.showButtons) {\n detach(select('.' + MODESWITCH, ctrlSwitchWrapper));\n }\n else {\n remove(ctrlSwitchWrapper);\n }\n }\n }\n };\n ColorPicker.prototype.changeShowBtnProps = function (prop) {\n var ctrlBtnWrapper = select('.' + CTRLSWITCH, this.container);\n if (prop) {\n if (ctrlBtnWrapper) {\n remove(ctrlBtnWrapper);\n }\n this.createCtrlBtn();\n if (this.isPicker() && !this.disabled) {\n this.addCtrlSwitchEvent();\n }\n }\n else {\n if (this.modeSwitcher) {\n detach(select('.' + CTRLBTN, ctrlBtnWrapper));\n }\n else {\n remove(ctrlBtnWrapper);\n }\n }\n };\n ColorPicker.prototype.changeValueProp = function (newProp) {\n if (this.isPicker()) {\n this.rgb = this.hexToRgb(newProp);\n this.hsv = this.rgbToHsv.apply(this, this.rgb);\n this.setHandlerPosition();\n detach(closest(this.hueSlider.element, '.e-slider-preview'));\n this.createSlider();\n this.setHsvContainerBg();\n this.updateInput(newProp);\n if (this.rgb.length === 4) {\n this.updateOpacityInput(this.rgb[3] * 100);\n }\n }\n else {\n this.removeTileSelection();\n var ele = this.container.querySelector('span[aria-label=\"' + this.roundValue(newProp) + '\"]');\n if (ele) {\n this.addTileSelection(ele);\n }\n }\n };\n ColorPicker.prototype.setInputEleProps = function () {\n remove(select('.' + INPUTWRAPPER, this.container));\n this.createInput();\n };\n ColorPicker.prototype.changeDisabledProp = function (newProp) {\n if (this.isPicker()) {\n this.hueSlider.enabled = !newProp;\n this.opacitySlider.enabled = !newProp;\n this.setInputEleProps();\n }\n if (newProp) {\n this.toggleDisabled(true);\n this.unWireEvents();\n }\n else {\n this.toggleDisabled(false);\n this.wireEvents();\n }\n };\n ColorPicker.prototype.changeCssClassProps = function (newProp, oldProp) {\n var wrapper = this.getWrapper();\n var popupWrapper = this.getPopupEle();\n if (oldProp) {\n removeClass([wrapper, popupWrapper], oldProp.split(' '));\n }\n if (newProp) {\n addClass([wrapper, popupWrapper], newProp.replace(/\\s+/g, ' ').trim().split(' '));\n }\n };\n ColorPicker.prototype.changeRtlProps = function (newProp) {\n if (newProp) {\n addClass([this.getWrapper()], 'e-rtl');\n }\n else {\n removeClass([this.getWrapper()], 'e-rtl');\n }\n };\n ColorPicker.prototype.changePaletteProps = function () {\n detach(this.container.children[0]);\n this.container.style.width = '';\n this.createPalette();\n };\n ColorPicker.prototype.changeOpacityProps = function (newProp) {\n var wrapper = this.getWrapper();\n if (newProp) {\n removeClass([this.container.parentElement], HIDEOPACITY);\n this.createOpacitySlider(select('.e-colorpicker-slider', this.container).appendChild(this.createElement('div', { className: 'e-opacity-slider' })));\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n this.appendOpacityValue(select('.e-input-container', this.container));\n }\n }\n else {\n addClass([this.container.parentElement], HIDEOPACITY);\n this.opacitySlider.destroy();\n remove(this.opacitySlider.element);\n this.opacitySlider = null;\n if (!wrapper.classList.contains(HIDEVALUE) && !wrapper.classList.contains(HIDERGBA)) {\n remove(select('.' + OPACITY, this.container).parentElement);\n }\n }\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {ColorPickerModel} newProp - Specifies new properties\n * @param {ColorPickerModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n ColorPicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n var _this = this;\n if (!isNullOrUndefined(newProp.value)) {\n var value = this.roundValue(newProp.value);\n if (value.length === 9) {\n this.element.value = this.roundValue(value).slice(0, 7);\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n if (preview) {\n preview.style.backgroundColor = this.convertToRgbString(this.hexToRgb(newProp.value));\n }\n }\n else if (this.noColor && this.mode === 'Palette' && this.value === '') {\n var preview = this.splitBtn && select('.' + SPLITPREVIEW, this.splitBtn.element);\n preview.style.backgroundColor = '';\n }\n else {\n this.value = oldProp.value;\n }\n }\n if (!this.inline && isNullOrUndefined(newProp.inline)) {\n var otherCompModel = ['disabled', 'enableRtl'];\n this.splitBtn.setProperties(getModel(newProp, otherCompModel));\n if (!this.isPopupOpen()) {\n this.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n this.changeRtlProps(newProp.enableRtl);\n return;\n }\n }\n var _loop_1 = function (prop) {\n switch (prop) {\n case 'inline':\n if (newProp.inline) {\n this_1.getWrapper().appendChild(this_1.container);\n this_1.splitBtn.destroy();\n detach(this_1.element.nextElementSibling);\n if (!this_1.container.children.length) {\n this_1.createWidget();\n }\n }\n else {\n this_1.destroyOtherComp();\n this_1.unWireEvents();\n this_1.container.innerHTML = '';\n this_1.createSplitBtn();\n }\n break;\n case 'cssClass': {\n this_1.changeCssClassProps(newProp.cssClass, oldProp.cssClass);\n var props = newProp.cssClass.split(' ').concat(oldProp.cssClass.split(' '));\n props = props.reduce(function (a, b) { if (a.indexOf(b) < 0) {\n a.push(b);\n } return a; }, []);\n var count_1 = 0;\n props.forEach(function (cls) {\n if (count_1 === 0 &&\n (cls === HIDEVALUE || cls === HIDEVALUESWITCH || cls === SHOWVALUE || cls === HIDEHEX || cls === HIDERGBA)) {\n var inputWrap = select('.' + INPUTWRAPPER, _this.container);\n if (inputWrap) {\n remove(select('.' + INPUTWRAPPER, _this.container));\n }\n _this.createInput();\n count_1++;\n }\n });\n break;\n }\n case 'enableRtl':\n if (this_1.isPicker()) {\n this_1.hueSlider.enableRtl = newProp.enableRtl;\n if (this_1.enableOpacity) {\n this_1.opacitySlider.enableRtl = newProp.enableRtl;\n }\n this_1.setInputEleProps();\n }\n this_1.changeRtlProps(newProp.enableRtl);\n break;\n case 'disabled':\n this_1.changeDisabledProp(newProp.disabled);\n break;\n case 'value':\n if (this_1.value !== oldProp.value) {\n this_1.changeValueProp(newProp.value);\n }\n break;\n case 'showButtons':\n this_1.changeShowBtnProps(newProp.showButtons);\n break;\n case 'mode':\n if (newProp.mode === 'Picker') {\n this_1.switchToPicker();\n }\n else {\n this_1.switchToPalette();\n }\n break;\n case 'modeSwitcher':\n this_1.changeModeSwitcherProp(newProp.modeSwitcher);\n break;\n case 'columns':\n case 'presetColors':\n if (!this_1.isPicker()) {\n this_1.changePaletteProps();\n }\n break;\n case 'noColor':\n if (newProp.noColor) {\n if (this_1.mode === 'Palette' && !this_1.modeSwitcher) {\n this_1.setNoColor();\n }\n }\n else {\n this_1.changePaletteProps();\n }\n break;\n case 'enableOpacity':\n this_1.changeOpacityProps(newProp.enableOpacity);\n break;\n }\n };\n var this_1 = this;\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n _loop_1(prop);\n }\n };\n /**\n * Sets the focus to Colorpicker\n * its native method\n *\n * @public\n * @returns {void}\n */\n ColorPicker.prototype.focusIn = function () {\n this.element.parentElement.focus();\n };\n __decorate([\n Property('#008000ff')\n ], ColorPicker.prototype, \"value\", void 0);\n __decorate([\n Property('')\n ], ColorPicker.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"disabled\", void 0);\n __decorate([\n Property('Picker')\n ], ColorPicker.prototype, \"mode\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"modeSwitcher\", void 0);\n __decorate([\n Property(null)\n ], ColorPicker.prototype, \"presetColors\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"showButtons\", void 0);\n __decorate([\n Property(10)\n ], ColorPicker.prototype, \"columns\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"inline\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"noColor\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(true)\n ], ColorPicker.prototype, \"enableOpacity\", void 0);\n __decorate([\n Property(false)\n ], ColorPicker.prototype, \"createPopupOnClick\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"select\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeTileRender\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeOpen\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"open\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeClose\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"beforeModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"onModeSwitch\", void 0);\n __decorate([\n Event()\n ], ColorPicker.prototype, \"created\", void 0);\n ColorPicker = __decorate([\n NotifyPropertyChanges\n ], ColorPicker);\n return ColorPicker;\n}(Component));\nexport { ColorPicker };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input, containerAttributes, TEXTBOX_FOCUS } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\n /**\n *\n * @param {TextBoxModel} options - Specifies the TextBox model.\n * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n * @private\n */\n function TextBox(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.textboxOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textboxWrapper);\n Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n this.bindClearEvent();\n break;\n case 'width':\n Input.setWidth(newProp.width, this.textboxWrapper.container);\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!Input.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttributesToElement();\n this.updateHTMLAttributesToWrapper();\n this.checkAttributes(true);\n if (this.multiline && !isNullOrUndefined(this.textarea)) {\n Input.validateInputType(this.textboxWrapper.container, this.textarea);\n }\n else {\n Input.validateInputType(this.textboxWrapper.container, this.element);\n }\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.respectiveElement);\n break;\n case 'type':\n if (this.respectiveElement.tagName !== 'TEXTAREA') {\n this.respectiveElement.setAttribute('type', this.type);\n Input.validateInputType(this.textboxWrapper.container, this.element);\n this.raiseChangeEvent();\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n Input.calculateWidth(this.respectiveElement, this.textboxWrapper.container);\n break;\n case 'autocomplete':\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else {\n this.removeAttributes(['autocomplete']);\n }\n break;\n case 'cssClass':\n Input.updateCssClass(newProp.cssClass, oldProp.cssClass, this.textboxWrapper.container);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n break;\n }\n }\n };\n /**\n * Gets the component name\n *\n * @returns {string} Returns the component name.\n * @private\n */\n TextBox.prototype.getModuleName = function () {\n return 'textbox';\n };\n TextBox.prototype.preRender = function () {\n this.cloneElement = this.element.cloneNode(true);\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTBOX') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.multiline ?\n this.createElement('textarea') :\n this.createElement('input');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n else if (attributeName === 'class') {\n inputElement.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttributesToElement();\n this.checkAttributes(false);\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, true);\n }\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n if (this.type === 'text' || (this.element.tagName === 'INPUT' && this.multiline && this.isReact)) {\n this.element.setAttribute('role', 'textbox');\n }\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textbox', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n this.isHiddenInput = true;\n this.textarea = this.createElement('textarea');\n this.element.parentNode.insertBefore(this.textarea, this.element);\n this.element.setAttribute('type', 'hidden');\n this.textarea.setAttribute('name', this.element.getAttribute('name'));\n this.element.removeAttribute('name');\n this.textarea.setAttribute('role', this.element.getAttribute('role'));\n this.element.removeAttribute('role');\n this.textarea.setAttribute('id', getUniqueID('textarea'));\n var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var index = 0; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (this.element.hasAttribute(attributeName) && containerAttributes.indexOf(attributeName) < 0 &&\n !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n // e-mappinguid attribute is handled for Grid component.\n this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n if (apiAttributes.indexOf(attributeName) < 0) {\n this.element.removeAttribute(attributeName);\n index--;\n }\n }\n }\n }\n };\n TextBox.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'autocomplete':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n }\n break;\n case 'value':\n if (((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n case 'type':\n if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n this.setProperties({ type: this.element.type }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextBox.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = Input.getInputValidClassList(this.cssClass);\n }\n this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n this.textboxWrapper = Input.createInput({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttributesToWrapper();\n if (this.isHiddenInput) {\n this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n }\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n this.setInitialValue();\n }\n if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n this.respectiveElement.autocomplete = this.autocomplete;\n }\n else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n this.removeAttributes(['autocomplete']);\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.respectiveElement.defaultValue = this.respectiveElement.value;\n Input.setWidth(this.width, this.textboxWrapper.container);\n if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n this.enabled = false;\n }\n if (!this.element.hasAttribute('aria-labelledby') && !this.element.hasAttribute('placeholder')) {\n this.element.setAttribute('aria-label', 'textbox');\n }\n this.renderComplete();\n };\n TextBox.prototype.updateHTMLAttributesToWrapper = function () {\n Input.updateHTMLAttributesToWrapper(this.htmlAttributes, this.textboxWrapper.container);\n };\n TextBox.prototype.updateHTMLAttributesToElement = function () {\n Input.updateHTMLAttributesToElement(this.htmlAttributes, this.respectiveElement ? this.respectiveElement :\n (this.multiline && !isNullOrUndefined(this.textarea) ? this.textarea : this.element));\n };\n TextBox.prototype.setInitialValue = function () {\n if (!this.isAngular) {\n this.respectiveElement.setAttribute('value', this.initialValue);\n }\n };\n TextBox.prototype.wireEvents = function () {\n EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.respectiveElement, 'keydown', this.keydownHandler, this);\n EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-autofill') &&\n this.textboxWrapper.container.classList.contains('e-outline')) {\n EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n }\n };\n TextBox.prototype.animationHandler = function () {\n this.textboxWrapper.container.classList.add('e-valid-input');\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label)) {\n label.classList.add('e-label-top');\n if (label.classList.contains('e-label-bottom')) {\n label.classList.remove('e-label-bottom');\n }\n }\n };\n TextBox.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n if (value == null && this.textboxWrapper.container.classList.contains('e-valid-input')) {\n this.textboxWrapper.container.classList.remove('e-valid-input');\n }\n this.isProtectedOnChange = prevOnChange;\n };\n TextBox.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textboxWrapper)) {\n var label = this.textboxWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label) && this.floatLabelType !== 'Always') {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextBox.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextBox.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n (this.previousValue !== this.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textboxWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextBox.prototype.keydownHandler = function (args) {\n if ((args.keyCode === 13 || args.keyCode === 9) && !((this.previousValue === null || this.previousValue === '') && (this.value === null || this.value === '') && this.respectiveElement.value === '')) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n }\n };\n TextBox.prototype.inputHandler = function (args) {\n var textboxObj = null || this;\n var eventArgs = {\n event: args,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.inputPreviousValue = this.respectiveElement.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textboxObj.localChange({ value: this.respectiveElement.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextBox.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.respectiveElement.value }, true);\n if (this.previousValue !== this.value) {\n this.raiseChangeEvent(args, true);\n }\n args.stopPropagation();\n };\n TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textboxWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n //EJ2CORE-738:For this task we update the textarea value to the input when input tag with multiline is present\n if (this.element.tagName === 'INPUT' && this.multiline && Browser.info.name === 'mozilla') {\n this.element.value = this.respectiveElement.value;\n }\n };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n if (this.enabled) {\n EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextBox.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR)) || this.textboxWrapper.container.classList.contains('e-static-clear')) {\n Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n if (this.isHiddenInput) {\n this.element.value = this.respectiveElement.value;\n }\n this.setProperties({ value: this.respectiveElement.value }, true);\n var eventArgs = {\n event: event,\n value: this.respectiveElement.value,\n previousValue: this.inputPreviousValue,\n container: this.textboxWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.respectiveElement.value;\n this.raiseChangeEvent(event, true);\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n }\n };\n TextBox.prototype.unWireEvents = function () {\n EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n EventHandler.remove(this.respectiveElement, 'keydown', this.keydownHandler);\n EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n && this.textboxWrapper.container.classList.contains('e-outline') &&\n this.textboxWrapper.container.classList.contains('e-autofill')) {\n EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextBox element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n if (this.element.tagName === 'INPUT' && this.multiline) {\n detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n this.respectiveElement = this.element;\n this.element.removeAttribute('type');\n }\n this.respectiveElement.value = this.respectiveElement.defaultValue;\n this.respectiveElement.classList.remove('e-input');\n this.removeAttributes(['aria-disabled', 'aria-readonly', 'aria-labelledby']);\n if (!isNullOrUndefined(this.textboxWrapper)) {\n this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n detach(this.textboxWrapper.container);\n }\n this.textboxWrapper = null;\n Input.destroy({\n element: this.respectiveElement,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n _super.prototype.destroy.call(this);\n };\n /**\n * Adding the icons to the TextBox component.\n *\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n * Span element acts as icon or button element for TextBox.\n * @returns {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} Returns the persisted data.\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n * @returns {void}\n */\n TextBox.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'class') {\n this.respectiveElement.classList.add(attributes[\"\" + key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[\"\" + key] }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n }\n else {\n this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextBox element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @returns {void}\n */\n TextBox.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.respectiveElement);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.respectiveElement);\n }\n else {\n this.respectiveElement.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextBox.prototype.focusIn = function () {\n if (document.activeElement !== this.respectiveElement && this.enabled) {\n this.respectiveElement.focus();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextBox.prototype.focusOut = function () {\n if (document.activeElement === this.respectiveElement && this.enabled) {\n this.respectiveElement.blur();\n if (this.textboxWrapper.container.classList.contains('e-input-group')\n || this.textboxWrapper.container.classList.contains('e-outline')\n || this.textboxWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n __decorate([\n Property('text')\n ], TextBox.prototype, \"type\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextBox.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextBox.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"placeholder\", void 0);\n __decorate([\n Property('on')\n ], TextBox.prototype, \"autocomplete\", void 0);\n __decorate([\n Property({})\n ], TextBox.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"multiline\", void 0);\n __decorate([\n Property(true)\n ], TextBox.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextBox.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextBox.prototype, \"width\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextBox.prototype, \"input\", void 0);\n TextBox = __decorate([\n NotifyPropertyChanges\n ], TextBox);\n return TextBox;\n}(Component));\nexport { TextBox };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, NotifyPropertyChanges, isNullOrUndefined, setValue, getValue } from '@syncfusion/ej2-base';\nimport { detach, getUniqueID, Event, EventHandler, Internationalization, L10n, addClass, removeClass, closest, formatUnit } from '@syncfusion/ej2-base';\nimport { Input, TEXTBOX_FOCUS } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar AUTO_WIDTH = 'e-auto-width';\nvar RESIZE_X = 'e-resize-x';\nvar RESIZE_Y = 'e-resize-y';\nvar RESIZE_XY = 'e-resize-xy';\nvar RESIZE_NONE = 'e-resize-none';\nvar TextArea = /** @class */ (function (_super) {\n __extends(TextArea, _super);\n function TextArea(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.previousValue = null;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.textareaOptions = options;\n return _this;\n }\n /**\n * Calls internally if any of the property value is changed.\n *\n * @param {TextAreaModel} newProp - Returns the dynamic property value of the component.\n * @param {TextAreaModel} oldProp - Returns the previous property value of the component.\n * @returns {void}\n * @private\n */\n TextArea.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'floatLabelType':\n Input.removeFloating(this.textareaWrapper);\n Input.addFloating(this.element, this.floatLabelType, this.placeholder);\n if (this.floatLabelType === 'Never') {\n this.element.removeAttribute('aria-labelledby');\n }\n break;\n case 'enabled':\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textareaWrapper.container);\n this.bindClearEvent();\n if (!this.enabled && this.resizeMode !== 'None') {\n this.element.classList.remove(this.getCurrentResizeClass(this.resizeMode));\n this.element.classList.add(RESIZE_NONE);\n }\n else {\n this.element.classList.add(this.getCurrentResizeClass(this.resizeMode));\n }\n break;\n case 'width':\n if (this.resizeMode !== 'None' && this.resizeMode !== 'Vertical') {\n this.setElementWidth(newProp.width);\n this.textareaWrapper.container.classList.add(AUTO_WIDTH);\n }\n else {\n if (this.textareaWrapper.container.classList.contains(AUTO_WIDTH)) {\n this.textareaWrapper.container.classList.remove(AUTO_WIDTH);\n }\n Input.setWidth(newProp.width, this.textareaWrapper.container);\n }\n break;\n case 'value':\n {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n if (!Input.isBlank(this.value)) {\n this.value = this.value.toString();\n }\n this.isProtectedOnChange = prevOnChange;\n Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);\n this.inputPreviousValue = this.element.value;\n /* istanbul ignore next */\n if ((this.isAngular || this.isVue) && this.preventChange === true) {\n this.previousValue = this.isAngular ? this.value : this.previousValue;\n this.preventChange = false;\n }\n else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n this.raiseChangeEvent();\n }\n }\n break;\n case 'htmlAttributes':\n {\n this.updateHTMLAttributesToElement();\n this.updateHTMLAttributesToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textareaWrapper.container, this.element);\n }\n break;\n case 'readonly':\n Input.setReadonly(this.readonly, this.element);\n if (this.readonly) {\n this.element.setAttribute('aria-readonly', 'true');\n }\n else {\n this.element.removeAttribute('aria-readonly');\n }\n break;\n case 'showClearButton':\n Input.setClearButton(this.showClearButton, this.element, this.textareaWrapper);\n this.bindClearEvent();\n break;\n case 'enableRtl':\n Input.setEnableRtl(this.enableRtl, [this.textareaWrapper.container]);\n break;\n case 'placeholder':\n Input.setPlaceholder(this.placeholder, this.element);\n Input.calculateWidth(this.element, this.textareaWrapper.container);\n break;\n case 'cssClass':\n Input.updateCssClass(newProp.cssClass, oldProp.cssClass, this.textareaWrapper.container);\n break;\n case 'locale':\n this.globalize = new Internationalization(this.locale);\n this.l10n.setLocale(this.locale);\n this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n break;\n case 'rows':\n if (this.rows) {\n this.element.setAttribute('rows', this.rows.toString());\n }\n break;\n case 'cols':\n if (this.cols) {\n this.element.setAttribute('cols', this.cols.toString());\n if (this.width == null) {\n this.textareaWrapper.container.classList.add(AUTO_WIDTH);\n }\n }\n break;\n case 'maxLength':\n if (this.maxLength) {\n this.element.setAttribute('maxlength', this.maxLength.toString());\n }\n break;\n case 'resizeMode':\n if (this.enabled) {\n if (this.element.classList.contains(this.getCurrentResizeClass(oldProp.resizeMode))) {\n this.element.classList.remove(this.getCurrentResizeClass(oldProp.resizeMode));\n }\n this.element.classList.add(this.getCurrentResizeClass(this.resizeMode));\n if (this.element.style.width && (this.resizeMode === 'None' || this.resizeMode === 'Vertical')) {\n Input.setWidth(this.element.style.width, this.textareaWrapper.container);\n }\n else {\n var currentWidth = this.element.offsetWidth;\n this.element.style.width = currentWidth + 'px';\n if (this.textareaWrapper.container.style.width) {\n this.textareaWrapper.container.style.width = '';\n }\n }\n this.setWrapperWidth();\n }\n break;\n }\n }\n };\n TextArea.prototype.preRender = function () {\n this.formElement = closest(this.element, 'form');\n if (!isNullOrUndefined(this.formElement)) {\n this.isForm = true;\n }\n /* istanbul ignore next */\n if (this.element.tagName === 'EJS-TEXTAREA') {\n var ejInstance = getValue('ej2_instances', this.element);\n var inputElement = this.createElement('textarea');\n var index = 0;\n for (index; index < this.element.attributes.length; index++) {\n var attributeName = this.element.attributes[index].nodeName;\n if (attributeName !== 'id' && attributeName !== 'class') {\n inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n inputElement.innerHTML = this.element.innerHTML;\n if (attributeName === 'name') {\n this.element.removeAttribute('name');\n }\n }\n else if (attributeName === 'class') {\n inputElement.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n }\n }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttributesToElement();\n this.checkAttributes(false);\n if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['value'] === undefined)) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, true);\n }\n this.globalize = new Internationalization(this.locale);\n var localeText = { placeholder: this.placeholder };\n this.l10n = new L10n('textarea', localeText, this.locale);\n if (this.l10n.getConstant('placeholder') !== '') {\n this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n }\n if (!this.element.hasAttribute('id')) {\n this.element.setAttribute('id', getUniqueID('textbox'));\n }\n if (!this.element.hasAttribute('name')) {\n this.element.setAttribute('name', this.element.getAttribute('id'));\n }\n if (this.rows) {\n this.element.setAttribute('rows', this.rows.toString());\n }\n if (this.cols) {\n this.element.setAttribute('cols', this.cols.toString());\n }\n if (this.maxLength) {\n this.element.setAttribute('maxlength', this.maxLength.toString());\n }\n if (!this.element.style.resize && this.enabled) {\n this.element.classList.add(this.getCurrentResizeClass(this.resizeMode));\n }\n if (this.enabled) {\n this.element.setAttribute('aria-multiline', 'true');\n }\n };\n /**\n * To Initialize the control rendering\n *\n * @returns {void}\n * @private\n */\n TextArea.prototype.render = function () {\n var updatedCssClassValue = this.cssClass;\n if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n updatedCssClassValue = Input.getInputValidClassList(this.cssClass);\n }\n this.textareaWrapper = Input.createInput({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: {\n enabled: this.enabled,\n enableRtl: this.enableRtl,\n cssClass: updatedCssClassValue,\n readonly: this.readonly,\n placeholder: this.placeholder,\n showClearButton: this.showClearButton\n }\n });\n this.updateHTMLAttributesToWrapper();\n this.wireEvents();\n if (!isNullOrUndefined(this.value)) {\n Input.setValue(this.value, this.element, this.floatLabelType, this.showClearButton);\n }\n if (!isNullOrUndefined(this.value)) {\n this.initialValue = this.value;\n if (!this.isAngular) {\n this.element.setAttribute('value', this.initialValue);\n }\n }\n this.previousValue = this.value;\n this.inputPreviousValue = this.value;\n this.element.defaultValue = this.element.value;\n Input.setWidth(this.width, this.textareaWrapper.container);\n this.setWrapperWidth();\n this.renderComplete();\n };\n TextArea.prototype.getModuleName = function () {\n return 'textarea';\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n * @returns {string} - Returns the string value.\n */\n TextArea.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n TextArea.prototype.checkAttributes = function (isDynamic) {\n var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n ['placeholder', 'disabled', 'value', 'readonly'];\n for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n var key = attrs_1[_i];\n if (!isNullOrUndefined(this.element.getAttribute(key))) {\n switch (key) {\n case 'disabled':\n if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['enabled'] === undefined)) || isDynamic) {\n var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n this.element.getAttribute(key) === 'true' ? false : true;\n this.setProperties({ enabled: enabled }, !isDynamic);\n }\n break;\n case 'readonly':\n if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['readonly'] === undefined)) || isDynamic) {\n var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n || this.element.getAttribute(key) === 'true' ? true : false;\n this.setProperties({ readonly: readonly }, !isDynamic);\n }\n break;\n case 'placeholder':\n if ((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['placeholder'] === undefined)) || isDynamic) {\n this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n }\n break;\n case 'value':\n if (((isNullOrUndefined(this.textareaOptions) || (this.textareaOptions['value'] === undefined)) || isDynamic) && this.element.value !== '') {\n this.setProperties({ value: this.element.value }, !isDynamic);\n }\n break;\n }\n }\n }\n };\n TextArea.prototype.wireEvents = function () {\n EventHandler.add(this.element, 'focus', this.focusHandler, this);\n EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n EventHandler.add(this.element, 'keydown', this.keydownHandler, this);\n EventHandler.add(this.element, 'input', this.inputHandler, this);\n EventHandler.add(this.element, 'change', this.changeHandler, this);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n }\n this.bindClearEvent();\n };\n TextArea.prototype.unWireEvents = function () {\n EventHandler.remove(this.element, 'focus', this.focusHandler);\n EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n EventHandler.remove(this.element, 'keydown', this.keydownHandler);\n EventHandler.remove(this.element, 'input', this.inputHandler);\n EventHandler.remove(this.element, 'change', this.changeHandler);\n if (this.isForm) {\n EventHandler.remove(this.formElement, 'reset', this.resetForm);\n }\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also, it maintains the initial TextArea element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n TextArea.prototype.destroy = function () {\n this.unWireEvents();\n if (this.showClearButton) {\n this.clearButton = document.getElementsByClassName('e-clear-icon')[0];\n }\n this.element.value = this.element.defaultValue;\n this.element.classList.remove('e-input', RESIZE_X, RESIZE_Y, RESIZE_XY, RESIZE_NONE);\n this.removeAttributes(['aria-disabled', 'aria-readonly', 'aria-labelledby', 'aria-multiline']);\n if (!isNullOrUndefined(this.textareaWrapper)) {\n this.textareaWrapper.container.insertAdjacentElement('afterend', this.element);\n detach(this.textareaWrapper.container);\n }\n this.textareaWrapper = null;\n Input.destroy({\n element: this.element,\n floatLabelType: this.floatLabelType,\n properties: this.properties\n }, this.clearButton);\n this.formElement = null;\n _super.prototype.destroy.call(this);\n };\n TextArea.prototype.focusHandler = function (args) {\n var eventArgs = {\n container: this.textareaWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n };\n TextArea.prototype.focusOutHandler = function (args) {\n if (!(this.previousValue === null && this.value === null) &&\n (this.previousValue !== this.value)) {\n this.raiseChangeEvent(args, true);\n }\n var eventArgs = {\n container: this.textareaWrapper.container,\n event: args,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n };\n TextArea.prototype.keydownHandler = function (args) {\n if ((args.keyCode === 13 || args.keyCode === 9) && !((this.previousValue === null || this.previousValue === '') && (this.value === null || this.value === '') && this.element.value === '')) {\n this.setProperties({ value: this.element.value }, true);\n }\n };\n TextArea.prototype.inputHandler = function (args) {\n var textareaObj = null || this;\n var eventArgs = {\n event: args,\n value: this.element.value,\n previousValue: this.inputPreviousValue,\n container: this.textareaWrapper.container\n };\n this.inputPreviousValue = this.element.value;\n /* istanbul ignore next */\n if (this.isAngular) {\n textareaObj.localChange({ value: this.element.value });\n this.preventChange = true;\n }\n if (this.isVue) {\n this.preventChange = true;\n }\n this.trigger('input', eventArgs);\n args.stopPropagation();\n };\n TextArea.prototype.changeHandler = function (args) {\n this.setProperties({ value: this.element.value }, true);\n if (this.previousValue !== this.value) {\n this.raiseChangeEvent(args, true);\n }\n args.stopPropagation();\n };\n TextArea.prototype.raiseChangeEvent = function (event, interaction) {\n var eventArgs = {\n event: event,\n value: this.value,\n previousValue: this.previousValue,\n container: this.textareaWrapper.container,\n isInteraction: interaction ? interaction : false,\n isInteracted: interaction ? interaction : false\n };\n this.preventChange = false;\n this.trigger('change', eventArgs);\n this.previousValue = this.value;\n };\n TextArea.prototype.updateHTMLAttributesToWrapper = function () {\n Input.updateHTMLAttributesToWrapper(this.htmlAttributes, this.textareaWrapper.container);\n };\n TextArea.prototype.updateHTMLAttributesToElement = function () {\n Input.updateHTMLAttributesToElement(this.htmlAttributes, this.element);\n };\n TextArea.prototype.bindClearEvent = function () {\n if (this.showClearButton) {\n if (this.enabled) {\n EventHandler.add(this.textareaWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n }\n else {\n EventHandler.remove(this.textareaWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n }\n }\n };\n TextArea.prototype.resetInputHandler = function (event) {\n event.preventDefault();\n if (!(this.textareaWrapper.clearButton.classList.contains(HIDE_CLEAR)) || this.textareaWrapper.container.classList.contains('e-static-clear')) {\n Input.setValue('', this.element, this.floatLabelType, this.showClearButton);\n this.setProperties({ value: this.element.value }, true);\n }\n var eventArgs = {\n event: event,\n value: this.element.value,\n previousValue: this.inputPreviousValue,\n container: this.textareaWrapper.container\n };\n this.trigger('input', eventArgs);\n this.inputPreviousValue = this.element.value;\n this.raiseChangeEvent(event, true);\n if (closest(this.element, 'form')) {\n var element = this.element;\n var keyupEvent = document.createEvent('KeyboardEvent');\n keyupEvent.initEvent('keyup', false, true);\n element.dispatchEvent(keyupEvent);\n }\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextArea element.\n *\n * @param {string} attributes - Specifies the attributes to be add to TextArea element.\n * @returns {void}\n */\n TextArea.prototype.addAttributes = function (attributes) {\n for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n var key = _a[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: false }, true);\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textareaWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: true }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'class') {\n this.element.classList.add(attributes[\"\" + key]);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: attributes[\"\" + key] }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.setAttribute(key, attributes[\"\" + key]);\n }\n }\n };\n /**\n * Removing the multiple attributes as key-value pair to the TextArea element.\n *\n * @param { string[] } attributes - Specifies the attributes name to be removed from TextArea element.\n * @returns {void}\n */\n TextArea.prototype.removeAttributes = function (attributes) {\n for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n var key = attributes_1[_i];\n if (key === 'disabled') {\n this.setProperties({ enabled: true }, true);\n Input.setEnabled(this.enabled, this.element, this.floatLabelType, this.textareaWrapper.container);\n }\n else if (key === 'readonly') {\n this.setProperties({ readonly: false }, true);\n Input.setReadonly(this.readonly, this.element);\n }\n else if (key === 'placeholder') {\n this.setProperties({ placeholder: null }, true);\n Input.setPlaceholder(this.placeholder, this.element);\n }\n else {\n this.element.removeAttribute(key);\n }\n }\n };\n /**\n * Sets the focus to widget for interaction.\n *\n * @returns {void}\n */\n TextArea.prototype.focusIn = function () {\n if (document.activeElement !== this.element && this.enabled) {\n this.element.focus();\n if (this.textareaWrapper.container.classList.contains('e-input-group')\n || this.textareaWrapper.container.classList.contains('e-outline')\n || this.textareaWrapper.container.classList.contains('e-filled')) {\n addClass([this.textareaWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Remove the focus from widget, if the widget is in focus state.\n *\n * @returns {void}\n */\n TextArea.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n if (this.textareaWrapper.container.classList.contains('e-input-group')\n || this.textareaWrapper.container.classList.contains('e-outline')\n || this.textareaWrapper.container.classList.contains('e-filled')) {\n removeClass([this.textareaWrapper.container], [TEXTBOX_FOCUS]);\n }\n }\n };\n /**\n * Sets up the width for the textarea wrapper.\n *\n * @returns {void}\n */\n TextArea.prototype.setWrapperWidth = function () {\n if (this.enabled && ((this.resizeMode !== 'None' && this.resizeMode !== 'Vertical') || (this.cols || this.element.getAttribute('cols')))) {\n if (this.resizeMode !== 'None' && this.resizeMode !== 'Vertical') {\n if (this.textareaWrapper.container.style.width) {\n this.setElementWidth(this.textareaWrapper.container.style.width);\n this.textareaWrapper.container.style.width = '';\n this.textareaWrapper.container.classList.add(AUTO_WIDTH);\n }\n }\n this.textareaWrapper.container.classList.add(AUTO_WIDTH);\n }\n else {\n if (this.textareaWrapper.container.classList.contains(AUTO_WIDTH)) {\n this.textareaWrapper.container.classList.remove(AUTO_WIDTH);\n }\n }\n };\n TextArea.prototype.resetForm = function () {\n if (this.isAngular) {\n this.resetValue('');\n }\n else {\n this.resetValue(this.initialValue);\n }\n if (!isNullOrUndefined(this.textareaWrapper)) {\n var label = this.textareaWrapper.container.querySelector('.e-float-text');\n if (!isNullOrUndefined(label) && this.floatLabelType !== 'Always') {\n if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n label.classList.add('e-label-bottom');\n label.classList.remove('e-label-top');\n }\n else if (this.initialValue !== '') {\n label.classList.add('e-label-top');\n label.classList.remove('e-label-bottom');\n }\n }\n }\n };\n TextArea.prototype.resetValue = function (value) {\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = value;\n if (value == null && this.textareaWrapper.container.classList.contains('e-valid-input')) {\n this.textareaWrapper.container.classList.remove('e-valid-input');\n }\n this.isProtectedOnChange = prevOnChange;\n };\n TextArea.prototype.setElementWidth = function (width) {\n if (typeof width === 'number') {\n this.element.style.width = formatUnit(width);\n }\n else if (typeof width === 'string') {\n this.element.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n }\n };\n TextArea.prototype.getCurrentResizeClass = function (resizeMode) {\n return resizeMode === 'None' ? RESIZE_NONE : (resizeMode === 'Both' ? RESIZE_XY : resizeMode === 'Horizontal' ? RESIZE_X : RESIZE_Y);\n };\n __decorate([\n Property(false)\n ], TextArea.prototype, \"readonly\", void 0);\n __decorate([\n Property(null)\n ], TextArea.prototype, \"value\", void 0);\n __decorate([\n Property('Never')\n ], TextArea.prototype, \"floatLabelType\", void 0);\n __decorate([\n Property('')\n ], TextArea.prototype, \"cssClass\", void 0);\n __decorate([\n Property(null)\n ], TextArea.prototype, \"placeholder\", void 0);\n __decorate([\n Property({})\n ], TextArea.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property(true)\n ], TextArea.prototype, \"enabled\", void 0);\n __decorate([\n Property(false)\n ], TextArea.prototype, \"showClearButton\", void 0);\n __decorate([\n Property(false)\n ], TextArea.prototype, \"enablePersistence\", void 0);\n __decorate([\n Property(null)\n ], TextArea.prototype, \"width\", void 0);\n __decorate([\n Property('Both')\n ], TextArea.prototype, \"resizeMode\", void 0);\n __decorate([\n Property(null)\n ], TextArea.prototype, \"maxLength\", void 0);\n __decorate([\n Property(null)\n ], TextArea.prototype, \"cols\", void 0);\n __decorate([\n Property(null)\n ], TextArea.prototype, \"rows\", void 0);\n __decorate([\n Event()\n ], TextArea.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], TextArea.prototype, \"destroyed\", void 0);\n __decorate([\n Event()\n ], TextArea.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], TextArea.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], TextArea.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], TextArea.prototype, \"input\", void 0);\n TextArea = __decorate([\n NotifyPropertyChanges\n ], TextArea);\n return TextArea;\n}(Component));\nexport { TextArea };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Component, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar SignatureBase = /** @class */ (function (_super) {\n __extends(SignatureBase, _super);\n function SignatureBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* minDistance(distance between the two point) was calaculated for smoothness.*/\n _this.minDistance = 5;\n _this.previous = 0;\n /* interval handles for the smoothness in the mouse move event.*/\n _this.interval = 30;\n _this.timeout = null;\n _this.isSignatureEmpty = true;\n _this.backgroundLoaded = null;\n _this.isBlazor = false;\n _this.isResponsive = false;\n _this.signPointsColl = [];\n _this.signRatioPointsColl = [];\n _this.canRedraw = true;\n return _this;\n }\n /**\n * To Initialize the component rendering\n *\n * @private\n * @param {HTMLCanvasElement} element - Specifies the canvas element.\n * @param {BlazorDotnetObject} dotnetRef - Specifies for blazor client to server communication.\n * @returns {void}\n */\n SignatureBase.prototype.initialize = function (element, dotnetRef) {\n this.clearArray = [];\n this.element = element;\n this.canvasContext = this.element.getContext('2d');\n this.canvasContext.canvas.tabIndex = -1;\n if (dotnetRef) {\n this.dotnetRef = dotnetRef;\n this.isBlazor = true;\n if (this.signatureValue) {\n this.loadPersistedSignature();\n }\n }\n this.setHTMLProperties();\n if (isNullOrUndefined(this.signatureValue)) {\n this.updateSnapCollection(true);\n }\n this.wireEvents();\n if (!this.isBlazor) {\n this.trigger('created', null);\n }\n };\n SignatureBase.prototype.wireEvents = function () {\n if (isNullOrUndefined(this.pointColl) && !this.isReadOnly && !this.disabled) {\n EventHandler.add(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler, this);\n EventHandler.add(this.canvasContext.canvas, 'keydown', this.keyboardHandler, this);\n window.addEventListener('resize', this.resizeHandler.bind(this));\n }\n else if (this.pointColl) {\n EventHandler.add(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler, this);\n EventHandler.add(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);\n }\n };\n SignatureBase.prototype.unwireEvents = function (type) {\n if (type === 'mouseup' || type === 'touchend') {\n EventHandler.remove(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler);\n EventHandler.remove(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n }\n else {\n EventHandler.remove(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler);\n EventHandler.remove(this.canvasContext.canvas, 'keydown', this.keyboardHandler);\n window.removeEventListener('resize', this.resizeHandler);\n }\n };\n SignatureBase.prototype.setHTMLProperties = function () {\n if (this.element.height === 150 && this.element.width === 300 && this.element.offsetHeight !== 0 && this.element.offsetWidth !== 0) {\n this.element.height = this.element.offsetHeight;\n this.element.width = this.element.offsetWidth;\n this.isResponsive = true;\n }\n else if ((this.element.height !== this.element.offsetHeight - 1 || this.element.width !== this.element.offsetWidth - 1)\n && this.element.offsetHeight !== 0 && this.element.offsetWidth !== 0) {\n this.element.height = this.element.offsetHeight;\n this.element.width = this.element.offsetWidth;\n }\n this.canvasContext.fillStyle = this.strokeColor;\n this.tempCanvas = this.createElement('canvas', { className: 'e-' + this.getModuleName() + '-temp' });\n this.tempContext = this.tempCanvas.getContext('2d');\n this.tempCanvas.width = this.element.width;\n this.tempCanvas.height = this.element.height;\n if (this.backgroundImage) {\n this.canvasContext.canvas.style.backgroundImage = 'url(' + this.backgroundImage + ')';\n this.canvasContext.canvas.style.backgroundRepeat = 'no-repeat';\n if (this.saveWithBackground) {\n this.setBackgroundImage(this.backgroundImage, 'temp');\n }\n }\n else if (this.backgroundColor) {\n this.canvasContext.canvas.style.backgroundColor = this.backgroundColor;\n }\n };\n // eslint-disable-next-line\n SignatureBase.prototype.mouseDownHandler = function (e) {\n if (e.buttons === 1 || e.buttons === 2 || e.type === 'touchstart') {\n if (e.type === 'touchstart') {\n e.preventDefault();\n e.stopPropagation();\n }\n this.beginStroke(e);\n this.wireEvents();\n }\n };\n SignatureBase.prototype.mouseMoveHandler = function (e) {\n if (e.buttons === 1 || e.buttons === 2 || e.type === 'touchmove') {\n if (e.type === 'touchmove') {\n e.preventDefault();\n e.stopPropagation();\n }\n if (this.interval) {\n this.updateStrokeWithThrottle(e);\n }\n else {\n this.updateStroke(e);\n }\n }\n };\n SignatureBase.prototype.mouseUpHandler = function (e) {\n var args = { actionName: 'strokeUpdate' };\n if (e.type === 'touchstart') {\n e.preventDefault();\n e.stopPropagation();\n }\n this.endDraw();\n this.updateSnapCollection();\n this.unwireEvents(e.type);\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'mouseUp');\n }\n this.signatureValue = this.snapColl[this.incStep];\n for (var i = 0; i < this.signPointsColl.length; i++) {\n this.signRatioPointsColl.push({ x: (this.signPointsColl[i].x / this.canvasContext.canvas.width),\n y: (this.signPointsColl[i].y / this.canvasContext.canvas.height) });\n }\n this.signPointsColl = [];\n };\n SignatureBase.prototype.keyboardHandler = function (e) {\n var _this = this;\n var args = { fileName: 'Signature', type: 'Png', cancel: false };\n switch (e.key) {\n case 'Delete':\n this.clear();\n break;\n case (e.ctrlKey && 's'):\n if (!this.isBlazor) {\n this.trigger('beforeSave', args, function (observableSaveArgs) {\n if (!args.cancel) {\n _this.save(observableSaveArgs.type, observableSaveArgs.fileName);\n }\n });\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'beforeSave');\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case (e.ctrlKey && 'z'):\n this.undo();\n break;\n case (e.ctrlKey && 'y'):\n this.redo();\n break;\n }\n };\n SignatureBase.prototype.resizeHandler = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (this.isResponsive && this.canRedraw) {\n this.canvasContext.canvas.width = this.element.offsetWidth;\n this.canvasContext.canvas.height = this.element.offsetHeight;\n this.canvasContext.scale(1, 1);\n var pointSize = (this.minStrokeWidth + this.maxStrokeWidth) / 2;\n for (var i = 0; i < this.signRatioPointsColl.length; i++) {\n this.arcDraw((this.signRatioPointsColl[i].x * this.canvasContext.canvas.width), (this.signRatioPointsColl[i].y * this.canvasContext.canvas.height), pointSize);\n }\n this.signPointsColl = [];\n this.canvasContext.closePath();\n this.canvasContext.fill();\n }\n else {\n var restoreImg_1 = new Image();\n restoreImg_1.src = this.snapColl[this.incStep];\n restoreImg_1.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(restoreImg_1, 0, 0, proxy.element.width, proxy.element.height);\n };\n }\n };\n SignatureBase.prototype.beginStroke = function (e) {\n this.internalRefresh();\n this.updateStroke(e);\n };\n SignatureBase.prototype.updateStroke = function (e) {\n var point = this.createPoint(e);\n this.addPoint(point);\n };\n SignatureBase.prototype.updateStrokeWithThrottle = function (args) {\n var now = Date.now();\n var remaining = this.interval - (now - this.previous);\n this.storedArgs = args;\n if (remaining <= 0 || remaining > this.interval) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.previous = now;\n this.updateStroke(this.storedArgs);\n if (!this.timeout) {\n this.storedArgs = null;\n }\n }\n else if (!this.timeout) {\n this.timeout = window.setTimeout(this.delay.bind(this), remaining);\n }\n };\n SignatureBase.prototype.delay = function () {\n this.previous = Date.now();\n this.timeout = null;\n this.updateStroke(this.storedArgs);\n if (!this.timeout) {\n this.storedArgs = null;\n }\n };\n SignatureBase.prototype.createPoint = function (e) {\n var rect = this.canvasContext.canvas.getBoundingClientRect();\n if (e.type === 'mousedown' || e.type === 'mousemove') {\n return this.point(e.clientX - rect.left, e.clientY - rect.top, new Date().getTime());\n }\n else {\n return this.point(e.touches[0].clientX - rect.left, e.touches[0].clientY - rect.top, new Date().getTime());\n }\n };\n /* Returns the current point corrdinates(x, y) and time.*/\n SignatureBase.prototype.point = function (pointX, pointY, time) {\n this.pointX = pointX;\n this.pointY = pointY;\n this.time = time || new Date().getTime();\n return { x: this.pointX, y: this.pointY, time: this.time };\n };\n SignatureBase.prototype.addPoint = function (point) {\n var points = this.pointColl;\n var controlPoint1;\n var controlPoint2;\n var lastPoint = points.length > 0 && points[points.length - 1];\n var isLastPointTooClose = lastPoint ? this.distanceTo(lastPoint) <= this.minDistance : false;\n if (!lastPoint || !(lastPoint && isLastPointTooClose)) {\n points.push(point);\n if (points.length > 2) {\n if (points.length === 3) {\n points.unshift(points[0]);\n }\n controlPoint1 = (this.calculateCurveControlPoints(points[0], points[1], points[2])).controlPoint2;\n controlPoint2 = (this.calculateCurveControlPoints(points[1], points[2], points[3])).controlPoint1;\n this.startPoint = points[1];\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n this.endPoint = points[2];\n this.startDraw();\n points.shift();\n }\n }\n };\n SignatureBase.prototype.startDraw = function () {\n var velocity;\n velocity = this.pointVelocityCalc(this.startPoint);\n velocity = this.velocity * velocity + (1 - this.velocity) * this.lastVelocity;\n var newWidth = Math.max(this.maxStrokeWidth / (velocity + 1), this.minStrokeWidth);\n this.curveDraw(this.lastWidth, newWidth);\n this.lastVelocity = velocity;\n this.lastWidth = newWidth;\n };\n SignatureBase.prototype.endDraw = function () {\n if (isNullOrUndefined(this.pointColl)) {\n return;\n }\n ;\n var canDrawCurve = this.pointColl.length > 2;\n var point = this.pointColl[0];\n if (!canDrawCurve && point) {\n this.strokeDraw(point);\n }\n };\n /* Calculate the Bezier (x, y) coordinate of the curve. */\n SignatureBase.prototype.curveDraw = function (startWidth, endWidth) {\n var context = this.canvasContext;\n var width;\n var i;\n var t1;\n var t2;\n var t3;\n var u1;\n var u2;\n var u3;\n var x;\n var y;\n var widthValue = endWidth - startWidth;\n var bezierLength = this.bezierLengthCalc();\n var drawSteps = Math.ceil(bezierLength) * 2;\n context.beginPath();\n for (i = 0; i < drawSteps; i++) {\n t1 = i / drawSteps;\n t2 = t1 * t1;\n t3 = t2 * t1;\n u1 = 1 - t1;\n u2 = u1 * u1;\n u3 = u2 * u1;\n x = u3 * this.startPoint.x;\n x += 3 * u2 * t1 * this.controlPoint1.x;\n x += 3 * u1 * t2 * this.controlPoint2.x;\n x += t3 * this.endPoint.x;\n y = u3 * this.startPoint.y;\n y += 3 * u2 * t1 * this.controlPoint1.y;\n y += 3 * u1 * t2 * this.controlPoint2.y;\n y += t3 * this.endPoint.y;\n width = Math.min(startWidth + t3 * widthValue, this.maxStrokeWidth);\n this.arcDraw(x, y, width);\n }\n context.closePath();\n context.fill();\n this.isSignatureEmpty = false;\n };\n SignatureBase.prototype.strokeDraw = function (point) {\n var context = this.canvasContext;\n var pointSize = (this.minStrokeWidth + this.maxStrokeWidth) / 2;\n context.beginPath();\n this.arcDraw(point.x, point.y, pointSize);\n context.closePath();\n context.fill();\n this.isSignatureEmpty = false;\n };\n SignatureBase.prototype.arcDraw = function (x, y, size) {\n this.signPointsColl.push({ x: x, y: y });\n var context = this.canvasContext;\n context.moveTo(x, y);\n context.arc(x, y, size, 0, 2 * Math.PI, false);\n };\n /* Utility functions for Bezier algorithm*/\n SignatureBase.prototype.calculateCurveControlPoints = function (p1, p2, p3) {\n var dx1 = p1.x - p2.x;\n var dy1 = p1.y - p2.y;\n var dx2 = p2.x - p3.x;\n var dy2 = p2.y - p3.y;\n var m1 = { x: (p1.x + p2.x) / 2.0, y: (p1.y + p2.y) / 2.0 };\n var m2 = { x: (p2.x + p3.x) / 2.0, y: (p2.y + p3.y) / 2.0 };\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n var dxm = (m1.x - m2.x);\n var dym = (m1.y - m2.y);\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n var tx = p2.x - cm.x;\n var ty = p2.y - cm.y;\n return {\n controlPoint1: this.point(m1.x + tx, m1.y + ty, 0),\n controlPoint2: this.point(m2.x + tx, m2.y + ty, 0)\n };\n };\n /* Returns approximated bezier length of the curuve.*/\n SignatureBase.prototype.bezierLengthCalc = function () {\n var steps = 10;\n var length = 0;\n var i;\n var t;\n var pointx1;\n var pointy1;\n var pointx2;\n var pointy2;\n var pointx3;\n var pointy3;\n for (i = 0; i <= steps; i++) {\n t = i / steps;\n pointx1 = this.bezierPointCalc(t, this.startPoint.x, this.controlPoint1.x, this.controlPoint2.x, this.endPoint.x);\n pointy1 = this.bezierPointCalc(t, this.startPoint.y, this.controlPoint1.y, this.controlPoint2.y, this.endPoint.y);\n if (i > 0) {\n pointx3 = pointx1 - pointx2;\n pointy3 = pointy1 - pointy2;\n length += Math.sqrt(pointx3 * pointx3 + pointy3 * pointy3);\n }\n pointx2 = pointx1;\n pointy2 = pointy1;\n }\n return length;\n };\n /* Calculate parametric value of x or y given t and the\n four point(startpoint, controlpoint1, controlpoint2, endpoint) coordinates of a cubic bezier curve.*/\n SignatureBase.prototype.bezierPointCalc = function (t, startpoint, cp1, cp2, endpoint) {\n return startpoint * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * cp1 * (1.0 - t) * (1.0 - t) * t + 3.0 *\n cp2 * (1.0 - t) * t * t + endpoint * t * t * t;\n };\n /* Velocity between the current point and last point.*/\n SignatureBase.prototype.pointVelocityCalc = function (startPoint) {\n return (this.time !== startPoint.time) ? this.distanceTo(startPoint) / (this.time - startPoint.time) : 0;\n };\n /* Distance between the current point and last point.*/\n SignatureBase.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.pointX - start.x, 2) + Math.pow(this.pointY - start.y, 2));\n };\n SignatureBase.prototype.isRead = function (isRead) {\n if (isRead) {\n EventHandler.remove(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler);\n }\n else if (!this.disabled) {\n EventHandler.add(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler, this);\n }\n };\n SignatureBase.prototype.enableOrDisable = function (isDisable) {\n this.disabled = isDisable;\n if (isDisable) {\n this.canvasContext.canvas.style.filter = 'opacity(0.5)';\n this.isRead(true);\n }\n else {\n this.canvasContext.canvas.style.filter = '';\n this.isRead(false);\n }\n };\n SignatureBase.prototype.updateSnapCollection = function (isClear) {\n if (isNullOrUndefined(this.incStep)) {\n this.incStep = -1;\n this.incStep++;\n this.snapColl = [];\n this.clearArray = [];\n }\n else {\n this.incStep++;\n }\n if (this.incStep < this.snapColl.length) {\n this.snapColl.length = this.incStep;\n }\n if (this.incStep > 0) {\n var canvasNew = this.createElement('canvas', { className: 'e-' + this.getModuleName() + '-wrapper' });\n var canvasContextNew = canvasNew.getContext('2d');\n canvasNew.width = this.canvasContext.canvas.width;\n canvasNew.height = this.canvasContext.canvas.height;\n canvasContextNew.drawImage(this.canvasContext.canvas, 0, 0, canvasNew.width, canvasNew.height);\n this.snapColl.push(canvasNew.toDataURL());\n }\n else {\n this.snapColl.push(this.canvasContext.canvas.toDataURL());\n }\n if (isClear) {\n this.clearArray.push(this.incStep);\n }\n };\n SignatureBase.prototype.setBackgroundImage = function (imageSrc, type) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var imageObj = new Image();\n imageObj.crossOrigin = 'anonymous';\n imageObj.src = imageSrc;\n if (type == 'temp') {\n imageObj.onload = function () {\n proxy.tempContext.globalCompositeOperation = 'source-over';\n proxy.tempContext.drawImage(imageObj, 0, 0, proxy.element.width, proxy.element.height);\n };\n }\n else {\n imageObj.onload = function () {\n proxy.canvasContext.globalCompositeOperation = 'source-over';\n proxy.canvasContext.drawImage(imageObj, 0, 0, proxy.element.width, proxy.element.height);\n proxy.updateSnapCollection();\n proxy.saveBackground(true);\n };\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n }\n };\n SignatureBase.prototype.setBackgroundColor = function (color) {\n var canvasEle = this.canvasContext;\n canvasEle.strokeStyle = color;\n var i;\n var j;\n for (i = 1; i <= canvasEle.canvas.width; i++) {\n for (j = 1; j <= canvasEle.canvas.height; j++) {\n canvasEle.strokeRect(0, 0, i, j);\n }\n }\n this.updateSnapCollection();\n };\n SignatureBase.prototype.loadPersistedSignature = function () {\n if (isNullOrUndefined(this.signatureValue)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var lastImage = new Image();\n lastImage.src = this.signatureValue;\n lastImage.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(lastImage, 0, 0);\n proxy.updateSnapCollection();\n };\n this.isSignatureEmpty = false;\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n */\n SignatureBase.prototype.getBlob = function (url) {\n var arr = url.split(',');\n var type = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: type });\n };\n SignatureBase.prototype.download = function (blob, fileName) {\n var blobUrl = URL.createObjectURL(blob);\n var a = document.createElement('a');\n a.href = blobUrl;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n SignatureBase.prototype.internalRefresh = function () {\n this.pointColl = [];\n this.lastVelocity = 0;\n this.lastWidth = (this.minStrokeWidth + this.maxStrokeWidth) / 2;\n };\n /**\n * To refresh the signature.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.refresh = function () {\n this.isResponsive = false;\n this.setHTMLProperties();\n this.resizeHandler();\n this.internalRefresh();\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.clear = function () {\n var args = { actionName: 'clear' };\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n this.tempContext.clearRect(0, 0, this.tempContext.canvas.width, this.tempContext.canvas.height);\n if (this.saveWithBackground && this.backgroundImage) {\n this.setBackgroundImage(this.backgroundImage, 'temp');\n }\n this.internalRefresh();\n this.signRatioPointsColl = [];\n this.updateSnapCollection(true);\n this.isSignatureEmpty = this.canRedraw = true;\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'Clear');\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.undo = function () {\n var args = { actionName: 'undo' };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (this.incStep > 0) {\n this.incStep--;\n var undoImg_1 = new Image();\n undoImg_1.src = this.snapColl[this.incStep];\n undoImg_1.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(undoImg_1, 0, 0, proxy.element.width, proxy.element.height);\n };\n }\n this.isClear();\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'Undo');\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.redo = function () {\n var args = { actionName: 'redo' };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (this.incStep < this.snapColl.length - 1) {\n this.incStep++;\n var redoImg_1 = new Image();\n redoImg_1.src = this.snapColl[this.incStep];\n redoImg_1.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(redoImg_1, 0, 0, proxy.element.width, proxy.element.height);\n };\n }\n this.isClear();\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'Redo');\n }\n };\n SignatureBase.prototype.isClear = function () {\n if (this.clearArray) {\n var empty = false;\n for (var i = 0; i < this.clearArray.length; i++) {\n if (this.clearArray[i] === this.incStep) {\n this.isSignatureEmpty = true;\n empty = true;\n }\n }\n if (!empty) {\n this.isSignatureEmpty = false;\n }\n }\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n */\n SignatureBase.prototype.isEmpty = function () {\n return this.isSignatureEmpty;\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n */\n SignatureBase.prototype.canUndo = function () {\n return this.incStep > 0;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n */\n SignatureBase.prototype.canRedo = function () {\n return this.incStep < this.snapColl.length - 1;\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n * @param {number} x- Specifies the x-coordinate to start the text of a signature. Default to the center point of the image if it not specified.\n * @param {number} y - Specifies the y-coordinate to start the text of a signature. Default to the center point of the image if it not specified.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.draw = function (text, fontFamily, fontSize, x, y) {\n var args = { actionName: 'draw-text' };\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n fontFamily = fontFamily || 'Arial';\n fontSize = fontSize || 30;\n this.canvasContext.font = fontSize + 'px ' + fontFamily;\n var startX = this.element.width / 2;\n var startY = this.element.height / 2;\n if (isNullOrUndefined(x) && isNullOrUndefined(y)) {\n this.canvasContext.textAlign = 'center';\n this.canvasContext.textBaseline = 'middle';\n }\n else {\n startX = isNullOrUndefined(x) ? startX : x;\n startY = isNullOrUndefined(y) ? startY + fontSize / 2 : (y + fontSize / 2);\n }\n this.canvasContext.fillText(text, startX, startY);\n this.updateSnapCollection();\n this.isSignatureEmpty = false;\n this.trigger('change', args);\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n */\n SignatureBase.prototype.load = function (signature, width, height) {\n height = height || this.element.height;\n width = width || this.element.width;\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var bitmapImage = new Image();\n bitmapImage.src = signature;\n if (signature.slice(0, 4) !== 'data') {\n bitmapImage.crossOrigin = 'anonymous';\n }\n bitmapImage.onload = function () {\n Promise.all([\n createImageBitmap(bitmapImage, 0, 0, width, height)\n ]).then(function (results) {\n var tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n tempCanvas.getContext('2d').drawImage(results[0], 0, 0);\n if (signature.slice(0, 4) !== 'data') {\n proxy.canvasContext.globalCompositeOperation = 'source-over';\n }\n proxy.canvasContext.drawImage(tempCanvas, 0, 0, width, height, 0, 0, proxy.element.width, proxy.element.height);\n proxy.updateSnapCollection();\n });\n };\n this.isSignatureEmpty = this.canRedraw = false;\n };\n SignatureBase.prototype.saveBackground = function (savebg) {\n var imageSrc;\n if (savebg && this.backgroundImage) {\n imageSrc = this.snapColl[this.incStep - 1];\n }\n else {\n imageSrc = this.snapColl[this.incStep];\n }\n if (!savebg) {\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n if (this.backgroundImage) {\n this.setBackgroundImage(this.backgroundImage);\n }\n else if (this.backgroundColor) {\n this.setBackgroundColor(this.backgroundColor);\n savebg = true;\n }\n }\n if (savebg) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n var imageObj_1 = new Image();\n imageObj_1.crossOrigin = 'anonymous';\n imageObj_1.src = imageSrc;\n imageObj_1.onload = function () {\n proxy_1.backgroundLoaded = true;\n proxy_1.canvasContext.globalCompositeOperation = 'source-over';\n proxy_1.canvasContext.drawImage(imageObj_1, 0, 0, proxy_1.element.width, proxy_1.element.height);\n proxy_1.save(proxy_1.fileType, proxy_1.fileName);\n };\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {SignatureFileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.save = function (type, fileName) {\n if (this.saveWithBackground && this.backgroundLoaded == null && (this.backgroundImage || this.backgroundColor)) {\n this.backgroundLoaded = false;\n this.fileType = type;\n this.fileName = fileName;\n this.saveBackground(false);\n }\n else if (type === 'Svg') {\n fileName = fileName || 'Signature';\n this.toSVG(fileName);\n }\n else if (type === 'Jpeg') {\n fileName = fileName || 'Signature';\n if (!this.saveWithBackground || this.saveWithBackground && !(this.backgroundImage || this.backgroundColor)) {\n this.toJPEG(fileName);\n }\n else {\n var dataURL = this.canvasContext.canvas.toDataURL('image/jpeg');\n this.download(this.getBlob(dataURL), fileName + '.' + 'jpeg');\n }\n }\n else {\n fileName = fileName || 'Signature';\n var dataURL = this.canvasContext.canvas.toDataURL('image/png');\n this.download(this.getBlob(dataURL), fileName + '.' + 'png');\n }\n if (this.saveWithBackground && this.backgroundLoaded) {\n this.resetSnap();\n }\n };\n SignatureBase.prototype.resetSnap = function () {\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var restoreObj = new Image();\n restoreObj.src = this.snapColl[this.incStep - 1];\n restoreObj.onload = function () {\n proxy.canvasContext.drawImage(restoreObj, 0, 0, proxy.element.width, proxy.element.height);\n proxy.updateSnapCollection();\n };\n this.backgroundLoaded = null;\n this.snapColl.pop();\n this.incStep--;\n this.snapColl.pop();\n this.incStep--;\n };\n SignatureBase.prototype.toJPEG = function (fileName) {\n var _this = this;\n var imageSrc = this.snapColl[this.incStep];\n this.setBackgroundColor('#ffffff');\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var imageObj = new Image();\n imageObj.crossOrigin = 'anonymous';\n imageObj.src = imageSrc;\n imageObj.onload = function () {\n proxy.canvasContext.globalCompositeOperation = 'source-over';\n proxy.canvasContext.drawImage(imageObj, 0, 0, proxy.element.width, proxy.element.height);\n var dataURL = proxy.canvasContext.canvas.toDataURL('image/jpeg');\n proxy.download(proxy.getBlob(dataURL), fileName + '.' + 'jpeg');\n proxy.canvasContext.clearRect(0, 0, proxy.canvasContext.canvas.width, proxy.canvasContext.canvas.height);\n _this.resizeHandler();\n };\n this.snapColl.pop();\n this.incStep--;\n };\n SignatureBase.prototype.toSVG = function (fileName, dataUrl) {\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.canvasContext.canvas.width.toString());\n svg.setAttribute('height', this.canvasContext.canvas.height.toString());\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.canvasContext.canvas.height.toString());\n img.setAttributeNS(null, 'width', this.canvasContext.canvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '';\n var footer = '';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName == null) {\n return svgDataUrl;\n }\n else {\n this.download(this.getBlob(svgDataUrl), fileName + '.' + 'svg');\n return null;\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n */\n SignatureBase.prototype.saveAsBlob = function () {\n return this.getBlob(this.canvasContext.canvas.toDataURL('image/png'));\n };\n /**\n * To get the signature as Base 64.\n *\n * @private\n * @param {SignatureFileType} type - Specifies the type of the image format.\n * @returns {string}.\n */\n SignatureBase.prototype.getSignature = function (type) {\n if (this.saveWithBackground && this.backgroundColor && !this.backgroundImage) {\n this.tempContext.fillStyle = this.backgroundColor;\n this.tempContext.fillRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n }\n else if (!this.backgroundColor && !this.backgroundImage && type === 'Jpeg') {\n this.tempContext.fillStyle = \"#fff\";\n this.tempContext.fillRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n }\n this.tempContext.drawImage(this.element, 0, 0);\n if (type === 'Jpeg') {\n return this.tempCanvas.toDataURL('image/jpeg');\n }\n else if (type === 'Svg') {\n return this.toSVG(null, this.tempCanvas.toDataURL('image/png'));\n }\n else {\n return this.tempCanvas.toDataURL('image/png');\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n SignatureBase.prototype.getModuleName = function () {\n return 'signature';\n };\n /**\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n SignatureBase.prototype.getPersistData = function () {\n this.signatureValue = this.snapColl[this.incStep];\n return this.addOnPersist(['signatureValue']);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n SignatureBase.prototype.destroy = function () {\n if (this.getModuleName() !== 'image-editor') {\n this.unwireEvents(null);\n removeClass([this.element], 'e-' + this.getModuleName());\n this.element.removeAttribute('tabindex');\n this.pointColl = null;\n }\n _super.prototype.destroy.call(this);\n };\n /**\n * Modified onPropertyChanged method for both blazor and EJ2 signature component.\n *\n * @private\n * @param {string} key - Specifies the property, which changed.\n * @param {string} value - Specifies the property value changed.\n * @returns {void}\n */\n SignatureBase.prototype.propertyChanged = function (key, value) {\n var canvasNew = this.canvasContext;\n switch (key) {\n case 'backgroundColor':\n canvasNew.canvas.style.backgroundColor = value;\n this.backgroundColor = value;\n break;\n case 'backgroundImage':\n canvasNew.canvas.style.backgroundImage = 'url(' + value + ')';\n this.backgroundImage = value;\n if (this.saveWithBackground) {\n this.setBackgroundImage(this.backgroundImage, 'temp');\n }\n break;\n case 'strokeColor':\n canvasNew.fillStyle = value;\n this.strokeColor = value;\n break;\n case 'saveWithBackground':\n this.saveWithBackground = value;\n break;\n case 'maxStrokeWidth':\n this.maxStrokeWidth = value;\n break;\n case 'minStrokeWidth':\n this.minStrokeWidth = value;\n break;\n case 'velocity':\n this.velocity = value;\n break;\n case 'isReadOnly':\n this.isRead(value);\n break;\n case 'disabled':\n this.enableOrDisable(value);\n break;\n }\n };\n return SignatureBase;\n}(Component));\nexport { SignatureBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, addClass } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '../common/signature-base';\n/**\n * The Signature component allows user to draw smooth signatures as vector outline of strokes using variable width bezier curve interpolation.\n * It allows to save signature as image.\n * You can use your finger, pen, or mouse on a tablet, touchscreen, etc., to draw your own signature on this Signature component.\n * Signature component is a user interface to draw the Signature or Text.\n * It provides supports for various Background color, Stroke color and Background Image.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Signature = /** @class */ (function (_super) {\n __extends(Signature, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {SignatureModel} options - Specifies the Signature model.\n * @param {string | HTMLCanvasElement} element - Specifies the element.\n * @private\n */\n function Signature(options, element) {\n return _super.call(this, options, element) || this;\n }\n Signature.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n Signature.prototype.render = function () {\n this.initialize();\n };\n Signature.prototype.initialize = function () {\n this.element.setAttribute('role', 'img');\n this.element.setAttribute('aria-label', 'signature');\n addClass([this.element], 'e-' + this.getModuleName());\n _super.prototype.initialize.call(this, this.element);\n if (this.enablePersistence) {\n this.loadPersistedSignature();\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n Signature.prototype.getModuleName = function () {\n return 'signature';\n };\n /**\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Signature.prototype.getPersistData = function () {\n return this.addOnPersist(['signatureValue']);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {SignatureModel} newProp - Specifies new properties\n * @param {SignatureModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Signature.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'backgroundColor':\n _super.prototype.propertyChanged.call(this, prop, newProp.backgroundColor);\n break;\n case 'backgroundImage':\n _super.prototype.propertyChanged.call(this, prop, newProp.backgroundImage);\n break;\n case 'strokeColor':\n if (newProp.strokeColor !== oldProp.strokeColor) {\n _super.prototype.propertyChanged.call(this, prop, newProp.strokeColor);\n }\n break;\n case 'saveWithBackground':\n _super.prototype.propertyChanged.call(this, prop, newProp.saveWithBackground);\n break;\n case 'isReadOnly':\n _super.prototype.propertyChanged.call(this, prop, newProp.isReadOnly);\n break;\n case 'disabled':\n _super.prototype.propertyChanged.call(this, prop, newProp.disabled);\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], Signature.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], Signature.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], Signature.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], Signature.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], Signature.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], Signature.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], Signature.prototype, \"velocity\", void 0);\n __decorate([\n Property('en-US')\n ], Signature.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], Signature.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], Signature.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Signature.prototype, \"created\", void 0);\n Signature = __decorate([\n NotifyPropertyChanges\n ], Signature);\n return Signature;\n}(SignatureBase));\nexport { Signature };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { addClass, Event, attributes, compile, Component, EventHandler, getUniqueID, select, Browser, append } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, KeyboardEvents, NotifyPropertyChanges, Property, remove, removeClass, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport { Tooltip } from '@syncfusion/ej2-popups';\nvar ICONCSS = 'e-rating-icon e-icons e-star-filled';\nvar ITEMLIST = 'e-rating-item-list';\nvar ITEMCONTAINER = 'e-rating-item-container';\nvar SELECTED = 'e-rating-selected';\nvar INTERMEDIATE = 'e-rating-intermediate';\nvar LABEL = 'e-rating-label';\nvar RESET = 'e-icons e-reset';\nvar HIDDEN = 'e-rating-hidden';\nvar DISABLED = 'e-disabled';\nvar READONLY = 'e-rating-readonly';\nvar RTL = 'e-rtl';\nvar ANIMATION = 'e-rating-animation';\nvar FULLTEMPLATE = 'e-rating-full';\nvar EMPTYTEMPLATE = 'e-rating-empty';\nvar SELECTEDVALUE = 'e-selected-value';\nvar RATINGVALUE = '--rating-value';\n/**\n * Defines where to position the label in rating\n */\nexport var LabelPosition;\n(function (LabelPosition) {\n /**\n * The label is positioned at the top center of the rating component.\n */\n LabelPosition[\"Top\"] = \"Top\";\n /**\n * The label is positioned at the bottom center of the rating component.\n */\n LabelPosition[\"Bottom\"] = \"Bottom\";\n /**\n * The label is positioned at the left side of the rating component.\n */\n LabelPosition[\"Left\"] = \"Left\";\n /**\n * The label is positioned at the right side of the rating component.\n */\n LabelPosition[\"Right\"] = \"Right\";\n})(LabelPosition || (LabelPosition = {}));\n/**\n * Defines the precision type of the rating.\n * It is used to component the granularity of the rating, allowing users to provide ratings with varying levels of precision.\n */\nexport var PrecisionType;\n(function (PrecisionType) {\n /**\n * The rating is increased in whole number increments.\n */\n PrecisionType[\"Full\"] = \"Full\";\n /**\n * The rating is increased in increments of 0.5 (half).\n */\n PrecisionType[\"Half\"] = \"Half\";\n /**\n * The rating is increased in increments of 0.25 (quarter).\n */\n PrecisionType[\"Quarter\"] = \"Quarter\";\n /**\n * The rating is increased in increments of 0.1.\n */\n PrecisionType[\"Exact\"] = \"Exact\";\n})(PrecisionType || (PrecisionType = {}));\n/**\n * The Rating component allows the user to rate something by clicking on a set of symbols on a numeric scale.\n * This allows users to provide feedback or ratings for products, services, or content.\n *\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Rating = /** @class */ (function (_super) {\n __extends(Rating, _super);\n /**\n * Constructor for creating the widget\n *\n * @param {RatingModel} options - Specifies the rating model\n * @param {string|HTMLButtonElement} element - Specifies the target element\n */\n function Rating(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.itemElements = [];\n return _this;\n }\n Rating.prototype.preRender = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n this.keyConfigs = {\n downarrow: 'downarrow',\n leftarrow: 'leftarrow',\n rightarrow: 'rightarrow',\n uparrow: 'uparrow',\n space: 'space'\n };\n this.tooltipOpen = false;\n this.isTouchSelected = false;\n };\n Rating.prototype.render = function () {\n this.initialize();\n this.updateMinValue();\n this.updateTemplateFunction();\n this.triggerChange(null, this.value, false);\n this.renderItems();\n this.displayLabel();\n };\n Rating.prototype.initialize = function () {\n this.wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-container ' });\n this.element.parentNode.insertBefore(this.wrapper, this.element);\n this.wrapper.appendChild(this.element);\n if ((this.element.getAttribute('name') == null)) {\n this.element.setAttribute('name', this.element.id);\n }\n attributes(this.element, { 'aria-label': 'rating' });\n this.renderItemList();\n this.updateReset();\n if (this.readOnly) {\n this.wrapper.classList.add(READONLY);\n }\n if (!this.visible) {\n this.wrapper.classList.add(HIDDEN);\n }\n if (this.enableRtl) {\n this.wrapper.classList.add(RTL);\n }\n if (this.enableAnimation) {\n this.wrapper.classList.add(ANIMATION);\n }\n if (this.cssClass) {\n addClass([this.wrapper], this.cssClass.split(' '));\n }\n this.updateTooltip();\n this.wireKeyboardEvent();\n this.updateDisabled();\n };\n Rating.prototype.updateDisabled = function () {\n this.wrapper.classList[this.disabled ? 'add' : 'remove'](DISABLED);\n attributes(this.ratingItemList, { 'tabindex': (this.disabled) ? '-1' : '0' });\n this.updateResetButton();\n };\n Rating.prototype.updateResetButton = function () {\n if (this.allowReset) {\n var isDisabled = (this.value <= this.min) || this.disabled;\n this.resetElement.classList[isDisabled ? 'add' : 'remove'](DISABLED);\n attributes(this.resetElement, { 'tabindex': (isDisabled ? '-1' : '0'), 'aria-hidden': isDisabled.toString() });\n }\n };\n Rating.prototype.renderItemList = function () {\n var _this = this;\n this.ratingItemList = this.createElement('div', {\n className: ITEMLIST,\n id: this.element.id + '_item-list'\n });\n attributes(this.ratingItemList, { 'aria-label': 'rating', 'role': 'slider' });\n this.wrapper.appendChild(this.ratingItemList);\n EventHandler.add(this.ratingItemList, 'touchmove', function (e) { return _this.touchMoveHandler(e); }, this);\n EventHandler.add(this.ratingItemList, Browser.touchEndEvent, this.touchEndHandler, this);\n };\n Rating.prototype.touchMoveHandler = function (e) {\n if (!this.isTouchSelected) {\n this.wrapper.classList.add('e-rating-touch');\n this.isTouchSelected = true;\n }\n this.wrapper.classList.add('e-touch-select');\n var rect = this.ratingItemList.getBoundingClientRect();\n var x = e.touches[0].clientX - rect.x;\n var currValue = (x / rect.width) * this.itemsCount;\n currValue = (this.enableRtl) ? (this.itemsCount - currValue) : currValue;\n currValue = currValue < this.min ? this.min : currValue > this.itemsCount ? this.itemsCount : currValue;\n currValue = this.validateValue(currValue);\n var element = currValue === 0 ? null : this.itemElements[parseInt((Math.ceil(currValue) - 1).toString(), 10)];\n if (currValue === this.currentValue) {\n if (this.showTooltip && element) {\n this.openRatingTooltip(element, false);\n }\n return;\n }\n var previousValue = this.currentValue;\n this.triggerChange(e, currValue);\n this.updateCurrentValue(currValue);\n if (this.showTooltip) {\n if (element) {\n if (Math.ceil(currValue) !== Math.ceil(previousValue)) {\n this.closeRatingTooltip();\n }\n this.openRatingTooltip(element, true);\n }\n else {\n this.closeRatingTooltip();\n }\n }\n };\n Rating.prototype.touchEndHandler = function () {\n this.closeRatingTooltip();\n this.wrapper.classList.remove('e-touch-select');\n };\n Rating.prototype.updateTemplateFunction = function () {\n this.emptyTemplateFunction = this.emptyTemplate ? this.getTemplateString(this.emptyTemplate) : null;\n this.fullTemplateFunction = this.fullTemplate ? this.getTemplateString(this.fullTemplate) : null;\n };\n Rating.prototype.renderItems = function () {\n var _this = this;\n for (var i = 0; i < this.itemsCount; i++) {\n var ratingItemContainer = this.createElement('span', { className: ITEMCONTAINER });\n var spanItem = this.createElement('span', { className: 'e-rating-item' });\n var ratingValue = this.getRatingValue(this.value, i);\n this.renderItemContent(spanItem, ratingValue, i, false);\n ratingItemContainer.appendChild(spanItem);\n this.wireItemsEvents(ratingItemContainer, i + 1);\n this.itemElements.push(ratingItemContainer);\n var eventArgs = { element: ratingItemContainer, value: i + 1 };\n this.trigger('beforeItemRender', eventArgs, function (args) {\n _this.ratingItemList.appendChild(args.element);\n });\n }\n attributes(this.ratingItemList, { 'aria-valuemax': this.itemsCount.toString() });\n this.updateItemValue(false);\n };\n Rating.prototype.renderItemContent = function (spanEle, val, index, isrerender) {\n if (isrerender) {\n this.removeItemContent(spanEle);\n }\n if (this.fullTemplate && val === 1) {\n spanEle.classList.add(FULLTEMPLATE);\n append(this.fullTemplateFunction({ index: index, ratingValue: val }, this, 'ratingFullTemplate', (this.element.id + 'fullTemplate'), this.isStringTemplate), spanEle);\n }\n else if (this.emptyTemplate) {\n spanEle.classList.add(EMPTYTEMPLATE);\n append(this.emptyTemplateFunction({ index: index, ratingValue: val }, this, 'ratingEmptyTemplate', (this.element.id + 'emptyTemplate'), this.isStringTemplate), spanEle);\n }\n else {\n addClass([spanEle], ICONCSS.split(' '));\n }\n };\n Rating.prototype.removeItemContent = function (spanEle) {\n spanEle.classList.remove(FULLTEMPLATE, EMPTYTEMPLATE);\n removeClass([spanEle], ICONCSS.split(' '));\n if (spanEle.firstChild) {\n spanEle.innerHTML = '';\n }\n };\n Rating.prototype.updateTooltip = function () {\n if (this.showTooltip) {\n this.tooltipObj = new Tooltip({\n target: '.e-rating-item-container', windowCollision: true,\n opensOn: 'Custom', cssClass: this.cssClass ? ('e-rating-tooltip ' + this.cssClass) : 'e-rating-tooltip'\n });\n this.tooltipObj.appendTo(this.ratingItemList);\n }\n else {\n if (!isNullOrUndefined(this.tooltipObj)) {\n this.tooltipObj.destroy();\n this.tooltipObj = null;\n }\n }\n };\n Rating.prototype.updateMinValue = function () {\n this.setProperties({ min: this.validateValue(this.min) }, true);\n if (this.min > 0 && this.value < this.min) {\n this.triggerChange(null, this.min, false);\n }\n attributes(this.ratingItemList, { 'aria-valuemin': this.min.toString() });\n };\n Rating.prototype.validateValue = function (currentValue) {\n if (currentValue > this.itemsCount) {\n currentValue = this.itemsCount;\n }\n else if (currentValue < 0) {\n currentValue = 0;\n }\n else {\n currentValue = ((this.precision === PrecisionType.Full) || this.enableSingleSelection) ? Math.round(currentValue) :\n (this.precision === PrecisionType.Half) ? (Math.round(currentValue * 2) / 2) :\n (this.precision === PrecisionType.Quarter) ? (Math.round(currentValue * 4) / 4) : (Math.round(currentValue * 10) / 10);\n }\n return currentValue;\n };\n Rating.prototype.getRatingValue = function (value, i) {\n return (this.enableSingleSelection) ? (((value > i) && (value <= i + 1)) ? 1 : 0) :\n (value >= i + 1) ? 1 : ((value < i) ? 0 : (value - i));\n };\n Rating.prototype.updateItemValue = function (isUpdate) {\n if (isUpdate === void 0) { isUpdate = true; }\n if (isUpdate && this.isReact) {\n this.clearTemplate(['ratingEmptyTemplate', 'ratingFullTemplate']);\n }\n for (var i = 0; i < this.itemsCount; i++) {\n var itemElement = this.itemElements[parseInt(i.toString(), 10)];\n itemElement.classList.remove(SELECTED, INTERMEDIATE, SELECTEDVALUE);\n var ratingValue = this.getRatingValue(this.currentValue, i);\n if (ratingValue === 1) {\n itemElement.classList.add(SELECTED);\n }\n else if (ratingValue > 0) {\n itemElement.classList.add(INTERMEDIATE);\n }\n else if ((this.precision === PrecisionType.Full) && (i + 1 <= this.value) && (!this.enableSingleSelection)) {\n itemElement.classList.add(SELECTEDVALUE);\n }\n if (isUpdate) {\n this.updateItemContent(ratingValue, i);\n }\n itemElement.style.setProperty(RATINGVALUE, (ratingValue * 100) + '%');\n itemElement.classList[((this.value === 0) && (i === 0)) || (this.value === i + 1) || ((ratingValue > 0) && (ratingValue < 1)) ? 'add' : 'remove']('e-rating-focus');\n }\n if (isUpdate) {\n this.renderReactTemplates();\n }\n this.updateResetButton();\n attributes(this.ratingItemList, { 'aria-valuenow': this.currentValue.toString() });\n attributes(this.element, { 'value': this.value.toString() });\n };\n Rating.prototype.updateItemContent = function (ratingValue, index) {\n if (!this.fullTemplate && !this.emptyTemplate) {\n return;\n }\n var spanEle = this.itemElements[parseInt(index.toString(), 10)].querySelector('.e-rating-item');\n if (this.fullTemplate && ratingValue === 1) {\n if (!this.isReact && spanEle.classList.contains(FULLTEMPLATE)) {\n return;\n }\n this.removeItemContent(spanEle);\n spanEle.classList.add(FULLTEMPLATE);\n append(this.fullTemplateFunction({ ratingValue: ratingValue, index: index }, this, 'ratingFullTemplate', (this.element.id + 'fullTemplate' + index), this.isStringTemplate), spanEle);\n }\n else if (this.emptyTemplate) {\n if (!this.isReact && spanEle.classList.contains(EMPTYTEMPLATE)) {\n return;\n }\n this.removeItemContent(spanEle);\n spanEle.classList.add(EMPTYTEMPLATE);\n append(this.emptyTemplateFunction({ ratingValue: ratingValue, index: index }, this, 'ratingEmptyTemplate', (this.element.id + 'emptyTemplate' + index), this.isStringTemplate), spanEle);\n }\n else {\n this.removeItemContent(spanEle);\n addClass([spanEle], ICONCSS.split(' '));\n }\n };\n Rating.prototype.updateTooltipContent = function (isChange) {\n var _this = this;\n if (this.showTooltip) {\n if (this.isReact) {\n this.clearTemplate(['ratingTooltipTemplate']);\n }\n var content_1;\n if (this.tooltipTemplate) {\n content_1 = this.createElement('span', { className: 'e-rating-tooltip-content' });\n var templateFunction = this.getTemplateString(this.tooltipTemplate);\n append(templateFunction({ value: this.currentValue }, this, 'ratingTooltipTemplate', (this.element.id + 'tooltipTemplate'), this.isStringTemplate), content_1);\n this.tooltipObj.setProperties({ content: content_1 }, isChange);\n if (this.isAngular) {\n setTimeout(function () {\n var ratingSpan = _this.ratingItemList.querySelectorAll('.' + ITEMCONTAINER + '.' + SELECTED);\n _this.tooltipObj.refresh(ratingSpan[ratingSpan.length - 1]);\n });\n }\n }\n else {\n content_1 = this.currentValue.toString();\n this.tooltipObj.setProperties({ content: initializeCSPTemplate(function () { return content_1; }) }, isChange);\n }\n this.renderReactTemplates();\n }\n };\n Rating.prototype.getTemplateString = function (template) {\n var stringContent = '';\n try {\n if (typeof template !== 'function') {\n var tempEle = select(template);\n if (tempEle) {\n //Return innerHTML incase of jsrenderer script else outerHTML\n stringContent = tempEle.tagName === 'SCRIPT' ? tempEle.innerHTML : tempEle.outerHTML;\n }\n else {\n stringContent = template;\n }\n }\n else {\n stringContent = template;\n }\n }\n catch (e) {\n stringContent = template;\n }\n return compile(stringContent);\n };\n Rating.prototype.displayLabel = function () {\n if (this.showLabel) {\n this.spanLabel = this.createElement('span', { className: LABEL });\n this.updateLabel();\n this.updateLabelPosition();\n }\n else {\n if (this.wrapper.contains(this.spanLabel)) {\n remove(this.spanLabel);\n this.spanLabel = null;\n }\n }\n };\n Rating.prototype.updateLabel = function () {\n if (this.showLabel) {\n if (this.labelTemplate) {\n if (this.isReact) {\n this.clearTemplate(['ratingLabelTemplate']);\n }\n if (this.spanLabel.firstChild) {\n this.spanLabel.innerHTML = '';\n }\n var templateFunction = this.getTemplateString(this.labelTemplate);\n append(templateFunction({ value: this.currentValue }, this, 'ratingLabelTemplate', (this.element.id + 'labelTemplate'), this.isStringTemplate), this.spanLabel);\n this.renderReactTemplates();\n }\n else {\n this.spanLabel.textContent = this.currentValue + ' / ' + this.itemsCount;\n }\n }\n };\n Rating.prototype.updateReset = function () {\n if (this.allowReset) {\n this.resetElement = this.createElement('span', {\n className: RESET,\n attrs: { 'aria-label': 'resetbutton', 'role': 'button' }\n });\n this.updateResetButton();\n EventHandler.add(this.resetElement, 'click', this.resetClicked, this);\n this.wrapper.insertBefore(this.resetElement, this.ratingItemList);\n }\n else {\n if (this.wrapper.contains(this.resetElement)) {\n remove(this.resetElement);\n this.resetElement = null;\n }\n }\n };\n Rating.prototype.updateLabelPosition = function () {\n this.clearLabelPosition();\n this.spanLabel.classList.add('e-label-' + this.labelPosition.toLowerCase());\n if (this.labelPosition === 'Left' || this.labelPosition === 'Top') {\n this.wrapper.firstChild.after(this.spanLabel);\n }\n else {\n this.wrapper.appendChild(this.spanLabel);\n }\n };\n Rating.prototype.clearLabelPosition = function () {\n var removeCss = this.spanLabel.classList.value.match(/(e-label-[top|bottom|right|left]+)/g);\n if (removeCss) {\n removeClass([this.spanLabel], removeCss);\n }\n };\n Rating.prototype.wireItemsEvents = function (itemElement, index) {\n var _this = this;\n EventHandler.add(itemElement, 'click', function (e) { return _this.clickHandler(e); }, this);\n EventHandler.add(itemElement, 'mousemove', function (e) { return _this.mouseMoveHandler(index, e); }, this);\n EventHandler.add(itemElement, 'mouseleave', this.mouseLeaveHandler, this);\n };\n Rating.prototype.clickHandler = function (e) {\n this.currentValue = (this.min > 0 && this.currentValue < this.min) ? this.min : this.currentValue;\n this.triggerChange(e, this.currentValue);\n this.updateItemValue();\n this.updateLabel();\n this.updateResetButton();\n };\n Rating.prototype.updateValueChange = function (e, val, isInteracted) {\n if (isInteracted === void 0) { isInteracted = true; }\n this.triggerChange(e, val, isInteracted);\n this.updateItemValue();\n this.updateLabel();\n };\n Rating.prototype.triggerChange = function (e, val, isInteracted) {\n if (isInteracted === void 0) { isInteracted = true; }\n val = this.validateValue(val);\n this.currentValue = val;\n if (this.currentValue === this.value) {\n return;\n }\n var eventArgs = { event: e, isInteracted: isInteracted, value: val, previousValue: this.value };\n this.setProperties({ value: val }, true);\n this.trigger('valueChanged', eventArgs);\n };\n Rating.prototype.mouseMoveHandler = function (index, e) {\n if (this.isTouchSelected) {\n this.wrapper.classList.remove('e-rating-touch');\n this.isTouchSelected = false;\n }\n var currValue = this.calculateCurrentValue(index, e);\n currValue = this.validateValue(currValue);\n var element = this.itemElements[parseInt((index - 1).toString(), 10)];\n if (currValue === this.currentValue) {\n this.openRatingTooltip(element, false);\n return;\n }\n this.updateCurrentValue(currValue);\n this.openRatingTooltip(element, true);\n var eventArgs = { element: element, event: e, value: currValue };\n this.trigger('onItemHover', eventArgs);\n };\n Rating.prototype.openRatingTooltip = function (element, isChange) {\n if (this.showTooltip) {\n if (!this.tooltipOpen) {\n this.updateTooltipContent(false);\n this.tooltipObj.open(element);\n this.tooltipOpen = true;\n }\n else if (isChange) {\n this.updateTooltipContent(true);\n this.tooltipObj.refresh(element);\n }\n }\n };\n Rating.prototype.closeRatingTooltip = function () {\n if (this.tooltipOpen) {\n this.tooltipObj.close();\n this.tooltipOpen = false;\n }\n };\n Rating.prototype.updateCurrentValue = function (currValue) {\n this.currentValue = currValue;\n this.updateItemValue();\n this.updateLabel();\n };\n Rating.prototype.mouseLeaveHandler = function () {\n this.closeRatingTooltip();\n this.updateCurrentValue(this.value);\n };\n Rating.prototype.calculateCurrentValue = function (index, args) {\n var currentValue = index;\n if (!(this.enableSingleSelection || (this.precision === PrecisionType.Full))) {\n currentValue = args.offsetX / this.itemElements[index - 1].clientWidth;\n currentValue = (this.enableRtl) ? (1 - currentValue) : currentValue;\n if (this.precision === PrecisionType.Quarter) {\n currentValue = currentValue <= 0.25 ? 0.25 : currentValue <= 0.5 ? 0.5 : currentValue < 0.75 ? 0.75 : 1.0;\n }\n else if (this.precision === PrecisionType.Half) {\n currentValue = currentValue <= 0.5 ? 0.5 : 1;\n }\n currentValue = currentValue + index - 1;\n }\n return currentValue;\n };\n /**\n * Reset’s the value to minimum.\n *\n * {% codeBlock src='rating/reset/index.md' %}{% endcodeBlock %}\n *\n * @returns {void}\n */\n Rating.prototype.reset = function () {\n this.resetClicked(null, false);\n };\n Rating.prototype.resetClicked = function (e, isInteracted) {\n if (isInteracted === void 0) { isInteracted = true; }\n this.updateValueChange(e, this.min, isInteracted);\n this.updateResetButton();\n };\n Rating.prototype.wireKeyboardEvent = function () {\n this.keyboardModuleRating = new KeyboardEvents(this.wrapper, {\n keyAction: this.keyActionHandler.bind(this),\n keyConfigs: this.keyConfigs,\n eventName: 'keydown'\n });\n };\n Rating.prototype.keyActionHandler = function (e) {\n e.preventDefault();\n if (this.disabled || this.readOnly) {\n return;\n }\n if (e.target.classList.contains(ITEMLIST)) {\n switch (e.action) {\n case 'uparrow':\n this.handleNavigation(e, true);\n break;\n case 'downarrow':\n this.handleNavigation(e, false);\n break;\n case 'leftarrow':\n this.handleNavigation(e, this.enableRtl);\n break;\n case 'rightarrow':\n this.handleNavigation(e, !this.enableRtl);\n break;\n }\n }\n if (this.allowReset && e.target.classList.contains('e-reset')) {\n switch (e.action) {\n case 'space':\n this.resetClicked(e);\n break;\n }\n }\n };\n Rating.prototype.handleNavigation = function (e, isIncrease) {\n if ((!isIncrease && (this.value > this.min)) || (isIncrease && (this.value < this.itemsCount))) {\n var currentValue = (this.precision === PrecisionType.Full || this.enableSingleSelection) ? 1 :\n (this.precision === PrecisionType.Half) ? 0.5 : (this.precision === PrecisionType.Quarter) ? 0.25 :\n Math.round(0.1 * 10) / 10;\n currentValue = isIncrease ? this.value + currentValue : this.value - currentValue;\n this.updateValueChange(e, (currentValue));\n this.updateResetButton();\n }\n };\n Rating.prototype.updateContent = function () {\n if (this.isReact) {\n this.clearTemplate(['ratingEmptyTemplate', 'ratingFullTemplate']);\n }\n for (var i = 0; i < this.itemsCount; i++) {\n var itemElement = this.itemElements[parseInt(i.toString(), 10)].firstElementChild;\n this.renderItemContent(itemElement, this.getRatingValue(this.value, i), i, true);\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n Rating.prototype.getModuleName = function () {\n return 'rating';\n };\n /**\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Rating.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n Rating.prototype.removeItemElements = function () {\n for (var i = 0; i < this.itemElements.length; i++) {\n remove(this.itemElements[parseInt(i.toString(), 10)]);\n }\n this.itemElements = [];\n };\n /**\n * Destroys the Rating instance.\n *\n * @returns {void}\n */\n Rating.prototype.destroy = function () {\n var _this = this;\n _super.prototype.destroy.call(this);\n // unwires the events and detach the li elements\n this.removeItemElements();\n this.clearTemplate();\n if (this.spanLabel) {\n remove(this.spanLabel);\n this.spanLabel = null;\n }\n if (this.resetElement) {\n remove(this.resetElement);\n this.resetElement = null;\n }\n if (this.showTooltip) {\n this.tooltipObj.destroy();\n this.tooltipObj = null;\n }\n remove(this.ratingItemList);\n this.ratingItemList = null;\n this.wrapper.parentNode.insertBefore(this.element, this.wrapper);\n remove(this.wrapper);\n this.wrapper = null;\n this.keyboardModuleRating.destroy();\n this.keyboardModuleRating = null;\n ['value', 'aria-label', 'name'].forEach(function (attr) {\n _this.element.removeAttribute(attr);\n });\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {RatingModel} newProp - Specifies new properties\n * @param {RatingModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Rating.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n this.updateValueChange(null, (this.value > this.min) ? this.value : this.min, false);\n break;\n case 'min':\n this.updateMinValue();\n this.updateItemValue();\n this.updateLabel();\n break;\n case 'showLabel':\n this.displayLabel();\n break;\n case 'visible':\n this.wrapper.classList[!this.visible ? 'add' : 'remove'](HIDDEN);\n break;\n case 'disabled':\n this.updateDisabled();\n break;\n case 'readOnly':\n this.wrapper.classList[this.readOnly ? 'add' : 'remove'](READONLY);\n break;\n case 'allowReset':\n this.updateReset();\n break;\n case 'enableRtl':\n this.wrapper.classList[this.enableRtl ? 'add' : 'remove'](RTL);\n break;\n case 'cssClass':\n if (oldProp.cssClass) {\n removeClass([this.wrapper], oldProp.cssClass.split(' '));\n }\n if (newProp.cssClass) {\n addClass([this.wrapper], newProp.cssClass.split(' '));\n }\n if (this.tooltipObj) {\n this.tooltipObj.setProperties({ cssClass: this.cssClass ? ('e-rating-tooltip ' + this.cssClass) : 'e-rating-tooltip' });\n }\n break;\n case 'labelPosition':\n this.updateLabelPosition();\n break;\n case 'showTooltip':\n this.updateTooltip();\n break;\n case 'precision':\n this.updateMinValue();\n this.triggerChange(null, this.value, false);\n this.updateItemValue();\n this.updateLabel();\n break;\n case 'enableSingleSelection':\n //To validate the value against single selection and update the items, label + trigger change event if value changed\n this.updateValueChange(null, this.currentValue, false);\n break;\n case 'enableAnimation':\n this.wrapper.classList[this.enableAnimation ? 'add' : 'remove'](ANIMATION);\n break;\n case 'emptyTemplate':\n case 'fullTemplate':\n this.updateTemplateFunction();\n this.updateContent();\n break;\n case 'labelTemplate':\n this.updateLabel();\n break;\n case 'itemsCount':\n this.removeItemElements();\n this.renderItems();\n this.updateLabel();\n break;\n }\n }\n };\n __decorate([\n Property(false)\n ], Rating.prototype, \"allowReset\", void 0);\n __decorate([\n Property('')\n ], Rating.prototype, \"cssClass\", void 0);\n __decorate([\n Property(false)\n ], Rating.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], Rating.prototype, \"emptyTemplate\", void 0);\n __decorate([\n Property(true)\n ], Rating.prototype, \"enableAnimation\", void 0);\n __decorate([\n Property(false)\n ], Rating.prototype, \"enableSingleSelection\", void 0);\n __decorate([\n Property('')\n ], Rating.prototype, \"fullTemplate\", void 0);\n __decorate([\n Property(5)\n ], Rating.prototype, \"itemsCount\", void 0);\n __decorate([\n Property(LabelPosition.Right)\n ], Rating.prototype, \"labelPosition\", void 0);\n __decorate([\n Property('')\n ], Rating.prototype, \"labelTemplate\", void 0);\n __decorate([\n Property(0.0)\n ], Rating.prototype, \"min\", void 0);\n __decorate([\n Property(PrecisionType.Full)\n ], Rating.prototype, \"precision\", void 0);\n __decorate([\n Property(false)\n ], Rating.prototype, \"readOnly\", void 0);\n __decorate([\n Property(false)\n ], Rating.prototype, \"showLabel\", void 0);\n __decorate([\n Property(true)\n ], Rating.prototype, \"showTooltip\", void 0);\n __decorate([\n Property('')\n ], Rating.prototype, \"tooltipTemplate\", void 0);\n __decorate([\n Property(0.0)\n ], Rating.prototype, \"value\", void 0);\n __decorate([\n Property(true)\n ], Rating.prototype, \"visible\", void 0);\n __decorate([\n Event()\n ], Rating.prototype, \"beforeItemRender\", void 0);\n __decorate([\n Event()\n ], Rating.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], Rating.prototype, \"onItemHover\", void 0);\n __decorate([\n Event()\n ], Rating.prototype, \"valueChanged\", void 0);\n Rating = __decorate([\n NotifyPropertyChanges\n ], Rating);\n return Rating;\n}(Component));\nexport { Rating };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { NotifyPropertyChanges, Component, Property, getUniqueID, isNullOrUndefined, addClass, attributes, removeClass, remove, Event } from '@syncfusion/ej2-base';\nvar INPUTFIELD = 'e-otp-input-field';\nvar RTL = 'e-rtl';\n/**\n * Specifies the type of input for the Otp (One-Time Password) input component.\n */\nexport var OtpInputType;\n(function (OtpInputType) {\n /**\n * Specifies the type of input to be number for the Otp input.\n */\n OtpInputType[\"Number\"] = \"number\";\n /**\n * Specifies the type of input to be text for the Otp input.\n */\n OtpInputType[\"Text\"] = \"text\";\n /**\n * Specifies the type of input to be password for the Otp input.\n */\n OtpInputType[\"Password\"] = \"password\";\n})(OtpInputType || (OtpInputType = {}));\n/**\n * Specifies the style variant for the Otp (One-Time Password) input component.\n */\nexport var OtpInputStyle;\n(function (OtpInputStyle) {\n /**\n * Specifies the style of the Otp input to be outlined.\n */\n OtpInputStyle[\"Outlined\"] = \"outlined\";\n /**\n * Specifies the style of the Otp input to be underlined.\n */\n OtpInputStyle[\"Underlined\"] = \"underlined\";\n /**\n * Specifies the style of the Otp input to be filled.\n */\n OtpInputStyle[\"Filled\"] = \"filled\";\n})(OtpInputStyle || (OtpInputStyle = {}));\n/**\n * Represents the Otp component that allows the user to enter the otp values.\n * ```html\n *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar OtpInput = /** @class */ (function (_super) {\n __extends(OtpInput, _super);\n function OtpInput(options, element) {\n var _this = _super.call(this, options, element) || this;\n /* Private variables */\n _this.inputs = [];\n _this.previousValue = '';\n _this.separatorElements = [];\n _this.shouldFireFocus = true;\n _this.shouldFireBlur = true;\n _this.isFocusInCalled = false;\n _this.isFocusOutCalled = false;\n return _this;\n }\n OtpInput.prototype.preRender = function () {\n if (!this.element.id) {\n this.element.id = getUniqueID('e-' + this.getModuleName());\n }\n };\n OtpInput.prototype.render = function () {\n this.initialize();\n };\n OtpInput.prototype.initialize = function () {\n attributes(this.element, { 'role': 'group' });\n this.renderInputs();\n this.renderSeparator(1, this.inputs.length);\n this.addPlaceHolder();\n this.updateCssClass(this.cssClass);\n this.updateVariantClass();\n this.updateAriaLabel(this.ariaLabels);\n this.setElementAttributes(this.htmlAttributes, this.element);\n if (this.enableRtl) {\n this.element.classList.add(RTL);\n }\n this.previousValue = this.value.toString();\n };\n OtpInput.prototype.renderInputs = function () {\n this.hiddenInputEle = this.createElement('input', {\n id: 'otpInput_hidden',\n attrs: {\n name: this.element.id,\n type: 'hidden',\n value: this.type === 'number' ? this.value.toString().replace(/\\D/g, '') : this.value.toString(),\n autoComplete: 'off'\n }\n });\n this.element.appendChild(this.hiddenInputEle);\n for (var i = 0; i < this.length; i++) {\n this.createOtpInput(i);\n }\n };\n OtpInput.prototype.createOtpInput = function (index) {\n var valueContainer = this.getDefaultValue();\n var inputValue = '';\n if (valueContainer) {\n if (this.type === 'number') {\n var valueAtIndex = valueContainer[parseInt(index.toString(), 10)];\n if (!isNaN(Number(valueAtIndex))) {\n inputValue = valueAtIndex;\n }\n }\n else {\n inputValue = valueContainer[parseInt(index.toString(), 10)] || '';\n }\n }\n var inputEle = this.createElement('input', {\n id: this.element.id + \"-\" + (index + 1),\n className: INPUTFIELD + ' ' + 'e-input',\n attrs: {\n maxlength: '1',\n type: this.type,\n inputmode: (this.type === 'number' ? 'numeric' : 'text')\n }\n });\n if (this.disabled) {\n inputEle.setAttribute('disabled', 'disabled');\n }\n this.element.appendChild(inputEle);\n this.inputs.push(inputEle);\n if (inputValue) {\n inputEle.value = inputValue;\n }\n this.wireEvents(inputEle, index);\n };\n OtpInput.prototype.renderSeparator = function (index, length) {\n if (this.separator.length > 0) {\n for (var i = index; i < length; i++) {\n var separatorElement = this.createElement('span', {\n className: 'e-otp-separator'\n });\n separatorElement.textContent = this.separator;\n this.separatorElements.push(separatorElement);\n this.element.insertBefore(separatorElement, this.inputs[parseInt(i.toString(), 10)]);\n }\n }\n };\n OtpInput.prototype.updateSeparatorValue = function () {\n if (this.separator === '') {\n for (var i = 0; i < this.separatorElements.length; i++) {\n remove(this.separatorElements[parseInt(i.toString(), 10)]);\n }\n this.separatorElements = [];\n return;\n }\n for (var i = 0; i < this.separatorElements.length; i++) {\n this.separatorElements[parseInt(i.toString(), 10)].textContent = this.separator;\n }\n };\n OtpInput.prototype.addPlaceHolder = function () {\n for (var i = 0; i < this.inputs.length; i++) {\n this.setElementAttributes({ 'placeholder': this.placeholder.length === 1 || this.placeholder.length === 0 ? this.placeholder : this.placeholder.charAt(i) }, this.inputs[parseInt(i.toString(), 10)]);\n }\n };\n OtpInput.prototype.updateInputType = function (inputType) {\n this.inputs.forEach(function (input) {\n input.type = inputType;\n input.setAttribute('inputmode', (inputType === 'number' ? 'numeric' : 'text'));\n });\n };\n OtpInput.prototype.getDefaultValue = function () {\n var extractedValue = typeof this.value === 'number' ? this.value.toString() : this.value;\n // To remove the white space if present.\n var value = extractedValue.replace(/\\s/g, '');\n if (value.length > 0) {\n return value.split('');\n }\n return undefined;\n };\n OtpInput.prototype.handleInputChange = function (index, event) {\n var currentInputElement = this.inputs[parseInt(index.toString(), 10)];\n if (currentInputElement && index < this.length - 1 && currentInputElement.value.length > 0) {\n var nextInputElement = this.inputs[parseInt(index.toString(), 10) + 1];\n this.shouldFireFocus = this.shouldFireBlur = false;\n nextInputElement.focus();\n if (nextInputElement && nextInputElement.value.length > 0) {\n nextInputElement.select();\n }\n }\n var target = event.target;\n if (target.value.length > 1) {\n target.value = target.value.slice(0, 1);\n }\n this.triggerInputEvent(event);\n this.triggerValuechanged(event, true);\n };\n OtpInput.prototype.handleKeyAction = function (index, event) {\n if (event.key.length > 1 && !((index === 0 && event.key === 'Backspace') ||\n (index === this.length - 1 && event.key === 'Delete'))) {\n this.shouldFireFocus = this.shouldFireBlur = false;\n }\n var currentInputElement = this.inputs[parseInt(index.toString(), 10)];\n var previousInputElement = this.inputs[parseInt(index.toString(), 10) - 1];\n var nextInputElement = this.inputs[parseInt(index.toString(), 10) + 1];\n if (event.key === 'Delete') {\n var value = '';\n if (currentInputElement.value.length > 0) {\n value = currentInputElement.value;\n currentInputElement.value = '';\n }\n else {\n if (index !== this.inputs.length - 1) {\n value = nextInputElement.value;\n nextInputElement.value = '';\n nextInputElement.focus();\n }\n }\n if (value.length > 0) {\n this.triggerInputEvent(event);\n }\n }\n else if (event.key === 'Backspace') {\n if (index !== 0 && currentInputElement.value.length === 0) {\n var previousValue = previousInputElement.value;\n previousInputElement.value = '';\n previousInputElement.focus();\n if (previousValue.length > 0) {\n this.triggerInputEvent(event);\n }\n }\n }\n else if (event.key === 'ArrowLeft' || event.key === 'ArrowRight') {\n if (event.key === 'ArrowLeft') {\n if (index > 0) {\n previousInputElement.focus();\n previousInputElement.select();\n }\n }\n else {\n if (index < this.inputs.length - 1) {\n nextInputElement.focus();\n nextInputElement.select();\n }\n }\n event.preventDefault();\n }\n else if (event.key === 'ArrowUp' || event.key === 'ArrowDown') {\n event.preventDefault();\n }\n else {\n if (event.key !== 'Tab' && !event.shiftKey && !event.ctrlKey) {\n if (this.type === 'number' && (/\\D/.test(event.key.toLocaleLowerCase()))) {\n event.preventDefault();\n }\n }\n }\n };\n OtpInput.prototype.handleSelection = function (index) {\n var currentInputElement = this.inputs[parseInt(index.toString(), 10)];\n if (currentInputElement.value) {\n currentInputElement.select();\n }\n };\n OtpInput.prototype.handleFocus = function (index, event) {\n addClass([this.inputs[parseInt(index.toString(), 10)]], 'e-otp-input-focus');\n if (this.shouldFireFocus) {\n var eventArgs = {\n element: this.element,\n event: event,\n isInteracted: this.isFocusInCalled ? false : true,\n value: this.value\n };\n this.trigger('focus', eventArgs);\n }\n this.shouldFireFocus = true;\n };\n OtpInput.prototype.handleBlur = function (index, event) {\n removeClass([this.inputs[parseInt(index.toString(), 10)]], 'e-otp-input-focus');\n if (this.shouldFireBlur) {\n var eventArgs = {\n element: this.element,\n event: event,\n isInteracted: this.isFocusOutCalled ? false : true,\n value: this.value\n };\n this.trigger('blur', eventArgs);\n }\n this.shouldFireBlur = true;\n };\n OtpInput.prototype.handlePaste = function (index, event) {\n var clipboardData = event.clipboardData;\n if (clipboardData) {\n var pastedText = clipboardData.getData('text');\n var pastedValues = pastedText.split('');\n var pastedValueIndex = 0;\n for (var i = index; i < this.inputs.length; i++) {\n if (pastedValues.length > 0 && pastedValues[parseInt(pastedValueIndex.toString(), 10)]) {\n this.inputs[parseInt(i.toString(), 10)].value = pastedValues[parseInt(pastedValueIndex.toString(), 10)];\n pastedValueIndex++;\n this.updateValueProperty();\n }\n }\n this.focusIn();\n this.triggerValuechanged(event, true);\n }\n };\n OtpInput.prototype.triggerInputEvent = function (event) {\n var previousValue = this.value.toString();\n this.updateValueProperty();\n var inputEventArgs = {\n element: this.element,\n event: event,\n previousValue: previousValue,\n value: this.value.toString()\n };\n this.trigger('input', inputEventArgs);\n };\n OtpInput.prototype.triggerValuechanged = function (event, isInteracted) {\n if (this.length === this.value.toString().length) {\n if (this.previousValue !== this.value) {\n var eventArgs = {\n element: this.element,\n event: event,\n isInteracted: isInteracted ? isInteracted : false,\n previousValue: this.previousValue,\n value: this.value\n };\n this.trigger('valueChanged', eventArgs);\n this.previousValue = this.value.toString();\n }\n }\n };\n OtpInput.prototype.wireEvents = function (inputEle, index) {\n inputEle.addEventListener('focus', this.handleFocus.bind(this, index));\n inputEle.addEventListener('blur', this.handleBlur.bind(this, index));\n inputEle.addEventListener('input', this.handleInputChange.bind(this, index));\n inputEle.addEventListener('keydown', this.handleKeyAction.bind(this, index));\n inputEle.addEventListener('click', this.handleSelection.bind(this, index));\n inputEle.addEventListener('paste', this.handlePaste.bind(this, index));\n };\n OtpInput.prototype.unWireEvents = function () {\n for (var i = 0; i < this.inputs.length; i++) {\n var currentInputElement = this.inputs[parseInt(i.toString(), 10)];\n currentInputElement.removeEventListener('focus', this.handleFocus.bind(this, i));\n currentInputElement.removeEventListener('blur', this.handleBlur.bind(this, i));\n currentInputElement.removeEventListener('input', this.handleInputChange.bind(this, i));\n currentInputElement.removeEventListener('keydown', this.handleKeyAction.bind(this, i));\n currentInputElement.removeEventListener('click', this.handleSelection.bind(this, i));\n currentInputElement.removeEventListener('paste', this.handlePaste.bind(this, i));\n }\n };\n OtpInput.prototype.updateValueProperty = function () {\n var value = '';\n this.inputs.forEach(function (input) {\n value += input.value;\n });\n var prevOnChange = this.isProtectedOnChange;\n this.isProtectedOnChange = true;\n this.value = typeof this.value === 'number' ? parseInt(value, 10) : value;\n this.isProtectedOnChange = prevOnChange;\n this.hiddenInputEle.value = this.value.toString();\n };\n OtpInput.prototype.updateInputValue = function (previousValue) {\n var stringifiedValue = this.value.toString();\n for (var i = 0; i < this.inputs.length; i++) {\n var isValueChanged = previousValue.toString().charAt(i) !== stringifiedValue.charAt(i);\n if (isValueChanged) {\n this.inputs[parseInt(i.toString(), 10)].value = stringifiedValue.charAt(i);\n this.hiddenInputEle.value = stringifiedValue;\n }\n }\n this.focusIn();\n };\n OtpInput.prototype.updateCssClass = function (addCss, removeCss) {\n if (removeCss === void 0) { removeCss = ''; }\n var _a, _b;\n var cssClasses;\n if (removeCss) {\n cssClasses = removeCss.trim().split(' ');\n (_a = this.element.classList).remove.apply(_a, cssClasses);\n }\n if (addCss) {\n cssClasses = addCss.trim().split(' ');\n (_b = this.element.classList).add.apply(_b, cssClasses);\n }\n };\n OtpInput.prototype.updateVariantClass = function () {\n var variantClass = this.stylingMode.toLocaleLowerCase();\n variantClass = variantClass === 'outlined' ? 'outline' : variantClass;\n if (variantClass === 'underlined' || variantClass === 'filled' || variantClass === 'outline') {\n removeClass([this.element], ['e-underlined', 'e-filled', 'e-outline']);\n addClass([this.element], \"e-\" + variantClass);\n }\n };\n OtpInput.prototype.updateAriaLabel = function (customAriaLabel) {\n this.inputs.forEach(function (input, index) {\n var defaultLabel = \"Enter Otp Character \" + (index + 1);\n var ariaLabel = customAriaLabel && customAriaLabel.length > 0\n ? customAriaLabel[parseInt(index.toString(), 10)] || defaultLabel\n : defaultLabel;\n input.setAttribute('aria-label', ariaLabel);\n });\n };\n OtpInput.prototype.updateDisabledState = function () {\n var _this = this;\n this.inputs.forEach(function (input) {\n if (_this.disabled) {\n input.setAttribute('disabled', 'disabled');\n }\n else {\n input.removeAttribute('disabled');\n }\n });\n };\n OtpInput.prototype.setElementAttributes = function (htmlAttributes, element) {\n if (!isNullOrUndefined(htmlAttributes)) {\n for (var key in htmlAttributes) {\n if (key === 'class') {\n var elementClass = htmlAttributes['class'].replace(/\\s+/g, ' ').trim();\n if (elementClass) {\n addClass([element], elementClass.split(' '));\n }\n }\n else if (key === 'name' && this.element.id === element.id) {\n this.hiddenInputEle.setAttribute(key, htmlAttributes[\"\" + key]);\n }\n else {\n element.setAttribute(key, htmlAttributes[\"\" + key]);\n }\n }\n }\n };\n OtpInput.prototype.handleLengthChange = function (currentValue, previousValue) {\n var isLengthAdded = (currentValue - previousValue) > 0;\n if (isLengthAdded) {\n for (var i = previousValue; i < currentValue; i++) {\n this.createOtpInput(i);\n }\n this.renderSeparator(previousValue, currentValue);\n this.addPlaceHolder();\n this.updateAriaLabel(this.ariaLabels);\n }\n else {\n if (currentValue >= 0 && this.inputs.length > 0) {\n for (var i = currentValue; i < this.inputs.length; i++) {\n remove(this.inputs[parseInt(i.toString(), 10)]);\n }\n this.inputs.splice(currentValue);\n if (this.separatorElements.length > 0) {\n // separator should be completely removed when length is 0 or 1;\n var index = currentValue === 0 ? 0 : currentValue - 1;\n for (var i = index; i < this.separatorElements.length; i++) {\n remove(this.separatorElements[parseInt(i.toString(), 10)]);\n }\n this.separatorElements.splice(index);\n }\n }\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n OtpInput.prototype.getModuleName = function () {\n return 'otpinput';\n };\n /**\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n OtpInput.prototype.getPersistData = function () {\n return this.addOnPersist([]);\n };\n /**\n * Destroy the Otp input.\n *\n * @returns {void}\n */\n OtpInput.prototype.destroy = function () {\n _super.prototype.destroy.call(this);\n this.unWireEvents();\n for (var i = 0; i < this.inputs.length; i++) {\n remove(this.inputs[parseInt(i.toString(), 10)]);\n }\n for (var i = 0; i < this.separatorElements.length; i++) {\n remove(this.separatorElements[parseInt(i.toString(), 10)]);\n }\n remove(this.hiddenInputEle);\n removeClass([this.element], ['e-underlined', 'e-filled', 'e-outline', 'e-rtl']);\n if (this.cssClass) {\n removeClass([this.element], this.cssClass.trim().split(' '));\n }\n this.element.removeAttribute('role');\n this.inputs = [];\n this.separatorElements = [];\n this.hiddenInputEle = null;\n };\n /**\n * Sets the focus to the Otp input for interaction.\n *\n * @returns {void}\n */\n OtpInput.prototype.focusIn = function () {\n this.isFocusInCalled = true;\n var focusIndex = 0;\n this.inputs.forEach(function (input, index) {\n if (input.value.length > 0) {\n focusIndex = index;\n }\n });\n this.inputs[parseInt(focusIndex.toString(), 10)].focus();\n this.isFocusInCalled = false;\n };\n /**\n * Remove the focus from Otp input, if it is in focus state.\n *\n * @returns {void}\n */\n OtpInput.prototype.focusOut = function () {\n this.isFocusOutCalled = true;\n this.inputs.forEach(function (input) {\n input.blur();\n });\n this.isFocusOutCalled = false;\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {OtpInputModel} newProp - Specifies new properties\n * @param {OtpInputModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n OtpInput.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'value':\n {\n this.updateInputValue(oldProp.value);\n this.triggerValuechanged();\n }\n break;\n case 'placeholder':\n this.addPlaceHolder();\n break;\n case 'disabled':\n this.updateDisabledState();\n break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'separator':\n if (oldProp.separator === '') {\n this.renderSeparator(1, this.inputs.length);\n }\n else {\n this.updateSeparatorValue();\n }\n break;\n case 'type':\n this.updateInputType(newProp.type);\n break;\n case 'stylingMode':\n this.updateVariantClass();\n break;\n case 'ariaLabels':\n this.updateAriaLabel(newProp.ariaLabels);\n break;\n case 'length':\n this.handleLengthChange(newProp.length, oldProp.length);\n break;\n case 'enableRtl':\n this.element.classList[this.enableRtl ? 'add' : 'remove'](RTL);\n break;\n }\n }\n };\n __decorate([\n Property(4)\n ], OtpInput.prototype, \"length\", void 0);\n __decorate([\n Property('')\n ], OtpInput.prototype, \"value\", void 0);\n __decorate([\n Property(OtpInputType.Number)\n ], OtpInput.prototype, \"type\", void 0);\n __decorate([\n Property('')\n ], OtpInput.prototype, \"separator\", void 0);\n __decorate([\n Property('')\n ], OtpInput.prototype, \"placeholder\", void 0);\n __decorate([\n Property(OtpInputStyle.Outlined)\n ], OtpInput.prototype, \"stylingMode\", void 0);\n __decorate([\n Property(false)\n ], OtpInput.prototype, \"disabled\", void 0);\n __decorate([\n Property('')\n ], OtpInput.prototype, \"cssClass\", void 0);\n __decorate([\n Property({})\n ], OtpInput.prototype, \"htmlAttributes\", void 0);\n __decorate([\n Property([])\n ], OtpInput.prototype, \"ariaLabels\", void 0);\n __decorate([\n Event()\n ], OtpInput.prototype, \"created\", void 0);\n __decorate([\n Event()\n ], OtpInput.prototype, \"valueChanged\", void 0);\n __decorate([\n Event()\n ], OtpInput.prototype, \"focus\", void 0);\n __decorate([\n Event()\n ], OtpInput.prototype, \"blur\", void 0);\n __decorate([\n Event()\n ], OtpInput.prototype, \"input\", void 0);\n OtpInput = __decorate([\n NotifyPropertyChanges\n ], OtpInput);\n return OtpInput;\n}(Component));\nexport { OtpInput };\n"],"names":["createMask","attributes","this","element","role","autocomplete","autocapitalize","spellcheck","aria-live","mask","splitMask","split","i","length","splitInnerMask","j","pushIntoRegExpCollec","call","chkSpace","customRegExpCollec","push","hiddenMask","promptChar","escapeMaskValue","promptMask","replace","isNullOrUndefined","customCharacters","RegExp","escapeNumber","match","substring","aria-invalid","applyMask","setElementValue","setMaskValue","value","wireEvents","EventHandler","add","maskInputKeyDownHandler","maskInputKeyPressHandler","maskInputKeyUpHandler","maskInputHandler","maskInputFocusHandler","maskInputBlurHandler","maskInputPasteHandler","maskInputCutHandler","maskInputDropHandler","maskInputMouseDownHandler","maskInputMouseUpHandler","enabled","bindClearEvent","formElement","resetFormHandler","unwireEvents","remove","showClearButton","inputObj","clearButton","resetHandler","e","preventDefault","classList","contains","container","clear","event","redoCollec","unshift","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","tagName","initInputValue","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","_callPasteHandler","regExpCollec","undefined","isClicked","_this","inputElement","modelValue","toAllowForward","toAllowBackward","eventArgs","maskedValue","triggerFocus","floatLabelType","placeholder","setTimeout","backSelectionStart","escapeRegExp","trigger","text","blurEventArgs","isFocus","labelElement","parentNode","querySelector","TOPLABEL","removeClass","readonly","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","Browser","isIE","ctrlKey","keyCode","extend","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","type","isDeleted","initStartIndex","initEndIndex","curMask","deleteEndIndex","multipleDel","preValue","index","oldValue","prompt_1","elementValue","metaKey","code","key","String","fromCharCode","isIosInvalid","prevOnChange","isProtectedOnChange","changeEventArgs","isInitial","isInteraction","isInteracted","merge","isAngular","preventChange","removeMaskError","val_1","startIndex_1","oldVal","trim","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileSwipeCheck","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","applySupportedValues","addMaskErrorClass","changeToLowerUpperCase","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","curVal","caseCount","indexOf","toUpperCase","toLowerCase","newVal","BOTTOMLABEL","Input","setValue","maskInput","args","inputEle","getMaskInput","UTILMASK","regularExpressions","getVal","getUtilMaskEle","getMaskedVal","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","FLOATTEXTCONTENT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","containerAttributes","createInput","internalCreateElement","__eventHandlers","makeElement","createElement","inputObject","buttons","floatType","isBindClearAction","bindClearAction","createInputContainer","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","setClearButton","setAttribute","appendSpan","validateInputType","setPropertyValue","createSpanElement","bindFocusEventHandler","parent","getParentNode","calculateWidth","bindBlurEventHandler","bindInputEventHandler","checkInputValue","focusHandler","blurHandler","inputHandler","addEventListener","unbindInitialEvent","focusHandler_1","blurHandler_1","inputHandler_1","removeEventListener","inputValue","inputParent","grandParent","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","inputEventHandler","validateLabel","blurEventHandler","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","inputWrap","updateLabelState","inputFloatHandler","blurFloatHandler","unWireFloatLabelEvents","getAttribute","checkFloatLabelType","_i","_a","Object","keys","setCssClass","cssClass","setEnabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","updateIconState","button","document","activeElement","createClearButton","initial","insertAdjacentElement","wireClearBtnEvents","clickHandler","readOnly","focus","clickHandlerEvent","inputHandlerEvent","focusHandlerEvent","blurHandlerEvent","unWireClearBtnEvents","destroy","_internalRipple","tagClass","tag","result","spanEle","innerHTML","children","elements","oldClass","moduleName","_isElementVisible","elementWidth","clientWidth","parseInt","getComputedStyle","getPropertyValue","setWidth","width","style","formatUnit","firstChild","floatTextContent","textContent","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","isClear","attrs","removeFloating","input","detach","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","labelSpanElement","setRipple","isRipple","toString","argsButton","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","currentElement","body","window","display","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","containerElement","updateHTMLAttributesToElement","htmlAttributes","updateCssClass","newClass","getInputValidClassList","inputClassName","updateHTMLAttributesToWrapper","updatedClassValues","setStyle","isBlank","inputString","test","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","INTREGEXP","wrapperAttributes","selectionTimeOut","NumericTextBox","_super","options","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","attributeName","nodeName","nodeValue","filter","item","join","hasAttribute","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","getUniqueID","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","checkAttributes","inputEleValue","validateMinMax","validateStep","updatePlaceholder","render","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","isNaN","strictMode","trimValue","decimals","roundNumber","hiddenInput","elementPrevValue","renderComplete","isDynamic","attributes_1","prop","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","inputWrapper","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","aria-label","class","name","childNodes","updateDataAttribute","attr","a","pro","numericClassName","updatedClassValue","numericStyle","spinDown","title","spinUp","wireSpinBtnEvents","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusOutHandler","keyDownHandler","keyUpHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","validateDecimalOnType","isDevice","parseValue","numerictextboxObj","userAgent","parsedValue","localChange","isVue","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","aria-valuenow","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","decimalPart","result1","result2","cancelEvent","info","version","which","currentChar","isAlterNumPadDecimalChar","start","fractionRule","mouseWheel","delta","rawEvent","wheelDelta","detail","clearTimeout","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","attrArray","getText","focusIn","focusOut","blur","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","wrapperAttr","MaskedTextBox","maskOptions","checkHtmlAttributes","resetMaskedTextBox","setMaskPlaceholder","getValidClassList","maskClassName","maskStyle","setVal","dynamicPlaceholder","isEnabled","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","TicksData","apply","ChildProperty","ColorRangeData","LimitData","TooltipData","classNames","root","rtl","sliderHiddenInput","controlWrapper","sliderHandle","rangeBar","sliderButton","firstButton","secondButton","scale","tick","large","tickValue","sliderTooltip","sliderHover","sliderFirstHandle","sliderSecondHandle","sliderDisabled","sliderContainer","horizontalTooltipBefore","horizontalTooltipAfter","verticalTooltipBefore","verticalTooltipAfter","materialTooltip","materialTooltipOpen","materialTooltipActive","materialSlider","sliderTrack","sliderHorizantalColor","sliderVerticalColor","sliderHandleFocused","verticalSlider","horizontalSlider","sliderHandleStart","sliderTooltipStart","sliderTabHandle","sliderButtonIcon","sliderSmallSize","sliderTickPosition","sliderFirstTick","sliderLastTick","sliderButtonClass","sliderTooltipWrapper","sliderTabTrack","sliderTabRange","sliderActiveHandle","sliderMaterialHandle","sliderMaterialRange","sliderMaterialDefault","materialTooltipShow","materialTooltipHide","limits","limitBarDefault","limitBarFirst","limitBarSecond","dragHorizontal","dragVertical","Slider","horDir","verDir","transition","handle","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","isDragComplete","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","getTheme","refresh","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","tabIndex","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isMaterial3","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isFluent","isFluent2","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","enableAnimation","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","enableHtmlSanitizer","SanitizeHtmlHelper","sanitize","contentTemp","initializeCSPTemplate","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","translate","openMaterialTooltip","refreshTooltip","tooltipContentElement","cursor","closeMaterialTooltip","tooltipTarget","checkTooltipPosition","tooltipClass","collidedPosition","tooltipCollidedPosition","Tooltip","showTipPointer","height","animation","open","effect","close","duration","opensOn","beforeOpen","bind","beforeCollision","beforeClose","tooltipBeforeClose","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","focusHandle","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","bottom","handlePos2","checkValidValueAndPos","checkHandlePosition","setLimitBarPositions","fromMinPostion","fromMaxpostion","toMinPostion","toMaxpostion","fromPosition","toPosition","currentValue","limitBar","preHandlePos1","values","setHandlePosition","validateRangeValue","setRangeValue","modifyZindex","getZindexPartial","pos","updateRangeValue","eventName","map","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","x","num","offsetWidth","top_1","offsetHeight","stepValueCalculation","percentStep","remain","addition","positionToValue","diff","evt","changedTouches","handlepos","handleVal","focusedElement","behindElement","eventX","eventY","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","previousSibling","curTarget","relatedTarget","removeChild","changeSliderType","updateConfig","setReadOnly","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","trackPosition","trackClassName","child","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","color","border","Collection","Complex","regex","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","ErrorOption","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","url","date","dateIso","creditcard","number","digits","maxLength","minLength","rangeLength","tel","pattern","equalTo","rules","localeFunc","onIntlChange","on","afterLocalization","select","inputElements","selectAll","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","validateRules","data","rules_1","name_1","reset","clearForm","getInputElement","elements_1","errorClass","validClass","off","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","JSON","parse","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","submitHandler","clearEvents","excludeKeys","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","containerId","customPlacement","nextSibling","checkRequired","inputType","option","Date","getTime","globalize","dateOptions","skeleton","dateValue","parseDate","stringify","uNum","compareTo","Label","Base","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","PROGRESS_WRAPPER","PROGRESSBAR","UPLOAD_SUCCESS","UPLOAD_FAILED","PAUSE_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","accept","multiple","uploadedFilesData","base64String","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","isReact","setLocalizedTexts","preLocaleObj","template","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","internalCreateFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Clear","Upload","invalidFileName","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","abort","cancel","delete","pauseUpload","pause","resume","retry","fileUploadCancel","invalidFileSelection","totalFiles","size","formRendered","isPureReactComponent","props","keyConfigs","enter","browserName","documentElement","directoryUpload","renderBrowseButton","initializeUpload","isPreloadFiles","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","uploadButtonClick","clearButtonClick","uploadText","clearText","dropAreaWrapper","setDropArea","files","enablePersistence","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","sequentialUpload","length_1","dropTextArea","dropArea","dropZoneElement","enableDropText","createDropTextHint","bindDropEvents","fileDropArea","uploadStyle","newAttr","createAttribute","setAttributeNode","checkAutoUpload","sequenceUpload","isFileListCreated","updatedOldCssClass","browseButtonClick","onSelectFiles","removeFocus","keyboardModule","KeyboardEvents","keyAction","keyActionHandler","resetForm","unWireEvents","targetElement","metaData","getCurrentMetaData","file","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","click","dropElement","dragHover","onDragLeave","onPasteFile","onDragEnter","dropEffect","dataTransfer","clipboardData","items","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","createSpinner","showSpinner","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","custom","ajax","Ajax","asyncSettings","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","removingEventCallback","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","append","updateFormData","customFormData","customData","updateCustomheader","request","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","this_1","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","sanitizeFile","beforeSanitize","sanitizeFileName","serializeValue","currentFileName","isUTF8","hasHTMLString","encodedFileName","checkExtension","_internalRenderSelect","fileDetails","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","allowFormUpload","saveUrl","singleUpload","previousListClone","added","oldList","createParentUL","str","dropFiles","extensions_1","extension","toLocaleLowerCase","checkFileType","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","fileData_1","listItem","listElement","data-file-name","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","fileData_4","list","fileNames","fileData_5","statusForFormUpload","fileData_6","formCustomFileList","createFileList","fileData_7","data-files-count","textContainer","textElement","fileExtension","preventActionComplete","getSlicedName","nameElement","dataset","tail","fileData_8","scrollWidth","setInitialAttributes","filterfileList","filterFiles","updateLiStatus","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","total","changeProgressValue","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","ajax_1","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","spinnerEle","raiseActionComplete","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","progressAnimation","Animation","animate","animateProgressBar","extensions","uploadTemplate","compile","exception","isMutiple","isDisabled","fileIndex","chunkSize","chunkIndex","blob","retryCount","sendRequest","totalChunk","ceil","async","contentType","chunkUploadComplete","onUploadProgress","chunkUploadInProgress","currentChunkIndex","uploadingEventCallback","chunkUploadFailed","eventCancelByArgs","removeIcon","checkChunkUpload","requestResponse","updateMetaData","eventArgs_1","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","progressVal","totalChunks","abortIcon","bytes","sortedFilesData","sortedFileNames_1","sort","name_3","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","reader","contents","uploadFileCount","getFileRead","fileCount","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","removeFiles_1","fileUploadedIndex","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","APPLY","CTRLBTN","CTRLSWITCH","HIDEHEX","HIDERGBA","HIDEVALUE","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PREVIEW","SHOWVALUE","SELECT","TILE","presets","default","ColorPicker","Apply","Cancel","ModeSwitcher","initWrapper","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","noColor","mode","slicedValue","initialInputValue","tileRipple","rippleEffect","selector","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","SplitButton","iconCss","createPopupOnClick","onOpen","ev","MouseEvent","bubbles","cancelable","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","X","Y","targetType","collision","bindCallBackEvent","isCollide","getInstance","Popup","callBackPromise","Deferred","observeOpenArgs","pageYOffset","pageXOffset","modal","beforeCloseArgs","observedCloseArgs","onPopupClose","destroyOtherComp","presetColors","paletteGroup","appendElement","appendPalette","len","modeSwitcher","setNoColor","borderBottomWidth","rgb","hsv","rgbToHsv","colors","refEle","palette","row","tile","roundedColor","columns","aria-selected","presetName","addTileSelection","noColorEle","insertPos","hsvContainer","dragHandler","setHsvContainerBg","setHandlerPosition","createSlider","createDragTooltip","h","getHsvContainer","hsvToRgb","hsvArea","sliderPreviewWrapper","createPreview","sliderWrapper","slider","hueSlider","change","hueChange","createOpacitySlider","opacitySlider","opacityChange","opacityBgTrack","updateOpacitySliderBg","direction","opacityEle","background","convertToOtherFormat","pValue","rgbToHex","cValue","updateOpacityInput","updatePreview","opacityTextBoxInst","dataBind","previewContainer","colorValue","isPicker","createNumericInput","numericInput","appendValueSwitchBtn","hexInput","maxlength","clsName","appendOpacityValue","targetEle","valueSwitchBtn","formatSwitchHandler","btnWrapper","controlBtnWrapper","appendModeSwitchBtn","tooltipEle","getTooltipInst","setTooltipOffset","enable","convertToHsvString","updateHsv","isKey","updateInput","substr","removeTileSelection","convertRgbToNumberArray","n","toggle","closePopup","pickerKeyDown","ctrlBtn","ctrlBtnKeyDown","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","triggerChangeEvent","handlerDragPosition","enterKeyHandler","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshImageEditorPopupPos","btnElem","ej2_instances","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","numericElemColl","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","v","s","floor","f","q","t","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","otherCompModel","getModel","count_1","reduce","cls","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","multiline","textarea","apiAttributes","attrs_1","autoCompleteTxt","initialValue","setInitialValue","defaultValue","keydownHandler","animationHandler","resetValue","textboxObj","interaction","resetInputHandler","AUTO_WIDTH","TextArea","textareaOptions","textareaWrapper","resizeMode","getCurrentResizeClass","rows","cols","currentWidth","setWrapperWidth","resize","textareaObj","SignatureBase","minDistance","interval","timeout","isSignatureEmpty","backgroundLoaded","isBlazor","isResponsive","signPointsColl","signRatioPointsColl","canRedraw","dotnetRef","clearArray","canvasContext","getContext","canvas","signatureValue","loadPersistedSignature","setHTMLProperties","updateSnapCollection","pointColl","isReadOnly","mouseMoveHandler","mouseUpHandler","mouseDownHandler","keyboardHandler","resizeHandler","fillStyle","strokeColor","tempCanvas","tempContext","backgroundImage","backgroundRepeat","saveWithBackground","setBackgroundImage","beginStroke","updateStrokeWithThrottle","updateStroke","actionName","endDraw","invokeMethodAsync","snapColl","incStep","fileName","observableSaveArgs","save","stopImmediatePropagation","undo","redo","proxy","pointSize","minStrokeWidth","maxStrokeWidth","arcDraw","closePath","fill","restoreImg_1","Image","src","clearRect","drawImage","internalRefresh","point","createPoint","addPoint","now","remaining","storedArgs","rect","pointX","pointY","time","controlPoint1","controlPoint2","points","lastPoint","isLastPointTooClose","distanceTo","calculateCurveControlPoints","startPoint","endPoint","startDraw","shift","velocity","pointVelocityCalc","lastVelocity","newWidth","curveDraw","lastWidth","canDrawCurve","strokeDraw","startWidth","endWidth","t1","t2","t3","u1","u2","u3","context","widthValue","bezierLength","bezierLengthCalc","drawSteps","beginPath","moveTo","arc","PI","p1","p2","p3","dx1","dy1","dx2","dy2","m1","m2","l1","sqrt","l2","dxm","dym","cm","tx","ty","pointx1","pointy1","pointx2","pointy2","pointx3","pointy3","bezierPointCalc","startpoint","cp1","cp2","endpoint","isRead","enableOrDisable","isDisable","canvasNew","canvasContextNew","toDataURL","imageSrc","imageObj","crossOrigin","globalCompositeOperation","saveBackground","setBackgroundColor","canvasEle","strokeStyle","strokeRect","lastImage","getBlob","arr","bstr","atob","u8arr","Uint8Array","Blob","download","blobUrl","createObjectURL","href","undoImg_1","redoImg_1","empty","isEmpty","canUndo","canRedo","draw","fontFamily","fontSize","font","startX","startY","textAlign","textBaseline","fillText","load","signature","bitmapImage","all","createImageBitmap","then","results","savebg","proxy_1","imageObj_1","toSVG","toJPEG","dataURL","resetSnap","restoreObj","dataUrl","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","saveAsBlob","getSignature","fillRect","propertyChanged","Signature","ICONCSS","SELECTED","LabelPosition","PrecisionType","Rating","itemElements","downarrow","leftarrow","rightarrow","uparrow","space","tooltipOpen","isTouchSelected","updateMinValue","updateTemplateFunction","triggerChange","renderItems","displayLabel","renderItemList","updateReset","visible","updateTooltip","wireKeyboardEvent","updateDisabled","ratingItemList","updateResetButton","allowReset","resetElement","touchMoveHandler","touchEndHandler","currValue","itemsCount","showTooltip","openRatingTooltip","updateCurrentValue","closeRatingTooltip","emptyTemplateFunction","emptyTemplate","getTemplateString","fullTemplateFunction","fullTemplate","ratingItemContainer","spanItem","ratingValue","getRatingValue","renderItemContent","wireItemsEvents","updateItemValue","isrerender","removeItemContent","windowCollision","Full","enableSingleSelection","Half","Quarter","isUpdate","itemElement","updateItemContent","setProperty","updateTooltipContent","isChange","content_1","tooltipTemplate","templateFunction","ratingSpan","stringContent","tempEle","showLabel","spanLabel","updateLabel","updateLabelPosition","labelTemplate","resetClicked","clearLabelPosition","labelPosition","after","removeCss","mouseLeaveHandler","updateValueChange","calculateCurrentValue","keyboardModuleRating","handleNavigation","isIncrease","updateContent","removeItemElements","Right","OtpInputType","OtpInputStyle","OtpInput","inputs","separatorElements","shouldFireFocus","shouldFireBlur","isFocusInCalled","isFocusOutCalled","renderInputs","renderSeparator","addPlaceHolder","updateVariantClass","updateAriaLabel","ariaLabels","setElementAttributes","hiddenInputEle","autoComplete","createOtpInput","valueContainer","getDefaultValue","valueAtIndex","INPUTFIELD","inputmode","separator","separatorElement","updateSeparatorValue","updateInputType","handleInputChange","currentInputElement","nextInputElement","triggerInputEvent","triggerValuechanged","handleKeyAction","previousInputElement","shiftKey","handleSelection","handleBlur","handlePaste","pastedValues","getData","pastedValueIndex","updateValueProperty","inputEventArgs","updateInputValue","stringifiedValue","addCss","cssClasses","variantClass","stylingMode","customAriaLabel","defaultLabel","ariaLabel","updateDisabledState","elementClass","handleLengthChange","focusIndex","Outlined"],"mappings":"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"}