@syncfusion/ej2-inputs 19.3.57 → 19.4.38
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.
- package/CHANGELOG.md +9 -0
- package/README.md +1 -1
- package/common.d.ts +4 -0
- package/common.js +4 -0
- package/dist/ej2-inputs.umd.min.js +2 -2
- package/dist/ej2-inputs.umd.min.js.map +1 -1
- package/dist/es6/ej2-inputs.es2015.js +1105 -7
- package/dist/es6/ej2-inputs.es2015.js.map +1 -1
- package/dist/es6/ej2-inputs.es5.js +1140 -7
- package/dist/es6/ej2-inputs.es5.js.map +1 -1
- package/dist/global/ej2-inputs.min.js +2 -2
- package/dist/global/ej2-inputs.min.js.map +1 -1
- package/dist/global/index.d.ts +1 -1
- package/package.json +9 -9
- package/signature.d.ts +4 -0
- package/signature.js +4 -0
- package/src/common/index.d.ts +4 -0
- package/src/common/index.js +4 -0
- package/src/common/signature-base.d.ts +320 -0
- package/src/common/signature-base.js +946 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +2 -0
- package/src/input/input.js +10 -6
- package/src/signature/index.d.ts +5 -0
- package/src/signature/index.js +4 -0
- package/src/signature/signature-model.d.ts +131 -0
- package/src/signature/signature.d.ts +167 -0
- package/src/signature/signature.js +171 -0
- package/src/slider/slider.d.ts +1 -0
- package/src/slider/slider.js +9 -0
- package/styles/bootstrap-dark.css +23 -16
- package/styles/bootstrap-dark.scss +1 -0
- package/styles/bootstrap.css +23 -16
- package/styles/bootstrap.scss +1 -0
- package/styles/bootstrap4.css +23 -16
- package/styles/bootstrap4.scss +1 -0
- package/styles/bootstrap5-dark.css +27 -42
- package/styles/bootstrap5-dark.scss +1 -0
- package/styles/bootstrap5.css +27 -42
- package/styles/bootstrap5.scss +1 -0
- package/styles/color-picker/_fabric-dark-definition.scss +1 -1
- package/styles/color-picker/_fluent-definition.scss +134 -0
- package/styles/color-picker/_layout.scss +5 -5
- package/styles/color-picker/_theme.scss +1 -15
- package/styles/color-picker/bootstrap5-dark.css +3 -21
- package/styles/color-picker/bootstrap5.css +3 -21
- package/styles/color-picker/fabric-dark.css +3 -3
- package/styles/color-picker/icons/_fluent.scss +10 -0
- package/styles/fabric-dark.css +26 -19
- package/styles/fabric-dark.scss +1 -0
- package/styles/fabric.css +23 -16
- package/styles/fabric.scss +1 -0
- package/styles/highcontrast-light.css +23 -16
- package/styles/highcontrast-light.scss +1 -0
- package/styles/highcontrast.css +23 -16
- package/styles/highcontrast.scss +1 -0
- package/styles/input/_fluent-definition.scss +321 -0
- package/styles/input/_layout.scss +138 -37
- package/styles/input/_theme.scss +42 -24
- package/styles/input/bootstrap-dark.css +13 -16
- package/styles/input/bootstrap.css +13 -16
- package/styles/input/bootstrap4.css +13 -16
- package/styles/input/bootstrap5-dark.css +13 -16
- package/styles/input/bootstrap5.css +13 -16
- package/styles/input/fabric-dark.css +13 -16
- package/styles/input/fabric.css +13 -16
- package/styles/input/highcontrast-light.css +13 -16
- package/styles/input/highcontrast.css +13 -16
- package/styles/input/icons/_fluent.scss +17 -0
- package/styles/input/material-dark.css +13 -16
- package/styles/input/material.css +13 -16
- package/styles/input/tailwind-dark.css +13 -16
- package/styles/input/tailwind.css +13 -16
- package/styles/maskedtextbox/_fluent-definition.scss +7 -0
- package/styles/maskedtextbox/_theme.scss +2 -2
- package/styles/material-dark.css +23 -16
- package/styles/material-dark.scss +1 -0
- package/styles/material.css +23 -16
- package/styles/material.scss +1 -0
- package/styles/numerictextbox/_fluent-definition.scss +5 -0
- package/styles/numerictextbox/_theme.scss +18 -0
- package/styles/numerictextbox/icons/_fluent.scss +12 -0
- package/styles/signature/_all.scss +2 -0
- package/styles/signature/_bootstrap-dark-definition.scss +3 -0
- package/styles/signature/_bootstrap-definition.scss +3 -0
- package/styles/signature/_bootstrap4-definition.scss +3 -0
- package/styles/signature/_bootstrap5-dark-definition.scss +1 -0
- package/styles/signature/_bootstrap5-definition.scss +3 -0
- package/styles/signature/_fabric-dark-definition.scss +3 -0
- package/styles/signature/_fabric-definition.scss +3 -0
- package/styles/signature/_fluent-definition.scss +3 -0
- package/styles/signature/_highcontrast-definition.scss +3 -0
- package/styles/signature/_highcontrast-light-definition.scss +3 -0
- package/styles/signature/_layout.scss +5 -0
- package/styles/signature/_material-dark-definition.scss +3 -0
- package/styles/signature/_material-definition.scss +3 -0
- package/styles/signature/_tailwind-dark-definition.scss +1 -0
- package/styles/signature/_tailwind-definition.scss +3 -0
- package/styles/signature/_theme.scss +7 -0
- package/styles/signature/bootstrap-dark.css +9 -0
- package/styles/signature/bootstrap-dark.scss +3 -0
- package/styles/signature/bootstrap.css +9 -0
- package/styles/signature/bootstrap.scss +3 -0
- package/styles/signature/bootstrap4.css +9 -0
- package/styles/signature/bootstrap4.scss +3 -0
- package/styles/signature/bootstrap5-dark.css +9 -0
- package/styles/signature/bootstrap5-dark.scss +3 -0
- package/styles/signature/bootstrap5.css +9 -0
- package/styles/signature/bootstrap5.scss +3 -0
- package/styles/signature/fabric-dark.css +9 -0
- package/styles/signature/fabric-dark.scss +3 -0
- package/styles/signature/fabric.css +9 -0
- package/styles/signature/fabric.scss +3 -0
- package/styles/signature/highcontrast-light.css +9 -0
- package/styles/signature/highcontrast-light.scss +3 -0
- package/styles/signature/highcontrast.css +9 -0
- package/styles/signature/highcontrast.scss +3 -0
- package/styles/signature/material-dark.css +10 -0
- package/styles/signature/material-dark.scss +3 -0
- package/styles/signature/material.css +10 -0
- package/styles/signature/material.scss +3 -0
- package/styles/signature/tailwind-dark.css +10 -0
- package/styles/signature/tailwind-dark.scss +3 -0
- package/styles/signature/tailwind.css +10 -0
- package/styles/signature/tailwind.scss +3 -0
- package/styles/slider/_bootstrap5-definition.scss +2 -2
- package/styles/slider/_fluent-definition.scss +94 -0
- package/styles/slider/_layout.scss +7 -2
- package/styles/slider/_tailwind-definition.scss +2 -2
- package/styles/slider/bootstrap5-dark.css +1 -5
- package/styles/slider/bootstrap5.css +1 -5
- package/styles/slider/tailwind-dark.css +1 -5
- package/styles/slider/tailwind.css +1 -5
- package/styles/tailwind-dark.css +25 -21
- package/styles/tailwind-dark.scss +1 -0
- package/styles/tailwind.css +25 -21
- package/styles/tailwind.scss +1 -0
- package/styles/textbox/_fluent-definition.scss +0 -0
- package/styles/uploader/_fluent-definition.scss +234 -0
- package/styles/uploader/_layout.scss +99 -8
- package/styles/uploader/_theme.scss +5 -2
- package/styles/uploader/icons/_fluent.scss +34 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ej2-inputs.umd.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","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","extend","ctrlKey","keyCode","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","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","indexOf","toUpperCase","toLowerCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","newVal","BOTTOMLABEL","Input","setValue","getMaskInput","args","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","bindInitialEvent","checkInputValue","addEventListener","parent","getParentNode","floatType","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","makeElement","createElement","createInputContainer","insertBefore","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","properties","inputWrap","appendChild","updateLabelState","getAttribute","setAttribute","checkFloatLabelType","updateIconState","button","wireClearBtnEvents","isBindClearAction","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","setCssClass","cssClass","elements","oldClass","setPlaceholder","textContent","aria-placeholder","setReadonly","isReadonly","setEnableRtl","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","initial","insertAdjacentElement","createClearButton","attrs","_i","_a","Object","keys","_internalRipple","isRipple","argsButton","buttons","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","removeEventListener","parentEle","_onMouseRipple","ele","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","input","createInput","bindClearAction","prop","enableRtl","setPropertyValue","setWidth","width","style","formatUnit","removeFloating","detach","unwireFloatingEvents","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","addIcon","position","icons","internalCreate","result_1","result_2","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","SPINUP","INCREMENT","DECREMENT","INTREGEXP","NUMERIC_FOCUS","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","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","clear","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","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","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","MASKINPUT_FOCUS","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","Slider","horDir","verDir","transition","handle","rangeBar","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","sliderContainer","refresh","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","window","getComputedStyle","getPropertyValue","sliderTrack","tabIndex","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","limitBarFirst","limitBarSecond","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","rtl","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","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","DROP_AREA","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","DISABLED","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","INVALID_FILE","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","_loop_1","updateCustomheader","request","_loop_2","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","_loop_3","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","this_1","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","_loop_4","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","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","_loop_5","fileUploadedIndex","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","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","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","interaction","resetInputHandler"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ej2-inputs.umd.min.js","sources":["../src/maskedtextbox/base/mask-base.js","../src/input/input.js","../src/numerictextbox/numerictextbox.js","../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../src/slider/slider.js","../src/form-validator/form-validator.js","../src/uploader/uploader.js","../src/color-picker/color-picker.js","../src/textbox/textbox.js","../src/common/signature-base.js","../src/signature/signature.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, args.element);\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, element) {\n if (element === void 0) { element = null; }\n if (value) {\n addClass([label], CLASSNAMES.LABELTOP);\n if (label.classList.contains(CLASSNAMES.LABELBOTTOM)) {\n removeClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n else {\n var isNotFocused = element != null ? element !== document.activeElement : true;\n if (isNotFocused) {\n if (label.classList.contains(CLASSNAMES.LABELTOP)) {\n removeClass([label], CLASSNAMES.LABELTOP);\n }\n addClass([label], CLASSNAMES.LABELBOTTOM);\n }\n }\n }\n function getParentNode(element) {\n var parentNode = isNullOrUndefined(element.parentNode) ? element\n : element.parentNode;\n if (parentNode && parentNode.classList.contains('e-input-in-wrap')) {\n parentNode = parentNode.parentNode;\n }\n return parentNode;\n }\n /**\n * To create clear button.\n */\n function createClearButton(element, inputObject, initial, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var button = makeElement('span', { className: CLASSNAMES.CLEARICON });\n var container = inputObject.container;\n if (!isNullOrUndefined(initial)) {\n container.appendChild(button);\n }\n else {\n var baseElement = inputObject.container.classList.contains(CLASSNAMES.FLOATINPUT) ?\n inputObject.container.querySelector('.' + CLASSNAMES.FLOATTEXT) : element;\n baseElement.insertAdjacentElement('afterend', button);\n }\n 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, element);\n }\n }\n /**\n * To create input box contianer.\n */\n function createInputContainer(args, className, tagClass, tag, internalCreateElement) {\n var makeElement = !isNullOrUndefined(internalCreateElement) ? internalCreateElement : createElement;\n var container;\n if (!isNullOrUndefined(args.customTag)) {\n container = makeElement(args.customTag, { className: className });\n container.classList.add(tagClass);\n }\n else {\n container = makeElement(tag, { className: className });\n }\n container.classList.add('e-control-wrapper');\n return container;\n }\n function encodePlaceHolder(placeholder) {\n var result = '';\n if (!isNullOrUndefined(placeholder) && placeholder !== '') {\n var spanEle = document.createElement('span');\n spanEle.innerHTML = '<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 this.firstHandle.classList.add(classNames.sliderTabHandle);\n }\n else {\n this.secondHandle.classList.add(classNames.sliderHandleFocused);\n this.secondHandle.classList.add(classNames.sliderTabHandle);\n }\n EventHandler.add(document, 'mousemove touchmove', this.sliderBarMove, this);\n EventHandler.add(document, 'mouseup touchend', this.sliderBarUp, this);\n };\n Slider.prototype.handleOver = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover') {\n this.tooltipToggle(e.currentTarget);\n }\n if (this.type === 'Default') {\n this.tooltipToggle(this.getHandle());\n }\n };\n Slider.prototype.handleLeave = function (e) {\n if (this.tooltip.isVisible && this.tooltip.showOn === 'Hover' &&\n !e.currentTarget.classList.contains(classNames.sliderHandleFocused) &&\n !e.currentTarget.classList.contains(classNames.sliderTabHandle)) {\n this.closeTooltip();\n }\n };\n Slider.prototype.setHandler = function () {\n 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.focusHandle = function () {\n if (!this.getHandle().classList.contains(classNames.sliderTabHandle)) {\n this.getHandle().classList.add(classNames.sliderTabHandle);\n }\n };\n Slider.prototype.repeatHandlerUp = function (e) {\n this.changeEvent('changed', e);\n this.closeTooltip();\n clearInterval(this.repeatInterval);\n this.getHandle().focus();\n };\n Slider.prototype.customTickCounter = function (bigNum) {\n var tickCount = 4;\n if (!isNullOrUndefined(this.customValues) && this.customValues.length > 0) {\n if (bigNum > 4) {\n tickCount = 3;\n }\n if (bigNum > 7) {\n tickCount = 2;\n }\n if (bigNum > 14) {\n tickCount = 1;\n }\n if (bigNum > 28) {\n tickCount = 0;\n }\n }\n return tickCount;\n };\n // 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 this.focusHandle();\n if (args.currentTarget.classList.contains(classNames.firstButton)) {\n EventHandler.add(this.firstBtn, 'mouseup touchend', this.buttonUp, this);\n }\n if (args.currentTarget.classList.contains(classNames.secondButton)) {\n EventHandler.add(this.secondBtn, 'mouseup touchend', this.buttonUp, this);\n }\n };\n Slider.prototype.tooltipToggle = function (target) {\n if (this.isMaterialTooltip) {\n // 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 this.focusHandle();\n };\n Slider.prototype.wireEvents = function () {\n this.onresize = this.reposition.bind(this);\n window.addEventListener('resize', this.onresize);\n if (this.enabled && !this.readonly) {\n EventHandler.add(this.element, 'click', this.elementClick, this);\n if (this.type === 'Range' && this.drag) {\n EventHandler.add(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown, this);\n }\n EventHandler.add(this.sliderContainer, 'keydown', this.keyDown, this);\n EventHandler.add(this.sliderContainer, 'keyup', this.keyUp, this);\n EventHandler.add(this.element, 'focusout', this.sliderFocusOut, this);\n EventHandler.add(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover, this);\n this.wireFirstHandleEvt(false);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(false);\n }\n if (this.showButtons) {\n this.wireButtonEvt(false);\n }\n this.wireMaterialTooltipEvent(false);\n if (this.isForm) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n }\n };\n Slider.prototype.unwireEvents = function () {\n EventHandler.remove(this.element, 'click', this.elementClick);\n if (this.type === 'Range' && this.drag) {\n EventHandler.remove(this.rangeBar, 'mousedown touchstart', this.rangeBarMousedown);\n }\n EventHandler.remove(this.sliderContainer, 'keydown', this.keyDown);\n EventHandler.remove(this.sliderContainer, 'keyup', this.keyUp);\n EventHandler.remove(this.element, 'focusout', this.sliderFocusOut);\n EventHandler.remove(this.sliderContainer, 'mouseover mouseout touchstart touchend', this.hover);\n this.wireFirstHandleEvt(true);\n if (this.type === 'Range') {\n this.wireSecondHandleEvt(true);\n }\n if (this.showButtons) {\n this.wireButtonEvt(true);\n }\n this.wireMaterialTooltipEvent(true);\n EventHandler.remove(this.element, 'reset', this.formResetHandler);\n };\n Slider.prototype.formResetHandler = function () {\n this.setProperties({ 'value': this.formResetValue }, true);\n this.setValue();\n };\n Slider.prototype.keyUp = function (event) {\n if (event.keyCode === 9 && event.target.classList.contains(classNames.sliderHandle)) {\n this.focusSliderElement();\n if (!event.target.classList.contains(classNames.sliderTabHandle)) {\n if (this.element.querySelector('.' + classNames.sliderTabHandle)) {\n this.element.querySelector('.' + classNames.sliderTabHandle).classList.remove(classNames.sliderTabHandle);\n }\n event.target.classList.add(classNames.sliderTabHandle);\n var parentElement = event.target.parentElement;\n if (parentElement === this.element) {\n parentElement.querySelector('.' + classNames.sliderTrack).classList.add(classNames.sliderTabTrack);\n if (this.type === 'Range' || this.type === 'MinRange') {\n parentElement.querySelector('.' + classNames.rangeBar).classList.add(classNames.sliderTabRange);\n }\n }\n if (this.type === 'Range') {\n (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","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport { Component, removeClass } from '@syncfusion/ej2-base';\nimport { EventHandler, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar SignatureBase = /** @class */ (function (_super) {\n __extends(SignatureBase, _super);\n function SignatureBase() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n /* minDistance(distance between the two point) was calaculated for smoothness.*/\n _this.minDistance = 5;\n _this.previous = 0;\n /* interval handles for the smoothness in the mouse move event.*/\n _this.interval = 30;\n _this.timeout = null;\n _this.isSignatureEmpty = true;\n _this.backgroundLoaded = null;\n _this.clearArray = [];\n _this.isBlazor = false;\n return _this;\n }\n /**\n * To Initialize the component rendering\n *\n * @private\n * @param {HTMLCanvasElement} element - Specifies the canvas element.\n * @param {parameter} parameter - Specifies only for the blazor parameter.\n * @param {BlazorDotnetObject} dotnetRef - Specifies for blazor client to server communication.\n * @returns {void}\n */\n SignatureBase.prototype.initialize = function (element, parameter, dotnetRef) {\n this.element = element;\n this.canvasContext = this.element.getContext('2d');\n this.canvasContext.canvas.tabIndex = 0;\n if (parameter) {\n this.setBlazorParameter(parameter);\n this.dotnetRef = dotnetRef;\n }\n this.setHTMLProperties();\n if (isNullOrUndefined(this.signatureValue)) {\n this.updateSnapCollection(true);\n }\n this.wireEvents();\n this.isSignatureEmpty = true;\n if (!this.isBlazor) {\n this.trigger('created', null);\n }\n };\n SignatureBase.prototype.setBlazorParameter = function (parameter) {\n this.isBlazor = true;\n this.backgroundColor = parameter.backgroundColor;\n this.backgroundImage = parameter.backgroundImage;\n this.disabled = parameter.disabled;\n this.isReadOnly = parameter.isReadOnly;\n this.maxStrokeWidth = parameter.maxStrokeWidth || 2;\n this.minStrokeWidth = parameter.minStrokeWidth || 0.5;\n this.velocity = parameter.velocity || 0.7;\n this.strokeColor = parameter.strokeColor || '#000000';\n this.saveWithBackground = parameter.saveWithBackground;\n this.interval = 30;\n this.previous = 0;\n this.minDistance = 5;\n this.signatureValue = parameter.signatureValue;\n if (this.signatureValue) {\n this.loadPersistedSignature();\n }\n };\n SignatureBase.prototype.wireEvents = function () {\n if (isNullOrUndefined(this.pointColl) && !this.isReadOnly && !this.disabled) {\n EventHandler.add(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler, this);\n EventHandler.add(this.canvasContext.canvas, 'keydown', this.keyboardHandler, this);\n window.addEventListener('resize', this.resizeHandler.bind(this));\n }\n else if (this.pointColl) {\n EventHandler.add(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler, this);\n EventHandler.add(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler, this);\n EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);\n }\n };\n SignatureBase.prototype.unwireEvents = function (type) {\n if (type === 'mouseup' || type === 'touchend') {\n EventHandler.remove(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler);\n EventHandler.remove(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n }\n else {\n EventHandler.remove(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler);\n EventHandler.remove(this.canvasContext.canvas, 'mousemove touchmove', this.mouseMoveHandler);\n EventHandler.remove(this.canvasContext.canvas, 'mouseup touchend', this.mouseUpHandler);\n EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n EventHandler.remove(this.canvasContext.canvas, 'keydown', this.keyboardHandler);\n window.removeEventListener('resize', this.resizeHandler);\n }\n };\n SignatureBase.prototype.setHTMLProperties = function () {\n if (this.element.height === 150) {\n this.element.height = this.element.offsetHeight;\n }\n if (this.element.width === 300) {\n this.element.width = this.element.offsetWidth;\n }\n this.canvasContext.scale(1, 1);\n this.canvasContext.fillStyle = this.strokeColor;\n if (this.backgroundImage) {\n this.canvasContext.canvas.style.backgroundImage = 'url(' + this.backgroundImage + ')';\n }\n else if (this.backgroundColor) {\n this.canvasContext.canvas.style.backgroundColor = this.backgroundColor;\n }\n };\n SignatureBase.prototype.mouseDownHandler = function (e) {\n if (e.buttons === 1 || e.buttons === 2 || e.type === 'touchstart') {\n if (e.type === 'touchstart') {\n e.preventDefault();\n e.stopPropagation();\n }\n this.beginStroke(e);\n this.wireEvents();\n }\n };\n SignatureBase.prototype.mouseMoveHandler = function (e) {\n if (e.buttons === 1 || e.buttons === 2 || e.type === 'touchmove') {\n if (e.type === 'touchmove') {\n e.preventDefault();\n e.stopPropagation();\n }\n if (this.interval) {\n this.updateStrokeWithThrottle(e);\n }\n else {\n this.updateStroke(e);\n }\n }\n };\n SignatureBase.prototype.mouseUpHandler = function (e) {\n var args = { actionName: 'strokeUpdate' };\n if (e.type === 'touchstart') {\n e.preventDefault();\n e.stopPropagation();\n }\n this.endDraw();\n this.updateSnapCollection();\n this.unwireEvents(e.type);\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'mouseUp');\n }\n this.signatureValue = this.snapColl[this.incStep];\n };\n SignatureBase.prototype.keyboardHandler = function (e) {\n var _this = this;\n var args = { fileName: 'Signature', type: 'Png', cancel: false };\n switch (e.key) {\n case 'Delete':\n this.clear();\n break;\n case (e.ctrlKey && 's'):\n if (!this.isBlazor) {\n this.trigger('beforeSave', args, function (observableSaveArgs) {\n if (!args.cancel) {\n _this.save(observableSaveArgs.type, observableSaveArgs.fileName);\n }\n });\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'beforeSave');\n }\n e.preventDefault();\n e.stopImmediatePropagation();\n break;\n case (e.ctrlKey && 'z'):\n this.undo();\n break;\n case (e.ctrlKey && 'y'):\n this.redo();\n break;\n }\n };\n SignatureBase.prototype.resizeHandler = function () {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n this.canvasContext.canvas.width = this.element.offsetWidth;\n this.canvasContext.canvas.height = this.element.offsetHeight;\n this.canvasContext.scale(1, 1);\n var restoreImg = new Image();\n restoreImg.src = this.snapColl[this.incStep];\n restoreImg.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(restoreImg, 0, 0, proxy.element.width, proxy.element.height);\n };\n };\n SignatureBase.prototype.beginStroke = function (e) {\n this.refresh();\n this.updateStroke(e);\n };\n SignatureBase.prototype.updateStroke = function (e) {\n var point = this.createPoint(e);\n this.addPoint(point);\n };\n SignatureBase.prototype.updateStrokeWithThrottle = function (args) {\n var now = Date.now();\n var remaining = this.interval - (now - this.previous);\n this.storedArgs = args;\n if (remaining <= 0 || remaining > this.interval) {\n if (this.timeout) {\n clearTimeout(this.timeout);\n this.timeout = null;\n }\n this.previous = now;\n this.updateStroke(this.storedArgs);\n if (!this.timeout) {\n this.storedArgs = null;\n }\n }\n else if (!this.timeout) {\n this.timeout = window.setTimeout(this.delay.bind(this), remaining);\n }\n };\n SignatureBase.prototype.delay = function () {\n this.previous = Date.now();\n this.timeout = null;\n this.updateStroke(this.storedArgs);\n if (!this.timeout) {\n this.storedArgs = null;\n }\n };\n SignatureBase.prototype.createPoint = function (e) {\n var rect = this.canvasContext.canvas.getBoundingClientRect();\n if (e.type === 'mousedown' || e.type === 'mousemove') {\n return this.point(e.clientX - rect.left, e.clientY - rect.top, new Date().getTime());\n }\n else {\n return this.point(e.touches[0].clientX - rect.left, e.touches[0].clientY - rect.top, new Date().getTime());\n }\n };\n /* Returns the current point corrdinates(x, y) and time.*/\n SignatureBase.prototype.point = function (pointX, pointY, time) {\n this.pointX = pointX;\n this.pointY = pointY;\n this.time = time || new Date().getTime();\n return { x: this.pointX, y: this.pointY, time: this.time };\n };\n SignatureBase.prototype.addPoint = function (point) {\n var points = this.pointColl;\n var controlPoint1;\n var controlPoint2;\n var lastPoint = points.length > 0 && points[points.length - 1];\n var isLastPointTooClose = lastPoint ? this.distanceTo(lastPoint) <= this.minDistance : false;\n if (!lastPoint || !(lastPoint && isLastPointTooClose)) {\n points.push(point);\n if (points.length > 2) {\n if (points.length === 3) {\n points.unshift(points[0]);\n }\n controlPoint1 = (this.calculateCurveControlPoints(points[0], points[1], points[2])).controlPoint2;\n controlPoint2 = (this.calculateCurveControlPoints(points[1], points[2], points[3])).controlPoint1;\n this.startPoint = points[1];\n this.controlPoint1 = controlPoint1;\n this.controlPoint2 = controlPoint2;\n this.endPoint = points[2];\n this.startDraw();\n points.shift();\n }\n }\n };\n SignatureBase.prototype.startDraw = function () {\n var velocity;\n velocity = this.pointVelocityCalc(this.startPoint);\n velocity = this.velocity * velocity + (1 - this.velocity) * this.lastVelocity;\n var newWidth = Math.max(this.maxStrokeWidth / (velocity + 1), this.minStrokeWidth);\n this.curveDraw(this.lastWidth, newWidth);\n this.lastVelocity = velocity;\n this.lastWidth = newWidth;\n };\n SignatureBase.prototype.endDraw = function () {\n var canDrawCurve = this.pointColl.length > 2;\n var point = this.pointColl[0];\n if (!canDrawCurve && point) {\n this.strokeDraw(point);\n }\n };\n /* Calculate the Bezier (x, y) coordinate of the curve. */\n SignatureBase.prototype.curveDraw = function (startWidth, endWidth) {\n var context = this.canvasContext;\n var width;\n var i;\n var t1;\n var t2;\n var t3;\n var u1;\n var u2;\n var u3;\n var x;\n var y;\n var widthValue = endWidth - startWidth;\n var bezierLength = this.bezierLengthCalc();\n var drawSteps = Math.ceil(bezierLength) * 2;\n context.beginPath();\n for (i = 0; i < drawSteps; i++) {\n t1 = i / drawSteps;\n t2 = t1 * t1;\n t3 = t2 * t1;\n u1 = 1 - t1;\n u2 = u1 * u1;\n u3 = u2 * u1;\n x = u3 * this.startPoint.x;\n x += 3 * u2 * t1 * this.controlPoint1.x;\n x += 3 * u1 * t2 * this.controlPoint2.x;\n x += t3 * this.endPoint.x;\n y = u3 * this.startPoint.y;\n y += 3 * u2 * t1 * this.controlPoint1.y;\n y += 3 * u1 * t2 * this.controlPoint2.y;\n y += t3 * this.endPoint.y;\n width = Math.min(startWidth + t3 * widthValue, this.maxStrokeWidth);\n this.arcDraw(x, y, width);\n }\n context.closePath();\n context.fill();\n this.isSignatureEmpty = false;\n };\n SignatureBase.prototype.strokeDraw = function (point) {\n var context = this.canvasContext;\n var pointSize = (this.minStrokeWidth + this.maxStrokeWidth) / 2;\n context.beginPath();\n this.arcDraw(point.x, point.y, pointSize);\n context.closePath();\n context.fill();\n this.isSignatureEmpty = false;\n };\n SignatureBase.prototype.arcDraw = function (x, y, size) {\n var context = this.canvasContext;\n context.moveTo(x, y);\n context.arc(x, y, size, 0, 2 * Math.PI, false);\n };\n /* Utility functions for Bezier algorithm*/\n SignatureBase.prototype.calculateCurveControlPoints = function (p1, p2, p3) {\n var dx1 = p1.x - p2.x;\n var dy1 = p1.y - p2.y;\n var dx2 = p2.x - p3.x;\n var dy2 = p2.y - p3.y;\n var m1 = { x: (p1.x + p2.x) / 2.0, y: (p1.y + p2.y) / 2.0 };\n var m2 = { x: (p2.x + p3.x) / 2.0, y: (p2.y + p3.y) / 2.0 };\n var l1 = Math.sqrt(dx1 * dx1 + dy1 * dy1);\n var l2 = Math.sqrt(dx2 * dx2 + dy2 * dy2);\n var dxm = (m1.x - m2.x);\n var dym = (m1.y - m2.y);\n var k = l2 / (l1 + l2);\n var cm = { x: m2.x + dxm * k, y: m2.y + dym * k };\n var tx = p2.x - cm.x;\n var ty = p2.y - cm.y;\n return {\n controlPoint1: this.point(m1.x + tx, m1.y + ty, 0),\n controlPoint2: this.point(m2.x + tx, m2.y + ty, 0)\n };\n };\n /* Returns approximated bezier length of the curuve.*/\n SignatureBase.prototype.bezierLengthCalc = function () {\n var steps = 10;\n var length = 0;\n var i;\n var t;\n var pointx1;\n var pointy1;\n var pointx2;\n var pointy2;\n var pointx3;\n var pointy3;\n for (i = 0; i <= steps; i++) {\n t = i / steps;\n pointx1 = this.bezierPointCalc(t, this.startPoint.x, this.controlPoint1.x, this.controlPoint2.x, this.endPoint.x);\n pointy1 = this.bezierPointCalc(t, this.startPoint.y, this.controlPoint1.y, this.controlPoint2.y, this.endPoint.y);\n if (i > 0) {\n pointx3 = pointx1 - pointx2;\n pointy3 = pointy1 - pointy2;\n length += Math.sqrt(pointx3 * pointx3 + pointy3 * pointy3);\n }\n pointx2 = pointx1;\n pointy2 = pointy1;\n }\n return length;\n };\n /* Calculate parametric value of x or y given t and the\n four point(startpoint, controlpoint1, controlpoint2, endpoint) coordinates of a cubic bezier curve.*/\n SignatureBase.prototype.bezierPointCalc = function (t, startpoint, cp1, cp2, endpoint) {\n return startpoint * (1.0 - t) * (1.0 - t) * (1.0 - t) + 3.0 * cp1 * (1.0 - t) * (1.0 - t) * t + 3.0 *\n cp2 * (1.0 - t) * t * t + endpoint * t * t * t;\n };\n /* Velocity between the current point and last point.*/\n SignatureBase.prototype.pointVelocityCalc = function (startPoint) {\n return (this.time !== startPoint.time) ? this.distanceTo(startPoint) / (this.time - startPoint.time) : 0;\n };\n /* Distance between the current point and last point.*/\n SignatureBase.prototype.distanceTo = function (start) {\n return Math.sqrt(Math.pow(this.pointX - start.x, 2) + Math.pow(this.pointY - start.y, 2));\n };\n SignatureBase.prototype.isRead = function (isRead) {\n if (isRead) {\n EventHandler.remove(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler);\n }\n else if (!this.disabled) {\n EventHandler.add(this.canvasContext.canvas, 'mousedown touchstart', this.mouseDownHandler, this);\n }\n };\n SignatureBase.prototype.enableOrDisable = function (isDisable) {\n this.disabled = isDisable;\n if (isDisable) {\n this.reDraw('0.5');\n this.isRead(true);\n }\n else {\n this.reDraw('1');\n this.isRead(false);\n }\n };\n SignatureBase.prototype.reDraw = function (opacity) {\n var data = this.canvasContext.getImageData(0, 0, this.element.width, this.element.height);\n this.canvasContext.clearRect(0, 0, this.element.width, this.element.height);\n this.element.style.opacity = opacity;\n this.canvasContext.putImageData(data, 0, 0);\n };\n SignatureBase.prototype.updateSnapCollection = function (isClear) {\n if (isNullOrUndefined(this.incStep)) {\n this.incStep = -1;\n this.incStep++;\n this.snapColl = [];\n this.clearArray = [];\n }\n else {\n this.incStep++;\n }\n if (this.incStep < this.snapColl.length) {\n this.snapColl.length = this.incStep;\n }\n if (this.incStep > 0) {\n var canvasNew = this.createElement('canvas', { className: 'e-' + this.getModuleName() + '-wrapper' });\n var canvasContextNew = canvasNew.getContext('2d');\n canvasNew.width = this.canvasContext.canvas.width;\n canvasNew.height = this.canvasContext.canvas.height;\n canvasContextNew.drawImage(this.canvasContext.canvas, 0, 0, canvasNew.width, canvasNew.height);\n this.snapColl.push(canvasNew.toDataURL());\n }\n else {\n this.snapColl.push(this.canvasContext.canvas.toDataURL());\n }\n if (isClear) {\n this.clearArray.push(this.incStep);\n }\n };\n SignatureBase.prototype.setBackgroundImage = function (imageSrc) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var imageObj = new Image();\n imageObj.crossOrigin = 'anonymous';\n imageObj.src = imageSrc;\n imageObj.onload = function () {\n proxy.canvasContext.globalCompositeOperation = 'source-over';\n proxy.canvasContext.drawImage(imageObj, 0, 0, proxy.element.width, proxy.element.height);\n proxy.updateSnapCollection();\n proxy.saveBackground(true);\n };\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n };\n SignatureBase.prototype.setBackgroundColor = function (color) {\n var canvasEle = this.canvasContext;\n canvasEle.strokeStyle = color;\n var i;\n var j;\n for (i = 1; i <= canvasEle.canvas.width; i++) {\n for (j = 1; j <= canvasEle.canvas.height; j++) {\n canvasEle.strokeRect(0, 0, i, j);\n }\n }\n this.updateSnapCollection();\n };\n SignatureBase.prototype.loadPersistedSignature = function () {\n if (isNullOrUndefined(this.signatureValue)) {\n return;\n }\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var lastImage = new Image();\n lastImage.src = this.signatureValue;\n lastImage.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(lastImage, 0, 0);\n proxy.updateSnapCollection();\n };\n this.isSignatureEmpty = false;\n };\n /**\n * To get the signature as Blob.\n *\n * @param {string} url - specify the url/base 64 string to get blob of the signature.\n * @returns {Blob}.\n */\n SignatureBase.prototype.getBlob = function (url) {\n var arr = url.split(',');\n var type = arr[0].match(/:(.*?);/)[1];\n var bstr = atob(arr[1]);\n var n = bstr.length;\n var u8arr = new Uint8Array(n);\n while (n--) {\n u8arr[n] = bstr.charCodeAt(n);\n }\n return new Blob([u8arr], { type: type });\n };\n SignatureBase.prototype.download = function (blob, fileName) {\n var blobUrl = URL.createObjectURL(blob);\n var a = document.createElement('a');\n a.href = blobUrl;\n a.target = '_parent';\n a.download = fileName;\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n };\n /**\n * To refresh the signature.\n *\n * @private\n * @returns {void}.\n */\n SignatureBase.prototype.refresh = function () {\n this.pointColl = [];\n this.lastVelocity = 0;\n this.lastWidth = (this.minStrokeWidth + this.maxStrokeWidth) / 2;\n };\n /**\n * Erases all the signature strokes signed by user.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.clear = function () {\n var args = { actionName: 'clear' };\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n this.refresh();\n this.updateSnapCollection(true);\n this.isSignatureEmpty = true;\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'Clear');\n }\n };\n /**\n * Undo the last user action.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.undo = function () {\n var args = { actionName: 'undo' };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (this.incStep > 0) {\n this.incStep--;\n var undoImg_1 = new Image();\n undoImg_1.src = this.snapColl[this.incStep];\n undoImg_1.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(undoImg_1, 0, 0, proxy.element.width, proxy.element.height);\n };\n }\n this.isClear();\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'Undo');\n }\n };\n /**\n * Redo the last user action.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.redo = function () {\n var args = { actionName: 'redo' };\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n if (this.incStep < this.snapColl.length - 1) {\n this.incStep++;\n var redoImg_1 = new Image();\n redoImg_1.src = this.snapColl[this.incStep];\n redoImg_1.onload = function () {\n proxy.canvasContext.clearRect(0, 0, proxy.element.width, proxy.element.height);\n proxy.canvasContext.drawImage(redoImg_1, 0, 0, proxy.element.width, proxy.element.height);\n };\n }\n this.isClear();\n if (!this.isBlazor) {\n this.trigger('change', args);\n }\n else {\n this.dotnetRef.invokeMethodAsync('TriggerEventAsync', 'Redo');\n }\n };\n SignatureBase.prototype.isClear = function () {\n if (this.clearArray) {\n var empty = false;\n for (var i = 0; i < this.clearArray.length; i++) {\n if (this.clearArray[i] === this.incStep) {\n this.isSignatureEmpty = true;\n empty = true;\n }\n }\n if (!empty) {\n this.isSignatureEmpty = false;\n }\n }\n };\n /**\n * To check whether the signature is empty or not.\n *\n * @returns {boolean}.\n */\n SignatureBase.prototype.isEmpty = function () {\n return this.isSignatureEmpty;\n };\n /**\n * To check whether the undo collection is empty or not.\n *\n * @returns {boolean}.\n */\n SignatureBase.prototype.canUndo = function () {\n return this.incStep > 0;\n };\n /**\n * To check whether the redo collection is empty or not.\n *\n * @returns {boolean}.\n */\n SignatureBase.prototype.canRedo = function () {\n return this.incStep < this.snapColl.length - 1;\n };\n /**\n * To draw the signature based on the given text, with the font family and font size.\n *\n * @param {string} text - specify text to be drawn as signature.\n * @param {string} fontFamily - specify font family of a signature.\n * @param {number} fontSize - specify font size of a signature.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.draw = function (text, fontFamily, fontSize) {\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n fontFamily = fontFamily || 'Arial';\n fontSize = fontSize || 30;\n this.canvasContext.font = fontSize + 'px ' + fontFamily;\n this.canvasContext.textAlign = 'center';\n this.canvasContext.textBaseline = 'middle';\n this.canvasContext.fillText(text, this.element.width / 2, this.element.height / 2);\n this.updateSnapCollection();\n this.isSignatureEmpty = false;\n };\n /**\n * To load the signature with the given base 64 string, height and width.\n *\n * @param {string} signature - specify the url/base 64 string to be drawn as signature.\n * @param {number} width - specify the width of the loaded signature image.\n * @param {number} height - specify the height of the loaded signature image.\n * @returns {void}.\n */\n SignatureBase.prototype.load = function (signature, width, height) {\n height = height || this.element.height;\n width = width || this.element.width;\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var bitmapImage = new Image();\n bitmapImage.src = signature;\n bitmapImage.onload = function () {\n Promise.all([\n createImageBitmap(bitmapImage, 0, 0, width, height)\n ]).then(function (results) {\n var tempCanvas = document.createElement('canvas');\n tempCanvas.width = width;\n tempCanvas.height = height;\n tempCanvas.getContext('2d').drawImage(results[0], 0, 0);\n proxy.canvasContext.drawImage(tempCanvas, 0, 0, width, height, 0, 0, proxy.element.width, proxy.element.height);\n proxy.updateSnapCollection();\n });\n };\n this.isSignatureEmpty = false;\n };\n SignatureBase.prototype.saveBackground = function (savebg) {\n var imageSrc;\n if (savebg && this.backgroundImage) {\n imageSrc = this.snapColl[this.incStep - 1];\n }\n else {\n imageSrc = this.snapColl[this.incStep];\n }\n if (!savebg) {\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n if (this.backgroundImage) {\n this.setBackgroundImage(this.backgroundImage);\n }\n else if (this.backgroundColor) {\n this.setBackgroundColor(this.backgroundColor);\n savebg = true;\n }\n }\n if (savebg) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy_1 = this;\n var imageObj_1 = new Image();\n imageObj_1.crossOrigin = 'anonymous';\n imageObj_1.src = imageSrc;\n imageObj_1.onload = function () {\n proxy_1.backgroundLoaded = true;\n proxy_1.canvasContext.globalCompositeOperation = 'source-over';\n proxy_1.canvasContext.drawImage(imageObj_1, 0, 0, proxy_1.element.width, proxy_1.element.height);\n proxy_1.save(proxy_1.fileType, proxy_1.fileName);\n };\n }\n };\n /**\n * To save the signature with the given file type and file name.\n *\n * @param {SignatureFileType} type - specify type of the file to be saved a signature.\n * @param {string} fileName - specify name of the file to be saved a signature.\n *\n * @returns {void}.\n */\n SignatureBase.prototype.save = function (type, fileName) {\n if (this.saveWithBackground && this.backgroundLoaded == null && (this.backgroundImage || this.backgroundColor)) {\n this.backgroundLoaded = false;\n this.fileType = type;\n this.fileName = fileName;\n this.saveBackground(false);\n }\n else if (type === 'Svg') {\n fileName = fileName || 'Signature';\n this.toSVG(fileName);\n }\n else if (type === 'Jpeg') {\n fileName = fileName || 'Signature';\n if (!this.saveWithBackground || this.saveWithBackground && !(this.backgroundImage || this.backgroundColor)) {\n this.toJPEG(fileName);\n }\n else {\n var dataURL = this.canvasContext.canvas.toDataURL('image/jpeg');\n this.download(this.getBlob(dataURL), fileName + '.' + 'jpeg');\n }\n }\n else {\n fileName = fileName || 'Signature';\n var dataURL = this.canvasContext.canvas.toDataURL('image/png');\n this.download(this.getBlob(dataURL), fileName + '.' + 'png');\n }\n if (this.saveWithBackground && this.backgroundLoaded) {\n this.resetSnap();\n }\n };\n SignatureBase.prototype.resetSnap = function () {\n this.canvasContext.clearRect(0, 0, this.canvasContext.canvas.width, this.canvasContext.canvas.height);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var restoreObj = new Image();\n restoreObj.src = this.snapColl[this.incStep - 1];\n restoreObj.onload = function () {\n proxy.canvasContext.drawImage(restoreObj, 0, 0, proxy.element.width, proxy.element.height);\n proxy.updateSnapCollection();\n };\n this.backgroundLoaded = null;\n this.snapColl.pop();\n this.incStep--;\n this.snapColl.pop();\n this.incStep--;\n };\n SignatureBase.prototype.toJPEG = function (fileName) {\n var _this = this;\n var imageSrc = this.snapColl[this.incStep];\n this.setBackgroundColor('#ffffff');\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n var proxy = this;\n var imageObj = new Image();\n imageObj.crossOrigin = 'anonymous';\n imageObj.src = imageSrc;\n imageObj.onload = function () {\n proxy.canvasContext.globalCompositeOperation = 'source-over';\n proxy.canvasContext.drawImage(imageObj, 0, 0, proxy.element.width, proxy.element.height);\n var dataURL = proxy.canvasContext.canvas.toDataURL('image/jpeg');\n proxy.download(proxy.getBlob(dataURL), fileName + '.' + 'jpeg');\n proxy.canvasContext.clearRect(0, 0, proxy.canvasContext.canvas.width, proxy.canvasContext.canvas.height);\n _this.resizeHandler();\n };\n this.snapColl.pop();\n this.incStep--;\n };\n SignatureBase.prototype.toSVG = function (fileName) {\n var dataUrl = this.canvasContext.canvas.toDataURL();\n var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttribute('width', this.canvasContext.canvas.width.toString());\n svg.setAttribute('height', this.canvasContext.canvas.height.toString());\n var XLinkNS = 'http://www.w3.org/1999/xlink';\n var img = document.createElementNS('http://www.w3.org/2000/svg', 'image');\n img.setAttributeNS(null, 'height', this.canvasContext.canvas.height.toString());\n img.setAttributeNS(null, 'width', this.canvasContext.canvas.width.toString());\n img.setAttributeNS(XLinkNS, 'xlink:href', dataUrl);\n svg.appendChild(img);\n var prefix = 'data:image/svg+xml;base64,';\n var header = '<svg' + ' xmlns=\"http://www.w3.org/2000/svg\"' + ' xmlns:xlink=\"http://www.w3.org/1999/xlink\"'\n + (\" width=\\\"\" + this.canvasContext.canvas.width + \"\\\"\") + (\" height=\\\"\" + this.canvasContext.canvas.height + \"\\\"\") + '>';\n var footer = '</svg>';\n var body = svg.innerHTML;\n var data = header + body + footer;\n var svgDataUrl = prefix + btoa(data);\n if (fileName == null) {\n return svgDataUrl;\n }\n else {\n this.download(this.getBlob(svgDataUrl), fileName + '.' + 'svg');\n return null;\n }\n };\n /**\n * To save the signature as Blob.\n *\n * @returns {Blob}.\n */\n SignatureBase.prototype.saveAsBlob = function () {\n return this.getBlob(this.canvasContext.canvas.toDataURL('image/png'));\n };\n /**\n * To get the signature as Base 64.\n *\n * @private\n * @param {SignatureFileType} type - Specifies the type of the image format.\n * @returns {string}.\n */\n SignatureBase.prototype.getSignature = function (type) {\n if (type === 'Jpeg') {\n var imgData = this.canvasContext.getImageData(0, 0, this.element.width, this.element.height);\n var data = imgData.data;\n for (var i = 0; i < data.length; i += 4) {\n if (data[i + 3] < 255) {\n data[i] = 255 - data[i];\n data[i + 1] = 255 - data[i + 1];\n data[i + 2] = 255 - data[i + 2];\n data[i + 3] = 255 - data[i + 3];\n }\n }\n this.canvasContext.putImageData(imgData, 0, 0);\n var dataURL = this.canvasContext.canvas.toDataURL('image/jpeg');\n this.resizeHandler();\n return dataURL;\n }\n else if (type === 'Svg') {\n return this.toSVG(null);\n }\n else {\n return this.canvasContext.canvas.toDataURL('image/png');\n }\n };\n /**\n * Get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n SignatureBase.prototype.getModuleName = function () {\n return 'signature';\n };\n /**\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n SignatureBase.prototype.getPersistData = function () {\n this.signatureValue = this.snapColl[this.incStep];\n return this.addOnPersist(['signatureValue']);\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers.\n * Also it maintains the initial input element from the DOM.\n *\n * @method destroy\n * @returns {void}\n */\n SignatureBase.prototype.destroy = function () {\n this.unwireEvents(null);\n removeClass([this.element], 'e-' + this.getModuleName());\n this.element.removeAttribute('tabindex');\n this.pointColl = null;\n _super.prototype.destroy.call(this);\n };\n /**\n * Modified onPropertyChanged method for both blazor and EJ2 signature component.\n *\n * @private\n * @param {string} key - Specifies the property, which changed.\n * @param {string} value - Specifies the property value changed.\n * @returns {void}\n */\n SignatureBase.prototype.propertyChanged = function (key, value) {\n var canvasNew = this.canvasContext;\n switch (key) {\n case 'backgroundColor':\n canvasNew.canvas.style.backgroundColor = value;\n this.backgroundColor = value;\n break;\n case 'backgroundImage':\n canvasNew.canvas.style.backgroundImage = 'url(' + value + ')';\n this.backgroundImage = value;\n break;\n case 'strokeColor':\n canvasNew.fillStyle = value;\n this.strokeColor = value;\n break;\n case 'saveWithBackground':\n this.saveWithBackground = value;\n break;\n case 'maxStrokeWidth':\n this.maxStrokeWidth = value;\n break;\n case 'minStrokeWidth':\n this.minStrokeWidth = value;\n break;\n case 'velocity':\n this.velocity = value;\n break;\n case 'isReadOnly':\n this.isRead(value);\n break;\n case 'disabled':\n this.enableOrDisable(value);\n break;\n }\n };\n return SignatureBase;\n}(Component));\nexport { SignatureBase };\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Event } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, addClass } from '@syncfusion/ej2-base';\nimport { SignatureBase } from '../common/signature-base';\n/**\n * The Signature component allows user to draw smooth signatures as vector outline of strokes using variable width bezier curve interpolation.\n * It allows to save signature as image.\n * You can use your finger, pen, or mouse on a tablet, touchscreen, etc., to draw your own signature on this Signature component.\n * Signature component is a user interface to draw the Signature or Text.\n * It provides supports for various Background color, Stroke color and Background Image.\n * ```html\n * <canvas id=\"signature\"></canvas>\n * ```\n * ```typescript\n * <script>\n * let signatureObj: Signature = new Signature(null , \"#signature\");\n * </script>\n * ```\n */\nvar Signature = /** @class */ (function (_super) {\n __extends(Signature, _super);\n /**\n * Constructor for creating the widget.\n *\n * @param {SignatureModel} options - Specifies the Signature model.\n * @param {string | HTMLCanvasElement} element - Specifies the element.\n * @private\n */\n function Signature(options, element) {\n return _super.call(this, options, element) || this;\n }\n Signature.prototype.preRender = function () {\n // pre render code snippets\n };\n /**\n * To Initialize the component rendering\n *\n * @private\n * @returns {void}\n */\n Signature.prototype.render = function () {\n this.initialize();\n };\n Signature.prototype.initialize = function () {\n addClass([this.element], 'e-' + this.getModuleName());\n _super.prototype.initialize.call(this, this.element);\n if (this.enablePersistence) {\n this.loadPersistedSignature();\n }\n };\n /**\n * To get component name.\n *\n * @returns {string} - Module Name\n * @private\n */\n Signature.prototype.getModuleName = function () {\n return 'signature';\n };\n /**\n * To get the properties to be maintained in the persisted state.\n *\n * @returns {string} - Persist data\n */\n Signature.prototype.getPersistData = function () {\n return this.addOnPersist(['signatureValue']);\n };\n /**\n * Called internally if any of the property value changed.\n *\n * @param {SignatureModel} newProp - Specifies new properties\n * @param {SignatureModel} oldProp - Specifies old properties\n * @returns {void}\n * @private\n */\n Signature.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'backgroundColor':\n _super.prototype.propertyChanged.call(this, prop, newProp.backgroundColor);\n break;\n case 'backgroundImage':\n _super.prototype.propertyChanged.call(this, prop, newProp.backgroundImage);\n break;\n case 'strokeColor':\n if (newProp.strokeColor !== oldProp.strokeColor) {\n _super.prototype.propertyChanged.call(this, prop, newProp.strokeColor);\n }\n break;\n case 'saveWithBackground':\n _super.prototype.propertyChanged.call(this, prop, newProp.saveWithBackground);\n break;\n case 'isReadOnly':\n _super.prototype.propertyChanged.call(this, prop, newProp.isReadOnly);\n break;\n case 'disabled':\n _super.prototype.propertyChanged.call(this, prop, newProp.disabled);\n break;\n }\n }\n };\n __decorate([\n Property('')\n ], Signature.prototype, \"backgroundColor\", void 0);\n __decorate([\n Property('')\n ], Signature.prototype, \"backgroundImage\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"disabled\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"isReadOnly\", void 0);\n __decorate([\n Property(true)\n ], Signature.prototype, \"saveWithBackground\", void 0);\n __decorate([\n Property('#000000')\n ], Signature.prototype, \"strokeColor\", void 0);\n __decorate([\n Property(0.5)\n ], Signature.prototype, \"minStrokeWidth\", void 0);\n __decorate([\n Property(2)\n ], Signature.prototype, \"maxStrokeWidth\", void 0);\n __decorate([\n Property(0.7)\n ], Signature.prototype, \"velocity\", void 0);\n __decorate([\n Property('en-US')\n ], Signature.prototype, \"locale\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"enableRtl\", void 0);\n __decorate([\n Property(false)\n ], Signature.prototype, \"enablePersistence\", void 0);\n __decorate([\n Event()\n ], Signature.prototype, \"beforeSave\", void 0);\n __decorate([\n Event()\n ], Signature.prototype, \"change\", void 0);\n __decorate([\n Event()\n ], Signature.prototype, \"created\", void 0);\n Signature = __decorate([\n NotifyPropertyChanges\n ], Signature);\n return Signature;\n}(SignatureBase));\nexport { Signature };\n"],"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","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","extend","ctrlKey","keyCode","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","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","curVal","caseCount","indexOf","toUpperCase","toLowerCase","addMaskErrorClass","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","newVal","BOTTOMLABEL","Input","setValue","getMaskInput","args","UTILMASK","inputEle","regularExpressions","getUtilMaskEle","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","bindInitialEvent","checkInputValue","addEventListener","parent","getParentNode","floatType","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","createFloatingInput","inputObject","internalCreateElement","makeElement","createElement","createInputContainer","insertBefore","customTag","floatLinelement","className","floatLabelElement","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","properties","inputWrap","appendChild","updateLabelState","getAttribute","setAttribute","checkFloatLabelType","updateIconState","button","document","activeElement","wireClearBtnEvents","isBindClearAction","readOnly","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","setCssClass","cssClass","elements","oldClass","setPlaceholder","textContent","aria-placeholder","setReadonly","isReadonly","setEnableRtl","isRtl","setEnabled","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","setClearButton","isClear","initial","insertAdjacentElement","createClearButton","attrs","_i","_a","Object","keys","_internalRipple","isRipple","argsButton","buttons","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","removeEventListener","parentEle","_onMouseRipple","ele","createIconEle","iconClass","prependSpan","innerWrapper","appendSpan","validateInputType","containerElement","input","createInput","bindClearAction","prop","enableRtl","setPropertyValue","setWidth","width","style","formatUnit","removeFloating","detach","unwireFloatingEvents","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","addIcon","position","icons","internalCreate","result_1","result_2","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","SPINUP","INCREMENT","DECREMENT","INTREGEXP","NUMERIC_FOCUS","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","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","clear","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","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","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","MASKINPUT_FOCUS","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","Slider","horDir","verDir","transition","handle","rangeBar","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","sliderContainer","refresh","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","window","getComputedStyle","getPropertyValue","sliderTrack","tabIndex","getThemeInitialization","setHandler","createRangeBar","limits","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isTailwind","isBootstrap5","isMaterialTooltip","orientation","firstElementClassName","limitBarFirst","limitBarSecond","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","focusHandle","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","rtl","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","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","DROP_AREA","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","DISABLED","ICON_FOCUSED","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","INVALID_FILE","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","_loop_1","updateCustomheader","request","_loop_2","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","_loop_3","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","this_1","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","_loop_4","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","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","_loop_5","fileUploadedIndex","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLBTN","CTRLSWITCH","FORMATSWITCH","HIDEHEX","HIDEOPACITY","HIDERGBA","HIDEVALUE","HIDEVALUESWITCH","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PALETTES","PALETTECONTENT","PICKERCONTENT","PREVIEW","PREVIOUS","SHOWVALUE","SELECT","SPLITPREVIEW","presets","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","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","interaction","resetInputHandler","SignatureBase","minDistance","interval","timeout","isSignatureEmpty","backgroundLoaded","clearArray","isBlazor","parameter","dotnetRef","canvasContext","getContext","canvas","setBlazorParameter","setHTMLProperties","signatureValue","updateSnapCollection","backgroundImage","isReadOnly","maxStrokeWidth","minStrokeWidth","velocity","strokeColor","saveWithBackground","loadPersistedSignature","pointColl","mouseMoveHandler","mouseUpHandler","mouseDownHandler","keyboardHandler","resizeHandler","scale","fillStyle","beginStroke","updateStrokeWithThrottle","updateStroke","endDraw","invokeMethodAsync","actionName","snapColl","incStep","fileName","observableSaveArgs","save","stopImmediatePropagation","undo","redo","proxy","restoreImg","Image","src","clearRect","drawImage","point","createPoint","addPoint","now","remaining","storedArgs","clearTimeout","rect","pointX","pointY","time","controlPoint1","controlPoint2","points","lastPoint","isLastPointTooClose","distanceTo","calculateCurveControlPoints","startPoint","endPoint","startDraw","shift","pointVelocityCalc","lastVelocity","newWidth","curveDraw","lastWidth","canDrawCurve","strokeDraw","startWidth","endWidth","t1","t2","t3","u1","u2","u3","context","widthValue","bezierLength","bezierLengthCalc","drawSteps","beginPath","arcDraw","closePath","fill","pointSize","moveTo","arc","PI","p1","p2","p3","dx1","dy1","dx2","dy2","m1","m2","l1","sqrt","l2","cm","tx","ty","pointx1","pointy1","pointx2","pointy2","pointx3","pointy3","bezierPointCalc","startpoint","cp1","cp2","endpoint","isRead","enableOrDisable","isDisable","reDraw","getImageData","putImageData","canvasNew","canvasContextNew","toDataURL","setBackgroundImage","imageSrc","imageObj","crossOrigin","globalCompositeOperation","saveBackground","setBackgroundColor","canvasEle","strokeStyle","strokeRect","lastImage","getBlob","arr","bstr","atob","u8arr","Uint8Array","Blob","download","blobUrl","createObjectURL","href","undoImg_1","redoImg_1","empty","isEmpty","canUndo","canRedo","draw","fontFamily","fontSize","font","textAlign","textBaseline","fillText","load","signature","bitmapImage","all","createImageBitmap","then","results","tempCanvas","savebg","proxy_1","imageObj_1","toSVG","toJPEG","dataURL","resetSnap","restoreObj","dataUrl","svg","createElementNS","img","setAttributeNS","svgDataUrl","btoa","saveAsBlob","getSignature","imgData","propertyChanged","Signature"],"mappings":"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"}
|