{"version":3,"file":"ej2-inputs.min.js","sources":["../../src/maskedtextbox/base/mask-base.js","../../src/input/input.js","../../src/numerictextbox/numerictextbox.js","../../src/maskedtextbox/maskedtextbox/maskedtextbox.js","../../src/slider/slider.js","../../src/form-validator/form-validator.js","../../src/uploader/uploader.js","../../src/color-picker/color-picker.js","../../src/textbox/textbox.js"],"sourcesContent":["/**\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 * @hidden\n * Generate required masking elements to the MaskedTextBox from user mask input.\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 * @hidden\n * Apply mask ability with masking elements to the MaskedTextBox.\n */\nexport function applyMask() {\n setElementValue.call(this, this.promptMask);\n setMaskValue.call(this, this.value);\n}\n/**\n * @hidden\n * To wire required events to the MaskedTextBox.\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 if (this.enabled) {\n bindClearEvent.call(this);\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', resetFormHandler, this);\n }\n }\n}\n/**\n * @hidden\n * To unwire events attached to the MaskedTextBox.\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 if (this.formElement) {\n EventHandler.remove(this.formElement, 'reset', resetFormHandler);\n }\n}\n/**\n * @hidden\n * To bind required events to the MaskedTextBox clearButton.\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')) {\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 * @hidden\n * To get masked value from the MaskedTextBox.\n */\nexport function unstrippedValue(element) {\n return element.value;\n}\n/**\n * @hidden\n * To extract raw value from the MaskedTextBox.\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 maskInputFocusHandler(event) {\n var _this = this;\n var eventArgs = {\n selectionStart: 0,\n event: event,\n value: this.value,\n maskedValue: this.element.value,\n container: this.inputObj.container,\n selectionEnd: (this.promptMask.length > 0) ? this.promptMask.length : this.element.value.length,\n };\n this.trigger('focus', eventArgs, function (eventArgs) {\n if (_this.mask) {\n _this.isFocus = true;\n if (_this.element.value === '') {\n setElementValue.call(_this, _this.promptMask);\n }\n else {\n setElementValue.call(_this, _this.element.value);\n }\n if (!Browser.isDevice && Browser.info.version === '11.0') {\n _this.element.setSelectionRange(eventArgs.selectionStart, eventArgs.selectionEnd);\n }\n else {\n var delay = (Browser.isDevice && Browser.isIos) ? 450 : 0;\n setTimeout(function () {\n _this.element.setSelectionRange(eventArgs.selectionStart, eventArgs.selectionEnd);\n }, delay);\n }\n }\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 // tslint:disable-next-line\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 var value = this;\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 parentElement = this.element.parentNode;\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 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 (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}\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 // tslint:disable-next-line\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 endIndex = this.element.selectionEnd;\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 endIndex = this.element.selectionEnd;\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 eventOldVal = void 0;\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 eventOldVal = this.element.value;\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 * @hidden\n * Validates user input using masking elements '<' , '>' and '|'.\n */\nfunction changeToLowerUpperCase(key, value) {\n var promptMask;\n var i;\n var j = 0;\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 var val = this.element.value;\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 * @hidden\n * To set updated values in the MaskedTextBox.\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 * @hidden\n * To set updated values in the input element.\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 * @hidden\n * Provide mask support to input textbox through utility method.\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 * @hidden\n * Gets raw value of the textbox which has been masked through utility method.\n */\nexport function getVal(args) {\n return strippedValue.call(getUtilMaskEle(args), args.element);\n}\n/**\n * @hidden\n * Gets masked value of the textbox which has been masked through utility method.\n */\nexport function getMaskedVal(args) {\n return unstrippedValue.call(getUtilMaskEle(args), args.element);\n}\nfunction getUtilMaskEle(args) {\n var value = '';\n var inputEle;\n if (!isNullOrUndefined(args) && args.element.classList.contains(UTILMASK)) {\n inputEle = getMaskInput(args);\n }\n return inputEle;\n}\n/**\n * @hidden\n * Arguments to perform undo and redo functionalities.\n */\nvar MaskUndo = /** @class */ (function () {\n function MaskUndo() {\n }\n return MaskUndo;\n}());\nexport { MaskUndo };\nvar maskUndo = new MaskUndo();\n","import { createElement, attributes, addClass, removeClass, detach, classList } from '@syncfusion/ej2-base';\nimport { closest, formatUnit, isNullOrUndefined } 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 */\nexport var Input;\n(function (Input) {\n var privateInputObj = {\n container: null,\n buttons: [],\n clearButton: null\n };\n var floatType;\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 * @param args\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 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 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)) {\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 var inputElement;\n var floatLinelement;\n var floatLabelElement;\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 args.element.parentNode.insertBefore(inputObject.container, args.element);\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 floatLinelement = makeElement('span', { className: CLASSNAMES.FLOATLINE });\n 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 args.element.addEventListener('input', function (event) {\n updateLabelState(args.element.value, floatLabelElement);\n });\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 function wireClearBtnEvents(element, button, container) {\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 element.addEventListener('input', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('focus', function (event) {\n updateIconState(element.value, button);\n });\n element.addEventListener('blur', function (event) {\n setTimeout(function () { addClass([button], CLASSNAMES.CLEARICONHIDE); }, 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 = '';\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 * @param value - Specify the value of the input element.\n * @param element - The element on which the specified value is updated.\n * @param floatLabelType - Specify the float label type of the input element.\n * @param 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 (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 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 * @param cssClass - Css class names which are needed to add.\n * @param elements - The elements which are needed to add / remove classes.\n * @param oldClass - 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 * @param width - Width value which is need to add.\n * @param 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 * @param placeholder - Placeholder value which is need to add.\n * @param element - The element on which the placeholder is need to add.\n */\n function setPlaceholder(placeholder, element) {\n var parentElement;\n placeholder = encodePlaceHolder(placeholder);\n 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 * @param isReadonly\n * - Boolean value to specify whether to set read only. Setting \"True\" value enables read only.\n * @param 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 * @param isRtl\n * - Boolean value to specify whether to set RTL. Setting \"True\" value enables the RTL mode.\n * @param 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 * @param isEnable\n * - Boolean value to specify whether to enable or disable.\n * @param 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 inputObject.clearButton.remove();\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 * @param attrs\n * - Array of attributes which are need to removed from the element.\n * @param 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 = void 0;\n 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 * @param attrs\n * - Array of attributes which is added to element.\n * @param 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 = void 0;\n 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, 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 * @param isRipple\n * - Boolean value to specify whether to enable the ripple effect.\n * @param inputObject\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 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 var ele = this;\n setTimeout(function () { ele.classList.remove('e-input-btn-ripple'); }, 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 * @param position - Specify the icon placement on the input.Possible values are append and prepend.\n * @param 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 container - The container on which created span element is going to append.\n * @param inputElement - The inputElement on which created span element is going to prepend.\n */\n // tslint:disable\n function addIcon(position, icons, container, input, internalCreate) {\n // tslint:enable\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 * @param 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 container - The container on which created span element is going to append.\n * @param inputElement - The inputElement on which created span element is going to prepend.\n */\n // tslint:disable\n function prependSpan(iconClass, container, inputElement, internalCreateElement) {\n // tslint:enable\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 * @param 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 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","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, isBlazor } 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 * \n * ```\n * ```typescript\n * \n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n __extends(NumericTextBox, _super);\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 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 if (!(isBlazor() && this.isServerRendered)) {\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 }\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 if (!(isBlazor() && this.isServerRendered)) {\n this.updateHTMLAttrToElement();\n this.checkAttributes(false);\n if (this.formEle) {\n this.inputEleValue = this.value;\n }\n }\n this.validateMinMax();\n this.validateStep();\n if (this.placeholder === null && !(isBlazor() && this.isServerRendered)) {\n this.updatePlaceholder();\n }\n };\n /**\n * To Initialize the control rendering\n * @private\n */\n NumericTextBox.prototype.render = function () {\n if (this.element.tagName.toLowerCase() === 'input') {\n if (!(isBlazor() && this.isServerRendered)) {\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 }\n else {\n this.container = this.element.parentElement;\n this.inputWrapper = { container: this.container };\n this.hiddenInput = this.container.querySelector('input[type=\"hidden\"]');\n if (this.showClearButton) {\n this.inputWrapper.clearButton = this.container.querySelector('.e-clear-icon');\n Input.wireClearBtnEvents(this.element, this.inputWrapper.clearButton, this.inputWrapper.container);\n }\n if (this.showSpinButton) {\n this.spinDown = this.container.querySelector('.' + SPINDOWN);\n this.spinUp = this.container.querySelector('.' + SPINUP);\n this.wireSpinBtnEvents();\n }\n Input.bindInitialEvent({\n element: this.element, buttons: null, customTag: null, floatLabelType: this.floatLabelType, properties: this.properties\n });\n }\n this.wireEvents();\n if (!(isBlazor() && this.isServerRendered)) {\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 }\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 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 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'))) {\n this.clear(e);\n }\n this.isInteract = true;\n this.raiseChangeEvent(e);\n };\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 ignoreKeyCode = void 0;\n var valArray = _this.element.value.split('');\n var numericObject = getNumericObject(_this.locale);\n var decimalSeparator = getValue('decimal', numericObject);\n ignoreKeyCode = decimalSeparator.charCodeAt(0);\n if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.element.value.trim();\n }\n else if (prevPos !== 0) {\n _this.element.value = _this.prevVal;\n }\n else if (prevPos === 0) {\n _this.element.value = _this.element.value.trim();\n }\n _this.element.setSelectionRange(prevPos, prevPos);\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.value = _this.element.value.substring(0, prevPos) +\n _this.element.value.substring(currentPos, _this.element.value.length);\n _this.element.setSelectionRange(prevPos, prevPos);\n if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n && _this.element.value.length) {\n _this.preventHandler();\n }\n }\n }\n else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n _this.element.setSelectionRange(prevPos, prevPos);\n _this.nextEle = _this.element.value[_this.element.selectionStart];\n _this.cursorPosChanged = true;\n _this.preventHandler();\n }\n }\n if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n _this.cursorPosChanged = false;\n _this.nextEle = null;\n }\n if (_this.element.value.trim() === '') {\n _this.element.setSelectionRange(start, start);\n }\n if (_this.element.selectionStart > 0) {\n if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n if (isNullOrUndefined(_this.prevVal)) {\n _this.element.value = _this.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 (event) {\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 ;\n NumericTextBox.prototype.inputHandler = function (event) {\n // tslint:disable-next-line\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 numerictextboxObj.localChange({ value: this.instance.getNumberParser({ format: 'n' })(this.element.value) });\n this.preventChange = true;\n }\n if (this.isVue) {\n var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n var eventArgs = {\n event: event,\n value: (current === null || isNaN(current) ? null : current),\n previousValue: (previous === null || isNaN(previous) ? null : previous)\n };\n this.preventChange = true;\n this.elementPrevValue = this.element.value;\n this.trigger('input', eventArgs);\n }\n };\n ;\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 ;\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 ;\n NumericTextBox.prototype.correctRounding = function (value, step, result) {\n var floatExp = new RegExp('[,.](.*)');\n var valueText = value.toString();\n var stepText = step.toString();\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 ;\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 ;\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 = void 0;\n 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 ;\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 ;\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 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;\n numberOfDecimals = this.getNumberOfDecimals(this.value);\n return this.instance.getNumberFormat({\n maximumFractionDigits: numberOfDecimals,\n minimumFractionDigits: numberOfDecimals, useGrouping: false\n })(this.value);\n };\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 ;\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 ;\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 ;\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 ;\n NumericTextBox.prototype.mouseWheel = function (event) {\n event.preventDefault();\n var delta;\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 ;\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 ;\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 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 () { _this.isCalled = true; _this.action(action, event); }, 150);\n EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n };\n NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n var target = document.elementFromPoint(event.clientX, event.clientY);\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 * @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 */\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 * @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 */\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 * @method destroy\n * @return {void}\n */\n NumericTextBox.prototype.destroy = function () {\n this.unwireEvents();\n if (!(isBlazor() && this.isServerRendered)) {\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 };\n /**\n * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n */\n NumericTextBox.prototype.getText = function () {\n return this.element.value;\n };\n /**\n * Sets the focus to widget for interaction.\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 * @returns void\n */\n NumericTextBox.prototype.focusOut = function () {\n if (document.activeElement === this.element && this.enabled) {\n this.element.blur();\n removeClass([this.container], [NUMERIC_FOCUS]);\n }\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n NumericTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Calls internally if any of the property value is changed.\n * @private\n */\n NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n var elementVal;\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 var propVal = getValue(prop, newProp);\n this.setProperties({ currencyCode: propVal }, true);\n this.updateCurrency(prop, propVal);\n break;\n case 'currencyCode':\n var propValue = getValue(prop, newProp);\n this.setProperties({ currency: propValue }, true);\n this.updateCurrency('currency', propValue);\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 if (isBlazor()) {\n if (this.showClearButton) {\n this.inputWrapper.clearButton = this.container.querySelector('.e-clear-icon');\n Input.wireClearBtnEvents(this.element, this.inputWrapper.clearButton, this.inputWrapper.container);\n }\n }\n else {\n Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n this.bindClearEvent();\n }\n };\n NumericTextBox.prototype.updateSpinButton = function (newProp) {\n if (isBlazor()) {\n if (this.showSpinButton) {\n this.spinDown = this.container.querySelector('.' + SPINDOWN);\n this.spinUp = this.container.querySelector('.' + SPINUP);\n this.wireSpinBtnEvents();\n }\n }\n else {\n if (newProp.showSpinButton) {\n this.spinBtnCreation();\n }\n else {\n detach(this.spinUp);\n detach(this.spinDown);\n }\n }\n };\n /**\n * Gets 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, isBlazor } 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';\nimport { maskInputBlurHandler } from '../base/mask-base';\nvar ROOT = 'e-control-wrapper e-mask';\nvar INPUT = 'e-input';\nvar COMPONENT = 'e-maskedtextbox';\nvar CONTROL = 'e-control';\nvar MASKINPUT_FOCUS = 'e-input-focus';\nvar wrapperAttr = ['title', 'style', 'class'];\n/**\n * The MaskedTextBox allows the user to enter the valid input only based on the provided mask.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar MaskedTextBox = /** @class */ (function (_super) {\n __extends(MaskedTextBox, _super);\n 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.maskOptions = options;\n return _this;\n }\n /**\n * Gets the component name\n * @private\n */\n MaskedTextBox.prototype.getModuleName = function () {\n return 'maskedtextbox';\n };\n /**\n * Initializes the event handler\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 /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n MaskedTextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Initializes the component rendering.\n * @private\n */\n MaskedTextBox.prototype.render = function () {\n var _this = this;\n if (this.element.tagName.toLowerCase() === 'input') {\n var checkBlazor = isBlazor() && this.isServerRendered;\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 if (checkBlazor && Browser.isIE === true) {\n setTimeout(function () { _this.resetMaskedTextBox(); });\n }\n else {\n this.resetMaskedTextBox();\n }\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 setElementValue.call(this, '');\n }\n if (this.floatLabelType === 'Never') {\n maskInputBlurHandler.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 // tslint:disable-next-line\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 // tslint:disable-next-line\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['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 'value':\n // tslint:disable-next-line\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 // tslint:disable-next-line\n if ((isNullOrUndefined(this.maskOptions) || (this.maskOptions['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 }\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 * @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 var strippedValue_1 = this.value;\n this.mask = newProp.mask;\n this.updateValue(strippedValue_1);\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 MaskedTextBox.prototype.updateValue = function (strippedVal) {\n this.resetMaskedTextBox();\n setMaskValue.call(this, strippedVal);\n };\n /**\n * Gets the value of the MaskedTextBox with the masked format.\n * By using `value` property, you can get the raw value of maskedtextbox without literals and prompt characters.\n * @return {string}\n */\n MaskedTextBox.prototype.getMaskedValue = function () {\n return unstrippedValue.call(this, this.element);\n };\n /**\n * Sets the focus to widget for interaction.\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 * @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 * @method destroy\n * @return {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, isBlazor } 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 *
\n * ```\n * ```typescript\n * \n * ```\n */\nvar Slider = /** @class */ (function (_super) {\n __extends(Slider, _super);\n function Slider(options, element) {\n var _this = _super.call(this, options, element) || this;\n _this.horDir = 'left';\n _this.verDir = 'bottom';\n _this.transition = {\n handle: 'left .4s cubic-bezier(.25, .8, .25, 1), right .4s cubic-bezier(.25, .8, .25, 1), ' +\n 'top .4s cubic-bezier(.25, .8, .25, 1) , bottom .4s cubic-bezier(.25, .8, .25, 1)',\n rangeBar: 'all .4s cubic-bezier(.25, .8, .25, 1)'\n };\n _this.transitionOnMaterialTooltip = {\n handle: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, top 1ms ease-out',\n rangeBar: 'left 1ms ease-out, right 1ms ease-out, bottom 1ms ease-out, width 1ms ease-out, height 1ms ease-out'\n };\n _this.scaleTransform = 'transform .4s cubic-bezier(.25, .8, .25, 1)';\n _this.customAriaText = null;\n _this.drag = true;\n _this.initialTooltip = true;\n return _this;\n }\n Slider.prototype.preRender = function () {\n var localeText = { incrementTitle: 'Increase', decrementTitle: 'Decrease' };\n this.l10n = new L10n('slider', localeText, this.locale);\n this.isElementFocused = false;\n this.tickElementCollection = [];\n this.tooltipFormatInfo = {};\n this.ticksFormatInfo = {};\n this.initCultureInfo();\n this.initCultureFunc();\n this.formChecker();\n };\n Slider.prototype.formChecker = function () {\n var formElement = closest(this.element, 'form');\n if (formElement) {\n this.isForm = true;\n // this condition needs to be checked, if the slider is going to be refreshed by `refresh()`\n // then we need to revert the slider `value` back to `formResetValue` to preserve the initial value\n if (!isNullOrUndefined(this.formResetValue)) {\n this.setProperties({ 'value': this.formResetValue }, true);\n }\n this.formResetValue = this.value;\n if (this.type === 'Range' &&\n (isNullOrUndefined(this.formResetValue) || typeof (this.formResetValue) !== 'object')) {\n this.formResetValue = [parseFloat(formatUnit(this.min)), parseFloat(formatUnit(this.max))];\n }\n else if (isNullOrUndefined(this.formResetValue)) {\n this.formResetValue = parseFloat(formatUnit(this.min));\n }\n this.formElement = formElement;\n }\n else {\n this.isForm = false;\n }\n };\n Slider.prototype.initCultureFunc = function () {\n this.internationalization = new Internationalization(this.locale);\n };\n Slider.prototype.initCultureInfo = function () {\n this.tooltipFormatInfo.format = (!isNullOrUndefined(this.tooltip.format)) ? this.tooltip.format : null;\n this.ticksFormatInfo.format = (!isNullOrUndefined(this.ticks.format)) ? this.ticks.format : null;\n };\n Slider.prototype.formatString = function (value, formatInfo) {\n var formatValue = null;\n var formatString = null;\n if ((value || value === 0)) {\n formatValue = this.formatNumber(value);\n var numberOfDecimals = this.numberOfDecimals(value);\n formatString = this.internationalization.getNumberFormat(formatInfo)(this.makeRoundNumber(value, numberOfDecimals));\n }\n return { elementVal: formatValue, formatString: formatString };\n };\n ;\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 ;\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 ;\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 if (!isBlazor() || !this.isServerRendered) {\n this.initialize();\n }\n this.initRender();\n this.wireEvents();\n this.setZindex();\n this.renderComplete();\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 if (isBlazor() && this.isServerRendered) {\n this.sliderContainer = this.element.parentElement;\n this.sliderTrack = this.element.querySelector('.e-slider-track');\n this.hiddenInput = this.element.parentElement.querySelector('.e-slider-input');\n }\n else {\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 }\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 if (!isBlazor() || !this.isServerRendered) {\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 }\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 (!isBlazor() || !this.isServerRendered) {\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 };\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.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 if (isBlazor() && this.isServerRendered) {\n this.limitBarFirst = this.element.querySelectorAll('.e-limits')[0];\n if (this.type === 'Range') {\n this.limitBarSecond = this.element.querySelectorAll('.e-limit-second')[0];\n }\n }\n else {\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 };\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 if (isBlazor() && this.isServerRendered) {\n this.secondHandle = this.element.querySelector('.e-handle-second');\n }\n else {\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 };\n Slider.prototype.createFirstHandle = function () {\n if (isBlazor() && this.isServerRendered) {\n this.firstHandle = this.element.querySelector('.e-handle-first');\n }\n else {\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 }\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 };\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 if (!isBlazor() || !this.isServerRendered) {\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 }\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 if (isBlazor() && this.isServerRendered) {\n args.text = this.formatContent(this.tooltipFormatInfo, false);\n }\n else {\n this.setTooltipContent();\n args.text = text = this.tooltipObj.content;\n }\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 if (this.tooltipCollidedPosition === undefined ||\n this.tooltipCollidedPosition !== args.collidedPosition) {\n if (this.isMaterialTooltip) {\n var tooltipClass = this.tooltipPositionCalculation(args.collidedPosition);\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,\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 if (!isBlazor()) {\n this.tooltipValue();\n }\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 if (isBlazor() && this.isServerRendered) {\n this.firstBtn = this.element.parentElement.querySelector('.e-slider-button.e-first-button');\n this.secondBtn = this.element.parentElement.querySelector('.e-slider-button.e-second-button');\n }\n else {\n this.firstBtn = this.createElement('div', { className: classNames.sliderButton + ' ' + classNames.firstButton });\n this.firstBtn.appendChild(this.createElement('span', { className: classNames.sliderButtonIcon }));\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 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 };\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 if (isBlazor() && this.isServerRendered) {\n this.ul = this.element.querySelector('ul');\n }\n else {\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 }\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 if (!isBlazor() || !this.isServerRendered) {\n this.element.appendChild(this.ul);\n }\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 if (isBlazor() && this.isServerRendered && isNullOrUndefined(this.customValues)) {\n this.updateTicksValues(start, this.ul.children[liElementPosition]);\n liElementPosition++;\n }\n }\n else if (isNullOrUndefined(this.customValues)) {\n this.formatTicksValue(li, start);\n if (isBlazor() && this.isServerRendered && isNullOrUndefined(this.customValues)) {\n this.updateTicksValues(start, this.ul.children[liElementPosition]);\n liElementPosition++;\n }\n }\n if (!isBlazor() || !this.isServerRendered) {\n this.ul.appendChild(li);\n }\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.updateTicksValues = function (start, liElement) {\n if (liElement.childElementCount > 0) {\n for (var i = 0; i < liElement.childElementCount; i++) {\n this.blazortTicksValue(liElement, start, liElement.children[i]);\n }\n }\n else {\n this.blazortTicksValue(liElement, start, null);\n }\n };\n Slider.prototype.blazortTicksValue = function (li, start, span) {\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 (span) {\n if (_this.enableHtmlSanitizer) {\n span.innerHTML = SanitizeHtmlHelper.sanitize(observedArgs.text.toString());\n }\n else {\n span.innerHTML = observedArgs.text.toString();\n }\n }\n });\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 if (!isNullOrUndefined(_this.renderingTicks) && isBlazor()) {\n var orien = _this.orientation === 'Horizontal' ? 'h' : 'v';\n _this.ticksAlignment(orien, tickWidth, false);\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 if (!isBlazor() || !this.isServerRendered) {\n this.firstChild.children[i].style.top = -(firstChild.height / 2) + 'px';\n }\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 if (!isBlazor() || !this.isServerRendered) {\n setStyleAttribute(other[i], { top: (tickWidth - otherChild.height) / 2 + 'px' });\n }\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 if (!isBlazor()) {\n this.lastChild.children[1].style.left = -(this.lastChild.getBoundingClientRect().width / 2) + 'px';\n }\n }\n }\n if (count === 0) {\n if (this.orientation === 'Horizontal') {\n if (!this.enableRtl) {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n if (!isBlazor()) {\n this.firstChild.style.left = this.firstHandle.style.left;\n }\n }\n else {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n this.firstChild.style.right = this.firstHandle.style.right;\n if (!isBlazor()) {\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 }\n if (!isBlazor() || !this.isServerRendered) {\n if (this.orientation === 'Vertical') {\n this.firstChild.classList.remove(classNames.sliderLastTick);\n }\n }\n }\n if (isBlazor() && this.isServerRendered) {\n var args = void 0;\n if (this.firstChild != null) {\n if (this.orientation === 'Horizontal') {\n args = { firstTickPostion: this.firstChild.children[0].style.left };\n }\n else {\n args = { firstTickPostion: -(firstChild.height / 2) + 'px' };\n }\n }\n if (other[0] != null) {\n if (this.orientation === 'Horizontal') {\n args = { otherTicksPosition: other[0].style.left };\n }\n else {\n args = { otherTicksPosition: (tickWidth - otherChild.height) / 2 + 'px' };\n }\n }\n if (this.firstChild != null && other[0] != null) {\n if (this.orientation === 'Horizontal') {\n args = {\n firstTickPostion: this.firstChild.children[0].style.left,\n otherTicksPosition: other[0].style.left\n };\n }\n else {\n args = {\n firstTickPostion: -(firstChild.height / 2) + 'px',\n otherTicksPosition: (tickWidth - otherChild.height) / 2 + 'px'\n };\n }\n }\n // tslint:disable\n this.interopAdaptor.invokeMethodAsync('SliderTicksData', args);\n // tslint:enable\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 (!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 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 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 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 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 !this.tooltipElement.classList.contains(classNames.materialTooltipOpen) ?\n this.openMaterialTooltip() : this.refreshTooltip(this.firstHandle);\n }\n else {\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 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 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 isNullOrUndefined(this.activeHandle) ? (this.type === 'Range' ? this.activeHandle = 2 : this.activeHandle = 1) :\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 _this.enableRtl ? (handle.style.right =\n pos + \"px\") : (handle.style.left = pos + \"px\");\n }\n else {\n handle.style.bottom = pos + \"px\";\n }\n if (isBlazor() && _this.isServerRendered) {\n handle.style.removeProperty('visibility');\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 if (!isBlazor() || !this.isServerRendered) {\n this.tooltipValue();\n }\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 this.enableRtl ? this.firstHandle.style.right =\n this.handlePos1 + \"px\" : this.firstHandle.style.left = this.handlePos1 + \"px\";\n if (this.isMaterialTooltip) {\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 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 this.enableRtl ? this.secondHandle.style.right =\n this.handlePos2 + \"px\" : this.secondHandle.style.left = this.handlePos2 + \"px\";\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 if (!isBlazor()) {\n this.removeElement(this.ul);\n this.ul = undefined;\n }\n this.renderScale();\n if (isBlazor()) {\n this.tickValuePosition();\n }\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 if (!isBlazor() || !this.isServerRendered) {\n this.refreshTooltip(this.tooltipTarget);\n }\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 Slider.prototype.tempStartEnd = function () {\n if (this.min > this.max) {\n return {\n start: this.max,\n end: this.min\n };\n }\n else {\n return {\n start: this.min,\n end: this.max\n };\n }\n };\n Slider.prototype.xyToPosition = function (position) {\n var pos;\n if (this.min === this.max) {\n return 100;\n }\n if (this.orientation === 'Horizontal') {\n var left = position.x - this.element.getBoundingClientRect().left;\n var num = this.element.offsetWidth / 100;\n this.val = (left / num);\n }\n else {\n var top_1 = position.y - this.element.getBoundingClientRect().top;\n var num = this.element.offsetHeight / 100;\n this.val = 100 - (top_1 / num);\n }\n var val = this.stepValueCalculation(this.val);\n if (val < 0) {\n val = 0;\n }\n else if (val > 100) {\n val = 100;\n }\n if (this.enableRtl && this.orientation !== 'Vertical') {\n val = 100 - val;\n }\n if (this.orientation === 'Horizontal') {\n pos = this.element.getBoundingClientRect().width * (val / 100);\n }\n else {\n pos = this.element.getBoundingClientRect().height * (val / 100);\n }\n return pos;\n };\n Slider.prototype.stepValueCalculation = function (value) {\n if (this.step === 0) {\n this.step = 1;\n }\n var percentStep = (parseFloat(formatUnit(this.step))) / ((parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min))) / 100);\n var remain = value % Math.abs(percentStep);\n if (remain !== 0) {\n if ((percentStep / 2) > remain) {\n value -= remain;\n }\n else {\n value += Math.abs(percentStep) - remain;\n }\n }\n return value;\n };\n Slider.prototype.add = function (a, b, addition) {\n var precision;\n var x = Math.pow(10, precision || 3);\n var val;\n if (addition) {\n val = (Math.round(a * x) + Math.round(b * x)) / x;\n }\n else {\n val = (Math.round(a * x) - Math.round(b * x)) / x;\n }\n return val;\n };\n Slider.prototype.positionToValue = function (pos) {\n var val;\n var diff = parseFloat(formatUnit(this.max)) - parseFloat(formatUnit(this.min));\n if (this.orientation === 'Horizontal') {\n val = (pos / this.element.getBoundingClientRect().width) * diff;\n }\n else {\n val = (pos / this.element.getBoundingClientRect().height) * diff;\n }\n var total = this.add(val, parseFloat(this.min.toString()), true);\n return (total);\n };\n Slider.prototype.sliderBarClick = function (evt) {\n evt.preventDefault();\n var pos;\n if (evt.type === 'mousedown' || evt.type === 'mouseup' || evt.type === 'click') {\n pos = { x: evt.clientX, y: evt.clientY };\n }\n else if (evt.type === 'touchend' || evt.type === 'touchstart') {\n pos = { x: evt.changedTouches[0].clientX, y: evt.changedTouches[0].clientY };\n }\n var handlepos = this.xyToPosition(pos);\n var handleVal = this.positionToValue(handlepos);\n if (this.type === 'Range' && (this.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 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 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 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 ((!isBlazor() && !this.isServerRendered) || 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 if (!isBlazor()) {\n this.refreshTooltip(this.tooltipTarget);\n }\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 if (!isBlazor() && !this.isServerRendered) {\n this.sliderContainer.parentNode.insertBefore(this.element, this.sliderContainer);\n detach(this.sliderContainer);\n }\n if (this.tooltip.isVisible) {\n this.tooltipObj.destroy();\n }\n if (!isBlazor() && !this.isServerRendered) {\n this.element.innerHTML = '';\n }\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 if (!isBlazor() || !this.isServerRendered) {\n this.refreshTooltip(this.tooltipTarget);\n }\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 if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.setMinMaxValue();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'tooltip':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n if (!isNullOrUndefined(newProp.tooltip) && !isNullOrUndefined(oldProp.tooltip)) {\n this.setTooltip(prop);\n }\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'type':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n if (!isNullOrUndefined(oldProp) && Object.keys(oldProp).length\n && !isNullOrUndefined(oldProp.type)) {\n this.changeSliderType(oldProp.type, prop);\n this.setZindex();\n }\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'enableRtl':\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n this.isServerRendered = false;\n }\n if (oldProp.enableRtl !== newProp.enableRtl && this.orientation !== 'Vertical') {\n this.rtl = oldProp.enableRtl;\n this.changeRtl();\n }\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'limits':\n this.limitsPropertyChange();\n break;\n case 'orientation':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.changeOrientation();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'ticks':\n if (!isNullOrUndefined(this.sliderContainer.querySelector('.' + classNames.scale))) {\n if (!isBlazor() || !this.isServerRendered) {\n detach(this.ul);\n }\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 (!isBlazor() || !this.isServerRendered) {\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 }\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n }\n break;\n case 'enabled':\n this.setEnabled();\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n }\n break;\n case 'readonly':\n this.setReadOnly();\n if (isBlazor() && this.isServerRendered) {\n if (this.isMaterialTooltip) {\n this.sliderContainer.classList.add(classNames.materialSlider);\n }\n }\n break;\n case 'customValues':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.setValue();\n this.reposition();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\n break;\n case 'colorRange':\n if (isBlazor() && this.isServerRendered) {\n this.isServerRendered = false;\n }\n this.reposition();\n if (isBlazor() && !this.isServerRendered) {\n this.isServerRendered = true;\n }\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 if (!isBlazor()) {\n this.refreshTooltip(this.tooltipTarget);\n }\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// tslint:disable-next-line:no-any\nexport var regex = {\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};\n/**\n * ErrorOption values\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n /**\n * Defines the error message.\n */\n ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n /**\n * Defines the error element type.\n */\n ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n * \n * \n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n __extends(FormValidator, _super);\n // Initializes the FormValidator \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 // tslint:disable-next-line:no-any\n _this.localyMessage = {};\n /**\n * Specifies the default messages for validation rules.\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 // tslint:enable\n /**\n * Add validation rules to the corresponding input element based on `name` attribute.\n * @param {string} name `name` of form field.\n * @param {Object} rules Validation rules for the corresponding element.\n * @return {void}\n */\n FormValidator.prototype.addRules = function (name, rules) {\n if (name) {\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 * @param {string} name Input name attribute value.\n * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n * @return {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 /**\n * Validate the current form values using defined rules.\n * Returns `true` when the form is valid otherwise `false`\n * @param {string} selected - Optional parameter to validate specified element.\n * @return {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 /**\n * Reset the value of all the fields in form.\n * @return {void}\n */\n FormValidator.prototype.reset = function () {\n this.element.reset();\n this.clearForm();\n };\n /**\n * Get input element by name.\n * @param {string} name - Input element name attribute value.\n * @return {HTMLInputElement}\n */\n FormValidator.prototype.getInputElement = function (name) {\n this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n return this.inputElement;\n };\n /**\n * Destroy the form validator object and error elements.\n * @return {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 * @private\n */\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 /**\n * @private\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 */\n FormValidator.prototype.getModuleName = function () {\n return 'formValidator';\n };\n /**\n * @private\n */\n // tslint:disable-next-line:no-any\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 * @return {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 var id = input.getAttribute(rule);\n this.defRule(input, allRule, rule, id);\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 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 break;\n case 'equalto':\n var id = input.getAttribute(ruleName).split('.');\n this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\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 (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 = this.element.querySelector('#' + containerId);\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};\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 { updateBlazorTemplate, resetBlazorTemplate, isBlazor } from '@syncfusion/ej2-base';\nvar ROOT = 'e-uploader';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n __extends(FilesProp, _super);\n function FilesProp() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], FilesProp.prototype, \"name\", void 0);\n __decorate([\n Property(null)\n ], FilesProp.prototype, \"size\", void 0);\n __decorate([\n Property('')\n ], FilesProp.prototype, \"type\", void 0);\n return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n __extends(ButtonsProps, _super);\n function ButtonsProps() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('Browse...')\n ], ButtonsProps.prototype, \"browse\", void 0);\n __decorate([\n Property('Upload')\n ], ButtonsProps.prototype, \"upload\", void 0);\n __decorate([\n Property('Clear')\n ], ButtonsProps.prototype, \"clear\", void 0);\n return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n __extends(AsyncSettings, _super);\n function AsyncSettings() {\n return _super !== null && _super.apply(this, arguments) || this;\n }\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"saveUrl\", void 0);\n __decorate([\n Property('')\n ], AsyncSettings.prototype, \"removeUrl\", void 0);\n __decorate([\n Property(0)\n ], AsyncSettings.prototype, \"chunkSize\", void 0);\n __decorate([\n Property(3)\n ], AsyncSettings.prototype, \"retryCount\", void 0);\n __decorate([\n Property(500)\n ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * \n * ```\n * ```typescript\n * \n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n __extends(Uploader, _super);\n /**\n * Triggers when change the Uploader value.\n */\n 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 /**\n * Get the file item(li) which are shown in file list.\n * @private\n */\n _this.fileList = [];\n /**\n * Get the data of files which are shown in file list.\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 * @private\n */\n Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n var prop = _a[_i];\n switch (prop) {\n case 'allowedExtensions':\n this.setExtensions(this.allowedExtensions);\n this.clearAll();\n break;\n case 'enabled':\n this.setControlStatus();\n break;\n case 'multiple':\n this.setMultipleSelection();\n break;\n case 'enableRtl':\n this.setRTL();\n this.reRenderFileList();\n break;\n case 'buttons':\n this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n this.renderButtonTemplates();\n break;\n case 'dropArea':\n this.unBindDropEvents();\n this.updateDropArea();\n break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n this.checkHTMLAttributes(true);\n break;\n case 'files':\n this.renderPreLoadFiles();\n break;\n case 'directoryUpload':\n this.updateDirectoryAttributes();\n break;\n case 'template':\n if (!this.isServerBlazor) {\n this.clearAll();\n }\n break;\n case 'minFileSize':\n case 'maxFileSize':\n case 'autoUpload':\n this.clearAll();\n break;\n case 'sequentialUpload':\n this.clearAll();\n break;\n case 'locale':\n this.l10n.setLocale(this.locale);\n this.setLocalizedTexts();\n this.preLocaleObj = getValue('currentLocale', this.l10n);\n break;\n case 'cssClass':\n this.setCSSClass(oldProp.cssClass);\n break;\n }\n }\n };\n Uploader.prototype.setLocalizedTexts = function () {\n if (isNullOrUndefined(this.template)) {\n if (typeof (this.buttons.browse) === 'string') {\n this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n this.localizedTexts('Browse') : this.buttons.browse;\n this.browseButton.setAttribute('title', this.browseButton.innerText);\n if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n }\n }\n this.updateFileList();\n }\n };\n Uploader.prototype.getKeyValue = function (val) {\n var keyValue;\n for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n var key = _a[_i];\n if (this.preLocaleObj[key] === val) {\n keyValue = key;\n }\n }\n return keyValue;\n };\n Uploader.prototype.updateFileList = function () {\n var element;\n /* istanbul ignore next */\n if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n for (var i = 0; i < this.fileList.length; i++) {\n element = this.fileList[i].querySelector('.e-file-status');\n element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n }\n if (this.fileList[i].querySelector('.e-file-play-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n }\n if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n }\n if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n }\n if (!this.autoUpload) {\n this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n this.localizedTexts('Upload') : this.buttons.upload;\n this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n this.localizedTexts('Clear') : this.buttons.clear;\n this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n }\n }\n }\n };\n Uploader.prototype.reRenderFileList = function () {\n if (this.listParent) {\n detach(this.listParent);\n this.listParent = null;\n this.fileList = [];\n this.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.isServerBlazor = (isBlazor() && this.isServerRendered) ? true : false;\n this.isBlazorTemplate = this.isServerBlazor && this.template !== '' && !isNullOrUndefined(this.template) ? true : false;\n this.isBlazorSaveUrl = (this.isServerRendered &&\n (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl))) ? true : false;\n if (this.isBlazorSaveUrl && this.sequentialUpload) {\n this.sequentialUpload = false;\n }\n if (!this.isBlazorSaveUrl) {\n this.formRendered();\n }\n if (!this.isServerBlazor) {\n this.updateHTMLAttrToElement();\n this.checkHTMLAttributes(false);\n // tslint:disable-next-line\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 }\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 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 * @private\n */\n Uploader.prototype.render = function () {\n if (!this.isServerBlazor) {\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 else {\n this.dropAreaWrapper = closest(this.element, '.' + DROP_WRAPPER);\n this.uploadWrapper = closest(this.element, '.e-upload.e-control-wrapper');\n this.browseButton = this.dropAreaWrapper.querySelector('button.e-upload-browse-btn');\n this.setDropArea();\n this.renderPreLoadFiles();\n this.wireEvents();\n }\n this.renderComplete();\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 if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\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 this.uploadButton.focus();\n this.wireActionButtonEvents();\n }\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 /* istanbul ignore next */\n Uploader.prototype.serverUlElement = function (element) {\n if (element) {\n if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n this.listParent = element;\n this.fileList = [].slice.call(this.listParent.querySelectorAll('li'));\n this.serverRemoveIconBindEvent();\n if (!this.isForm) {\n this.checkAutoUpload(this.filesData);\n }\n }\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 if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n detach(this.actionButtons);\n }\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 = void 0;\n 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 = void 0;\n 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 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 }\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 document.querySelector(this.dropArea);\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 if (!this.isServerBlazor) {\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 if (!this.isServerBlazor) {\n var fileDropArea = this.createElement('span', { className: DROP_AREA });\n fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n this.dropAreaWrapper.appendChild(fileDropArea);\n }\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 }\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 }\n };\n Uploader.prototype.onDragLeave = function (e) {\n this.dropZoneElement.classList.remove(DRAG_HOVER);\n };\n Uploader.prototype.dragHover = function (e) {\n if (!this.enabled) {\n return;\n }\n this.dropZoneElement.classList.add(DRAG_HOVER);\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.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 if (this.isBlazorSaveUrl) {\n this.fileList = [].slice.call(this.uploadWrapper.querySelectorAll('li'));\n }\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 if (!this.isBlazorSaveUrl) {\n detach(selectedElement);\n }\n index = this.fileList.indexOf(selectedElement);\n this.fileList.splice(index, 1);\n this.filesData.splice(index, 1);\n if (!this.isBlazorSaveUrl) {\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 else {\n // tslint:disable-next-line\n this.interopAdaptor.invokeMethodAsync('removeFileData', index);\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 (isBlazor()) {\n if (_this.currentRequestHeader) {\n _this.updateCustomheader(ajax.httpRequest, _this.currentRequestHeader);\n }\n if (_this.customFormDatas) {\n _this.updateFormData(formData, _this.customFormDatas);\n }\n }\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 if (this.isServerBlazor) {\n var name_1 = this.element.getAttribute('name');\n if (!isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n formData.append(name_1, selectedFiles.rawFile, selectedFiles.name);\n }\n else {\n formData.append(name_1, selectedFiles.name);\n }\n }\n ajax.onLoad = function (e) { _this.removeCompleted(e, selectedFiles, custom); return {}; };\n /* istanbul ignore next */\n ajax.onError = function (e) { _this.removeFailed(e, selectedFiles, custom); return {}; };\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 = void 0;\n spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ? liElement.querySelector('.' + DELETE_ICON) :\n liElement.querySelector('.' + REMOVE_ICON);\n createSpinner({ target: spinnerTarget, width: '20px' });\n showSpinner(spinnerTarget);\n }\n if (!this.isServerBlazor) {\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 };\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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;\n items = this.multiple ? 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 // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isFile) {\n var files_2 = [];\n // tslint:disable-next-line\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 // tslint:disable-next-line\n var item = items[i].webkitGetAsEntry();\n if (item.isDirectory) {\n return true;\n }\n }\n return false;\n };\n // tslint:disable\n /* istanbul ignore next */\n Uploader.prototype.traverseFileTree = function (item, event) {\n if (item.isFile) {\n this.filesEntries.push(item);\n }\n else if (item.isDirectory) {\n // tslint:disable-next-line\n var directoryReader = item.createReader();\n // tslint:disable-next-line\n this.readFileFromDirectory(directoryReader, event);\n }\n };\n // tslint:disable\n /* istanbul ignore next */\n Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n var _this = this;\n // tslint:disable-next-line\n directoryReader.readEntries(function (entries) {\n for (var i = 0; i < entries.length; i++) {\n _this.traverseFileTree(entries[i]);\n // tslint:disable-next-line\n }\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 // tslint:disable-next-line\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 // tslint:enable\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') {\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, \n // tslint:disable-next-line\n targetFiles, directory, paste) {\n var _this = this;\n this.base64String = [];\n // tslint:disable-next-line\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 // tslint:disable-next-line\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 if (isBlazor()) {\n this.currentRequestHeader = eventArgs.currentRequest;\n this.customFormDatas = eventArgs.customFormData;\n }\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 if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.filesData = this.filesData.concat(fileData);\n }\n if (!this.isForm || this.allowUpload()) {\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.checkAutoUpload(fileData);\n }\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.isBlazorSaveUrl) {\n // tslint:disable-next-line\n this.interopAdaptor.invokeMethodAsync('updateServerFileData', this.filesData, this.isForm);\n }\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) && !(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\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 if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n // tslint:disable-next-line\n this.interopAdaptor.invokeMethodAsync('clearAll');\n }\n else {\n this.removeActionButtons();\n }\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 resetBlazorTemplate(this.element.id + 'Template', 'Template');\n for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n var listItem = fileData_1[_i];\n var liElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n this.uploadTemplateFn = this.templateComplier(this.template);\n // tslint:disable-next-line\n var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, liElement);\n if (liTempCompiler) {\n var fromElements = [].slice.call(liTempCompiler);\n append(fromElements, liElement);\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 }\n this.renderReactTemplates();\n updateBlazorTemplate(this.element.id + 'Template', 'Template', this, false);\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 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 fileTypeEle.innerHTML = '.' + this.getFileType(listItem.name);\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 Uploader.prototype.formCustomFileList = function (fileData, files) {\n this.createParentUL();\n resetBlazorTemplate(this.element.id + 'Template', 'Template');\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 // tslint:disable-next-line\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 updateBlazorTemplate(this.element.id + 'Template', 'Template', this, false);\n };\n /**\n * Create the file list for specified files data.\n * @param { FileInfo[] } fileData - specifies the files data for file list creation.\n * @returns void\n */\n Uploader.prototype.createFileList = function (fileData, isSelectedFile) {\n if (this.isBlazorSaveUrl || this.isBlazorTemplate) {\n var fileListData = (isSelectedFile) ? this.filesData = this.filesData.concat(fileData) : fileData;\n // tslint:disable-next-line\n this.interopAdaptor.invokeMethodAsync('createFileList', fileListData, this.isForm);\n }\n else {\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 fileExtension.innerHTML = '.' + this.getFileType(listItem.name);\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 };\n Uploader.prototype.getSlicedName = function (nameElement) {\n var text;\n 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 if (this.isBlazorSaveUrl) {\n for (var i = 0; i < this.filesData.length; i++) {\n if (this.filesData[i].name === files.name) {\n this.filesData[i].status = status;\n this.filesData[i].statusCode = statusCode;\n }\n }\n }\n else {\n files.status = status;\n files.statusCode = statusCode;\n }\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(this.filesData[i].id) && !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_2 = _this.element.getAttribute('name');\n formData.append(name_2, 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) { _this.removecanceledFile(e, files); return {}; };\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 detach(liElement.querySelector('.e-spinner-pane'));\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) { _this.reloadcanceledFile(e, file, liElement, false); }, 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 liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\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 // tslint:disable-next-line\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 /* istanbul ignore next */\n Uploader.prototype.serverRemoveIconBindEvent = function () {\n if (this.uploadWrapper && this.isBlazorSaveUrl) {\n var iconElement = [].slice.call(this.uploadWrapper.querySelectorAll('ul li'));\n for (var i = 0; i < iconElement.length; i++) {\n var removeIconEle = (iconElement[i]) ? iconElement[i].querySelector('.e-icons') : null;\n if (removeIconEle) {\n EventHandler.remove(removeIconEle, 'click', this.removeFiles);\n EventHandler.add(removeIconEle, 'click', this.removeFiles, this);\n }\n }\n }\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 if (!this.isBlazorSaveUrl) {\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 }\n this.trigger('success', args, function (args) {\n // tslint:disable-next-line\n _this.updateStatus(file, args.statusText, '2');\n _this.uploadedFilesData.push(file);\n if (!_this.isBlazorSaveUrl) {\n _this.trigger('change', { file: _this.uploadedFilesData });\n }\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 // tslint:disable-next-line\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 increment ? ++this.actionCompleteCount : --this.actionCompleteCount;\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 () { _this.animateProgressBar(li, callType); }, 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 var exception = void 0;\n try {\n if (document.querySelectorAll(uploadTemplate).length) {\n return compile(document.querySelector(uploadTemplate).innerHTML.trim());\n }\n }\n catch (exception) {\n return compile(uploadTemplate);\n }\n }\n return undefined;\n };\n Uploader.prototype.setRTL = function () {\n this.enableRtl ? addClass([this.uploadWrapper], RTL) : removeClass([this.uploadWrapper], RTL);\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n var _this = this;\n var formData = new FormData();\n var cloneFile;\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) { _this.chunkUploadComplete(e, metaData, custom); return {}; };\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 /* istanbul ignore next */\n if (isBlazor()) {\n if (_this.currentRequestHeader) {\n _this.updateCustomheader(ajax.httpRequest, _this.currentRequestHeader);\n }\n if (_this.customFormDatas) {\n _this.updateFormData(formData, _this.customFormDatas);\n }\n }\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) { _this.chunkUploadFailed(e, metaData, custom); return {}; };\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) { _this.reloadcanceledFile(e, file, liElement); }, 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_3 = _this.element.getAttribute('name');\n formData.append(name_3, 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) { _this.removeChunkFile(e, metaData, custom); return {}; };\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) {\n detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n }\n this.removeChunkProgressBar(metaData);\n }\n this.raiseSuccessEvent(e, metaData.file);\n return;\n }\n this.sendNextRequest(metaData);\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.classList.remove(ABORT_ICON);\n deleteIcon.classList.add(REMOVE_ICON);\n deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n pauseIcon.classList.add(RETRY_ICON);\n pauseIcon.classList.remove(PAUSE_UPLOAD);\n pauseIcon.setAttribute('title', this.localizedTexts('retry'));\n if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)) {\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 metaData.request.emitError = false;\n metaData.request.httpRequest.abort();\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 // tslint:disable-next-line\n if (!eventArgs.cancel) {\n if (metaData.retryCount < _this.asyncSettings.retryCount) {\n setTimeout(function () { _this.retryRequest(liElement, metaData, custom); }, _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 // tslint:disable-next-line\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 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 target;\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 loadedSize = (metaData.chunkIndex * this.asyncSettings.chunkSize);\n var currentLoaded = e.loaded;\n if (currentLoaded > this.asyncSettings.chunkSize) {\n currentLoaded = this.asyncSettings.chunkSize;\n }\n var value = Math.min((((loadedSize + currentLoaded) / metaData.file.size) * 100), 100);\n this.changeProgressValue(liElement, Math.round(value).toString() + '%');\n }\n if (metaData.chunkIndex === 0) {\n this.checkActionButtonStatus();\n }\n }\n if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)) {\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) { _this.checkPausePlayAction(e); }, false);\n }\n };\n /**\n * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n * @param { number } bytes - specifies the file size in bytes.\n * @returns string\n */\n Uploader.prototype.bytesToSize = function (bytes) {\n var i = -1;\n var size;\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 * @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 var index = 0;\n for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n var name_4 = sortedFileNames_1[_i];\n for (var i = 0; i < files.length; i++) {\n if (name_4 === files[i].name) {\n sortedFilesData.push(files[i]);\n }\n }\n }\n return sortedFilesData;\n };\n /**\n * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n * @method destroy\n * @return {void}.\n */\n Uploader.prototype.destroy = function () {\n this.element.value = null;\n this.clearTemplate();\n if (!(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\n this.clearAll();\n }\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 (!this.isServerBlazor) {\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 else {\n this.uploadWrapper = null;\n }\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 * @param { FileInfo | FileInfo[] } files - specifies the files data for upload.\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 if (isBlazor()) {\n _this.currentRequestHeader = eventArgs.currentRequest ? eventArgs.currentRequest : _this.currentRequestHeader;\n _this.customFormDatas = (eventArgs.customFormData && eventArgs.customFormData.length > 0) ?\n eventArgs.customFormData : _this.customFormDatas;\n }\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 // tslint:disable-next-line\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 /* istanbul ignore next */\n Uploader.prototype.uploadFileCount = function (ele) {\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 /* istanbul ignore next */\n Uploader.prototype.getFileRead = function (index, ele) {\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 /* istanbul ignore next */\n Uploader.prototype.getFileInfo = function (index, ele) {\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 _this = this;\n var selectedFiles = [];\n if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n if (this.isServerBlazor) {\n // tslint:disable-next-line\n this.interopAdaptor.invokeMethodAsync('GetFileDetails', files);\n }\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 var _loop_5 = function (i) {\n if (this_3.isServerBlazor && !this_3.checkChunkUpload()) {\n /* istanbul ignore next */\n /* tslint:disable */\n if (selectedFiles[i] && selectedFiles[i].rawFile instanceof File) {\n this_3.getBase64(selectedFiles[i].rawFile).then(function (data) {\n _this.base64String.push(data);\n _this.uploadFilesRequest(selectedFiles, i, custom);\n });\n }\n /* tslint:disable */\n }\n else {\n this_3.uploadFilesRequest(selectedFiles, i, custom);\n }\n };\n var this_3 = this;\n for (var i = 0; i < selectedFiles.length; i++) {\n _loop_5(i);\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 /* istanbul ignore next */\n if (this.isServerBlazor) {\n getFileData = selectedFiles.slice(0);\n cloneFiles.push(getFileData[i].rawFile);\n }\n var eventArgs = {\n fileData: (this.isServerBlazor) ? getFileData[i] : selectedFiles[i],\n customFormData: [],\n cancel: false\n };\n var formData = new FormData();\n ajax.beforeSend = function (e) {\n eventArgs.currentRequest = ajax.httpRequest;\n /* istanbul ignore next */\n if (isBlazor()) {\n eventArgs.fileData.rawFile = !chunkEnabled ? _this.base64String[i] : eventArgs.fileData.rawFile;\n if (_this.currentRequestHeader) {\n _this.updateCustomheader(ajax.httpRequest, _this.currentRequestHeader);\n }\n if (_this.customFormDatas) {\n _this.updateFormData(formData, _this.customFormDatas);\n }\n }\n _this.trigger('uploading', eventArgs, function (eventArgs) {\n /* istanbul ignore next */\n if (_this.isServerBlazor && !chunkEnabled) {\n selectedFiles[i].rawFile = eventArgs.fileData.rawFile = cloneFiles[i];\n }\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_5 = this.element.getAttribute('name');\n formData.append(name_5, 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 && _this.isServerBlazor) {\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 && _this.isServerBlazor) {\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) { _this.uploadFailed(e, selectedFiles[i]); return {}; };\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 /**\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 * @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 (isBlazor()) {\n _this.currentRequestHeader = beforeEventArgs.currentRequest;\n _this.customFormDatas = beforeEventArgs.customFormData;\n }\n var index = void 0;\n if (_this.isFormUpload() && !_this.isBlazorSaveUrl) {\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 && !_this.isBlazorSaveUrl) {\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_6 = function (files) {\n index = _this.filesData.indexOf(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_6(files);\n }\n }\n }\n });\n };\n /**\n * Clear all the file entries from list that can be uploaded files or added in upload queue.\n * @returns void\n */\n Uploader.prototype.clearAll = function () {\n var _this = this;\n if (isNullOrUndefined(this.listParent) && !(this.isBlazorSaveUrl || this.isBlazorTemplate)) {\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 /**\n * Get the data of files which are shown in file list.\n * @param { number } index - specifies the file list item(li) index.\n * @returns FileInfo[]\n */\n Uploader.prototype.getFilesData = function (index) {\n if (!this.isServerBlazor) {\n if (isNullOrUndefined(index)) {\n return this.filesData;\n }\n else {\n return this.getSelectedFiles(index);\n }\n }\n else {\n for (var i = 0; i < this.filesData.length; i++) {\n this.filesData[i].rawFile = this.base64String[i];\n }\n return this.filesData;\n }\n };\n /**\n * Pauses the in-progress chunked upload based on the file data.\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 * @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 * @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 * @returns void\n */\n Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n fileData = fileData ? fileData : this.filesData;\n var fileDataFiles = this.getFilesInArray(fileData);\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 * @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","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, 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 * \n * ```\n * ```typescript\n * \n * ```\n */\nvar ColorPicker = /** @class */ (function (_super) {\n __extends(ColorPicker, _super);\n function ColorPicker(options, element) {\n return _super.call(this, options, element) || this;\n }\n ColorPicker.prototype.preRender = function () {\n var ele = this.element;\n this.formElement = closest(this.element, 'form');\n if (this.formElement) {\n EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n }\n var localeText = { Apply: 'Apply', Cancel: 'Cancel', ModeSwitcher: 'Switch Mode' };\n this.l10n = new L10n('colorpicker', localeText, this.locale);\n if (ele.getAttribute('ejs-for') && !ele.getAttribute('name')) {\n ele.setAttribute('name', ele.id);\n }\n };\n /**\n * To Initialize the component rendering\n * @private\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 open: this.onOpen.bind(this),\n click: function (args) {\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 (args) {\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': 'row' }\n });\n palette.appendChild(row);\n }\n roundedColor = this.roundValue(colors[i]).toLowerCase();\n tile = this.createElement('span', {\n className: TILE, attrs: { 'role': 'gridcell', 'aria-label': roundedColor, 'aria-selected': 'false' }\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 refEle ? this.container.insertBefore(ele, refEle) : this.container.appendChild(ele);\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 select('.e-slider-track', this.opacitySlider.element).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 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 isPicker ? this.appendElement(inputWrap, 2) : this.appendElement(inputWrap, 1);\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 enable ? this.getWrapper().classList.add(DISABLED) : this.getWrapper().classList.remove(DISABLED);\n if (this.showButtons) {\n ([].slice.call(selectAll('.e-btn', this.container))).forEach(function (ele) {\n enable ? attributes(ele, { 'disabled': '' }) : ele.removeAttribute('disabled');\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 * @param value - Specify the color value.\n * @param type - Specify the type to which the specified color needs to be converted.\n * @method getValue\n * @return {string}\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 * @method toggle\n * @return {void}\n */\n ColorPicker.prototype.toggle = function () {\n this.container.parentElement.classList.contains('e-popup-close') ? this.splitBtn.toggle() : this.closePopup(null);\n };\n /**\n * Get component name.\n * @returns string\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 * @return {string}\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 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 var x;\n var y;\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 var left = parseInt(dragHandler.style.left, 10);\n var top = parseInt(dragHandler.style.top, 10);\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 (e) {\n var target = e.target.parentElement;\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(e);\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 idx < 0 ? idx += n + emptyCount : idx %= n + emptyCount;\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 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 this.setProperties({ 'value': cValue }, true);\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 * @method destroy\n * @return {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 wrapper = this.getWrapper();\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 s;\n var v = max;\n var d = max - min;\n 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 var i;\n var f;\n var p;\n var q;\n var t;\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 i = Math.floor(h);\n f = h - i;\n p = v * (1 - s);\n q = v * (1 - s * f);\n 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 (prop) {\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(newProp);\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 * @param {ColorPickerModel} newProp\n * @param {ColorPickerModel} oldProp\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 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(newProp.enableRtl);\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 * @public\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 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, isBlazor } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-textbox';\nvar CONTROL = 'e-control';\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 * \n * ```\n * ```typescript\n * \n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n __extends(TextBox, _super);\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 * @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 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 break;\n case 'htmlAttributes':\n this.updateHTMLAttrToElement();\n this.updateHTMLAttrToWrapper();\n var attributes = this.element.attributes;\n this.checkAttributes(true);\n Input.validateInputType(this.textboxWrapper.container, this.element);\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 * @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 if (!(isBlazor() && this.isServerRendered)) {\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 var attribute = ['required', 'minlength', 'maxlength'];\n for (var i = 0; i < attribute.length; i++) {\n if (this.element.hasAttribute(attribute[i])) {\n var attr = this.element.getAttribute(attribute[i]);\n this.textarea.setAttribute(attribute[i], attr);\n this.element.removeAttribute(attribute[i]);\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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 * @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 if (!(isBlazor() && this.isServerRendered)) {\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 }\n else {\n this.respectiveElement = this.element;\n this.textboxWrapper = { container: this.element.parentElement };\n if (this.showClearButton && !this.multiline) {\n this.textboxWrapper.clearButton = this.textboxWrapper.container.querySelector('.e-clear-icon');\n Input.wireClearBtnEvents(this.respectiveElement, this.textboxWrapper.clearButton, this.textboxWrapper.container);\n }\n if (this.floatLabelType === 'Auto') {\n Input.wireFloatingEvents(this.respectiveElement);\n }\n // tslint:disable-next-line\n Input.bindInitialEvent({ element: this.respectiveElement, buttons: null, customTag: null, floatLabelType: this.floatLabelType, properties: this.properties });\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 // tslint:disable-next-line\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 // tslint:disable-next-line\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))) {\n var previousValue = this.value;\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 * @method destroy\n * @return {void}\n */\n TextBox.prototype.destroy = function () {\n this.unWireEvents();\n if (!(isBlazor() && this.isServerRendered)) {\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 else {\n this.textboxWrapper = null;\n }\n };\n /**\n * Adding the icons to the TextBox component.\n * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n * @param { string | 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 TextBox.\n * @return {void}\n */\n TextBox.prototype.addIcon = function (position, icons) {\n Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n };\n /**\n * Gets the properties to be maintained in the persisted state.\n * @return {string}\n */\n TextBox.prototype.getPersistData = function () {\n var keyEntity = ['value'];\n return this.addOnPersist(keyEntity);\n };\n /**\n * Adding the multiple attributes as key-value pair to the TextBox element.\n * @param { { [key: string]: string } } attributes - Specifies the attributes to be add to TextBox element.\n * @return {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 * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n * @return {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 * @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 * @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","enabled","bindClearEvent","formElement","resetFormHandler","unwireEvents","remove","showClearButton","inputObj","clearButton","resetHandler","e","preventDefault","classList","contains","clear","event","redoCollec","unshift","startIndex","selectionStart","endIndex","selectionEnd","triggerMaskChangeEvent","setSelectionRange","tagName","initInputValue","unstrippedValue","strippedValue","maskValues","k","checkMask","maskValue","_callPasteHandler","regExpCollec","undefined","_this","eventArgs","maskedValue","container","trigger","isFocus","Browser","isDevice","info","version","delay","isIos","setTimeout","blurEventArgs","placeholder","floatLabelType","labelElement","parentNode","querySelector","TOPLABEL","removeClass","readonly","sIndex_1","eIndex_1","oldValue_1","maskKeyPress","validateValue","i_1","preValue_1","sIndex_2","eIndex","undoCollec","value_1","isIE","ctrlKey","keyCode","extend","removeMaskInputValues","addedValues","preEleVal","val","prevValue","startValue","collec","splice","mobileRemoveFunction","sIndex","autoFillMaskInputValues","isRemove","oldEventVal","type","isDeleted","initStartIndex","initEndIndex","curMask","multipleDel","preValue","index","oldValue","prompt_1","elementValue","code","key","String","fromCharCode","isIosInvalid","prevOnChange","isProtectedOnChange","changeEventArgs","isInitial","isInteraction","isInteracted","merge","isAngular","preventChange","removeMaskError","val_1","startIndex_1","oldVal","trim","isSpace","isAndroid","preventUnsupportedValues","temp_1","mobileSwipeCheck","mobileValidation","isCtrlKey","eventOldVal","allowText","prevSupport","isEqualVal","keyValue","customValArr","applySupportedValues","addMaskErrorClass","changeToLowerUpperCase","sIdx","idx","ctrl","chkSupport","parentElement","timer","INPUTGROUP","FLOATINPUT","addClass","ERROR","curVal","caseCount","indexOf","toUpperCase","toLowerCase","newVal","BOTTOMLABEL","Input","setValue","maskInput","args","inputEle","getMaskInput","UTILMASK","regularExpressions","getVal","getUtilMaskEle","getMaskedVal","CLASSNAMES","RTL","DISABLE","INPUT","TEXTAREA","FLOATLINE","FLOATTEXT","CLEARICON","CLEARICONHIDE","LABELTOP","LABELBOTTOM","NOFLOATLABEL","INPUTCUSTOMTAG","FLOATCUSTOMTAG","createInput","internalCreateElement","makeElement","createElement","inputObject","buttons","floatType","createInputContainer","insertBefore","appendChild","createFloatingInput","bindInitialEvent","properties","setClearButton","setAttribute","appendSpan","validateInputType","setPropertyValue","checkInputValue","addEventListener","parent","getParentNode","inputElement","inputValue","_focusFn","label","getElementsByClassName","_blurFn","getElementsByTagName","wireFloatingEvents","unwireFloatingEvents","removeEventListener","floatLinelement","floatLabelElement","customTag","className","id","aria-labelledby","innerText","encodePlaceHolder","removeAttribute","inputWrap","updateLabelState","getAttribute","checkFloatLabelType","_i","_a","Object","keys","setCssClass","cssClass","setEnabled","setEnableRtl","enableRtl","setPlaceholder","setReadonly","updateIconState","button","createClearButton","initial","insertAdjacentElement","wireClearBtnEvents","readOnly","document","activeElement","focus","validateLabel","tagClass","tag","result","spanEle","innerHTML","children","elements","oldClass","setWidth","width","style","formatUnit","textContent","aria-placeholder","isReadonly","isRtl","isEnable","inputContainer","disabledAttrs","disabled","aria-disabled","considerWrapper","removeAttributes","addAttributes","isClear","attrs","removeFloating","input","detach","addFloating","closest","iconEle","isPrependIcon","floatLine","floatText","wrapper","setRipple","isRipple","_internalRipple","argsButton","querySelectorAll","_onMouseDownRipple","_onMouseUpRipple","_onMouseRipple","ele","parentEle","createIconEle","iconClass","addIcon","position","icons","internalCreate","result_1","icon","result_2","prependSpan","innerWrapper","containerElement","__extends","extendStatics","d","b","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","defineProperty","SPINICON","SPINUP","INTREGEXP","wrapperAttributes","NumericTextBox","_super","options","isVue","isDynamicChange","numericOptions","preRender","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","getValue","cloneElement","cloneNode","angularTagName","formEle","nodeName","nodeValue","hasAttribute","isBlazor","isServerRendered","tabindex","localeText","incrementTitle","decrementTitle","l10n","L10n","locale","getConstant","setProperties","isValidState","inputStyle","inputName","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","checkAttributes","inputEleValue","validateMinMax","validateStep","updatePlaceholder","render","inputWrapper","hiddenInput","showSpinButton","spinDown","spinUp","wireSpinBtnEvents","createWrapper","spinBtnCreation","setElementWidth","changeValue","isNaN","strictMode","trimValue","decimals","roundNumber","elementPrevValue","renderComplete","isDynamic","attributes_1","htmlAttributes","prop","setNumber","instance","getNumberParser","format","minValue","maxValue","stepValue","Internationalization","currency","currencyCode","updatedCssClassValue","getNumericValidClassList","ROOT","updateHTMLAttrToWrapper","aria-readonly","validateHidden","class","name","childNodes","updateDataAttribute","attr","a","pro","updateCssClass","newClass","numericClassName","updatedClassValue","numericStyle","title","aria-label","min","Number","max","MAX_VALUE","formattedValue","aria-valuemin","toString","aria-valuemax","getNumberFormat","maximumFractionDigits","minimumFractionDigits","useGrouping","step","action","operation","isInteract","isFocused","performAction","raiseChangeEvent","checkErrorClass","nextElementSibling","keyupEvent","createEvent","initEvent","dispatchEvent","updateValue","setSpinButton","focusHandler","focusOutHandler","keyDownHandler","keyUpHandler","inputHandler","keyPressHandler","changeHandler","pasteHandler","touchStartEvent","mouseDownOnSpinner","touchEndEvent","mouseUpOnSpinner","touchMoveEvent","touchMoveOnSpinner","unwireSpinBtnEvents","stopPropagation","parsedInput","previousValue","beforeUpdate","numericRegex","test","preventHandler","iOS","navigator","platform","currentPos","prevPos","ignoreKeyCode","valArray","numericObject","getNumericObject","charCodeAt","prevVal","parseFloat","lastIndexOf","nextEle","cursorPosChanged","parseValue","numerictextboxObj","userAgent","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","which","metaKey","currentChar","text","fractionRule","validateDecimalOnType","mouseWheel","delta","rawEvent","wheelDelta","detail","focusEventArgs","formatValue_1","ele_1","focusEvent","getElementData","currentTarget","mouseUpClick","timeOut","setInterval","elementFromPoint","clientX","clientY","clearInterval","floatLabelTypeUpdate","increment","decrement","destroy","attrArray","getText","focusIn","focusOut","blur","getPersistData","keyEntity","addOnPersist","onPropertyChanged","newProp","oldProp","updateSpinButton","updateClearButton","setLocale","propValue","getModuleName","Property","Event","NotifyPropertyChanges","Component","0","9","#","L","?","&","C","A","MaskUndo","wrapperAttr","MaskedTextBox","maskOptions","checkHtmlAttributes","checkBlazor","resetMaskedTextBox","setMaskPlaceholder","getValidClassList","maskClassName","updatedClassValues","maskStyle","setVal","dynamicPlaceholder","elementWidth","updatedCssClassValues","strippedValue_1","strippedVal","getMaskedValue","TicksData","apply","ChildProperty","ColorRangeData","LimitData","TooltipData","classNames","root","rtl","sliderHiddenInput","controlWrapper","sliderHandle","rangeBar","sliderButton","firstButton","secondButton","scale","tick","large","tickValue","sliderTooltip","sliderHover","sliderFirstHandle","sliderSecondHandle","sliderDisabled","sliderContainer","horizontalTooltipBefore","horizontalTooltipAfter","verticalTooltipBefore","verticalTooltipAfter","materialTooltip","materialTooltipOpen","materialTooltipActive","materialSlider","sliderTrack","sliderHorizantalColor","sliderVerticalColor","sliderHandleFocused","verticalSlider","horizontalSlider","sliderHandleStart","sliderTooltipStart","sliderTabHandle","sliderButtonIcon","sliderSmallSize","sliderTickPosition","sliderFirstTick","sliderLastTick","sliderButtonClass","sliderTooltipWrapper","sliderTabTrack","sliderTabRange","sliderActiveHandle","sliderMaterialHandle","sliderMaterialRange","sliderMaterialDefault","materialTooltipShow","materialTooltipHide","limits","limitBarDefault","limitBarFirst","limitBarSecond","dragHorizontal","dragVertical","Slider","horDir","verDir","transition","handle","transitionOnMaterialTooltip","scaleTransform","customAriaText","drag","initialTooltip","isElementFocused","tickElementCollection","tooltipFormatInfo","ticksFormatInfo","formChecker","isForm","formResetValue","internationalization","tooltip","ticks","formatString","formatInfo","formatValue","makeRoundNumber","elementVal","fractionalToInteger","noOfDecimals","tens","initialize","initRender","setZindex","setCSSClass","oldCSSClass","isVisible","tooltipElement","showOn","getTheme","window","getComputedStyle","getPropertyValue","tabIndex","getThemeInitialization","setHandler","createRangeBar","createLimitBar","setOrientClass","random","showButtons","setButtons","setEnableRTL","rangeValueUpdate","previousVal","checkHandleValue","previousChanged","setLimitBar","placement","renderScale","renderTooltip","isMaterial","isBootstrap","isBootstrap4","isMaterialTooltip","orientation","firstElementClassName","firstHandle","secondHandle","setAriaAttributes","customValues","forEach","range","createSecondHandle","createFirstHandle","materialHandle","wireFirstHandleEvt","handleFocus","transitionEnd","handleOver","handleLeave","wireSecondHandleEvt","handleStart","handlePos1","propertyName","getHandle","tooltipToggle","closeTooltip","handleFocusOut","focusSliderElement","sliderBarClick","sliderBarMove","sliderBarUp","preDir","setStyleAttribute","right","left","top","setBarColor","tooltipValue","formatContent","setTooltipContent","tooltipObj","content","observedArgs","addTooltipClass","setAriaAttrValue","setPreviousVal","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","tooltipCollidedPosition","collidedPosition","tooltipClass","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","liElementPosition","orien","ul","aria-hidden","zIndex","smallStep","showSmallTicks","largeStep","steps","customStep","abs","li","start","islargeTick","tickWidth","Infinity","y","largestep","repeat","createTick","updateTicksValues","formatTicksValue","decimalPoints","ticksAlignment","liElement","childElementCount","blazortTicksValue","span","tickText","tickElement","SanitizeHtmlHelper","sanitize","triggerEvent","firstChild","lastChild","lastElementChild","ticksWrapper","tickElements","scaleAlignment","spanElement","renderingTicks","tickValuePosition","getBoundingClientRect","otherChild","first","other","slice","firstTickPostion","otherTicksPosition","interopAdaptor","invokeMethodAsync","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","removeProperty","updateRangeValue","eventName","map","preHandlePos2","values_1","tempStartEnd","end","reposition","removeElement","startHandleFixed","endHandleFixed","xyToPosition","x","num","offsetWidth","top_1","offsetHeight","stepValueCalculation","percentStep","remain","addition","positionToValue","diff","evt","changedTouches","handlepos","handleVal","focusedElement","checkRepeatedValue","handleValueAdjust","handleValue","assignValue","handleNumber","minDiff","dragRangeBarMove","_b","rangeBarDragged","xPostion","yPostion","secondPartRemain","firstPartRemain","valueAndPostion","dragRangeBarUp","refresh","keyDown","wireButtonEvt","sliderFocusOut","rangeBarMousedown","elementClick","onresize","keyUp","hover","formResetHandler","relatedTarget","removeChild","changeSliderType","updateConfig","changeRtl","changeOrientation","limitsPropertyChange","setMinMaxValue","setTooltip","setReadOnly","trackPosition","trackClassName","child","colorRange","startingPosition","endPosition","trackContainer","backgroundColor","color","border","Collection","Complex","regex","EMAIL","URL","DATE_ISO","DIGITS","PHONE","CREDITCARD","ErrorOption","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","url","date","dateIso","creditcard","number","digits","maxLength","minLength","rangeLength","tel","pattern","equalTo","rules","localeFunc","onIntlChange","on","afterLocalization","select","inputElements","selectAll","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","selected","validateRules","data","rules_1","name_1","reset","clearForm","getInputElement","elements_1","errorClass","validClass","off","elements_2","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","JSON","parse","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","clickHandler","submitHandler","clearEvents","excludeKeys","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","status","optionalValidationStatus","refer","params","param","currentRule","checkValidator","ruleValue","formats","for","errorOption","Message","errorContainer","outerHTML","containerId","customPlacement","nextSibling","display","checkRequired","inputType","option","Date","getTime","stringify","uNum","compareTo","Label","Base","FILE","STATUS","REMOVE_ICON","DELETE_ICON","ABORT_ICON","RETRY_ICON","PROGRESS_WRAPPER","PROGRESSBAR","UPLOAD_SUCCESS","UPLOAD_FAILED","PAUSE_UPLOAD","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","accept","multiple","uploadedFilesData","base64String","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","flag","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","clearAll","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","isServerBlazor","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","isBlazorTemplate","isBlazorSaveUrl","asyncSettings","saveUrl","sequentialUpload","formRendered","isPureReactComponent","props","keyConfigs","enter","browserName","documentElement","directoryUpload","dropAreaWrapper","setDropArea","renderBrowseButton","initializeUpload","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","serverUlElement","serverRemoveIconBindEvent","checkAutoUpload","uploadButtonClick","clearButtonClick","uploadText","clearText","files","enablePersistence","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","length_1","dropTextArea","dropArea","dropZoneElement","enableDropText","createDropTextHint","bindDropEvents","fileDropArea","uploadStyle","newAttr","createAttribute","setAttributeNode","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","dropEffect","dataTransfer","item","clipboardData","items","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","allFiles","getFilesData","nameElements","selectedElement","formUpload","isFormUpload","getFilesInArray","spinnerTarget","createSpinner","showSpinner","uploadSequential","checkActionComplete","removeFilesData","customTemplate","getLiElement","removeUploadedFile","removeDirectly","custom","ajax","Ajax","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","currentRequestHeader","updateCustomheader","customFormDatas","updateFormData","removingEventCallback","append","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","customFormData","customData","request","setRequestHeader","response","getResponse","readyState","updateStatus","rootElement","statusElement","hideSpinner","getFilesFromFolder","filesEntries","checkDirectoryUpload","this_1","webkitGetAsEntry","isFile","files_2","fileObj","path","fullPath","isDirectory","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","this_2","targetFiles","sortFilesList","sortFileList","getBase64","Promise","resolve","reject","fileReader","FileReader","readAsDataURL","onload","onerror","error","directory","paste","isModified","modifiedFilesData","progressInterval","isCanceled","updateInitialFileDetails","checkExtension","_internalRenderSelect","fileDetails","getUniqueID","getFileType","webkitRelativePath","validatedFileSize","fileSource","concat","dataFiles","updateSortedFileList","raiseActionComplete","allowFormUpload","singleUpload","removedList","previousListClone","added","removedList_1","oldList","createParentUL","isBlank","str","dropFiles","extensions_1","extension","toLocaleLowerCase","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","resetBlazorTemplate","fileData_1","listItem","data-file-name","uploadTemplateFn","templateComplier","liTempCompiler","isStringTemplate","fromElements","eventsArgs","renderReactTemplates","updateBlazorTemplate","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","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","fileListData","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","name_2","removecanceledFile","renderFailureState","removeProgressbar","deleteIcon","pauseButton","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","headers","getAllResponseHeaders","withCredentials","removeIconEle","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_3","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","retryElement","clearIcon","loadedSize","currentLoaded","abortIcon","bytes","sortedFilesData","sortedFileNames_1","sort","name_4","clearTemplate","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","reader","contents","uploadFileCount","getFileRead","fileCount","getFileInfo","this_3","File","then","uploadFilesRequest","cloneFiles","chunkEnabled","getFileData","name_5","spliceFiles","liIndex","beforeEventArgs","isLiRemoved","removingFiles_1","validUrl","removeFiles_1","fileUploadedIndex","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","CTRLSWITCH","HIDEHEX","HIDERGBA","HIDEVALUE","HSVAREA","INPUTWRAPPER","MODESWITCH","NOCOLOR","OPACITY","PREVIEW","SHOWVALUE","SELECT","TILE","presets","default","ColorPicker","Apply","Cancel","ModeSwitcher","initWrapper","inline","createWidget","createSplitBtn","enableOpacity","getWrapper","noColor","mode","slicedValue","initialInputValue","tileRipple","rippleEffect","selector","ctrlBtnRipple","createPalette","firstPaletteFocus","createPicker","getDragHandler","isRgb","createCtrlBtn","toggleDisabled","refreshPopupPos","splitButton","splitBtn","SplitButton","iconCss","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","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","pageX","pageY","setHsv","handlerMove","handlerEnd","offsetTop","offsetLeft","switchToPalette","ctrlBtnClick","refreshPosition","inst","noColorTile","switchToPicker","grpEle","selectedEle","tiles","prevSelectedEle","pop","altKey","tilePosition","keySelectionChanges","newEle","cIdx","emptyCount","inputValueChange","isPopupOpen","tooltipInst","tempValue","len_1","charAt","opacity","bigInt","g","s","v","f","q","t","floor","changeModeSwitcherProp","ctrlSwitchWrapper","changeShowBtnProps","ctrlBtnWrapper","changeValueProp","setInputEleProps","changeDisabledProp","changeCssClassProps","popupWrapper","changeRtlProps","changePaletteProps","changeOpacityProps","otherCompModel","getModel","count_1","reduce","cls","containerAttr","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","globalize","multiline","attributeName","textarea","attribute","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","defaultValue","setStyle","inputClassName","animationHandler","resetValue","textboxObj","interaction","resetInputHandler"],"mappings":"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"}