@syncfusion/ej2-inputs 19.3.53 → 19.3.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"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"],"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', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\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 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, '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: this.inputObj.container,\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: _this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n });\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(this.promptChar))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\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 maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container\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.ctrlKey && 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 attributes(this.element, { 'aria-valuenow': this.element.value });\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 if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\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 && 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 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 * 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 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 && args.element.tagName !== 'TEXTAREA') {\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) && args.element.tagName !== 'TEXTAREA') {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\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 element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\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 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\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) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\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 if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\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 if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction == undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\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 }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\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);\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 = '<input placeholder=\"' + placeholder + '\"/>';\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 ((!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 && 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 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 }\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 parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-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': '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 if (type !== 'Never') {\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 var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\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 if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\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 checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\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[i].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[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].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 _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = 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 // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = 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 /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\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 }\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 /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\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 innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\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 if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\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})(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 } 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'];\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n * var numericObj = new NumericTextBox({ value: 10 });\n * numericObj.appendTo(\"#numeric\");\n * </script>\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.isVue = false;\n _this.preventChange = false;\n _this.isAngular = 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') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\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', 'aria-live': 'assertive' });\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 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 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', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\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 'aria-label': 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 'aria-label': 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 attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\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 if (this.prevValue !== this.value) {\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 // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = 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 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.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 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 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 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 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 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = 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 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 EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\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 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 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'tabindex', 'aria-valuemin',\n 'aria-valuemax', 'aria-live', '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 _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\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 /* 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 NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\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 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 * <input id=\"mask\" type=\"text\" />\n * ```\n * ```typescript\n * <script>\n * var maskObj = new MaskedTextBox({ mask: \"(999) 9999-999\" });\n * maskObj.appendTo('#mask');\n * </script>\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.isAngular = false;\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 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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 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) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\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 var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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.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.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 var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete',\n 'aria-live', '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.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\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 } 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 * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\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 // eslint-disable-next-line\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 * @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)) {\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 * @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) ? 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) ? 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.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.isMaterialTooltip = this.isMaterial && 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': min.toString(), 'aria-valuemax': 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'\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'\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 this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && 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 }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\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 if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\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 = 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 _this.tooltipObj.content = observedArgs.text;\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;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\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.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 () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 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 () { _this.tooltipElement.style.transition = 'none'; }, 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 (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.isBootstrap4 || this.isTailwind || this.isBootstrap5,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 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.isMaterialTooltip ? 'Always' : (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) {\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 enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\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.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 // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\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 this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\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 (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\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 start = this.makeRoundNumber(start - smallStep, decimalPoints);\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, tickWidth);\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, tickWidth) {\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 var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\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 // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\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 // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\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 // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\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') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': 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 = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + '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 = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + '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;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\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 // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\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') {\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 (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\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: 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.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\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 this.min = this.max;\n }\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 * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\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 // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\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 = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': 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 _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\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) {\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) {\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\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 if (evt.target === handle) {\n if (this.isMaterial && !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.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 this.changeEvent('changed', evt);\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 this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\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 this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\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.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, 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) {\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 (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 (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.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 };\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 (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\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 }\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 };\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 * @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 * @method destroy\n * @return {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 this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\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.setTooltip(prop);\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') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\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 = 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 * @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(false)\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 { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\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 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 * <form id='formId'>\n * <input type='text' name='Name' />\n * <input type='text' name='Age' />\n * </form>\n * <script>\n * let formObject = new FormValidator('#formId', {\n * rules: { Name: { required: true }, Age: { range: [18, 30] } };\n * });\n * formObject.validate();\n * </script>\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[i]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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}\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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 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 * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\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 input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\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 this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\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 this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\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[i] : ruleValue;\n message = message.replace(formats[i], 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 this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\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[i];\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 this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\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 chekcable 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 <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= 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 return !isNaN(new Date(option.value).getTime());\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) >= option.param;\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 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 } 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 * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n * var uploadObj = new Uploader();\n * uploadObj.appendTo('#upload');\n * </script>\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 this.clearAll();\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.createFileList(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',\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 inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\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.createFileList(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.createFileList(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 ++this.count;\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 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 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 };\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 (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\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.element.value = '';\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 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 /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\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 };\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 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.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, \n // eslint-disable-next-line @typescript-eslint/indent\n 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 = dataFiles;\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData, true);\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 this.raiseActionComplete();\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 var removedList;\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 removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\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.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(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 if (allowedExtensions.indexOf(('.' + files[i].type).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('.')) && 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 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('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 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 /* eslint-disable valid-jsdoc, jsdoc/require-param */\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, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\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 (!li.classList.contains(UPLOAD_SUCCESS)) {\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 };\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 = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (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 liElement.classList.add(RESTRICT_RETRY);\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))) {\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 });\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 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 (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\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('chunkFile', blob, file.name);\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 deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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}\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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 _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 /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\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 cloneFiles = [];\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var getFileData;\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) {\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 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 } 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 * <input type=\"color\" id=\"color-picker\">\n * ```\n * ```typescript\n * <script>\n * let colorPickerObj: ColorPicker = new ColorPicker(null , \"#color-picker\");\n * </script>\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' });\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.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 _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\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.split(' '));\n }\n if (Browser.isDevice) {\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 };\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 _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' } });\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': 'presentation' }\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' }\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 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' }\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 });\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 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 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) {\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);\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 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.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.closePopup(e);\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) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\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);\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();\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();\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 this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\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));\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));\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 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);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\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);\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);\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);\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);\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();\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();\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) {\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);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\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 },\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 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 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.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 {\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 } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n * var textboxObj = new TextBox();\n * textboxObj.appendTo('#textbox');\n * </script>\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.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\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 (!this.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.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\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 if (this.respectiveElement.tagName !== 'TEXTAREA') {\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n }\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 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 this.updateCssClass(newProp.cssClass, oldProp.cssClass);\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.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\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') {\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 }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n this.element.setAttribute('role', 'textbox');\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) && containerAttr.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) {\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 = this.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.updateHTMLAttrToWrapper();\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 this.renderComplete();\n };\n TextBox.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 (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n TextBox.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 (containerAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\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, '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 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)) {\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.respectiveElement.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.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = 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 this.raiseChangeEvent(args, true);\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 };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.respectiveElement.tagName !== 'TEXTAREA') {\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 }\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, '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.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-placeholder', '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 _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 /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\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"],"names":["createMask","attributes","this","element","role","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","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","trigger","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","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","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","createInput","internalCreateElement","makeElement","createElement","inputObject","buttons","floatType","isBindClearAction","bindClearAction","createInputContainer","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","setClearButton","setAttribute","appendSpan","validateInputType","setPropertyValue","checkInputValue","addEventListener","parent","getParentNode","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","removeEventListener","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","inputWrap","updateLabelState","getAttribute","checkFloatLabelType","_i","_a","Object","keys","setCssClass","cssClass","setEnabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","updateIconState","button","createClearButton","initial","insertAdjacentElement","wireClearBtnEvents","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","elements","oldClass","setWidth","width","style","formatUnit","textContent","aria-placeholder","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","isClear","attrs","removeFloating","input","detach","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","isRipple","_internalRipple","argsButton","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","containerElement","__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","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","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","htmlAttributes","prop","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","inputWrapper","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","class","name","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","updatedClassValue","numericStyle","spinDown","title","aria-label","spinUp","wireSpinBtnEvents","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","toString","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","isDevice","parseValue","numerictextboxObj","userAgent","parsedValue","localChange","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","parseInt","decimalPart","result1","result2","cancelEvent","info","version","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","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","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","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","window","getComputedStyle","getPropertyValue","tabIndex","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","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","enableHtmlSanitizer","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","SanitizeHtmlHelper","sanitize","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","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","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","relatedTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","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","clickHandler","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","display","checkRequired","inputType","option","Date","getTime","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","setLocalizedTexts","preLocaleObj","template","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Clear","Upload","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","item","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","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","saveUrl","singleUpload","removedList","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","str","dropFiles","extensions_1","extension","toLocaleLowerCase","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","join","statusForFormUpload","fileData_6","formCustomFileList","isSelectedFile","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","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","spinnerEle","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","getFileInfo","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","removeFiles_1","fileUploadedIndex","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","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","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","body","X","Y","targetType","collision","bindCallBackEvent","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","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","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","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","textboxObj","interaction","resetInputHandler"],"mappings":"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"}
1
+ {"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"],"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', 'autocorrect': 'off', 'autocapitalize': 'off',\n 'spellcheck': 'false', 'aria-live': 'assertive', 'aria-valuenow': ''\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 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, '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: this.inputObj.container,\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: _this.inputObj.container,\n selectionEnd: inputElement.selectionEnd\n };\n triggerFocus.call(_this, eventArgs, inputElement);\n });\n break;\n }\n }\n if (isNullOrUndefined(inputElement.value.match(this.promptChar))) {\n eventArgs = {\n selectionStart: inputElement.selectionStart,\n event: event,\n value: this.value,\n maskedValue: inputElement.value,\n container: this.inputObj.container,\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 maskInputBlurHandler(event) {\n this.blurEventArgs = {\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container\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.ctrlKey && 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 attributes(this.element, { 'aria-valuenow': this.element.value });\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 if (keyValue.match(new RegExp('[' + customValArr[i] + ']'))) {\n allowText = true;\n break;\n }\n }\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 && 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 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 * 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 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 && args.element.tagName !== 'TEXTAREA') {\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) && args.element.tagName !== 'TEXTAREA') {\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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n privateInputObj = inputObject;\n return inputObject;\n }\n Input.createInput = createInput;\n function bindInitialEvent(args) {\n checkInputValue(args.floatLabelType, args.element);\n args.element.addEventListener('focus', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.add('e-input-focus');\n }\n });\n args.element.addEventListener('blur', function () {\n var parent = getParentNode(this);\n if (parent.classList.contains('e-input-group') || parent.classList.contains('e-outline')\n || parent.classList.contains('e-filled')) {\n parent.classList.remove('e-input-focus');\n }\n });\n args.element.addEventListener('input', function () {\n checkInputValue(floatType, args.element);\n });\n }\n Input.bindInitialEvent = bindInitialEvent;\n function checkInputValue(floatLabelType, inputElement) {\n var inputValue = inputElement.value;\n if (inputValue !== '' && !isNullOrUndefined(inputValue) && inputElement.parentElement) {\n inputElement.parentElement.classList.add('e-valid-input');\n }\n else if (floatLabelType !== 'Always' && inputElement.parentElement) {\n inputElement.parentElement.classList.remove('e-valid-input');\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 element.removeEventListener('focus', _focusFn);\n element.removeEventListener('blur', _blurFn);\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 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n args.element.addEventListener('blur', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\n }\n if (!isNullOrUndefined(args.element.getAttribute('id'))) {\n floatLabelElement.setAttribute('for', args.element.getAttribute('id'));\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) {\n if (value) {\n removeClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n else {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }\n }\n function updateLabelState(value, label) {\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 if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\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 if (!isNullOrUndefined(container) &&\n container.classList.contains(CLASSNAMES.FLOATINPUT)) {\n addClass([container], CLASSNAMES.INPUTGROUP);\n }\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n wireClearBtnEvents(element, button, container);\n button.setAttribute('aria-label', 'close');\n return button;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n function wireClearBtnEvents(element, button, container) {\n if (isBindClearAction == undefined || isBindClearAction) {\n button.addEventListener('click', function (event) {\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 }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n element.addEventListener('blur', function (event) {\n setTimeout(function () {\n addClass([button], CLASSNAMES.CLEARICONHIDE);\n }, 200);\n });\n }\n Input.wireClearBtnEvents = wireClearBtnEvents;\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);\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 = '<input placeholder=\"' + placeholder + '\"/>';\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 ((!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 && 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 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 }\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 parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = placeholder;\n parentElement.classList.remove(CLASSNAMES.NOFLOATLABEL);\n element.removeAttribute('placeholder');\n }\n else {\n parentElement.classList.add(CLASSNAMES.NOFLOATLABEL);\n parentElement.getElementsByClassName(CLASSNAMES.FLOATTEXT)[0].textContent = '';\n }\n }\n else {\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n attributes(element, { 'placeholder': placeholder, 'aria-placeholder': placeholder });\n }\n else {\n element.removeAttribute('placeholder');\n element.removeAttribute('aria-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': '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 if (type !== 'Never') {\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 var iconEle = container.querySelector('.e-clear-icon');\n var inputObj = { container: container };\n input.classList.remove(CLASSNAMES.INPUT);\n createFloatingInput(args, inputObj, makeElement);\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 if (isNullOrUndefined(iconEle)) {\n container.classList.remove(CLASSNAMES.INPUTGROUP);\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 checkFloatLabelType(type, input.parentElement);\n }\n Input.addFloating = addFloating;\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[i].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[index].addEventListener('mousedown', _onMouseDownRipple, false);\n buttons[index].addEventListener('mouseup', _onMouseUpRipple, false);\n }\n }\n else if (buttons.length > 0) {\n for (var index = 0; index < buttons.length; index++) {\n buttons[index].removeEventListener('mousedown', _onMouseDownRipple, this);\n buttons[index].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 _onMouseDownRipple() {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = 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 // eslint-disable-next-line @typescript-eslint/no-this-alias\n var ele = 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 /* eslint-disable @typescript-eslint/indent */\n function addIcon(position, icons, container, input, internalCreate) {\n /* eslint-enable @typescript-eslint/indent */\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 }\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 /* eslint-disable @typescript-eslint/indent */\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n /* eslint-enable @typescript-eslint/indent */\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 innerWrapper.appendChild(result[i]);\n }\n }\n innerWrapper.parentNode.insertBefore(button, innerWrapper);\n if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\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 if (!container.classList.contains(CLASSNAMES.INPUTGROUP)) {\n container.classList.add(CLASSNAMES.INPUTGROUP);\n }\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})(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 } 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'];\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n * var numericObj = new NumericTextBox({ value: 10 });\n * numericObj.appendTo(\"#numeric\");\n * </script>\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.isVue = false;\n _this.preventChange = false;\n _this.isAngular = 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') {\n input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n input.innerHTML = this.element.innerHTML;\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', 'aria-live': 'assertive' });\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 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 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', 'class': HIDDENELEMENT } }));\n this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n this.element.removeAttribute('name');\n attributes(this.hiddenInput, { 'name': this.inputName });\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 'aria-label': 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 'aria-label': 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 attributes(this.element, { 'aria-valuemin': this.min.toString(), 'aria-valuemax': this.max.toString() });\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 if (this.prevValue !== this.value) {\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 // eslint-disable-next-line no-self-assign\n _this.element.value = _this.element.value;\n }\n else {\n _this.element.value = _this.prevVal;\n }\n _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var numerictextboxObj = 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('[^1-9]+$');\n if (nonZeroRegex.test(this.element.value)) {\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.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 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 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 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 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 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 // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var result = 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 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 EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\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 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 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete', 'tabindex', 'aria-valuemin',\n 'aria-valuemax', 'aria-live', '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 _super.prototype.destroy.call(this);\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n *\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\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 /* 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 NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 break;\n case 'cssClass':\n this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n break;\n case 'enabled':\n Input.setEnabled(newProp.enabled, this.element);\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 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 * <input id=\"mask\" type=\"text\" />\n * ```\n * ```typescript\n * <script>\n * var maskObj = new MaskedTextBox({ mask: \"(999) 9999-999\" });\n * maskObj.appendTo('#mask');\n * </script>\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.isAngular = false;\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 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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 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) {\n this.setMaskPlaceholder(false, false);\n }\n break;\n case 'placeholder':\n this.setMaskPlaceholder(true, true);\n break;\n case 'width':\n this.setWidth(newProp.width);\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 var value = this.element.value.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n if (this.promptMask === this.element.value) {\n value = this.promptMask.replace(new RegExp('[' + oldProp.promptChar + ']', 'g'), this.promptChar);\n }\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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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.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.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 var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n 'autocorrect', 'aria-disabled', 'aria-placeholder', 'autocapitalize',\n 'spellcheck', 'aria-autocomplete',\n 'aria-live', '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.inputObj.container.insertAdjacentElement('afterend', this.element);\n detach(this.inputObj.container);\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 } 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 * <div id='slider'></div>\n * ```\n * ```typescript\n * <script>\n * var sliderObj = new Slider({ value: 10 });\n * sliderObj.appendTo('#slider');\n * </script>\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 // eslint-disable-next-line\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 * @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)) {\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 * @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) ? 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) ? 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.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.isMaterialTooltip = this.isMaterial && 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': min.toString(), 'aria-valuemax': 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'\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'\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 this.getHandle().style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.isMaterial && 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 }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\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 if (this.min > this.max) {\n this.min = this.max;\n }\n this.createFirstHandle();\n if (this.type === 'Range') {\n this.createSecondHandle();\n }\n };\n Slider.prototype.setEnableRTL = function () {\n this.enableRtl && this.orientation !== 'Vertical' ? addClass([this.sliderContainer], classNames.rtl) :\n removeClass([this.sliderContainer], classNames.rtl);\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 = 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 _this.tooltipObj.content = observedArgs.text;\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;\n content = this.formatContent(this.tooltipFormatInfo, false);\n this.tooltipObj.content = content;\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.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 () { _this.tooltipElement.style.transition = _this.transition.handle; }, 2500);\n }\n else {\n setTimeout(function () { _this.tooltipElement.style.transition = 'none'; }, 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 () { _this.tooltipElement.style.transition = 'none'; }, 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 (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.isBootstrap4 || this.isTailwind || this.isBootstrap5,\n cssClass: classNames.sliderTooltip,\n height: this.isMaterial ? 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.isMaterialTooltip ? 'Always' : (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) {\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 enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if (args.target.parentElement.classList.contains(classNames.secondButton)\n || (args.target.classList.contains(classNames.secondButton))) {\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\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.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 // tslint:disable-next-line:max-func-body-length\n Slider.prototype.renderScale = function () {\n var liElementPosition = 0;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n var spanText;\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 this.ticks.largeStep > 0 ? (smallStep = this.ticks.largeStep) :\n (smallStep = (parseFloat(formatUnit(this.max))) - (parseFloat(formatUnit(this.min))));\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 (orien === 'h') ? (li.style.width = tickWidth + '%') : (li.style.height = tickWidth + '%');\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 start = this.makeRoundNumber(start - smallStep, decimalPoints);\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, tickWidth);\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, tickWidth) {\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 var smallTick = 12;\n var largeTick = 20;\n var half = largeTick / 2;\n var orien = this.orientation === 'Vertical' ? 'v' : 'h';\n if (this.orientation === 'Vertical') {\n (this.element.getBoundingClientRect().width <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\n }\n else {\n (this.element.getBoundingClientRect().height <= 15) ?\n this.sliderContainer.classList.add(classNames.sliderSmallSize) :\n this.sliderContainer.classList.remove(classNames.sliderSmallSize);\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 // eslint-disable-next-line\n (!this.enableRtl) ? ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] })) :\n ((element === this.firstHandle) ?\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[1], 'aria-valuetext': ariaValueText[1] }) :\n attributes(element, { 'aria-valuenow': valuenow.split(' - ')[0], 'aria-valuetext': ariaValueText[0] }));\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 // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), false));\n }\n else if ((args.keyCode === 38) || (args.keyCode === 39) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.step.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.step.toString()), true));\n }\n else if ((args.keyCode === 33\n || args.currentTarget.classList.contains(classNames.firstButton))) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true));\n }\n else if ((args.keyCode === 34) ||\n args.currentTarget.classList.contains(classNames.secondButton)) {\n // eslint-disable-next-line\n enabledRTL ? (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), true)) :\n (value = this.add(hVal, parseFloat(this.ticks.largeStep.toString()), false));\n }\n else if ((args.keyCode === 36)) {\n value = parseFloat(this.min.toString());\n }\n else if ((args.keyCode === 35)) {\n value = parseFloat(this.max.toString());\n }\n if (this.limits.enabled) {\n value = this.getLimitCorrectedValues(value);\n }\n this.changeHandleValue(value);\n if (this.isMaterial && !this.tooltip.isVisible &&\n !this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.materialChange();\n }\n this.tooltipToggle(this.getHandle());\n this.getHandle().focus();\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 // eslint-disable-next-line\n !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\n // eslint-disable-next-line\n !this.tooltipElement ? this.openTooltip(target) : this.refreshTooltip(target);\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') {\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\n setStyleAttribute(this.rangeBar, { 'width': this.handlePos2 - this.handlePos1 + 'px' });\n }\n }\n else {\n if (this.type === 'MinRange') {\n this.rangeBar.style.bottom = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else {\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': 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 = fromMinPostion + 'px';\n this.limitBarFirst.style.height = (fromMaxpostion - fromMinPostion) + '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 = toMinPostion + 'px';\n this.limitBarSecond.style.height = (toMaxpostion - toMinPostion) + '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;\n if (isNullOrUndefined(currentValue) && limitBar) {\n currentValue = minValue;\n }\n }\n if (isNullOrUndefined(maxValue)) {\n maxValue = this.max;\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 // eslint-disable-next-line\n isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\n // eslint-disable-next-line no-self-assign\n this.activeHandle = this.activeHandle;\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') {\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 (_this.orientation === 'Horizontal') {\n // eslint-disable-next-line\n _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\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: 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.handlePos1 > this.handlePos2) {\n this.handlePos1 = this.handlePos2;\n this.handleVal1 = this.handleVal2;\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 this.min = this.max;\n }\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 * @returns void\n */\n Slider.prototype.reposition = function () {\n var _this = this;\n this.firstHandle.style.transition = 'none';\n if (this.type !== 'Default') {\n this.rangeBar.style.transition = 'none';\n }\n if (this.type === 'Range') {\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 // eslint-disable-next-line\n this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\n // eslint-disable-next-line\n this.enableRtl ? this.materialHandle.style.right =\n this.handlePos1 + \"px\" : this.materialHandle.style.left = this.handlePos1 + \"px\";\n }\n if (this.type === 'MinRange') {\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right = '0px') : (this.rangeBar.style.left = '0px');\n setStyleAttribute(this.rangeBar, { 'width': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n // eslint-disable-next-line\n this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\n // eslint-disable-next-line\n this.enableRtl ? (this.rangeBar.style.right =\n this.handlePos1 + 'px') : (this.rangeBar.style.left = this.handlePos1 + 'px');\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 = '0px';\n setStyleAttribute(this.rangeBar, { 'height': isNullOrUndefined(this.handlePos1) ? 0 : this.handlePos1 + 'px' });\n }\n else if (this.type === 'Range') {\n this.secondHandle.style.bottom = this.handlePos2 + \"px\";\n this.rangeBar.style.bottom = this.handlePos1 + 'px';\n setStyleAttribute(this.rangeBar, { 'height': 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 _this.firstHandle.style.transition = _this.scaleTransform;\n if (_this.type === 'Range') {\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) {\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) {\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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 // eslint-disable-next-line\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.handlePos2 - handlepos) < (handlepos - this.handlePos1)) {\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 if (evt.target === handle) {\n if (this.isMaterial && !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.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 this.changeEvent('changed', evt);\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 this.handlePos1 = this.xyToPosition(pos);\n this.handleVal1 = this.positionToValue(this.handlePos1);\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 this.handlePos2 = this.xyToPosition(pos);\n this.handleVal2 = this.positionToValue(this.handlePos2);\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.max) {\n this.handleValueAdjust(this.handleVal2, this.max, 2);\n }\n if (this.handleVal1 === this.min) {\n this.handleValueAdjust(this.handleVal1, 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) {\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 (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 (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.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 };\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 (event.target.previousSibling).classList.contains(classNames.sliderHandle) ?\n this.activeHandle = 2 : this.activeHandle = 1;\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 }\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 };\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 * @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 * @method destroy\n * @return {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 this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n this.element.innerHTML = '';\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n // tslint:disable-next-line\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.setTooltip(prop);\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') {\n this.ul.style.zIndex = (this.zIndex + -7) + '';\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n if (!this.isMaterial && !isNullOrUndefined(this.ticks) && this.ticks.placement === 'Both') {\n this.element.style.zIndex = (this.zIndex + 2) + '';\n }\n this.firstHandle.style.zIndex = (this.zIndex + 3) + '';\n if (this.type === 'Range') {\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 = 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 * @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(false)\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 { L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\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 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 * <form id='formId'>\n * <input type='text' name='Name' />\n * <input type='text' name='Age' />\n * </form>\n * <script>\n * let formObject = new FormValidator('#formId', {\n * rules: { Name: { required: true }, Age: { range: [18, 30] } };\n * });\n * formObject.validate();\n * </script>\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[i]];\n }\n }\n else {\n return;\n }\n };\n /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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}\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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n /**\n * Get input element by name.\n *\n * @param {string} name - Input element name attribute value.\n * @returns {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 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 * @private\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\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 input.classList.remove(this.errorClass);\n if (input.name.length > 0) {\n this.getInputElement(input.name);\n this.getErrorElement(input.name);\n this.hideMessage(input.name);\n }\n input.classList.remove(this.validClass);\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 this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\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 this.inputElement.classList.add(this.errorClass);\n this.inputElement.classList.remove(this.validClass);\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[i] : ruleValue;\n message = message.replace(formats[i], 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 this.inputElement.parentNode.insertBefore(errorElement, this.inputElement.nextSibling);\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[i];\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 this.inputElement.classList.add(this.validClass);\n this.inputElement.classList.remove(this.errorClass);\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 chekcable 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 <= option.param;\n },\n minLength: function (option) {\n return option.value.length >= 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 return !isNaN(new Date(option.value).getTime());\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) >= option.param;\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 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 } 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 * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n * var uploadObj = new Uploader();\n * uploadObj.appendTo('#upload');\n * </script>\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 this.clearAll();\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.createFileList(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',\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 inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\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.createFileList(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.createFileList(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 ++this.count;\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 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 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 };\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 (item.length !== 1) {\n return;\n }\n var pasteFile = [].slice.call(item)[0];\n if ((pasteFile.kind === 'file') && pasteFile.type.match('^image/')) {\n this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\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.element.value = '';\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 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 /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\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 };\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 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.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, \n // eslint-disable-next-line @typescript-eslint/indent\n 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 = dataFiles;\n if (!this.isForm || this.allowUpload()) {\n this.checkAutoUpload(dataFiles);\n }\n }\n else {\n this.createFileList(fileData, true);\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 this.raiseActionComplete();\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 var removedList;\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 removedList = this.listParent.querySelectorAll('li');\n for (var _i = 0, removedList_1 = removedList; _i < removedList_1.length; _i++) {\n var item = removedList_1[_i];\n detach(item);\n }\n this.removeActionButtons();\n var oldList = [].slice.call(previousListClone.childNodes);\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\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.createFileList([filesData[index]]);\n }\n }\n }\n else {\n this.createFileList(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 if (allowedExtensions.indexOf(('.' + files[i].type).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('.')) && 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 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('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 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 /* eslint-disable valid-jsdoc, jsdoc/require-param */\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, isSelectedFile) {\n /* eslint-enable valid-jsdoc, jsdoc/require-param */\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 (!li.classList.contains(UPLOAD_SUCCESS)) {\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 };\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 = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n ajax.emitError = false;\n ajax.onLoad = function (e) {\n _this.removecanceledFile(e, files);\n return {};\n };\n ajax.send(formData);\n }\n }\n });\n }\n };\n Uploader.prototype.removecanceledFile = function (e, file) {\n var liElement = this.getLiElement(file);\n if (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 liElement.classList.add(RESTRICT_RETRY);\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))) {\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 });\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 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 (selectAll(uploadTemplate, document).length) {\n return compile(select(uploadTemplate, document).innerHTML.trim());\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('chunkFile', blob, file.name);\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 deleteIcon && deleteIcon.classList.remove(ABORT_ICON);\n deleteIcon && deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon && pauseIcon.classList.add(RETRY_ICON);\n pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry'));\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 /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\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}\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 /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\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 _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 /* eslint-disable @typescript-eslint/no-unused-vars */\n /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\n /* eslint-enable @typescript-eslint/no-unused-vars */\n var files = this.filesData;\n if (!files || files.length === 0) {\n return null;\n }\n var file = files[index];\n if (!file) {\n return null;\n }\n return this.filesData[index];\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 cloneFiles = [];\n var chunkEnabled = this.checkChunkUpload();\n var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n ajax.emitError = false;\n var getFileData;\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) {\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 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 } 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 * <input type=\"color\" id=\"color-picker\">\n * ```\n * ```typescript\n * <script>\n * let colorPickerObj: ColorPicker = new ColorPicker(null , \"#color-picker\");\n * </script>\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' });\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.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 _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\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.split(' '));\n }\n if (Browser.isDevice) {\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 };\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 _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' } });\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': 'presentation' }\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' }\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 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' }\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 });\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 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 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) {\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);\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 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.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.closePopup(e);\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) {\n var hex = value.slice(0, 7);\n this.trigger('change', {\n currentValue: { hex: hex, rgba: this.convertToRgbString(this.rgb) },\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);\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();\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();\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 this.wireEvents();\n this.trigger('onModeSwitch', { element: this.container, mode: 'Palette' });\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));\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));\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 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);\n }\n if (!this.inline) {\n this.closePopup(e);\n this.splitBtn.element.focus();\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);\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);\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);\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);\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();\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();\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) {\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);\n };\n ColorPicker.prototype.triggerEvent = function (cValue, pValue, rgba, isKey) {\n if (isKey === void 0) { isKey = false; }\n var hex = cValue.slice(0, 7);\n if (!this.showButtons && !isKey) {\n this.trigger('change', { currentValue: { hex: hex, rgba: rgba },\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 },\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 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 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.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 {\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 } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n * var textboxObj = new TextBox();\n * textboxObj.appendTo('#textbox');\n * </script>\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.isAngular = false;\n _this.isHiddenInput = false;\n _this.isForm = false;\n _this.inputPreviousValue = null;\n _this.isVue = false;\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 (!this.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.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\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 if (this.respectiveElement.tagName !== 'TEXTAREA') {\n Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n this.bindClearEvent();\n }\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 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 this.updateCssClass(newProp.cssClass, oldProp.cssClass);\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.isBlank = function (str) {\n return (!str || /^\\s*$/.test(str));\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') {\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 }\n this.element.appendChild(inputElement);\n this.element = inputElement;\n setValue('ej2_instances', ejInstance, this.element);\n }\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.element.tagName !== 'TEXTAREA') {\n this.element.setAttribute('type', this.type);\n }\n this.element.setAttribute('role', 'textbox');\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) && containerAttr.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) {\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 = this.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.updateHTMLAttrToWrapper();\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 this.renderComplete();\n };\n TextBox.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 (containerAttr.indexOf(key) > -1) {\n if (key === 'class') {\n var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[key]);\n if (updatedClassValues !== '') {\n addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n }\n }\n else if (key === 'style') {\n var setStyle = this.textboxWrapper.container.getAttribute(key);\n setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[key]) :\n this.htmlAttributes[key];\n this.textboxWrapper.container.setAttribute(key, setStyle);\n }\n else {\n this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n }\n };\n TextBox.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 (containerAttr.indexOf(key) < 0) {\n this.element.setAttribute(key, this.htmlAttributes[key]);\n }\n }\n }\n };\n TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n };\n TextBox.prototype.getInputValidClassList = function (inputClassName) {\n var result = inputClassName;\n if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n }\n return result;\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, '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 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)) {\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.respectiveElement.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.inputHandler = function (args) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n var textboxObj = 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 this.raiseChangeEvent(args, true);\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 };\n TextBox.prototype.bindClearEvent = function () {\n if (this.showClearButton && this.respectiveElement.tagName !== 'TEXTAREA') {\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 }\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, '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.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-placeholder', '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 _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 /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n /**\n * Gets the properties to be maintained in the persisted state.\n *\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /* eslint-enable valid-jsdoc, jsdoc/require-returns */\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"],"names":["createMask","attributes","this","element","role","autocomplete","autocorrect","autocapitalize","spellcheck","aria-live","aria-valuenow","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","trigger","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","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","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","createInput","internalCreateElement","makeElement","createElement","inputObject","buttons","floatType","isBindClearAction","bindClearAction","createInputContainer","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","setClearButton","setAttribute","appendSpan","validateInputType","setPropertyValue","checkInputValue","addEventListener","parent","getParentNode","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","removeEventListener","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","inputWrap","updateLabelState","getAttribute","checkFloatLabelType","_i","_a","Object","keys","setCssClass","cssClass","setEnabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","updateIconState","button","createClearButton","initial","insertAdjacentElement","wireClearBtnEvents","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","elements","oldClass","setWidth","width","style","formatUnit","textContent","aria-placeholder","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","isClear","attrs","removeFloating","input","detach","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","isRipple","_internalRipple","argsButton","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","containerElement","__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","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","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","htmlAttributes","prop","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","inputWrapper","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","class","name","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","updatedClassValue","numericStyle","spinDown","title","aria-label","spinUp","wireSpinBtnEvents","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","toString","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","valArray","numericObject","getNumericObject","ignoreKeyCode","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","isDevice","parseValue","numerictextboxObj","userAgent","parsedValue","localChange","current","previous","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","exec","stepCount","Math","roundValue","precision","divide","pow","round","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","validateState","formatNumber","serverDecimalSeparator","EXPREGEXP","valueString","toFixed","parseInt","decimalPart","result1","result2","cancelEvent","info","version","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","delay","isIos","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","touchEvent","touches","elementFromPoint","pageX","pageY","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","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","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","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","window","getComputedStyle","getPropertyValue","tabIndex","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","formatContent","ariaContent","handle1","handleVal1","handle2","handleVal2","count","oldCss","newCss","transform","getTooltipTransformProperties","previousTooltipClass","rotate","tooltipPlacement","tooltipBeforeOpen","filter","css","firstElementChild","setTooltipTransform","tooltipCollision","tooltipOffsetValue","offsetY","offsetX","materialTooltipEventCallBack","wireMaterialTooltipEvent","tooltipPositionCalculation","transformProperties","clientHeight","clientWidth","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","enableHtmlSanitizer","appendTo","initializeTooltipProps","tooltipShowOn","firstBtn","secondBtn","buttonTitle","enabledRTL","buttonFocusOut","repeatButton","hVal","handleValueUpdate","getLimitCorrectedValues","changeHandleValue","repeatHandlerMouse","buttonClick","repeatInterval","materialChange","repeatHandlerUp","changeEvent","customTickCounter","bigNum","tickCount","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","formatTicksValue","decimalPoints","ticksAlignment","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","span","SanitizeHtmlHelper","sanitize","spanElement","tickText","tickElement","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","ariaValueText","isTickFormatted","valuenow","aria-valuetext","activeHandle","getLimitValueAndPosition","minStart","minEnd","maxStart","maxEnd","buttonUp","openTooltip","setRangeBar","handlePos2","bottom","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","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","relatedTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","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","clickHandler","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","display","checkRequired","inputType","option","Date","getTime","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","setLocalizedTexts","preLocaleObj","template","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","autoUpload","uploadButton","listParent","createFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Clear","Upload","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","item","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","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","saveUrl","singleUpload","removedList","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","str","dropFiles","extensions_1","extension","toLocaleLowerCase","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","join","statusForFormUpload","fileData_6","formCustomFileList","isSelectedFile","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","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","spinnerEle","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","getFileInfo","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","removeFiles_1","fileUploadedIndex","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","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","hex","rgba","convertToRgbString","hexToRgb","preview","popupEle","getPopupEle","popupInst","getPopupInst","relateTo","body","X","Y","targetType","collision","bindCallBackEvent","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","handlerDown","addCtrlSwitchEvent","previewHandler","paletteClickHandler","paletteKeyDown","ctrlSwitchBtn","btnClickHandler","handlerDragPosition","enterKeyHandler","triggerChangeEvent","observedcloseArgs","prob","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","childElementCount","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","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","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","textboxObj","interaction","resetInputHandler"],"mappings":"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"}